xref: /llvm-project/clang/test/CXX/drs/cwg441.cpp (revision ed128c7df9b4e60bfd814dc9fd22de1dde4a2c1c)
1*ed128c7dSVlad Serebrennikov // RUN: %clang_cc1 -std=c++98 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
2*ed128c7dSVlad Serebrennikov // RUN: %clang_cc1 -std=c++11 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
3*ed128c7dSVlad Serebrennikov // RUN: %clang_cc1 -std=c++14 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
4*ed128c7dSVlad Serebrennikov // RUN: %clang_cc1 -std=c++17 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
5*ed128c7dSVlad Serebrennikov // RUN: %clang_cc1 -std=c++20 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
6*ed128c7dSVlad Serebrennikov // RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
7*ed128c7dSVlad Serebrennikov // RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
8*ed128c7dSVlad Serebrennikov 
9*ed128c7dSVlad Serebrennikov namespace cwg441 { // cwg441: 2.7
10*ed128c7dSVlad Serebrennikov 
11*ed128c7dSVlad Serebrennikov struct A {
Acwg441::A12*ed128c7dSVlad Serebrennikov   A() {}
13*ed128c7dSVlad Serebrennikov };
14*ed128c7dSVlad Serebrennikov 
15*ed128c7dSVlad Serebrennikov A dynamic_init;
16*ed128c7dSVlad Serebrennikov int i;
17*ed128c7dSVlad Serebrennikov int& ir = i;
18*ed128c7dSVlad Serebrennikov int* ip = &i;
19*ed128c7dSVlad Serebrennikov 
20*ed128c7dSVlad Serebrennikov } // namespace cwg441
21*ed128c7dSVlad Serebrennikov 
22*ed128c7dSVlad Serebrennikov // CHECK-DAG:   @cwg441::dynamic_init = global %"struct.cwg441::A" zeroinitializer
23*ed128c7dSVlad Serebrennikov // CHECK-DAG:   @cwg441::i = global i32 0
24*ed128c7dSVlad Serebrennikov // CHECK-DAG:   @cwg441::ir = constant ptr @cwg441::i
25*ed128c7dSVlad Serebrennikov // CHECK-DAG:   @cwg441::ip = global ptr @cwg441::i
26*ed128c7dSVlad Serebrennikov // CHECK-DAG:   @llvm.global_ctors = appending global [{{.+}}] [{ {{.+}} } { {{.+}}, ptr @_GLOBAL__sub_I_cwg441.cpp, {{.+}} }]
27*ed128c7dSVlad Serebrennikov 
28*ed128c7dSVlad Serebrennikov // CHECK-LABEL: define {{.*}} void @__cxx_global_var_init()
29*ed128c7dSVlad Serebrennikov // CHECK-NEXT:  entry:
30*ed128c7dSVlad Serebrennikov // CHECK-NEXT:    call void @cwg441::A::A()({{.*}} @cwg441::dynamic_init)
31*ed128c7dSVlad Serebrennikov // CHECK-NEXT:    ret void
32*ed128c7dSVlad Serebrennikov // CHECK-NEXT:  }
33*ed128c7dSVlad Serebrennikov 
34*ed128c7dSVlad Serebrennikov // CHECK-LABEL: define {{.*}} void @_GLOBAL__sub_I_cwg441.cpp()
35*ed128c7dSVlad Serebrennikov // CHECK-NEXT:  entry:
36*ed128c7dSVlad Serebrennikov // CHECK-NEXT:    call void @__cxx_global_var_init()
37*ed128c7dSVlad Serebrennikov // CHECK-NEXT:    ret void
38*ed128c7dSVlad Serebrennikov // CHECK-NEXT:  }
39