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

--- Comment #7 from Steve Kargl <sgk at troutmask dot apl.washington.edu> ---
On Tue, Mar 21, 2023 at 12:27:58PM -0700, Steve Kargl wrote:
> 
> So, there is a chunk of code in decl.cc(4682-4689 or so),
> 
>   if (implicit_flag == 1)
>     {
>       if (matched_type && gfc_match_char (')') != MATCH_YES)
>         return MATCH_ERROR;
> 
>       return MATCH_YES;
>     }
> 
> causing the problem.  The implicit_flag == 1 conditional was
> added in 2004 (revision e5ddaa24beae) to check for 'IMPLICIT
> CHARACTER'.  The code block was updated in revision 0fb56814562a
> when 'TYPE(intrinsic-type-spec)' was added to gfortran.
> 
> I have no idea how this was suppose to work.

Well, I figured that out.  The code allows

'implicit real (a-z)'

to be parsed and compiled.  The downside is that it
blocks OP's code.  A simplied code

program testit
!  implicit real    (a-z)           ! Works
!  implicit real(4) (a-z)           ! Works
   implicit type(real(4)) (a-z)     ! Whoops.
   type(real(4)) :: quad
   if (kind(quad) /= 4) stop 1
end program testit

So, 'type(intrinsic-type-spec)' seems to be broken
when placed in 'implicit type(intrinsic-type-spec)'.

Reply via email to