[PATCH] D96181: Have stripDebugInfo() also strip !llvm.loop annotations.

Adrian Prantl via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 5 14:21:47 PST 2021


aprantl created this revision.
aprantl added reviewers: vsk, steven_wu, anemet, fhahn.
Herald added subscribers: dexonsmith, hiraditya.
aprantl requested review of this revision.
Herald added a project: LLVM.

The !llvm.loop annotations consist of pointers into the debug info, so when stripping the debug info (particularly important when it is malformed!) !llvm.loop annotations need to be stripped as well, or else the malformed debug info stays around.

      

rdar://73687049


https://reviews.llvm.org/D96181

Files:
  llvm/lib/IR/DebugInfo.cpp
  llvm/test/Verifier/llvm.loop-cu-strip.ll


Index: llvm/test/Verifier/llvm.loop-cu-strip.ll
===================================================================
--- /dev/null
+++ llvm/test/Verifier/llvm.loop-cu-strip.ll
@@ -0,0 +1,19 @@
+; RUN: llvm-as -disable-output < %s -o /dev/null 2>&1 | FileCheck %s
+; CHECK: DICompileUnit not listed in llvm.dbg.cu
+; CHECK: ignoring invalid debug info in
+; CHECK-NOT: DICompileUnit not listed in llvm.dbg.cu
+declare hidden void @g() local_unnamed_addr #1 align 2
+define hidden void @f() {
+  tail call void @g() #2, !llvm.loop !5
+  ret void
+}
+!llvm.module.flags = !{!0, !1}
+!0 = !{i32 2, !"Dwarf Version", i32 4}
+!1 = !{i32 2, !"Debug Info Version", i32 3}
+!5 = distinct !{!5, !6, !6}
+!6 = !DILocation(line: 1325, column: 3, scope: !7)
+!7 = distinct !DISubprogram(name: "f", scope: !8, file: !8, line: 1324, type: !9, scopeLine: 1324, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !11)
+!8 = !DIFile(filename: "/", directory: "f.cpp")
+!9 = !DISubroutineType(types: !10)
+!10 = !{}
+!11 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !8)
Index: llvm/lib/IR/DebugInfo.cpp
===================================================================
--- llvm/lib/IR/DebugInfo.cpp
+++ llvm/lib/IR/DebugInfo.cpp
@@ -338,6 +338,10 @@
         Changed = true;
         I.setDebugLoc(DebugLoc());
       }
+      // If we are stripping the debug info, the llvm.loop annotations
+      // need to be removed as well, since they link into the debug info.
+      if (auto *MD = I.getMetadata(LLVMContext::MD_loop))
+        I.setMetadata(LLVMContext::MD_loop, nullptr);
     }
 
     auto *TermInst = BB.getTerminator();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D96181.321880.patch
Type: text/x-patch
Size: 1641 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210205/cc27d7ff/attachment.bin>


More information about the llvm-commits mailing list