xref: /aosp_15_r20/external/clang/test/CodeGenCXX/mangle-ms-abi-examples.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fms-extensions -fno-rtti -emit-llvm %s -o - -triple=i386-pc-win32 -fms-compatibility-version=19.00 | FileCheck %s --check-prefix=CHECK --check-prefix=MSVC2015
2*67e74705SXin Li // RUN: %clang_cc1 -fms-extensions -fno-rtti -emit-llvm %s -o - -triple=i386-pc-win32 -fms-compatibility-version=18.00 | FileCheck %s --check-prefix=CHECK --check-prefix=MSVC2013
3*67e74705SXin Li 
4*67e74705SXin Li // CHECK: @"\01??_7B@?1??foo@A@@QAEXH@Z@6B@" =
5*67e74705SXin Li // CHECK: @"\01??_7D@C@?1??foo@@YAXXZ@6B@" =
6*67e74705SXin Li // MSVC2013: define {{.*}} @"\01?baz@E@?3??bar@C@?1??foo@@YAXXZ@QAEXXZ@QAEXXZ"(
7*67e74705SXin Li // MSVC2015: define {{.*}} @"\01?baz@E@?1??bar@C@?1??foo@@YAXXZ@QAEXXZ@QAEXXZ"(
8*67e74705SXin Li 
9*67e74705SXin Li // Microsoft Visual C++ ABI examples.
10*67e74705SXin Li struct A {
fooA11*67e74705SXin Li   void foo (int) {
12*67e74705SXin Li     struct B { virtual ~B() {} };
13*67e74705SXin Li     B();
14*67e74705SXin Li   }
15*67e74705SXin Li };
foo()16*67e74705SXin Li inline void foo () {
17*67e74705SXin Li   struct C {
18*67e74705SXin Li     struct D { virtual ~D() {} };
19*67e74705SXin Li     void bar () {
20*67e74705SXin Li       struct E {
21*67e74705SXin Li         void baz() { }
22*67e74705SXin Li       };
23*67e74705SXin Li       E().baz();
24*67e74705SXin Li     }
25*67e74705SXin Li   };
26*67e74705SXin Li   A().foo(0);
27*67e74705SXin Li   C::D();
28*67e74705SXin Li   C().bar();
29*67e74705SXin Li }
call()30*67e74705SXin Li void call () {
31*67e74705SXin Li   foo();
32*67e74705SXin Li }
33