diff options
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 3 | ||||
-rw-r--r-- | test/CodeGenCXX/copy-in-cplus-object.cpp | 12 |
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 |