[llvm] r263033 - Don't crash when compiling inline assembler containing .file directives.

Adrian Prantl via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 9 09:32:57 PST 2016


Author: adrian
Date: Wed Mar  9 11:32:56 2016
New Revision: 263033

URL: http://llvm.org/viewvc/llvm-project?rev=263033&view=rev
Log:
Don't crash when compiling inline assembler containing .file directives.
Removing the assertion is  safe to do because any module level inline
assembly is always emitted first via AsmPrinter::doInitialization().

http://reviews.llvm.org/D16101
rdar://22690666

Added:
    llvm/trunk/test/DebugInfo/X86/inline-asm-locs.ll
Modified:
    llvm/trunk/lib/MC/MCDwarf.cpp

Modified: llvm/trunk/lib/MC/MCDwarf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDwarf.cpp?rev=263033&r1=263032&r2=263033&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCDwarf.cpp (original)
+++ llvm/trunk/lib/MC/MCDwarf.cpp Wed Mar  9 11:32:56 2016
@@ -344,9 +344,9 @@ unsigned MCDwarfLineTableHeader::getFile
   }
   assert(!FileName.empty());
   if (FileNumber == 0) {
-    FileNumber = SourceIdMap.size() + 1;
-    assert((MCDwarfFiles.empty() || FileNumber == MCDwarfFiles.size()) &&
-           "Don't mix autonumbered and explicit numbered line table usage");
+    // File numbers start with 1 and/or after any file numbers
+    // allocated by inline-assembler .file directives.
+    FileNumber = MCDwarfFiles.empty() ? 1 : MCDwarfFiles.size();
     SmallString<256> Buffer;
     auto IterBool = SourceIdMap.insert(
         std::make_pair((Directory + Twine('\0') + FileName).toStringRef(Buffer),

Added: llvm/trunk/test/DebugInfo/X86/inline-asm-locs.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/inline-asm-locs.ll?rev=263033&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/X86/inline-asm-locs.ll (added)
+++ llvm/trunk/test/DebugInfo/X86/inline-asm-locs.ll Wed Mar  9 11:32:56 2016
@@ -0,0 +1,65 @@
+; RUN: llc -mtriple=x86_64-apple-darwin %s -o - -filetype=asm | FileCheck %s
+
+; Generated from:
+; asm(
+;       ".file 1 \"A.asm\"\n"
+;       ".file 2 \"B.asm\"\n"
+;       ".loc  1 111\n"
+;       ".text\n"
+;       ".globl _bar\n"
+;       "_bar:\n"
+;       ".loc 2 222\n"
+;       "\tret\n"
+;     );
+;  
+; void bar();
+;  
+; void foo() {
+;   bar();
+; }
+
+; CHECK: .file 1 "A.asm"
+; CHECK: .file 2 "B.asm"
+; CHECK: .loc  1 111
+; CHECK: .loc  2 222
+; CHECK: .file 3 "test.c"
+; CHECK: .loc  3 14 0  
+
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx"
+
+module asm ".file 1 \22A.asm\22"
+module asm ".file 2 \22B.asm\22"
+module asm ".loc  1 111"
+module asm ".text"
+module asm ".globl _bar"
+module asm "_bar:"
+module asm ".loc 2 222"
+module asm "\09ret"
+
+; Function Attrs: nounwind ssp uwtable
+define void @foo() !dbg !4 {
+entry:
+  call void (...) @bar(), !dbg !11
+  ret void, !dbg !12
+}
+
+declare void @bar(...)
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!7, !8, !9}
+!llvm.ident = !{!10}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.8.0 (trunk 256963)", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, subprograms: !3)
+!1 = !DIFile(filename: "test.c", directory: "/Volumes/Data/radar/22690666")
+!2 = !{}
+!3 = !{!4}
+!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 14, type: !5, isLocal: false, isDefinition: true, scopeLine: 14, isOptimized: false, variables: !2)
+!5 = !DISubroutineType(types: !6)
+!6 = !{null}
+!7 = !{i32 2, !"Dwarf Version", i32 2}
+!8 = !{i32 2, !"Debug Info Version", i32 3}
+!9 = !{i32 1, !"PIC Level", i32 2}
+!10 = !{!"clang version 3.8.0 (trunk 256963)"}
+!11 = !DILocation(line: 15, column: 3, scope: !4)
+!12 = !DILocation(line: 16, column: 1, scope: !4)




More information about the llvm-commits mailing list