summaryrefslogtreecommitdiffstats
path: root/clang
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
commitc8bfc466f38c39f63515a05c85987b73d7ccc04d (patch)
tree0f322f795066f6a4f59aba37f33e8d32b147f105 /clang
parent45068b3e2994086d303bb435117ff4d2a18e874b (diff)
downloadbcm5719-llvm-c8bfc466f38c39f63515a05c85987b73d7ccc04d.tar.gz
bcm5719-llvm-c8bfc466f38c39f63515a05c85987b73d7ccc04d.zip
Add back the workaround since it lead to constructor conversion bugs :(
llvm-svn: 81917
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp6
-rw-r--r--clang/test/CodeGenCXX/PR4983-constructor-conversion.cpp16
2 files changed, 22 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 87c4e70101e..9e497782507 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/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/clang/test/CodeGenCXX/PR4983-constructor-conversion.cpp b/clang/test/CodeGenCXX/PR4983-constructor-conversion.cpp
new file mode 100644
index 00000000000..31eae2e791f
--- /dev/null
+++ b/clang/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");
+}
+
OpenPOWER on IntegriCloud