aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-09-15 21:14:33 +0000
committerAnders Carlsson <andersca@mac.com>2009-09-15 21:14:33 +0000
commit71710113531a828679ce9b7deaca8d8df08c88da (patch)
treeafa374600797f90ffff8d4f53766296b7f3fc217
parentc7e406b2ec8ae95ff2f65215330b127c437472b9 (diff)
Add back the workaround since it lead to constructor conversion bugs :(
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81917 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Sema/SemaDeclCXX.cpp6
-rw-r--r--test/CodeGenCXX/PR4983-constructor-conversion.cpp16
2 files changed, 22 insertions, 0 deletions
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index 87c4e70101..9e49778250 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -3243,6 +3243,12 @@ Sema::CompleteConstructorCall(CXXConstructorDecl *Constructor,
Expr *Arg;
if (i < NumArgs) {
Arg = Args[i];
+
+ // Pass the argument.
+ if (PerformCopyInitialization(Arg, ProtoArgType, "passing"))
+ return true;
+
+ Args[i] = 0;
} else {
ParmVarDecl *Param = Constructor->getParamDecl(i);
diff --git a/test/CodeGenCXX/PR4983-constructor-conversion.cpp b/test/CodeGenCXX/PR4983-constructor-conversion.cpp
new file mode 100644
index 0000000000..31eae2e791
--- /dev/null
+++ b/test/CodeGenCXX/PR4983-constructor-conversion.cpp
@@ -0,0 +1,16 @@
+// RUN: clang-cc -emit-llvm-only %s
+
+struct A {
+ A(const char *s){}
+};
+
+struct B {
+ A a;
+
+ B() : a("test") { }
+};
+
+void f() {
+ A a("test");
+}
+