I've filed a report, and immediately it was marked as a duplicate
of https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101826

Kazuyoshi

From: Steve Kargl <s...@troutmask.apl.washington.edu>
Subject: Re: ptype on deferred-length character arrays return empty(?) result
Date: Mon, 28 Oct 2024 11:46:13 -0700

> On Mon, Oct 28, 2024 at 06:00:18PM +0900, Kazuyoshi Furutaka wrote:
>> Dear gfortran experts...
>> 
>> The attached program runs OK, but `ptype`ing using gdb
>> on the deferred-length character array returns empty(?)
>> result, as the following (the results for integer and
>> real arrays are correct ):
>> 
>> (gdb) ptype intarr
>> type = integer(kind=4), allocatable (8)
>> (gdb) ptype realarr
>> type = real(kind=8), allocatable (8)
>> (gdb) ptype chararr
>> type = Type 
>> End Type 
>> 
>> Is this a bug?
>> 
> 
> Likely, yes.  Not sure if it's a GCC or GDB bug.  File a bug report 
> in gcc's bugzilla.
> 
> Dynamic allocation of a scalar deferred-length variable works.
> 
>   program arrays
>     character(len=:), allocatable :: chararr
>     chararr="ahoaho"
>     print *, chararr
>   end program arrays
> 
> Breakpoint 1, arrays () at a.f90:4
> 4         chararr="ahoaho"
> (gdb) n
> 5         print *, chararr
> (gdb) p chararr
> $1 = (PTR TO -> ( character*(*) )) 0x201008020
> (gdb) p *chararr
> $2 = 'ahoaho'
> 
> Static memory works.
> 
>   program arrays
>     character(len=6) :: chararr(2)
>     chararr="ahoaho"
>     print *, chararr
>   end program arrays
> Breakpoint 1, arrays () at a.f90:18
> 18        chararr="ahoaho"
> (gdb) n
> 19        print *, chararr
> (gdb) p chararr
> $1 = ('ahoaho', 'ahoaho')
> (gdb) p &chararr
> $2 = (PTR TO -> ( character*6 (2) )) 0x7fffffffe614
> 
> Dynamic allocation of an array of fixed length strings works.
> 
>   program arrays
>     character(len=6), allocatable :: chararr(:)
>     allocate(chararr(2))
>     chararr="ahoaho"
>     print *, chararr
>   end program arrays
> 
> Breakpoint 1, arrays () at a.f90:32
> 32        chararr="ahoaho"
> (gdb) n
> 33        print *, chararr
> (gdb) p chararr
> $1 = ('ahoaho', 'ahoaho')
> (gdb) p &chararr
> $2 = (PTR TO -> ( character*6, allocatable (2) )) 0x201016000
> 
> Your testcase of allocation of an array of deferred-length string strings.
> 
>   program arrays
>     character(len=:), allocatable :: chararr(:)
>     allocate(character(len=6) :: chararr(2))
>     chararr="ahoaho"
>     print *, chararr
>   end program arrays
> 
> Breakpoint 1, arrays () at a.f90:53
> 53        chararr="ahoaho"
> (gdb) n
> 54        print *, chararr
> (gdb) p chararr
> $1 = <incomplete type>
> (gdb) p &chararr
> $2 = (PTR TO -> ( Type  )) 0x7fffffffe5b0
> 
> 
> -- 
> Steve

Reply via email to