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

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|rejects-valid               |ice-on-valid-code

--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> ---
Bill wrote to J3:
> > • Type lockpointer does not have a potential subobject component of 
> > lock_type.
> "Type locktype has a component of type lock_type (obviously).  A subobject is
> just a part of an object that can be referenced (3.141), so the component is
> clearly a subobject of x.  So, could you explain how the word “potential” 
> makes
> the statement above true?"
>
> >     • In the LOCK statement, the lock variable is not a coarray
> > (though it is pointer-associated with a coarray).
>
> Having something pointer associated with a coarray does not make the pointer 
> itself a coarray.  Only being declared to be a coarray (having a codimension)
> makes something a coarray.

I concur.

Hence, that makes the code in comment 0 invalid – threre is still the issue
with the __tmp_type_… name which leaks through.


Additionally, motivated by the second code in comment 0, I wrote the following
program (four). It and the simplified 'three' resolve but then give an ICE at

0x5d9c7c convert(tree_node*, tree_node*)
        ../../repos/gcc/gcc/fortran/convert.c:119
0x969fba trans_associate_var
        ../../repos/gcc/gcc/fortran/trans-stmt.c:2139

! ---------- three --------
class(*), allocatable :: q[:]
allocate(integer :: q[*])

select type (q)
type is (integer)
q[1] = 5
end select
end

! ---------- four --------
use, intrinsic :: iso_fortran_env, only : lock_type

class(*), allocatable :: q[:]
allocate(lock_type :: q[*])

select type (q)
type is (lock_type)
lock(q)
end select
end

Reply via email to