diff options
author | Adrian Prantl <aprantl@apple.com> | 2019-02-08 23:15:42 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2019-02-08 23:15:42 +0000 |
commit | 7b6b9a1afce232a48fc77093c6acd8ffb01be0b9 (patch) | |
tree | 3d4fcf95f40af43ae1f9e8a91b85c407c465d1d6 /clang | |
parent | 1570571ded26df0cc0853eecbf1344e56585c2dc (diff) | |
download | bcm5719-llvm-7b6b9a1afce232a48fc77093c6acd8ffb01be0b9.tar.gz bcm5719-llvm-7b6b9a1afce232a48fc77093c6acd8ffb01be0b9.zip |
-gmodules: Don't emit incomplete breadcrumbs pointing to nonexistant PCM files.
When a module name is specified as -fmodule-name, that module gets a
clang::Module object, but it won't actually be built or imported; it
will be textual. CGDebugInfo wouldn't detect this and them emit a
DICompileUnit that had a hash but no name and that confused both
dsymutil, LLDB, and myself.
rdar://problem/47926508
Differential Revision: https://reviews.llvm.org/D57976
llvm-svn: 353578
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/CodeGen/CGDebugInfo.cpp | 10 | ||||
-rw-r--r-- | clang/test/Modules/DebugInfo-fmodule-name.c | 16 |
2 files changed, 25 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 9d502883ed9..ce48f8bb132 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -2296,7 +2296,14 @@ CGDebugInfo::getOrCreateModuleRef(ExternalASTSource::ASTSourceDescriptor Mod, } bool IsRootModule = M ? !M->Parent : true; - if (CreateSkeletonCU && IsRootModule) { + // When a module name is specified as -fmodule-name, that module gets a + // clang::Module object, but it won't actually be built or imported; it will + // be textual. + if (CreateSkeletonCU && IsRootModule && Mod.getASTFile().empty()) + assert((!M || (M->Name == CGM.getLangOpts().ModuleName)) && + "clang module without ASTFile must be specified by -fmodule-name"); + + if (CreateSkeletonCU && IsRootModule && !Mod.getASTFile().empty()) { // PCH files don't have a signature field in the control block, // but LLVM detects skeleton CUs by looking for a non-zero DWO id. // We use the lower 64 bits for debug info. @@ -2313,6 +2320,7 @@ CGDebugInfo::getOrCreateModuleRef(ExternalASTSource::ASTSourceDescriptor Mod, Signature); DIB.finalize(); } + llvm::DIModule *Parent = IsRootModule ? nullptr : getOrCreateModuleRef( diff --git a/clang/test/Modules/DebugInfo-fmodule-name.c b/clang/test/Modules/DebugInfo-fmodule-name.c new file mode 100644 index 00000000000..6d962bcd274 --- /dev/null +++ b/clang/test/Modules/DebugInfo-fmodule-name.c @@ -0,0 +1,16 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fmodules -fmodule-format=obj -fmodule-name=F \ +// RUN: -debug-info-kind=limited -dwarf-ext-refs \ +// RUN: -fimplicit-module-maps -x c -fmodules-cache-path=%t -F %S/Inputs \ +// RUN: %s -S -emit-llvm -debugger-tuning=lldb -o - | FileCheck %s + +#include "F/F.h" + +// CHECK: !DICompileUnit +// CHECK-NOT: dwoId: + +// We still want the import, but no skeleton CU, since no PCM was built. + +// CHECK: !DIModule({{.*}}, name: "F" +// CHECK-NOT: !DICompileUnit +// CHECK-NOT: dwoId: |