xref: /llvm-project/clang/test/CodeGenCXX/mangle-local-class-names.cpp (revision c9bd88e6811fb622cde644a82eac41c0b02c00ee)
1*c9bd88e6SHans Wennborg // RUN: %clang_cc1 %s -emit-llvm -triple %itanium_abi_triple -o - | FileCheck %s
2a529c255SFariborz Jahanian 
3a529c255SFariborz Jahanian // CHECK:  @_ZZ4FUNCvEN4SSSSC1ERKf
4a529c255SFariborz Jahanian // CHECK: @_ZZ4FUNCvEN4SSSSC2E_0RKf
59eba9dfbSFariborz Jahanian // CHECK:  @_ZZ4GORFfEN4SSSSC1ERKf
69eba9dfbSFariborz Jahanian // CHECK: @_ZZ4GORFfEN4SSSSC2E_0RKf
7a529c255SFariborz Jahanian 
FUNC()8a529c255SFariborz Jahanian void FUNC ()
9a529c255SFariborz Jahanian {
10a529c255SFariborz Jahanian   {
11a529c255SFariborz Jahanian     float IVAR1 ;
12a529c255SFariborz Jahanian 
13a529c255SFariborz Jahanian     struct SSSS
14a529c255SFariborz Jahanian     {
15a529c255SFariborz Jahanian       float bv;
16a529c255SFariborz Jahanian       SSSS( const float& from): bv(from) { }
17a529c255SFariborz Jahanian     };
18a529c255SFariborz Jahanian 
19a529c255SFariborz Jahanian     SSSS VAR1(IVAR1);
20a529c255SFariborz Jahanian    }
21a529c255SFariborz Jahanian 
22a529c255SFariborz Jahanian    {
23a529c255SFariborz Jahanian     float IVAR2 ;
24a529c255SFariborz Jahanian 
25a529c255SFariborz Jahanian     struct SSSS
26a529c255SFariborz Jahanian     {
27a529c255SFariborz Jahanian      SSSS( const float& from) {}
28a529c255SFariborz Jahanian     };
29a529c255SFariborz Jahanian 
30a529c255SFariborz Jahanian     SSSS VAR2(IVAR2);
31a529c255SFariborz Jahanian    }
32a529c255SFariborz Jahanian }
339eba9dfbSFariborz Jahanian 
GORF(float IVAR1)349eba9dfbSFariborz Jahanian void GORF (float IVAR1)
359eba9dfbSFariborz Jahanian {
369eba9dfbSFariborz Jahanian   {
379eba9dfbSFariborz Jahanian     struct SSSS
389eba9dfbSFariborz Jahanian     {
399eba9dfbSFariborz Jahanian       float bv;
409eba9dfbSFariborz Jahanian       SSSS( const float& from): bv(from) { }
419eba9dfbSFariborz Jahanian     };
429eba9dfbSFariborz Jahanian 
439eba9dfbSFariborz Jahanian     SSSS VAR1(IVAR1);
449eba9dfbSFariborz Jahanian    }
459eba9dfbSFariborz Jahanian 
469eba9dfbSFariborz Jahanian    {
479eba9dfbSFariborz Jahanian     float IVAR2 ;
489eba9dfbSFariborz Jahanian 
499eba9dfbSFariborz Jahanian     struct SSSS
509eba9dfbSFariborz Jahanian     {
519eba9dfbSFariborz Jahanian      SSSS( const float& from) {}
529eba9dfbSFariborz Jahanian     };
539eba9dfbSFariborz Jahanian 
549eba9dfbSFariborz Jahanian     SSSS VAR2(IVAR2);
559eba9dfbSFariborz Jahanian    }
569eba9dfbSFariborz Jahanian }
579eba9dfbSFariborz Jahanian 
583b7d46c3SEli Friedman // CHECK: @_ZZ12OmittingCodefEN4SSSSC1E_0RKf
OmittingCode(float x)593b7d46c3SEli Friedman inline void OmittingCode(float x) {
603b7d46c3SEli Friedman   if (0) {
613b7d46c3SEli Friedman     struct SSSS {
623b7d46c3SEli Friedman       float bv;
633b7d46c3SEli Friedman       SSSS(const float& from): bv(from) { }
643b7d46c3SEli Friedman     };
653b7d46c3SEli Friedman 
663b7d46c3SEli Friedman     SSSS VAR1(x);
673b7d46c3SEli Friedman   }
683b7d46c3SEli Friedman 
693b7d46c3SEli Friedman   struct SSSS {
703b7d46c3SEli Friedman     float bv;
713b7d46c3SEli Friedman     SSSS(const float& from): bv(from) { }
723b7d46c3SEli Friedman   };
733b7d46c3SEli Friedman 
743b7d46c3SEli Friedman   SSSS VAR2(x);
753b7d46c3SEli Friedman }
CallOmittingCode()763b7d46c3SEli Friedman void CallOmittingCode() { OmittingCode(1); }
773b7d46c3SEli Friedman 
783b7d46c3SEli Friedman // CHECK: @_ZZ15LocalAnonStructvENUt0_1gEv
LocalAnonStruct()793b7d46c3SEli Friedman inline void LocalAnonStruct() {
803b7d46c3SEli Friedman   if (0) {
813b7d46c3SEli Friedman     struct { void f() {} } x;
823b7d46c3SEli Friedman     x.f();
833b7d46c3SEli Friedman   }
843b7d46c3SEli Friedman   struct { void g() {} } y;
853b7d46c3SEli Friedman   y.g();
863b7d46c3SEli Friedman }
CallLocalAnonStruct()873b7d46c3SEli Friedman void CallLocalAnonStruct() { LocalAnonStruct(); }
88