[PATCH] D14697: [Verifier] Fix !dbg validation if Scope is the Subprogram
Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Dec 6 15:08:45 PST 2015
This revision was automatically updated to reflect the committed changes.
Closed by commit rL254887: [Verifier] Fix !dbg validation if Scope is the Subprogram (authored by kfischer).
Changed prior to commit:
http://reviews.llvm.org/D14697?vs=40264&id=42018#toc
Repository:
rL LLVM
http://reviews.llvm.org/D14697
Files:
llvm/trunk/lib/IR/Verifier.cpp
llvm/trunk/test/CodeGen/X86/2010-05-28-Crash.ll
llvm/trunk/test/Verifier/func-dbg.ll
Index: llvm/trunk/lib/IR/Verifier.cpp
===================================================================
--- llvm/trunk/lib/IR/Verifier.cpp
+++ llvm/trunk/lib/IR/Verifier.cpp
@@ -1814,7 +1814,10 @@
continue;
DISubprogram *SP = Scope ? Scope->getSubprogram() : nullptr;
- if (SP && !Seen.insert(SP).second)
+
+ // Scope and SP could be the same MDNode and we don't want to skip
+ // validation in that case
+ if (SP && ((Scope != SP) && !Seen.insert(SP).second))
continue;
// FIXME: Once N is canonical, check "SP == &N".
Index: llvm/trunk/test/Verifier/func-dbg.ll
===================================================================
--- llvm/trunk/test/Verifier/func-dbg.ll
+++ llvm/trunk/test/Verifier/func-dbg.ll
@@ -0,0 +1,25 @@
+; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s
+
+define i32 @foo() !dbg !4 {
+entry:
+ ret i32 0, !dbg !6
+}
+
+define i32 @bar() !dbg !5 {
+entry:
+; CHECK: !dbg attachment points at wrong subprogram for function
+ ret i32 0, !dbg !6
+}
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!7, !8}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: 0, enums: !2, retainedTypes: !2, subprograms: !3, globals: !2, imports: !2)
+!1 = !DIFile(filename: "dwarf-test.c", directory: "test")
+!2 = !{}
+!3 = !{!4, !5}
+!4 = distinct !DISubprogram(name: "foo", scope: !0, isDefinition: true)
+!5 = distinct !DISubprogram(name: "bar", scope: !0, isDefinition: true)
+!6 = !DILocation(line: 7, scope: !4)
+!7 = !{i32 2, !"Dwarf Version", i32 3}
+!8 = !{i32 1, !"Debug Info Version", i32 3}
Index: llvm/trunk/test/CodeGen/X86/2010-05-28-Crash.ll
===================================================================
--- llvm/trunk/test/CodeGen/X86/2010-05-28-Crash.ll
+++ llvm/trunk/test/CodeGen/X86/2010-05-28-Crash.ll
@@ -16,7 +16,7 @@
define i32 @bar(i32 %x) nounwind optsize ssp !dbg !8 {
entry:
tail call void @llvm.dbg.value(metadata i32 %x, i64 0, metadata !7, metadata !DIExpression()), !dbg !DILocation(scope: !8)
- tail call void @llvm.dbg.value(metadata i32 1, i64 0, metadata !0, metadata !DIExpression()) nounwind, !dbg !DILocation(scope: !1)
+ tail call void @llvm.dbg.value(metadata i32 1, i64 0, metadata !0, metadata !DIExpression()) nounwind, !dbg !DILocation(scope: !1, inlinedAt: !DILocation(scope: !8))
%0 = tail call i32 (...) @zoo(i32 1) nounwind, !dbg !12 ; <i32> [#uses=1]
%1 = add nsw i32 %0, %x, !dbg !13 ; <i32> [#uses=1]
ret i32 %1, !dbg !13
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D14697.42018.patch
Type: text/x-patch
Size: 2572 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151206/abd575bc/attachment.bin>
More information about the llvm-commits
mailing list