-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
This commit is contained in:
parent
1570571ded
commit
7b6b9a1afc
|
@ -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(
|
||||
|
|
|
@ -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:
|
Loading…
Reference in New Issue