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