mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
More principled implementation of DISubprogram::describes()
Previously we would also accept DISubprograms that matched in name only, but this doesn't appear to be necessary any more. I did a Full and Thin LTO build of Clang and it completed without a warning. Differential Revision: https://reviews.llvm.org/D75213
This commit is contained in:
parent
9863c4062d
commit
ae0ba63fe4
@ -660,12 +660,7 @@ DISubprogram *DISubprogram::getImpl(
|
||||
|
||||
bool DISubprogram::describes(const Function *F) const {
|
||||
assert(F && "Invalid function");
|
||||
if (F->getSubprogram() == this)
|
||||
return true;
|
||||
StringRef Name = getLinkageName();
|
||||
if (Name.empty())
|
||||
Name = getName();
|
||||
return F->getName() == Name;
|
||||
return F->getSubprogram() == this;
|
||||
}
|
||||
|
||||
DILexicalBlock *DILexicalBlock::getImpl(LLVMContext &Context, Metadata *Scope,
|
||||
|
@ -2364,8 +2364,7 @@ void Verifier::visitFunction(const Function &F) {
|
||||
if (!HasDebugInfo)
|
||||
return;
|
||||
|
||||
// Check that all !dbg attachments lead to back to N (or, at least, another
|
||||
// subprogram that describes the same function).
|
||||
// Check that all !dbg attachments lead to back to N.
|
||||
//
|
||||
// FIXME: Check this incrementally while visiting !dbg attachments.
|
||||
// FIXME: Only check when N is the canonical subprogram for F.
|
||||
@ -2394,11 +2393,9 @@ void Verifier::visitFunction(const Function &F) {
|
||||
if (SP && ((Scope != SP) && !Seen.insert(SP).second))
|
||||
return;
|
||||
|
||||
// FIXME: Once N is canonical, check "SP == &N".
|
||||
AssertDI(SP->describes(&F),
|
||||
"!dbg attachment points at wrong subprogram for function", N, &F,
|
||||
&I, DL, Scope, SP);
|
||||
visitMDNode(*SP);
|
||||
};
|
||||
for (auto &BB : F)
|
||||
for (auto &I : BB) {
|
||||
|
26
test/Verifier/disubprogram-name-match-only.ll
Normal file
26
test/Verifier/disubprogram-name-match-only.ll
Normal file
@ -0,0 +1,26 @@
|
||||
; RUN: llvm-as -disable-output <%s 2>&1| FileCheck %s
|
||||
|
||||
define void @f() !dbg !14 {
|
||||
ret void, !dbg !5
|
||||
}
|
||||
|
||||
!llvm.module.flags = !{!15}
|
||||
!llvm.dbg.cu = !{!4}
|
||||
|
||||
!0 = !{null}
|
||||
!1 = distinct !DICompositeType(tag: DW_TAG_structure_type)
|
||||
!2 = !DIFile(filename: "f.c", directory: "/")
|
||||
!3 = !DISubroutineType(types: !0)
|
||||
!4 = distinct !DICompileUnit(language: DW_LANG_C, file: !2)
|
||||
; CHECK: !dbg attachment points at wrong subprogram for function
|
||||
; CHECK: warning: ignoring invalid debug info
|
||||
!5 = !DILocation(line: 1, scope: !9)
|
||||
!9 = distinct !DISubprogram(name: "f", scope: !1,
|
||||
file: !2, line: 1, type: !3, isLocal: true,
|
||||
isDefinition: true, scopeLine: 2,
|
||||
unit: !4)
|
||||
!14 = distinct !DISubprogram(name: "f", scope: !1,
|
||||
file: !2, line: 1, type: !3, isLocal: true,
|
||||
isDefinition: true, scopeLine: 2,
|
||||
unit: !4)
|
||||
!15 = !{i32 1, !"Debug Info Version", i32 3}
|
Loading…
x
Reference in New Issue
Block a user