diff options
Diffstat (limited to 'llvm/test/Verifier')
4 files changed, 48 insertions, 4 deletions
diff --git a/llvm/test/Verifier/diexpression-dwarf-entry-value.ll b/llvm/test/Verifier/diexpression-dwarf-entry-value.ll new file mode 100644 index 00000000000..cc7b41da4af --- /dev/null +++ b/llvm/test/Verifier/diexpression-dwarf-entry-value.ll @@ -0,0 +1,8 @@ +; RUN: not opt -S < %s 2>&1 | FileCheck %s + +; We can only use the internal variant of the entry value operation, +; DW_OP_LLVM_entry_value, in DIExpressions. + +!named = !{!0} +; CHECK: invalid expression +!0 = !DIExpression(DW_OP_entry_value, 1) diff --git a/llvm/test/Verifier/diexpression-entry-value-llvm-ir.ll b/llvm/test/Verifier/diexpression-entry-value-llvm-ir.ll new file mode 100644 index 00000000000..99143297acf --- /dev/null +++ b/llvm/test/Verifier/diexpression-entry-value-llvm-ir.ll @@ -0,0 +1,31 @@ +; RUN: llvm-as -disable-output <%s 2>&1| FileCheck %s + +; The DW_OP_LLVM_entry_value operation can only be used in MIR. + +; CHECK: Entry values are only allowed in MIR +; CHECK: call void @llvm.dbg.value(metadata i32 %param, metadata !{{.*}}, metadata !DIExpression(DW_OP_LLVM_entry_value, 1)) +; CHECK: warning: ignoring invalid debug info + +define void @foo(i32 %param) !dbg !4 { +entry: + call void @llvm.dbg.value(metadata i32 %param, metadata !8, metadata !DIExpression(DW_OP_LLVM_entry_value, 1)), !dbg !9 + ret void +} + +declare void @llvm.dbg.value(metadata, metadata, metadata) #0 + +attributes #0 = { nounwind readnone speculatable willreturn } + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!2, !3} + +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, emissionKind: FullDebug) +!1 = !DIFile(filename: "a.c", directory: "/") +!2 = !{i32 2, !"Dwarf Version", i32 4} +!3 = !{i32 2, !"Debug Info Version", i32 3} +!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, type: !5, unit: !0) +!5 = !DISubroutineType(types: !6) +!6 = !{null, !7} +!7 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) +!8 = !DILocalVariable(name: "param", arg: 1, scope: !4, file: !1, type: !7) +!9 = !DILocation(line: 0, scope: !4) diff --git a/llvm/test/Verifier/diexpression-entry-value.ll b/llvm/test/Verifier/diexpression-entry-value.ll index 477b20079aa..34b1bceb053 100644 --- a/llvm/test/Verifier/diexpression-entry-value.ll +++ b/llvm/test/Verifier/diexpression-entry-value.ll @@ -2,6 +2,11 @@ !named = !{!0, !1, !2} ; CHECK: invalid expression -!0 = !DIExpression(DW_OP_entry_value, 4, DW_OP_constu, 0, DW_OP_stack_value) -!1 = !DIExpression(DW_OP_constu, 0, DW_OP_entry_value, 1, DW_OP_constu, 0) -!2 = !DIExpression(DW_OP_entry_value, 100, DW_OP_constu, 0) +; CHECK-NEXT: !DIExpression +; CHECK: invalid expression +; CHECK-NEXT: !DIExpression +; CHECK: invalid expression +; CHECK-NEXT: !DIExpression +!0 = !DIExpression(DW_OP_LLVM_entry_value, 4, DW_OP_constu, 0, DW_OP_stack_value) +!1 = !DIExpression(DW_OP_constu, 0, DW_OP_LLVM_entry_value, 1, DW_OP_constu, 0) +!2 = !DIExpression(DW_OP_LLVM_entry_value, 100, DW_OP_constu, 0) diff --git a/llvm/test/Verifier/diexpression-valid-entry-value.ll b/llvm/test/Verifier/diexpression-valid-entry-value.ll index e162b8a50ed..9a4b64ddb92 100644 --- a/llvm/test/Verifier/diexpression-valid-entry-value.ll +++ b/llvm/test/Verifier/diexpression-valid-entry-value.ll @@ -2,4 +2,4 @@ !named = !{!0} ; CHECK-NOT: invalid expression -!0 = !DIExpression(DW_OP_entry_value, 1) +!0 = !DIExpression(DW_OP_LLVM_entry_value, 1) |