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