aboutsummaryrefslogtreecommitdiff
path: root/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
commitf4bb8d06c4f1665f89a9e9ddd61f2a2d26904da0 (patch)
treed0ff432696864702c52b6353671386a07ffc4b10 /test/CodeGenCXX/constructor-init.cpp
parente07c5f897e8da88959c93a9d98f1b441da649eb6 (diff)
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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159733 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/constructor-init.cpp')
-rw-r--r--test/CodeGenCXX/constructor-init.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/test/CodeGenCXX/constructor-init.cpp b/test/CodeGenCXX/constructor-init.cpp
index 9f808f6680..b33184e396 100644
--- a/test/CodeGenCXX/constructor-init.cpp
+++ b/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 &);