xref: /aosp_15_r20/external/clang/test/CodeGenCXX/internal-linkage.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple -o - %s | FileCheck %s
2*67e74705SXin Li 
3*67e74705SXin Li struct Global { Global(); };
XX4*67e74705SXin Li template<typename T> struct X { X() {} };
5*67e74705SXin Li 
6*67e74705SXin Li 
7*67e74705SXin Li namespace {
Anon__anone82d7a970111::Anon8*67e74705SXin Li   struct Anon { Anon() {} };
9*67e74705SXin Li 
10*67e74705SXin Li   // CHECK: @_ZN12_GLOBAL__N_15anon0E = internal global
11*67e74705SXin Li   Global anon0;
12*67e74705SXin Li }
13*67e74705SXin Li 
14*67e74705SXin Li // CHECK: @anon1 = internal global
15*67e74705SXin Li Anon anon1;
16*67e74705SXin Li 
17*67e74705SXin Li // CHECK: @anon2 = internal global
18*67e74705SXin Li X<Anon> anon2;
19*67e74705SXin Li 
20*67e74705SXin Li // rdar: // 8071804
21*67e74705SXin Li char const * const xyzzy = "Hello, world!";
22*67e74705SXin Li extern char const * const xyzzy;
23*67e74705SXin Li 
test1()24*67e74705SXin Li char const * const *test1()
25*67e74705SXin Li {
26*67e74705SXin Li    // CHECK: @_ZL5xyzzy = internal constant
27*67e74705SXin Li     return &xyzzy;
28*67e74705SXin Li }
29*67e74705SXin Li 
30*67e74705SXin Li static char const * const static_xyzzy = "Hello, world!";
31*67e74705SXin Li extern char const * const static_xyzzy;
32*67e74705SXin Li 
test2()33*67e74705SXin Li char const * const *test2()
34*67e74705SXin Li {
35*67e74705SXin Li     // CHECK: @_ZL12static_xyzzy = internal constant
36*67e74705SXin Li     return &static_xyzzy;
37*67e74705SXin Li }
38*67e74705SXin Li 
39*67e74705SXin Li static char const * static_nonconst_xyzzy = "Hello, world!";
40*67e74705SXin Li extern char const * static_nonconst_xyzzy;
41*67e74705SXin Li 
test3()42*67e74705SXin Li char const * *test3()
43*67e74705SXin Li {
44*67e74705SXin Li     // CHECK: @_ZL21static_nonconst_xyzzy = internal global
45*67e74705SXin Li     return &static_nonconst_xyzzy;
46*67e74705SXin Li }
47*67e74705SXin Li 
48*67e74705SXin Li 
49*67e74705SXin Li char const * extern_nonconst_xyzzy = "Hello, world!";
50*67e74705SXin Li extern char const * extern_nonconst_xyzzy;
51*67e74705SXin Li 
test4()52*67e74705SXin Li char const * *test4()
53*67e74705SXin Li {
54*67e74705SXin Li     // CHECK: @extern_nonconst_xyzzy = global
55*67e74705SXin Li     return &extern_nonconst_xyzzy;
56*67e74705SXin Li }
57*67e74705SXin Li 
58*67e74705SXin Li // PR10120
59*67e74705SXin Li template <typename T> class klass {
60*67e74705SXin Li     virtual void f();
61*67e74705SXin Li };
62*67e74705SXin Li namespace { struct S; }
foo()63*67e74705SXin Li void foo () { klass<S> x; }
64*67e74705SXin Li // CHECK: @_ZTV5klassIN12_GLOBAL__N_11SEE = internal unnamed_addr constant
65