aboutsummaryrefslogtreecommitdiff
path: root/clang/test/CodeGenCXX/reference-init.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2017-02-23 22:41:47 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2017-02-23 22:41:47 +0000
commit382bc51fddbfb010b2e068bbdf94ab99811b2768 (patch)
treea3e11869468d7db13f7c46708c3a9d85f26b8bb9 /clang/test/CodeGenCXX/reference-init.cpp
parent620db1f3dd08ebbba71b0e16f83c11323e04bc05 (diff)
downloadllvm-382bc51fddbfb010b2e068bbdf94ab99811b2768.zip
llvm-382bc51fddbfb010b2e068bbdf94ab99811b2768.tar.gz
llvm-382bc51fddbfb010b2e068bbdf94ab99811b2768.tar.bz2
PR32044: Fix some cases where we would confuse a transparent init-list expression with an aggregate init.
llvm-svn: 296033
Diffstat (limited to 'clang/test/CodeGenCXX/reference-init.cpp')
-rw-r--r--clang/test/CodeGenCXX/reference-init.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/clang/test/CodeGenCXX/reference-init.cpp b/clang/test/CodeGenCXX/reference-init.cpp
index 3a3eaee..ba7b282 100644
--- a/clang/test/CodeGenCXX/reference-init.cpp
+++ b/clang/test/CodeGenCXX/reference-init.cpp
@@ -1,4 +1,6 @@
-// RUN: %clang_cc1 -emit-llvm-only -triple %itanium_abi_triple -verify %s
+// RUN: %clang_cc1 -triple %itanium_abi_triple -verify %s
+// RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm %s -o - -std=c++98 | FileCheck %s --check-prefix=CHECK-CXX98
+// RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm %s -o - -std=c++11 | FileCheck %s --check-prefix=CHECK-CXX11
// expected-no-diagnostics
struct XPTParamDescriptor {};
@@ -23,3 +25,12 @@ Foo& ignoreSetMutex = *(new Foo);
// Binding to a bit-field that requires a temporary.
struct { int bitfield : 3; } s = { 3 };
const int &s2 = s.bitfield;
+
+// In C++98, this forms a reference to itself. In C++11 onwards, this performs
+// copy-construction.
+struct SelfReference { SelfReference &r; };
+extern SelfReference self_reference_1;
+SelfReference self_reference_2 = {self_reference_1};
+// CHECK-CXX98: @self_reference_2 = global %[[SELF_REF:.*]] { %[[SELF_REF]]* @self_reference_1 }
+// CHECK-CXX11: @self_reference_2 = global %[[SELF_REF:.*]] zeroinitializer
+// CHECK-CXX11: call {{.*}}memcpy{{.*}} @self_reference_2 {{.*}} @self_reference_1