xref: /aosp_15_r20/external/clang/test/CodeGenCXX/mangle-local-class-vtables.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: @_ZTVZ1GvE1C = {{.*}} @_ZTIZ1GvE1C {{.*}} @_ZZ1GvENK1C1FEv
4*67e74705SXin Li // CHECK: @_ZTIZ1GvE1C = {{.*}} @_ZTSZ1GvE1C
5*67e74705SXin Li // CHECK: @_ZTVZ1GvE1C_0 = {{.*}} @_ZTIZ1GvE1C_0 {{.*}} @_ZZ1GvENK1C1FE_0v
6*67e74705SXin Li // CHECK: @_ZTIZ1GvE1C_0 = {{.*}} @_ZTSZ1GvE1C_0
7*67e74705SXin Li // CHECK: @_ZTVZ1GvE1C_1 = {{.*}} @_ZTIZ1GvE1C_1 {{.*}} @_ZZ1GvENK1C1FE_1v
8*67e74705SXin Li // CHECK: @_ZTIZ1GvE1C_1 = {{.*}} @_ZTSZ1GvE1C_1
9*67e74705SXin Li // CHECK: @_ZTVZN1J1KEvE1C = {{.*}} @_ZTIZN1J1KEvE1C {{.*}} @_ZZN1J1KEvENK1C1FEv
10*67e74705SXin Li // CHECK: @_ZTIZN1J1KEvE1C = {{.*}} @_ZTSZN1J1KEvE1C
11*67e74705SXin Li 
12*67e74705SXin Li // CHECK: define {{.*}} @_ZZ1GvEN1CC2Ev(
13*67e74705SXin Li // CHECK: define {{.*}} @_ZZ1GvENK1C1FEv(
14*67e74705SXin Li // CHECK: define {{.*}} @_ZZ1GvEN1CC2E_0v(
15*67e74705SXin Li // CHECK: define {{.*}} @_ZZ1GvENK1C1FE_0v(
16*67e74705SXin Li // CHECK: define {{.*}} @_ZZ1GvENK1C1GE_0v(
17*67e74705SXin Li // CHECK: define {{.*}} @_ZZ1GvEN1CC2E_1v(
18*67e74705SXin Li // CHECK: define {{.*}} @_ZZ1GvENK1C1FE_1v(
19*67e74705SXin Li // CHECK: define {{.*}} @_ZZ1GvENK1C1HE_1v(
20*67e74705SXin Li // CHECK: define {{.*}} @_ZZN1J1KEvEN1CC2Ev(
21*67e74705SXin Li // CHECK: define {{.*}} @_ZZN1J1KEvENK1C1FEv(
22*67e74705SXin Li 
23*67e74705SXin Li struct I {
24*67e74705SXin Li   virtual void F() const = 0;
25*67e74705SXin Li };
26*67e74705SXin Li 
27*67e74705SXin Li void Go(const I &i);
28*67e74705SXin Li 
G()29*67e74705SXin Li void G() {
30*67e74705SXin Li   {
31*67e74705SXin Li     struct C : I {
32*67e74705SXin Li       void F() const {}
33*67e74705SXin Li     };
34*67e74705SXin Li     Go(C());
35*67e74705SXin Li   }
36*67e74705SXin Li   {
37*67e74705SXin Li     struct C : I {
38*67e74705SXin Li       void F() const { G(); }
39*67e74705SXin Li       void G() const {}
40*67e74705SXin Li     };
41*67e74705SXin Li     Go(C());
42*67e74705SXin Li   }
43*67e74705SXin Li   {
44*67e74705SXin Li     struct C : I {
45*67e74705SXin Li       void F() const { H(); }
46*67e74705SXin Li       void H() const {}
47*67e74705SXin Li     };
48*67e74705SXin Li     Go(C());
49*67e74705SXin Li   }
50*67e74705SXin Li }
51*67e74705SXin Li 
52*67e74705SXin Li struct J {
53*67e74705SXin Li   void K();
54*67e74705SXin Li };
55*67e74705SXin Li 
K()56*67e74705SXin Li void J::K() {
57*67e74705SXin Li   struct C : I {
58*67e74705SXin Li     void F() const {}
59*67e74705SXin Li   };
60*67e74705SXin Li   Go(C());
61*67e74705SXin Li }
62