aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Sema/SemaExpr.cpp3
-rw-r--r--test/CodeGenCXX/copy-in-cplus-object.cpp12
2 files changed, 11 insertions, 4 deletions
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index 3473ef0090..da7c6a2dae 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -1764,8 +1764,7 @@ Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS,
if (!Res.isInvalid()) {
Res = MaybeCreateCXXExprWithTemporaries(move(Res));
Expr *Init = Res.takeAs<Expr>();
- if (isa<CXXConstructExpr>(Init))
- BDRE->setCopyConstructorExpr(Init);
+ BDRE->setCopyConstructorExpr(Init);
}
}
return Owned(BDRE);
diff --git a/test/CodeGenCXX/copy-in-cplus-object.cpp b/test/CodeGenCXX/copy-in-cplus-object.cpp
index 819879806d..cac6155f5c 100644
--- a/test/CodeGenCXX/copy-in-cplus-object.cpp
+++ b/test/CodeGenCXX/copy-in-cplus-object.cpp
@@ -1,8 +1,13 @@
// RUN: %clang_cc1 %s -fblocks -triple x86_64-apple-darwin -emit-llvm -o - | FileCheck %s
+struct S {
+ S(const char *);
+ ~S();
+};
+
struct TestObject
{
- TestObject(const TestObject& inObj, int def = 100);
+ TestObject(const TestObject& inObj, int def = 100, const S &Silly = "silly");
TestObject();
TestObject& operator=(const TestObject& inObj);
int version() const;
@@ -14,5 +19,8 @@ void testRoutine() {
int (^V)() = ^{ return one.version(); };
}
-// CHECK: call void @_ZN10TestObjectC1ERKS_i
+// CHECK: call void @_ZN10TestObjectC1Ev
+// CHECK: call void @_ZN1SC1EPKc
+// CHECK: call void @_ZN10TestObjectC1ERKS_iRK1S
+// CHECK: call void @_ZN1SD1Ev