diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp --- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -789,7 +789,7 @@ const TargetRegisterInfo &TRI = *Asm->MF->getSubtarget().getRegisterInfo(); auto AddEntry = [&](const DbgValueLocEntry &Entry, - DIExpressionCursor &Cursor) { + DIExpressionCursor &Cursor) { if (Entry.isLocation()) { if (!DwarfExpr.addMachineRegExpression(TRI, Cursor, Entry.getLoc().getReg())) @@ -799,9 +799,13 @@ DwarfExpr.addUnsignedConstant(Entry.getInt()); } else if (Entry.isConstantFP()) { APInt RawBytes = Entry.getConstantFP()->getValueAPF().bitcastToAPInt(); + if (RawBytes.getBitWidth() > 64) + return false; DwarfExpr.addUnsignedConstant(RawBytes); } else if (Entry.isConstantInt()) { APInt RawBytes = Entry.getConstantInt()->getValue(); + if (RawBytes.getBitWidth() > 64) + return false; DwarfExpr.addUnsignedConstant(RawBytes); } else if (Entry.isTargetIndexLocation()) { TargetIndexLocation Loc = Entry.getTargetIndexLocation(); diff --git a/llvm/test/DebugInfo/X86/pr52584.ll b/llvm/test/DebugInfo/X86/pr52584.ll new file mode 100644 --- /dev/null +++ b/llvm/test/DebugInfo/X86/pr52584.ll @@ -0,0 +1,26 @@ +; RUN: llc %s -mtriple=x86_64-unknown-linux-gnu -o /dev/null + +define dso_local void @test() !dbg !4 { +entry: + call void @llvm.dbg.value(metadata !DIArgList(i128 0), metadata !7, metadata !DIExpression(DW_OP_LLVM_arg, 0, DW_OP_stack_value, DW_OP_LLVM_fragment, 0, 127)), !dbg !12 + ret void, !dbg !12 +} + +declare void @llvm.dbg.value(metadata, metadata, metadata) + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!2, !3} + +!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None) +!1 = !DIFile(filename: "test.c", directory: "") +!2 = !{i32 7, !"Dwarf Version", i32 4} +!3 = !{i32 2, !"Debug Info Version", i32 3} +!4 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, type: !5, unit: !0) +!5 = !DISubroutineType(types: !6) +!6 = !{null} +!7 = !DILocalVariable(name: "arr", scope: !4, file: !1, line: 1, type: !8) +!8 = !DICompositeType(tag: DW_TAG_array_type, baseType: !9, size: 128, elements: !10) +!9 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char) +!10 = !{!11} +!11 = !DISubrange(count: 16) +!12 = !DILocation(line: 1, column: 1, scope: !4)