112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala// RUN: %clang_cc1 -fms-extensions -fno-rtti -emit-llvm %s -o - -triple=i386-pc-win32 | FileCheck %s
212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala// CHECK: @"\01??_7D@C@?1??foo@@YAXXZ@6B@" =
412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala// CHECK: @"\01??_7B@?1??foo@A@@QAEXH@Z@6B@" =
512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala// CHECK: define {{.*}} @"\01?baz@E@?3??bar@C@?1??foo@@YAXXZ@QAEXXZ@QAEXXZ"(
612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala
712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala// Microsoft Visual C++ ABI examples.
812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialastruct A {
912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala  void foo (int) {
1012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala    struct B { virtual ~B() {} };
1112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala    B();
1212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala  }
1312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala};
1412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialainline void foo () {
1512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala  struct C {
1612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala    struct D { virtual ~D() {} };
1712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala    void bar () {
1812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala      struct E {
1912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala        void baz() { }
2012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala      };
2112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala      E().baz();
2212e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala    }
2312e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala  };
2412e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala  A().foo(0);
2512e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala  C::D();
2612e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala  C().bar();
2712e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala}
2812e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fialavoid call () {
2912e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala  foo();
3012e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala}
3112e21689bc88a77c7b5b9b220fec31e049e5ec0fTodd Fiala