llvm.org GIT mirror llvm / aaff953
llvm-dis: Stop crashing when dropping debug info Since r199356, we've printed a warning when dropping debug info. r225562 started crashing on that, since it registered a diagnostic handler that only expected errors. This fixes the handler to expect other severities. As a side effect, it now prints "error: " at the start of error messages, similar to `llvm-as`. There was a testcase for r199356, but it only really checked the assembler. Move `test/Bitcode/drop-debug-info.ll` to `test/Assembler`, and introduce `test/Bitcode/drop-debug-info.3.5.ll` (and companion `.bc`) to test the bitcode reader. Note: tools/gold/gold-plugin.cpp has an equivalent bug, but I'm not sure what the best fix is there. I'll file a PR. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230416 91177308-0d34-0410-b5e6-96231b3b80d8 Duncan P. N. Exon Smith 4 years ago
7 changed file(s) with 81 addition(s) and 34 deletion(s). Raw diff Collapse all Expand all
0 ; RUN: llvm-as < %s -o %t.bc 2>&1 >/dev/null | FileCheck -check-prefix=WARN %s
1 ; RUN: llvm-dis < %t.bc | FileCheck %s
2 ; RUN: verify-uselistorder < %t.bc
3
4 define i32 @main() {
5 entry:
6 %retval = alloca i32, align 4
7 store i32 0, i32* %retval
8 ret i32 0, !dbg !12
9 }
10
11 !llvm.dbg.cu = !{!0}
12 !llvm.module.flags = !{!9}
13
14 !0 = !{!"0x11\0012\00clang version 3.5 (trunk 195495) (llvm/trunk 195495:195504M)\000\00\000\00\000", !1, !2, !2, !3, !2, !2} ; [ DW_TAG_compile_unit ] [/Users/manmanren/llvm_gmail/release/../llvm/tools/clang/test/CodeGen/debug-info-version.c] [DW_LANG_C99]
15 !1 = !{!"../llvm/tools/clang/test/CodeGen/debug-info-version.c", !"/Users/manmanren/llvm_gmail/release"}
16 !2 = !{i32 0}
17 !3 = !{!4}
18 !4 = !{!"0x2e\00main\00main\00\003\000\001\000\006\00256\000\003", !1, !5, !6, null, i32 ()* @main, null, null, !2} ; [ DW_TAG_subprogram ] [line 3] [def] [main]
19 !5 = !{!"0x29", !1} ; [ DW_TAG_file_type ] [/Users/manmanren/llvm_gmail/release/../llvm/tools/clang/test/CodeGen/debug-info-version.c]
20 !6 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !7, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
21 !7 = !{!8}
22 !8 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed]
23 !9 = !{i32 2, !"Dwarf Version", i32 2}
24 !12 = !MDLocation(line: 4, scope: !4)
25
26 ; WARN: warning: ignoring debug info with an invalid version (0)
27 ; CHECK-NOT: !dbg
28 ; CHECK-NOT: !llvm.dbg.cu
0 ; RUN: llvm-dis < %s.bc -o %t.ll 2>&1 | FileCheck -check-prefix=WARN %s
1 ; RUN: FileCheck -input-file=%t.ll %s
2
3 ; The bitcode paired with this test was generated by passing this file to
4 ; llvm-dis-3.5. This tests that llvm-dis warns correctly when reading old
5 ; bitcode.
6
7 ; CHECK-NOT: !llvm.dbg.cu
8 ; CHECK-NOT: !dbg
9 ; WARN: warning: ignoring debug info with an invalid version (1)
10 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
11 target triple = "x86_64-apple-macosx10.10.0"
12
13 ; Function Attrs: nounwind ssp uwtable
14 define i32 @main() #0 {
15 entry:
16 %retval = alloca i32, align 4
17 store i32 0, i32* %retval
18 ret i32 0, !dbg !12
19 }
20
21 attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
22
23 !llvm.dbg.cu = !{!0}
24 !llvm.module.flags = !{!9, !10}
25 !llvm.ident = !{!11}
26
27 !0 = metadata !{i32 786449, metadata !1, i32 12, metadata !"clang version 3.5.2 (230356)", i1 false, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !"", i32 1} ; [ DW_TAG_compile_unit ] [/Users/dexonsmith/data/llvm/staging/test/Bitcode/t.c] [DW_LANG_C99]
28 !1 = metadata !{metadata !"t.c", metadata !"/Users/dexonsmith/data/llvm/staging/test/Bitcode"}
29 !2 = metadata !{}
30 !3 = metadata !{metadata !4}
31 !4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"main", metadata !"main", metadata !"", i32 1, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 0, i1 false, i32 ()* @main, null, null, metadata !2, i32 1} ; [ DW_TAG_subprogram ] [line 1] [def] [main]
32 !5 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [/Users/dexonsmith/data/llvm/staging/test/Bitcode/t.c]
33 !6 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !7, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
34 !7 = metadata !{metadata !8}
35 !8 = metadata !{i32 786468, null, null, metadata !"int", i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed]
36 !9 = metadata !{i32 2, metadata !"Dwarf Version", i32 2}
37 !10 = metadata !{i32 2, metadata !"Debug Info Version", i32 1}
38 !11 = metadata !{metadata !"clang version 3.5.2 (230356)"}
39 !12 = metadata !{i32 1, i32 14, metadata !4, null}
+0
-29
test/Bitcode/drop-debug-info.ll less more
None ; RUN: llvm-as < %s -o %t.bc 2>&1 >/dev/null | FileCheck -check-prefix=WARN %s
1 ; RUN: llvm-dis < %t.bc | FileCheck %s
2 ; RUN: verify-uselistorder < %t.bc
3
4 define i32 @main() {
5 entry:
6 %retval = alloca i32, align 4
7 store i32 0, i32* %retval
8 ret i32 0, !dbg !12
9 }
10
11 !llvm.dbg.cu = !{!0}
12 !llvm.module.flags = !{!9}
13
14 !0 = !{!"0x11\0012\00clang version 3.5 (trunk 195495) (llvm/trunk 195495:195504M)\000\00\000\00\000", !1, !2, !2, !3, !2, !2} ; [ DW_TAG_compile_unit ] [/Users/manmanren/llvm_gmail/release/../llvm/tools/clang/test/CodeGen/debug-info-version.c] [DW_LANG_C99]
15 !1 = !{!"../llvm/tools/clang/test/CodeGen/debug-info-version.c", !"/Users/manmanren/llvm_gmail/release"}
16 !2 = !{i32 0}
17 !3 = !{!4}
18 !4 = !{!"0x2e\00main\00main\00\003\000\001\000\006\00256\000\003", !1, !5, !6, null, i32 ()* @main, null, null, !2} ; [ DW_TAG_subprogram ] [line 3] [def] [main]
19 !5 = !{!"0x29", !1} ; [ DW_TAG_file_type ] [/Users/manmanren/llvm_gmail/release/../llvm/tools/clang/test/CodeGen/debug-info-version.c]
20 !6 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !7, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
21 !7 = !{!8}
22 !8 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed]
23 !9 = !{i32 2, !"Dwarf Version", i32 2}
24 !12 = !MDLocation(line: 4, scope: !4)
25
26 ; WARN: warning: ignoring debug info with an invalid version (0)
27 ; CHECK-NOT: !dbg
28 ; CHECK-NOT: !llvm.dbg.cu
0 ; RUN: not llvm-dis < %s.bc 2>&1 | FileCheck %s
11
2 ; CHECK: llvm-dis{{(\.EXE|\.exe)?}}: Unknown attribute kind (48)
2 ; CHECK: llvm-dis{{(\.EXE|\.exe)?}}: error: Unknown attribute kind (48)
33
44 ; invalid.ll.bc has an invalid attribute number.
55 ; The test checks that LLVM reports the error and doesn't access freed memory
0 ; RUN: not llvm-dis < %s.bc 2>&1 | FileCheck %s
11
2 ; CHECK: llvm-dis{{(\.EXE|\.exe)?}}: Never resolved value found in function
2 ; CHECK: llvm-dis{{(\.EXE|\.exe)?}}: error: Never resolved value found in function
33
44 ; pr18704.ll.bc has an instruction referring to invalid type.
55 ; The test checks that LLVM reports the error and doesn't access freed memory
114114 } // end anon namespace
115115
116116 static void diagnosticHandler(const DiagnosticInfo &DI, void *Context) {
117 assert(DI.getSeverity() == DS_Error && "Only expecting errors");
118
119117 raw_ostream &OS = errs();
120118 OS << (char *)Context << ": ";
119 switch (DI.getSeverity()) {
120 case DS_Error: OS << "error: "; break;
121 case DS_Warning: OS << "warning: "; break;
122 case DS_Remark: OS << "remark: "; break;
123 case DS_Note: OS << "note: "; break;
124 }
125
121126 DiagnosticPrinterRawOStream DP(OS);
122127 DI.print(DP);
123128 OS << '\n';
124 exit(1);
129
130 if (DI.getSeverity() == DS_Error)
131 exit(1);
125132 }
126133
127134 int main(int argc, char **argv) {