forked from OSchip/llvm-project
-gmodules: Emit debug info for implicit module imports via #include.
When a type is only used as a template parameter and that type is the only type imported from another #include'd module, no skeleton CU for that module is generated, so a consumer doesn't know where to find the type definition. By emitting an import declaration, we can force a skeleton CU to be generated for each imported module. rdar://problem/36266156 llvm-svn: 321754
This commit is contained in:
parent
05d8f16aa4
commit
c5e3647f3c
|
@ -228,6 +228,11 @@ public:
|
|||
Builder->getModuleDebugInfo()->completeRequiredType(RD);
|
||||
}
|
||||
|
||||
void HandleImplicitImportDecl(ImportDecl *D) override {
|
||||
if (!D->getImportedOwningModule())
|
||||
Builder->getModuleDebugInfo()->EmitImportDecl(*D);
|
||||
}
|
||||
|
||||
/// Emit a container holding the serialized AST.
|
||||
void HandleTranslationUnit(ASTContext &Ctx) override {
|
||||
assert(M && VMContext && Builder);
|
||||
|
|
|
@ -187,7 +187,7 @@ void foo() {
|
|||
|
||||
// CHECK: !DIGlobalVariable(name: "anon_enum", {{.*}}, type: ![[ANON_ENUM:[0-9]+]]
|
||||
// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, scope: ![[NS]],
|
||||
// CHECK-SAME: line: 16
|
||||
// CHECK-SAME: line: 19
|
||||
|
||||
// CHECK: !DIGlobalVariable(name: "GlobalUnion",
|
||||
// CHECK-SAME: type: ![[GLOBAL_UNION:[0-9]+]]
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
/* -*- C++ -*- */
|
||||
|
||||
#include "dummy.h"
|
||||
|
||||
namespace DebugCXX {
|
||||
// Records.
|
||||
struct Struct {
|
||||
|
|
|
@ -5,12 +5,13 @@
|
|||
|
||||
// Modules:
|
||||
// RUN: rm -rf %t
|
||||
// RUN: %clang_cc1 -triple %itanium_abi_triple -x objective-c++ -std=c++11 -debug-info-kind=limited -fmodules -fmodule-format=obj -fimplicit-module-maps -DMODULES -fmodules-cache-path=%t %s -I %S/Inputs -I %t -emit-llvm -o %t.ll -mllvm -debug-only=pchcontainer &>%t-mod.ll
|
||||
// RUN: %clang_cc1 -triple %itanium_abi_triple -x objective-c++ -std=c++11 -debugger-tuning=lldb -debug-info-kind=limited -fmodules -fmodule-format=obj -fimplicit-module-maps -DMODULES -fmodules-cache-path=%t %s -I %S/Inputs -I %t -emit-llvm -o %t.ll -mllvm -debug-only=pchcontainer &>%t-mod.ll
|
||||
// RUN: cat %t-mod.ll | FileCheck %s
|
||||
// RUN: cat %t-mod.ll | FileCheck --check-prefix=CHECK-NEG %s
|
||||
// RUN: cat %t-mod.ll | FileCheck --check-prefix=CHECK-MOD %s
|
||||
|
||||
// PCH:
|
||||
// RUN: %clang_cc1 -triple %itanium_abi_triple -x c++ -std=c++11 -emit-pch -fmodule-format=obj -I %S/Inputs -o %t.pch %S/Inputs/DebugCXX.h -mllvm -debug-only=pchcontainer &>%t-pch.ll
|
||||
// RUN: %clang_cc1 -triple %itanium_abi_triple -x c++ -std=c++11 -debugger-tuning=lldb -emit-pch -fmodule-format=obj -I %S/Inputs -o %t.pch %S/Inputs/DebugCXX.h -mllvm -debug-only=pchcontainer &>%t-pch.ll
|
||||
// RUN: cat %t-pch.ll | FileCheck %s
|
||||
// RUN: cat %t-pch.ll | FileCheck --check-prefix=CHECK-NEG %s
|
||||
|
||||
|
@ -18,6 +19,9 @@
|
|||
@import DebugCXX;
|
||||
#endif
|
||||
|
||||
// CHECK-MOD: distinct !DICompileUnit(language: DW_LANG_{{.*}}C_plus_plus,
|
||||
// CHECK-MOD: distinct !DICompileUnit(language: DW_LANG_{{.*}}C_plus_plus,
|
||||
|
||||
// CHECK: distinct !DICompileUnit(language: DW_LANG_{{.*}}C_plus_plus,
|
||||
// CHECK-SAME: isOptimized: false,
|
||||
// CHECK-NOT: splitDebugFilename:
|
||||
|
@ -27,6 +31,8 @@
|
|||
// CHECK-SAME: identifier: "_ZTSN8DebugCXX4EnumE")
|
||||
// CHECK: !DINamespace(name: "DebugCXX"
|
||||
|
||||
// CHECK-MOD: ![[DEBUGCXX:.*]] = !DIModule(scope: null, name: "DebugCXX
|
||||
|
||||
// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type,
|
||||
// CHECK-NOT: name:
|
||||
// CHECK-SAME: )
|
||||
|
@ -150,4 +156,11 @@
|
|||
// CHECK-SAME: name: "WithSpecializedBase<float>",
|
||||
// CHECK-SAME: flags: DIFlagFwdDecl,
|
||||
|
||||
// CHECK-MOD: !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: ![[DEBUGCXX]],
|
||||
// CHECK-MOD-SAME: entity: ![[DUMMY:[0-9]+]],
|
||||
// CHECK-MOD-SAME: line: 3)
|
||||
// CHECK-MOD: ![[DUMMY]] = !DIModule(scope: null, name: "dummy",
|
||||
// CHECK-MOD: distinct !DICompileUnit(language: DW_LANG_ObjC_plus_plus,
|
||||
// CHECK-MOD-SAME: splitDebugFilename: "{{.*}}dummy{{.*}}.pcm",
|
||||
|
||||
// CHECK-NEG-NOT: !DICompositeType(tag: DW_TAG_structure_type, name: "PureForwardDecl"
|
||||
|
|
Loading…
Reference in New Issue