[llvm] r223981 - A fix for PR21176.

Eric Christopher echristo at gmail.com
Wed Dec 10 15:28:05 PST 2014


On Wed Dec 10 2014 at 3:22:55 PM Ekaterina Romanova <
katya_romanova at playstation.sony.com> wrote:

> Author: kromanova
> Date: Wed Dec 10 17:19:56 2014
> New Revision: 223981
>
> URL: http://llvm.org/viewvc/llvm-project?rev=223981&view=rev
> Log:
> A fix for PR21176.
>
> DW_OP_const <const> doesn't describe a constant value, but a value at a
> constant address.
> The proper way to describe a constant value is DW_OP_constu <const>,
> DW_OP_stack_value.
>
> Added DW_OP_stack_value to the stack.
>
> -This line, and those below, will be ignored--
>
> M    lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> A    test/DebugInfo/incorrect-variable-debugloc1.ll
>
> Added:
>     llvm/trunk/test/DebugInfo/incorrect-variable-debugloc1.ll
> Modified:
>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
> CodeGen/AsmPrinter/DwarfDebug.cpp?rev=223981&r1=223980&r2=223981&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Wed Dec 10 17:19:56
> 2014
> @@ -1722,6 +1722,8 @@ void DwarfDebug::emitDebugLocValue(ByteS
>        Streamer.EmitInt8(dwarf::DW_OP_constu, "DW_OP_constu");
>        Streamer.EmitULEB128(Value.getInt());
>      }
> +   if (getDwarfVersion() >= 4)
> +      Streamer.EmitInt8(dwarf::DW_OP_stack_value,


Just a small bit of feedback:

Can you add a comment as to why this is here? We all know at the moment and
the comment is in the testcase, but I like to know from reading the code if
possible.

Thanks for the fix!

-eric


> "DW_OP_stack_value");
>    } else if (Value.isLocation()) {
>      MachineLocation Loc = Value.getLoc();
>      DIExpression Expr = Value.getExpression();
>
> Added: llvm/trunk/test/DebugInfo/incorrect-variable-debugloc1.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/
> DebugInfo/incorrect-variable-debugloc1.ll?rev=223981&view=auto
> ============================================================
> ==================
> --- llvm/trunk/test/DebugInfo/incorrect-variable-debugloc1.ll (added)
> +++ llvm/trunk/test/DebugInfo/incorrect-variable-debugloc1.ll Wed Dec 10
> 17:19:56 2014
> @@ -0,0 +1,72 @@
> +; REQUIRES: object-emission
> +; RUN: %llc_dwarf -O2  -dwarf-version 2 -filetype=obj < %s |
> llvm-dwarfdump - | FileCheck %s  --check-prefix=DWARF23
> +; RUN: %llc_dwarf -O2  -dwarf-version 3 -filetype=obj < %s |
> llvm-dwarfdump - | FileCheck %s  --check-prefix=DWARF23
> +; RUN: %llc_dwarf -O2  -dwarf-version 4 -filetype=obj < %s |
> llvm-dwarfdump - | FileCheck %s  --check-prefix=DWARF4
> +
> +; This is a test for PR21176.
> +; DW_OP_const <const> doesn't describe a constant value, but a value at a
> constant address.
> +; The proper way to describe a constant value is DW_OP_constu <const>,
> DW_OP_stack_value.
> +
> +; Generated with clang -S -emit-llvm -g -O2 test.cpp
> +
> +; extern int func();
> +;
> +; int main()
> +; {
> +;   volatile int c = 13;
> +;   c = func();
> +;   return c;
> +; }
> +
> +; DWARF23: Location description: 10 0d {{$}}
> +; DWARF4: Location description: 10 0d 9f
> +
> +; Function Attrs: uwtable
> +define i32 @main() #0 {
> +entry:
> +  %c = alloca i32, align 4
> +  tail call void @llvm.dbg.value(metadata !15, i64 0, metadata !10,
> metadata !16), !dbg !17
> +  store volatile i32 13, i32* %c, align 4, !dbg !18
> +  %call = tail call i32 @_Z4funcv(), !dbg !19
> +  tail call void @llvm.dbg.value(metadata !{i32 %call}, i64 0, metadata
> !10, metadata !16), !dbg !17
> +  store volatile i32 %call, i32* %c, align 4, !dbg !19
> +  tail call void @llvm.dbg.value(metadata !{i32* %c}, i64 0, metadata
> !10, metadata !16), !dbg !17
> +  %c.0.c.0. = load volatile i32* %c, align 4, !dbg !20
> +  ret i32 %c.0.c.0., !dbg !20
> +}
> +
> +declare i32 @_Z4funcv() #1
> +
> +; Function Attrs: nounwind readnone
> +declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #2
> +
> +attributes #0 = { uwtable "less-precise-fpmad"="false"
> "no-frame-pointer-elim"="false" "no-infs-fp-math"="false"
> "no-nans-fp-math"="false" "stack-protector-buffer-size"="8"
> "unsafe-fp-math"="false" "use-soft-float"="false" }
> +attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false"
> "no-infs-fp-math"="false" "no-nans-fp-math"="false"
> "stack-protector-buffer-size"="8" "unsafe-fp-math"="false"
> "use-soft-float"="false" }
> +attributes #2 = { nounwind readnone }
> +
> +!llvm.dbg.cu = !{!0}
> +!llvm.module.flags = !{!12, !13}
> +!llvm.ident = !{!14}
> +
> +!0 = metadata !{metadata !"0x11\004\00clang version 3.6.0 (trunk
> 223522)\001\00\000\00\001", metadata !1, metadata !2, metadata !2, metadata
> !3, metadata !2, metadata !2} ; [ DW_TAG_compile_unit ]
> [/home/kromanova/ngh/ToT_latest/llvm/test/DebugInfo/test.cpp]
> [DW_LANG_C_plus_plus]
> +!1 = metadata !{metadata !"test.cpp", metadata !"/home/kromanova/ngh/ToT_
> latest/llvm/test/DebugInfo"}
> +!2 = metadata !{}
> +!3 = metadata !{metadata !4}
> +!4 = metadata !{metadata !"0x2e\00main\00main\00\003\
> 000\001\000\000\00256\001\004", metadata !1, metadata !5, metadata !6,
> null, i32 ()* @main, null, null, metadata !9} ; [ DW_TAG_subprogram ] [line
> 3] [def] [scope 4] [main]
> +!5 = metadata !{metadata !"0x29", metadata !1}    ; [ DW_TAG_file_type ]
> [/home/kromanova/ngh/ToT_latest/llvm/test/DebugInfo/test.cpp]
> +!6 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", null, null,
> null, metadata !7, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0,
> size 0, align 0, offset 0] [from ]
> +!7 = metadata !{metadata !8}
> +!8 = metadata !{metadata !"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]
> +!9 = metadata !{metadata !10}
> +!10 = metadata !{metadata !"0x100\00c\005\000", metadata !4, metadata !5,
> metadata !11} ; [ DW_TAG_auto_variable ] [c] [line 5]
> +!11 = metadata !{metadata !"0x35\00\000\000\000\000\000", null, null,
> metadata !8} ; [ DW_TAG_volatile_type ] [line 0, size 0, align 0, offset 0]
> [from int]
> +!12 = metadata !{i32 2, metadata !"Dwarf Version", i32 2}
> +!13 = metadata !{i32 2, metadata !"Debug Info Version", i32 2}
> +!14 = metadata !{metadata !"clang version 3.6.0 (trunk 223522)"}
> +!15 = metadata !{i32 13}
> +!16 = metadata !{metadata !"0x102"}               ; [ DW_TAG_expression ]
> +!17 = metadata !{i32 5, i32 16, metadata !4, null}
> +!18 = metadata !{i32 5, i32 3, metadata !4, null}
> +!19 = metadata !{i32 6, i32 7, metadata !4, null}
> +!20 = metadata !{i32 7, i32 3, metadata !4, null}
> +
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141210/96efe363/attachment.html>


More information about the llvm-commits mailing list