1 | // RUN: %clang_cc1 -triple i386-pc-windows -emit-llvm -gcodeview -debug-info-kind=limited -fms-compatibility %s -x c++ -o - | FileCheck %s |
2 | |
3 | // Ensure we emit debug info for the full definition of base classes that will |
4 | // be imported from a DLL. Otherwise, the debugger wouldn't be able to show the |
5 | // members. |
6 | |
7 | // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ImportedAfterCompletion", |
8 | // CHECK-NOT: DIFlagFwdDecl |
9 | // CHECK-SAME: ){{$}} |
10 | |
11 | // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "OutOfLineCtor", |
12 | // CHECK-SAME: DIFlagFwdDecl |
13 | // CHECK-SAME: ){{$}} |
14 | |
15 | // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ImportedBase", |
16 | // CHECK-NOT: DIFlagFwdDecl |
17 | // CHECK-SAME: ){{$}} |
18 | |
19 | // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ImportedMethod", |
20 | // CHECK-NOT: DIFlagFwdDecl |
21 | // CHECK-SAME: ){{$}} |
22 | |
23 | |
24 | struct ImportedAfterCompletion; |
25 | ImportedAfterCompletion *force_fwd_decl; |
26 | struct __declspec(dllimport) ImportedAfterCompletion { |
27 | virtual ~ImportedAfterCompletion(); |
28 | }; |
29 | |
30 | struct OutOfLineCtor { |
31 | OutOfLineCtor(); |
32 | virtual void Foo(); |
33 | }; |
34 | |
35 | struct __declspec(dllimport) ImportedBase { |
36 | ImportedBase(); |
37 | virtual void Foo(); |
38 | }; |
39 | |
40 | struct DerivedFromImported : public ImportedBase {}; |
41 | |
42 | struct ImportedMethod { |
43 | ImportedMethod(); |
44 | virtual void Foo(); |
45 | static void __declspec(dllimport) create(); |
46 | }; |
47 | |
48 | int main() { |
49 | ImportedAfterCompletion c; |
50 | OutOfLineCtor o; |
51 | DerivedFromImported d; |
52 | ImportedMethod m; |
53 | } |
54 | |