diff options
author | dim <dim@FreeBSD.org> | 2014-11-24 09:15:30 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2014-11-24 09:15:30 +0000 |
commit | 173a4f43a911175643bda81ee675e8d9269056ea (patch) | |
tree | 47df2c12b57214af6c31e47404b005675b8b7ffc /test/CodeGenCXX/value-init.cpp | |
parent | 88f7a7d5251a2d813460274c92decc143a11569b (diff) | |
download | FreeBSD-src-173a4f43a911175643bda81ee675e8d9269056ea.zip FreeBSD-src-173a4f43a911175643bda81ee675e8d9269056ea.tar.gz |
Vendor import of clang RELEASE_350/final tag r216957 (effectively, 3.5.0 release):
https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_350/final@216957
Diffstat (limited to 'test/CodeGenCXX/value-init.cpp')
-rw-r--r-- | test/CodeGenCXX/value-init.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/test/CodeGenCXX/value-init.cpp b/test/CodeGenCXX/value-init.cpp index fad459b..423d973 100644 --- a/test/CodeGenCXX/value-init.cpp +++ b/test/CodeGenCXX/value-init.cpp @@ -262,6 +262,59 @@ namespace PR11124 { void r170806_a(bool b = bool()); void r170806_b() { r170806_a(); } +namespace PR20256 { + struct data { int i; }; + + template<typename T = int> + data g() { + data d; // not value-init + return d; + } + template data g(); + // CHECK-LABEL: define {{.*}} @_ZN7PR202561gIiEENS_4dataEv( + // CHECK-NOT: store + // CHECK-NOT: memset + // CHECK: } + + template<typename ...T> + data h(T ...t) { + data d(t...); // value-init + return d; + } + template data h(); + // CHECK-LABEL: define {{.*}} @_ZN7PR202561hIJEEENS_4dataEDpT_( + // CHECK: call void @llvm.memset + // CHECK: } + + + template<typename T = int> + data j() { + data d = {}; // value-init + return d; + } + template data j(); + // CHECK-LABEL: define {{.*}} @_ZN7PR202561jIiEENS_4dataEv( + // CHECK: call void @llvm.memset + // CHECK: } + + data f() { + data d; // not value-init + return d; + } + // CHECK-LABEL: define {{.*}} @_ZN7PR202561fEv( + // CHECK-NOT: store + // CHECK-NOT: memset + // CHECK: } + + data i() { + data d = {}; // value-init + return d; + } + // CHECK-LABEL: define {{.*}} @_ZN7PR202561iEv( + // CHECK: call void @llvm.memset + // CHECK: } +} + // CHECK-LABEL: define linkonce_odr void @_ZN8zeroinit2X3IiEC2Ev(%"struct.zeroinit::X3"* %this) unnamed_addr // CHECK: call void @llvm.memset.p0i8.i64 // CHECK-NEXT: call void @_ZN8zeroinit2X2IiEC2Ev |