1*2bf9b4c0SAlexey Bataev // RUN: %clangxx -c -target %itanium_abi_triple -g %s -emit-llvm -S -o - | FileCheck %s
2*2bf9b4c0SAlexey Bataev // RUN: %clangxx -c -target %ms_abi_triple -g %s -emit-llvm -S -o - | FileCheck %s
3*2bf9b4c0SAlexey Bataev
4*2bf9b4c0SAlexey Bataev struct Foo {
5*2bf9b4c0SAlexey Bataev int A;
FooFoo6*2bf9b4c0SAlexey Bataev Foo() : A(1){};
7*2bf9b4c0SAlexey Bataev };
8*2bf9b4c0SAlexey Bataev
9*2bf9b4c0SAlexey Bataev struct Bar {
10*2bf9b4c0SAlexey Bataev int B;
BarBar11*2bf9b4c0SAlexey Bataev Bar() : B(2){};
12*2bf9b4c0SAlexey Bataev };
13*2bf9b4c0SAlexey Bataev
14*2bf9b4c0SAlexey Bataev struct Baz {
15*2bf9b4c0SAlexey Bataev int C;
BazBaz16*2bf9b4c0SAlexey Bataev Baz() : C(3){};
17*2bf9b4c0SAlexey Bataev };
18*2bf9b4c0SAlexey Bataev
19*2bf9b4c0SAlexey Bataev struct Qux {
dQux20*2bf9b4c0SAlexey Bataev int d() { return 4; }
QuxQux21*2bf9b4c0SAlexey Bataev Qux() {};
22*2bf9b4c0SAlexey Bataev };
23*2bf9b4c0SAlexey Bataev
24*2bf9b4c0SAlexey Bataev struct Quux {
25*2bf9b4c0SAlexey Bataev int E;
QuuxQuux26*2bf9b4c0SAlexey Bataev Quux() : E(5){};
27*2bf9b4c0SAlexey Bataev };
28*2bf9b4c0SAlexey Bataev
29*2bf9b4c0SAlexey Bataev typedef int(Qux::*TD)();
30*2bf9b4c0SAlexey Bataev typedef int(Qux::*TD1)();
31*2bf9b4c0SAlexey Bataev int Val = reinterpret_cast<Baz *>(0)->C;
main()32*2bf9b4c0SAlexey Bataev int main() {
33*2bf9b4c0SAlexey Bataev Bar *PB = new Bar;
34*2bf9b4c0SAlexey Bataev TD d = &Qux::d;
35*2bf9b4c0SAlexey Bataev (void)reinterpret_cast<TD1>(d);
36*2bf9b4c0SAlexey Bataev
37*2bf9b4c0SAlexey Bataev return reinterpret_cast<Foo *>(PB)->A + reinterpret_cast<Quux *>(0)->E;
38*2bf9b4c0SAlexey Bataev }
39*2bf9b4c0SAlexey Bataev
40*2bf9b4c0SAlexey Bataev // CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name: "Foo",
41*2bf9b4c0SAlexey Bataev // CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name: "Bar",
42*2bf9b4c0SAlexey Bataev // CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name: "Baz",
43*2bf9b4c0SAlexey Bataev // CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name: "Qux",
44*2bf9b4c0SAlexey Bataev // CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name: "Quux",
45*2bf9b4c0SAlexey Bataev // CHECK-DAG: !DIDerivedType(tag: DW_TAG_typedef, name: "TD",
46*2bf9b4c0SAlexey Bataev // CHECK-DAG: !DIDerivedType(tag: DW_TAG_typedef, name: "TD1",
47