https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85786

--- Comment #11 from Angus Gibson <angus at agibson dot me> ---
Apologies if this is unrelated to the issue at hand (I don't quite understand
how everything is inter-related yet), but maybe it helps. First up, here's what
valgrind says about the segfault:

...
loc(cs%v(2)%p) = 101158160
==4100== Use of uninitialised value of size 8
==4100==    at 0x109820: query_ptr.3790 (test_verb.f90:49)
==4100==    by 0x109FE3: MAIN__ (test_verb.f90:27)
==4100==    by 0x10A108: main (test_verb.f90:27)
==4100==
==4100== Invalid read of size 8
==4100==    at 0x109820: query_ptr.3790 (test_verb.f90:49)
==4100==    by 0x109FE3: MAIN__ (test_verb.f90:27)
==4100==    by 0x10A108: main (test_verb.f90:27)
==4100==  Address 0x20050786e0 is not stack'd, malloc'd or (recently) free'd
==4100==

And with an even simpler example, gdb encounters an internal error (it's
actually very easy to trigger with pointers).

    program test
      type t
         real, dimension(:,:), pointer :: p => null()
      end type t
      real, dimension(2,2), target :: e
      type(t), pointer :: cs
      allocate(cs)
      cs%p => e
      e = 42
      print *, 'done'
    end program test

In gdb:

    (gdb) info locals
    cs = 0x55555575a850
    e = (( 42, 42) ( 42, 42) )
    (gdb) print cs
    $1 = (PTR TO -> ( Type t )) 0x55555575a850
    (gdb) print cs%p
    value.c:3116: internal-error: value* value_primitive_field(value*, LONGEST,
int, type*): Assertion `PROP_CONST == TYPE_DATA_LOCATION_KIND (type)' failed.

Reply via email to