]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGenCXX/debug-info-dllimport-base-class.cpp
Vendor import of clang trunk r290819:
[FreeBSD/FreeBSD.git] / test / CodeGenCXX / debug-info-dllimport-base-class.cpp
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 }