xref: /llvm-project/clang/test/CodeGenCXX/dso-handle-custom.cpp (revision 1b9a6e58a8b831193c9e5e733f881aabe0d2d06b)
1 // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -fexceptions %s -o - | FileCheck %s --check-prefixes CHECK,CHECK-DEFAULT
2 // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -fexceptions %s -o - -DHIDDEN | FileCheck %s --check-prefixes CHECK,CHECK-HIDDEN
3 
4 class A {
5 public:
6   ~A();
7 } a;
8 
9 // CHECK-DEFAULT: @__dso_handle = global ptr @__dso_handle, align 8
10 // CHECK-HIDDEN: @__dso_handle = hidden global ptr @__dso_handle, align 8
11 // CHECK: define internal void @__cxx_global_var_init()
12 // CHECK:   call i32 @__cxa_atexit({{.*}}, {{.*}}, ptr @__dso_handle)
13 
14 #ifdef HIDDEN
15 void *__dso_handle __attribute__((__visibility__("hidden"))) = &__dso_handle;
16 #else
17 void *__dso_handle = &__dso_handle;
18 #endif
19 
20 void use(void *);
use_dso_handle()21 void use_dso_handle() {
22   use(__dso_handle);
23 }
24