[DebugInfo] Consider debug label scope has an extra lexical block file
Summary: There are places where a case that debug label scope has an extra lexical block file is not considered properly. The modified test won't pass without this patch. Reviewers: aprantl, HsiangKai Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D66187 llvm-svn: 368891
This commit is contained in:
parent
12f5a2807e
commit
df7022825c
|
@ -910,7 +910,8 @@ static bool emitDebugLabelComment(const MachineInstr *MI, AsmPrinter &AP) {
|
|||
OS << "DEBUG_LABEL: ";
|
||||
|
||||
const DILabel *V = MI->getDebugLabel();
|
||||
if (auto *SP = dyn_cast<DISubprogram>(V->getScope())) {
|
||||
if (auto *SP = dyn_cast<DISubprogram>(
|
||||
V->getScope()->getNonLexicalBlockFileScope())) {
|
||||
StringRef Name = SP->getName();
|
||||
if (!Name.empty())
|
||||
OS << Name << ":";
|
||||
|
|
|
@ -1603,11 +1603,14 @@ void DwarfDebug::collectEntityInfo(DwarfCompileUnit &TheCU,
|
|||
|
||||
LexicalScope *Scope = nullptr;
|
||||
const DILabel *Label = cast<DILabel>(IL.first);
|
||||
// The scope could have an extra lexical block file.
|
||||
const DILocalScope *LocalScope =
|
||||
Label->getScope()->getNonLexicalBlockFileScope();
|
||||
// Get inlined DILocation if it is inlined label.
|
||||
if (const DILocation *IA = IL.second)
|
||||
Scope = LScopes.findInlinedScope(Label->getScope(), IA);
|
||||
Scope = LScopes.findInlinedScope(LocalScope, IA);
|
||||
else
|
||||
Scope = LScopes.findLexicalScope(Label->getScope());
|
||||
Scope = LScopes.findLexicalScope(LocalScope);
|
||||
// If label scope is not found then skip this label.
|
||||
if (!Scope)
|
||||
continue;
|
||||
|
|
|
@ -70,6 +70,7 @@ declare void @llvm.dbg.label(metadata)
|
|||
!9 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
!10 = !DILabel(scope: !6, name: "top", file: !1, line: 4)
|
||||
!11 = !DILocation(line: 4, column: 1, scope: !6)
|
||||
!12 = !DILabel(scope: !6, name: "done", file: !1, line: 7)
|
||||
!12 = !DILabel(scope: !15, name: "done", file: !1, line: 7)
|
||||
!13 = !DILocation(line: 7, column: 1, scope: !6)
|
||||
!14 = !DILocation(line: 8, column: 3, scope: !6)
|
||||
!15 = !DILexicalBlockFile(discriminator: 2, file: !1, scope: !6)
|
||||
|
|
Loading…
Reference in New Issue