xref: /aosp_15_r20/external/clang/test/CodeGenCXX/mangle-local-class-names.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 %s -emit-llvm -triple %itanium_abi_triple -o - | FileCheck %s
2*67e74705SXin Li 
3*67e74705SXin Li // CHECK:  @_ZZ4FUNCvEN4SSSSC1ERKf
4*67e74705SXin Li // CHECK: @_ZZ4FUNCvEN4SSSSC2E_0RKf
5*67e74705SXin Li // CHECK:  @_ZZ4GORFfEN4SSSSC1ERKf
6*67e74705SXin Li // CHECK: @_ZZ4GORFfEN4SSSSC2E_0RKf
7*67e74705SXin Li 
FUNC()8*67e74705SXin Li void FUNC ()
9*67e74705SXin Li {
10*67e74705SXin Li   {
11*67e74705SXin Li     float IVAR1 ;
12*67e74705SXin Li 
13*67e74705SXin Li     struct SSSS
14*67e74705SXin Li     {
15*67e74705SXin Li       float bv;
16*67e74705SXin Li       SSSS( const float& from): bv(from) { }
17*67e74705SXin Li     };
18*67e74705SXin Li 
19*67e74705SXin Li     SSSS VAR1(IVAR1);
20*67e74705SXin Li    }
21*67e74705SXin Li 
22*67e74705SXin Li    {
23*67e74705SXin Li     float IVAR2 ;
24*67e74705SXin Li 
25*67e74705SXin Li     struct SSSS
26*67e74705SXin Li     {
27*67e74705SXin Li      SSSS( const float& from) {}
28*67e74705SXin Li     };
29*67e74705SXin Li 
30*67e74705SXin Li     SSSS VAR2(IVAR2);
31*67e74705SXin Li    }
32*67e74705SXin Li }
33*67e74705SXin Li 
GORF(float IVAR1)34*67e74705SXin Li void GORF (float IVAR1)
35*67e74705SXin Li {
36*67e74705SXin Li   {
37*67e74705SXin Li     struct SSSS
38*67e74705SXin Li     {
39*67e74705SXin Li       float bv;
40*67e74705SXin Li       SSSS( const float& from): bv(from) { }
41*67e74705SXin Li     };
42*67e74705SXin Li 
43*67e74705SXin Li     SSSS VAR1(IVAR1);
44*67e74705SXin Li    }
45*67e74705SXin Li 
46*67e74705SXin Li    {
47*67e74705SXin Li     float IVAR2 ;
48*67e74705SXin Li 
49*67e74705SXin Li     struct SSSS
50*67e74705SXin Li     {
51*67e74705SXin Li      SSSS( const float& from) {}
52*67e74705SXin Li     };
53*67e74705SXin Li 
54*67e74705SXin Li     SSSS VAR2(IVAR2);
55*67e74705SXin Li    }
56*67e74705SXin Li }
57*67e74705SXin Li 
58*67e74705SXin Li // CHECK: @_ZZ12OmittingCodefEN4SSSSC1E_0RKf
OmittingCode(float x)59*67e74705SXin Li inline void OmittingCode(float x) {
60*67e74705SXin Li   if (0) {
61*67e74705SXin Li     struct SSSS {
62*67e74705SXin Li       float bv;
63*67e74705SXin Li       SSSS(const float& from): bv(from) { }
64*67e74705SXin Li     };
65*67e74705SXin Li 
66*67e74705SXin Li     SSSS VAR1(x);
67*67e74705SXin Li   }
68*67e74705SXin Li 
69*67e74705SXin Li   struct SSSS {
70*67e74705SXin Li     float bv;
71*67e74705SXin Li     SSSS(const float& from): bv(from) { }
72*67e74705SXin Li   };
73*67e74705SXin Li 
74*67e74705SXin Li   SSSS VAR2(x);
75*67e74705SXin Li }
CallOmittingCode()76*67e74705SXin Li void CallOmittingCode() { OmittingCode(1); }
77*67e74705SXin Li 
78*67e74705SXin Li // CHECK: @_ZZ15LocalAnonStructvENUt0_1gEv
LocalAnonStruct()79*67e74705SXin Li inline void LocalAnonStruct() {
80*67e74705SXin Li   if (0) {
81*67e74705SXin Li     struct { void f() {} } x;
82*67e74705SXin Li     x.f();
83*67e74705SXin Li   }
84*67e74705SXin Li   struct { void g() {} } y;
85*67e74705SXin Li   y.g();
86*67e74705SXin Li }
CallLocalAnonStruct()87*67e74705SXin Li void CallLocalAnonStruct() { LocalAnonStruct(); }
88