[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