46 lines · cpp
1// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir -mmlir --mlir-print-ir-before=cir-lowering-prepare %s -o %t.cir 2> %t-before.cir2// RUN: FileCheck --input-file=%t-before.cir %s --check-prefix=CIR-BEFORE-LPP3// RUN: FileCheck --input-file=%t.cir %s --check-prefix=CIR-AFTER4// RUN: FileCheck --check-prefix=CIR-AFTER --input-file=%t.cir %s5// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o %t-cir.ll6// RUN: FileCheck --check-prefix=LLVM --input-file=%t-cir.ll %s7// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o %t.ll8// RUN: FileCheck --check-prefix=OGCG --input-file=%t.ll %s9 10extern int bar();11void foo(void) __attribute__((constructor));12void foo(void) {13 bar();14}15 16// CIR-BEFORE-LPP: cir.func dso_local @_Z3foov() global_ctor17 18void foo2(void) __attribute__((constructor(777)));19void foo2(void) {20 bar();21}22 23// CIR-BEFORE-LPP: cir.func dso_local @_Z4foo2v() global_ctor(777)24 25void foo3(void) __attribute__((destructor));26void foo3(void) {27 bar();28}29 30// CIR-BEFORE-LPP: cir.func dso_local @_Z4foo3v() global_dtor31 32void foo4(void) __attribute__((destructor(789)));33void foo4(void) {34 bar();35}36 37// CIR-BEFORE-LPP: cir.func dso_local @_Z4foo4v() global_dtor(789)38 39// CIR-AFTER: module @{{.*}} attributes {cir.global_ctors = [#cir.global_ctor<"_Z3foov", 65535>, #cir.global_ctor<"_Z4foo2v", 777>], cir.global_dtors = [#cir.global_dtor<"_Z4foo3v", 65535>, #cir.global_dtor<"_Z4foo4v", 789>]40 41// LLVM: @llvm.global_ctors = appending global [2 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_Z3foov, ptr null }, { i32, ptr, ptr } { i32 777, ptr @_Z4foo2v, ptr null }]42// LLVM: @llvm.global_dtors = appending global [2 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_Z4foo3v, ptr null }, { i32, ptr, ptr } { i32 789, ptr @_Z4foo4v, ptr null }]43 44// OGCG: @llvm.global_ctors = appending global [2 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_Z3foov, ptr null }, { i32, ptr, ptr } { i32 777, ptr @_Z4foo2v, ptr null }]45// OGCG: @llvm.global_dtors = appending global [2 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_Z4foo3v, ptr null }, { i32, ptr, ptr } { i32 789, ptr @_Z4foo4v, ptr null }]46