amccarth updated this revision to Diff 68114. amccarth added a comment. Added a test.
https://reviews.llvm.org/D23462 Files: lib/CodeGen/CGDebugInfo.cpp test/CodeGenCXX/debug-info-dllimport-base-class.cpp Index: test/CodeGenCXX/debug-info-dllimport-base-class.cpp =================================================================== --- /dev/null +++ test/CodeGenCXX/debug-info-dllimport-base-class.cpp @@ -0,0 +1,20 @@ +// 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: "ImportedBase", +// CHECK-NOT: DIFlagFwdDecl +// CHECK-SAME: ){{$}} + +struct __declspec(dllimport) ImportedBase { + ImportedBase(); + virtual void Foo(); +}; + +struct DerivedFromImported : public ImportedBase {}; + +int main() { + DerivedFromImported d; +} Index: lib/CodeGen/CGDebugInfo.cpp =================================================================== --- lib/CodeGen/CGDebugInfo.cpp +++ lib/CodeGen/CGDebugInfo.cpp @@ -1685,7 +1685,8 @@ if (!CXXDecl) return false; - if (CXXDecl->hasDefinition() && CXXDecl->isDynamicClass()) + if (CXXDecl->hasDefinition() && CXXDecl->isDynamicClass() && + !CXXDecl->hasAttr<DLLImportAttr>()) return true; TemplateSpecializationKind Spec = TSK_Undeclared;
Index: test/CodeGenCXX/debug-info-dllimport-base-class.cpp =================================================================== --- /dev/null +++ test/CodeGenCXX/debug-info-dllimport-base-class.cpp @@ -0,0 +1,20 @@ +// 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: "ImportedBase", +// CHECK-NOT: DIFlagFwdDecl +// CHECK-SAME: ){{$}} + +struct __declspec(dllimport) ImportedBase { + ImportedBase(); + virtual void Foo(); +}; + +struct DerivedFromImported : public ImportedBase {}; + +int main() { + DerivedFromImported d; +} Index: lib/CodeGen/CGDebugInfo.cpp =================================================================== --- lib/CodeGen/CGDebugInfo.cpp +++ lib/CodeGen/CGDebugInfo.cpp @@ -1685,7 +1685,8 @@ if (!CXXDecl) return false; - if (CXXDecl->hasDefinition() && CXXDecl->isDynamicClass()) + if (CXXDecl->hasDefinition() && CXXDecl->isDynamicClass() && + !CXXDecl->hasAttr<DLLImportAttr>()) return true; TemplateSpecializationKind Spec = TSK_Undeclared;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits