summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/constructor-init.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2012-07-05 08:39:21 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2012-07-05 08:39:21 +0000
commitd86812d95c3a592f40e5249dfef324b456ea26d7 (patch)
tree08c65181fea1a97eaee55fe64b20979d55e80893 /clang/test/CodeGenCXX/constructor-init.cpp
parent1ea42eb5a33bb48c5ce085e27c2701a6e8563645 (diff)
downloadbcm5719-llvm-d86812d95c3a592f40e5249dfef324b456ea26d7.tar.gz
bcm5719-llvm-d86812d95c3a592f40e5249dfef324b456ea26d7.zip
PR13273: When performing list-initialization with an empty initializer list,
actually perform value initialization rather than trying to fake it with a call to the default constructor. Fixes various bugs related to the previously-missing zero-initialization in this case. I've also moved this and the other list initialization 'special case' from TryConstructorInitialization into TryListInitialization where they belong. llvm-svn: 159733
Diffstat (limited to 'clang/test/CodeGenCXX/constructor-init.cpp')
-rw-r--r--clang/test/CodeGenCXX/constructor-init.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/constructor-init.cpp b/clang/test/CodeGenCXX/constructor-init.cpp
index 9f808f6680e..b33184e3966 100644
--- a/clang/test/CodeGenCXX/constructor-init.cpp
+++ b/clang/test/CodeGenCXX/constructor-init.cpp
@@ -131,6 +131,26 @@ namespace rdar9694300 {
}
}
+// Check that we emit a zero initialization step for list-value-initialization
+// which calls a trivial default constructor.
+namespace PR13273 {
+ struct U {
+ int t;
+ U() = default;
+ };
+
+ struct S : U {
+ S() = default;
+ };
+
+ // CHECK: define {{.*}}@_ZN7PR132731fEv(
+ int f() {
+ // CHECK-NOT: }
+ // CHECK: llvm.memset{{.*}}i8 0
+ return (new S{})->t;
+ }
+}
+
template<typename T>
struct X {
X(const X &);
OpenPOWER on IntegriCloud