GNU Fortran (GCC) 4.5.0 20091003 (experimental)

  subroutine f(s)
  character*3 s
  s = s
  end
  call f ('foo')
  end

gdb -nx -ex 'b 3' -ex r -ex 'p s' ./file
->
Cannot access memory at address 0x6f6f66

 <2><4a>: Abbrev Number: 3 (DW_TAG_formal_parameter)
    <4b>   DW_AT_name        : s        
    <4f>   DW_AT_type        : <0x64>   
    <53>   DW_AT_location    : 4 byte block: 75 0 6 6   (DW_OP_breg5: 0;
DW_OP_deref; DW_OP_deref)

If I patch those two DW_OP_deref -> DW_OP_nop then GDB prints:
$1 = 'foo'

gfortran -o 1 1.f90 -Wall -g -O1 

currently:
.LC0:
        .ascii  "foo"
...
        movl    $.LC0, %edi
...
        .byte   0x4     # DW_AT_location
        .byte   0x75    # DW_OP_breg5
        .sleb128 0
        .byte   0x6     # DW_OP_deref
        .byte   0x6     # DW_OP_deref


-- 
           Summary: gfortran -O code excessive DW_OP_deref's
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: debug
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jan dot kratochvil at redhat dot com
GCC target triplet: x86_64-unknown-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41558

Reply via email to