[clang] Handle __declspec() attributes in using
[llvm-project.git] / clang / test / CodeGenCXX / pr59765-modules-global-ctor-dtor.cppm
blob1a9384bf0bc9a97a1d206990c55810e1e6efc976
1 // https://github.com/llvm/llvm-project/issues/59765
2 // FIXME: Since the signature of the constructors/destructors is
3 // different in different targets. The current CHECK can't work
4 // well when targeting or running on AIX.
5 // It would be better to add the corresponding test for other test.
6 // UNSUPPORTED: system-aix
7 //
8 // RUN: rm -rf %t
9 // RUN: mkdir %t
10 // RUN: split-file %s %t
12 // RUN: %clang_cc1 -std=c++20 %t/M.cppm -triple %itanium_abi_triple -emit-module-interface -o %t/M.pcm
13 // RUN: %clang_cc1 -std=c++20 %t/M.pcm -triple %itanium_abi_triple -emit-llvm -o - | FileCheck %t/M.cppm
14 // RUN: %clang_cc1 -std=c++20 %t/Use.cpp -fprebuilt-module-path=%t -triple %itanium_abi_triple -emit-llvm -o - | FileCheck %t/Use.cpp
16 // Check that the behavior of header units is normal as headers.
17 // RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple -xc++-user-header %t/foo.h -emit-header-unit -o %t/foo.pcm
18 // RUN: %clang_cc1 -std=c++20 %t/UseHU.cpp -fmodule-file=%t/foo.pcm -triple %itanium_abi_triple -emit-llvm -o - | FileCheck %t/UseHU.cpp
20 //--- M.cppm
21 export module M;
22 export class A {
23 public:
24     A();
25     ~A();
26     void use();
28 export A a;
30 // CHECK: @_ZW1M1a = {{.*}}global %class.A zeroinitializer
31 // CHECK: define{{.*}}void @__cxx_global_var_init()
32 // CHECK-NEXT: entry:
33 // CHECK-NEXT: call{{.*}}@_ZNW1M1AC1Ev({{.*}}@_ZW1M1a
34 // CHECK-NEXT: call{{.*}}@__cxa_atexit(ptr @_ZNW1M1AD1Ev, ptr @_ZW1M1a
36 //--- Use.cpp
37 import M;
38 void use() {
39     a.use();
42 // CHECK-NOT: @_ZNW1M1AC1Ev
43 // CHECK-NOT: @_ZNW1M1AD1Ev
45 //--- foo.h
46 class A {
47 public:
48     A();
49     ~A();
50     void use();
52 A a;
54 //--- UseHU.cpp
55 import "foo.h";
56 void use() {
57     a.use();
60 // CHECK: @a = {{.*}}global %class.A zeroinitializer
61 // CHECK: define{{.*}}void @__cxx_global_var_init()
62 // CHECK-NEXT: entry:
63 // CHECK-NEXT: call{{.*}}@_ZN1AC1Ev({{.*}}@a
64 // CHECK-NEXT: call{{.*}}@__cxa_atexit(ptr @_ZN1AD1Ev, ptr @a