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

--- Comment #5 from kargls at comcast dot net ---
(In reply to kargls from comment #4)
> (In reply to Paul Thomas from comment #3)
> > (In reply to G. Steinmetz from comment #1)
> > > This is the working version :
> > > 
> > Indeed!
> > 
> > 15-branch now emits:
> > pr103508.f90:12:9:
> > 
> >    12 |       end
> >       |         1
> > Error: END BLOCK statement expected at (1)
> > (null):0: confused by earlier errors, bailing out
> > 
> > whereas mainline emits the error and goes into an infinite loop.
> > 
> > Oddly, this non-PDT version does the same:
> > program p
> >    type t
> >       integer :: n = 1
> >       character(3) :: c
> >    end type
> >    block
> >       block
> >          type(t) :: x
> >          x%c = 'abc'
> >          print *, len(x%c)
> >       end
> >    end
> > end
> 
> The above compiles if one uses labeled block statements.
> 
> % cat oi.f90
> program p
>    type t
>       integer :: n = 1
>       character(3) :: c
>    end type
>    one: block
>       two: block
>          type(t) :: x
>          x%c = 'abc'
>          print *, len(x%c)
>       end block two
>    end block one
> end
> 
> % gfcx -o z oi.f90 && ./z
>            3
> 
> Likely, getting confused by the nested unlabeled construct.

Gerhard's example with PDT also works with labeled block constructs.

Reply via email to