diff options
author | Anders Carlsson <andersca@mac.com> | 2009-09-15 21:14:33 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-09-15 21:14:33 +0000 |
commit | c8bfc466f38c39f63515a05c85987b73d7ccc04d (patch) | |
tree | 0f322f795066f6a4f59aba37f33e8d32b147f105 /clang | |
parent | 45068b3e2994086d303bb435117ff4d2a18e874b (diff) | |
download | bcm5719-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.cpp | 6 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/PR4983-constructor-conversion.cpp | 16 |
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"); +} + |