| // RUN: %clang_cc1 -triple i386-pc-windows -emit-llvm -gcodeview -debug-info-kind=limited -fms-compatibility %s -x c++ -o - | FileCheck %s |
| |
| // Ensure we emit debug info for the full definition of base classes that will |
| // be imported from a DLL. Otherwise, the debugger wouldn't be able to show the |
| // members. |
| |
| // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ImportedAfterCompletion", |
| // CHECK-NOT: DIFlagFwdDecl |
| // CHECK-SAME: ){{$}} |
| |
| // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "OutOfLineCtor", |
| // CHECK-SAME: DIFlagFwdDecl |
| // CHECK-SAME: ){{$}} |
| |
| // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ImportedBase", |
| // CHECK-NOT: DIFlagFwdDecl |
| // CHECK-SAME: ){{$}} |
| |
| // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "ImportedMethod", |
| // CHECK-NOT: DIFlagFwdDecl |
| // CHECK-SAME: ){{$}} |
| |
| |
| struct ImportedAfterCompletion; |
| ImportedAfterCompletion *force_fwd_decl; |
| struct __declspec(dllimport) ImportedAfterCompletion { |
| virtual ~ImportedAfterCompletion(); |
| }; |
| |
| struct OutOfLineCtor { |
| OutOfLineCtor(); |
| virtual void Foo(); |
| }; |
| |
| struct __declspec(dllimport) ImportedBase { |
| ImportedBase(); |
| virtual void Foo(); |
| }; |
| |
| struct DerivedFromImported : public ImportedBase {}; |
| |
| struct ImportedMethod { |
| ImportedMethod(); |
| virtual void Foo(); |
| static void __declspec(dllimport) create(); |
| }; |
| |
| int main() { |
| ImportedAfterCompletion c; |
| OutOfLineCtor o; |
| DerivedFromImported d; |
| ImportedMethod m; |
| } |