diff options
Diffstat (limited to 'test/CodeGenCXX/atomicinit.cpp')
-rw-r--r-- | test/CodeGenCXX/atomicinit.cpp | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/test/CodeGenCXX/atomicinit.cpp b/test/CodeGenCXX/atomicinit.cpp index ee2e9e4cf244..f453194468dd 100644 --- a/test/CodeGenCXX/atomicinit.cpp +++ b/test/CodeGenCXX/atomicinit.cpp @@ -1,4 +1,10 @@ -// RUN: %clang_cc1 %s -emit-llvm -O1 -o - -triple=i686-apple-darwin9 | FileCheck %s +// RUN: %clang_cc1 %s -emit-llvm -O1 -o - -triple=i686-apple-darwin9 -std=c++11 | FileCheck %s + +// CHECK-DAG: @_ZN7PR180978constant1aE = global {{.*}} { i16 1, i8 6, i8 undef }, align 4 +// CHECK-DAG: @_ZN7PR180978constant1bE = global {{.*}} { i16 2, i8 6, i8 undef }, align 4 +// CHECK-DAG: @_ZN7PR180978constant1cE = global {{.*}} { i16 3, i8 6, i8 undef }, align 4 +// CHECK-DAG: @_ZN7PR180978constant1yE = global {{.*}} { {{.*}} { i16 4, i8 6, i8 undef }, i32 5 }, align 4 + struct A { _Atomic(int) i; A(int j); @@ -46,3 +52,51 @@ struct AtomicBoolMember { // CHECK-NEXT: ret void AtomicBoolMember::AtomicBoolMember(bool b) : ab(b) { } +namespace PR18097 { + namespace dynamic { + struct X { + X(int); + short n; + char c; + }; + + // CHECK-LABEL: define {{.*}} @__cxx_global_var_init + // CHECK: call void @_ZN7PR180977dynamic1XC1Ei({{.*}}* @_ZN7PR180977dynamic1aE, i32 1) + _Atomic(X) a = X(1); + + // CHECK-LABEL: define {{.*}} @__cxx_global_var_init + // CHECK: call void @_ZN7PR180977dynamic1XC1Ei({{.*}}* @_ZN7PR180977dynamic1bE, i32 2) + _Atomic(X) b(X(2)); + + // CHECK-LABEL: define {{.*}} @__cxx_global_var_init + // CHECK: call void @_ZN7PR180977dynamic1XC1Ei({{.*}}* @_ZN7PR180977dynamic1cE, i32 3) + _Atomic(X) c{X(3)}; + + struct Y { + _Atomic(X) a; + _Atomic(int) b; + }; + // CHECK-LABEL: define {{.*}} @__cxx_global_var_init + // CHECK: call void @_ZN7PR180977dynamic1XC1Ei({{.*}}* getelementptr inbounds ({{.*}}* @_ZN7PR180977dynamic1yE, i32 0, i32 0), i32 4) + // CHECK: store i32 5, i32* getelementptr inbounds ({{.*}}* @_ZN7PR180977dynamic1yE, i32 0, i32 1) + Y y = { X(4), 5 }; + } + + // CHECKs at top of file. + namespace constant { + struct X { + constexpr X(int n) : n(n) {} + short n; + char c = 6; + }; + _Atomic(X) a = X(1); + _Atomic(X) b(X(2)); + _Atomic(X) c{X(3)}; + + struct Y { + _Atomic(X) a; + _Atomic(int) b; + }; + Y y = { X(4), 5 }; + } +} |