From: Adrian Prantl Date: Wed, 9 Mar 2016 17:32:56 +0000 (+0000) Subject: Don't crash when compiling inline assembler containing .file directives. X-Git-Tag: llvmorg-3.9.0-rc1~12162 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d6cc53f3c439a7045b4c3a13e5e8b46e4e5577a4;p=platform%2Fupstream%2Fllvm.git 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 llvm-svn: 263033 --- diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp index e3e5f23..759f90e 100644 --- a/llvm/lib/MC/MCDwarf.cpp +++ b/llvm/lib/MC/MCDwarf.cpp @@ -344,9 +344,9 @@ unsigned MCDwarfLineTableHeader::getFile(StringRef &Directory, } 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), diff --git a/llvm/test/DebugInfo/X86/inline-asm-locs.ll b/llvm/test/DebugInfo/X86/inline-asm-locs.ll new file mode 100644 index 0000000..0b13556 --- /dev/null +++ b/llvm/test/DebugInfo/X86/inline-asm-locs.ll @@ -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)