[Clang] Add `noalias` to `this` pointer in C++ constructors
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp
index b2fe917..a661a5d 100644
--- a/clang/lib/CodeGen/CodeGenFunction.cpp
+++ b/clang/lib/CodeGen/CodeGenFunction.cpp
@@ -1560,6 +1560,9 @@
   // Emit the standard function prologue.
   StartFunction(GD, ResTy, Fn, FnInfo, Args, Loc, BodyRange.getBegin());
 
+  if (isa<CXXConstructorDecl>(FD))
+    Fn->addParamAttr(0, llvm::Attribute::NoAlias);
+
   // Save parameters for coroutine function.
   if (Body && isa_and_nonnull<CoroutineBodyStmt>(Body))
     llvm::append_range(FnArgs, FD->parameters());
diff --git a/clang/test/CodeGenCXX/ctor-this-noalias.cpp b/clang/test/CodeGenCXX/ctor-this-noalias.cpp
new file mode 100644
index 0000000..cc85d7b
--- /dev/null
+++ b/clang/test/CodeGenCXX/ctor-this-noalias.cpp
@@ -0,0 +1,14 @@
+// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
+
+struct A {
+  float elements[4];
+  A(float const *src);
+};
+
+// CHECK: define {{.*}} @_ZN1AC1EPKf(ptr {{.*}}noalias{{.*}} %this, {{.*}})
+A::A(float const *src) {
+  elements[0] = src[0];
+  elements[1] = src[1];
+  elements[2] = src[2];
+  elements[3] = src[3];
+}