Bug 41198 - gfortran 4.5 does not produce "Warning: Deleted feature: GOTO at (1) jumps to END of construct at (2)"
Summary: gfortran 4.5 does not produce "Warning: Deleted feature: GOTO at (1) jumps to...
Status: RESOLVED WONTFIX
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.5.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-08-31 14:26 UTC by Michael Richmond
Modified: 2010-01-16 23:25 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Richmond 2009-08-31 14:26:16 UTC
The following program produces a warning message in gfortran 4.3 and 4.4, but not 4.5. I believe it produced a warning message in early versions of 4.5.

PROGRAM test
IF(.TRUE.) THEN
  GOTO 50
50 ENDIF
END PROGRAM test
Comment 1 kargls 2009-08-31 15:43:13 UTC
(In reply to comment #0)
> The following program produces a warning message in gfortran 4.3 and 4.4, but
> not 4.5. I believe it produced a warning message in early versions of 4.5.
> 
> PROGRAM test
> IF(.TRUE.) THEN
>   GOTO 50
> 50 ENDIF
> END PROGRAM test
> 

I believe that 4.3 and 4.4 had a bug.  Gfortran 4.5 is doing the right
thing.  The deleted feature is 

  (2) Branching to an END IF statement from outside its block.
      In Fortran 77, and for consistency also in Fortran 90, it was
      possible to branch to an END IF statement from outside the IF
      construct; this has been deleted.  A similar result can be
      achieved by branching to a CONTINUE statement that is immediately
      after the END IF statement.

Your GOTO 50 is inside the its block.  I also believe that there was
a long thread in fortran@gcc about this (non)feature.  I'll see if 
I can find it.

Comment 2 Michael Richmond 2009-08-31 18:00:57 UTC
If I move "GOTO 50" outside of the block, gfortran 4.5 correctly gives the message "Warning: Label at (1) is not in the same block as the GOTO statement at (2)", but gfortran 4.3 and 4.4 give no message.
Comment 3 Mikael Morin 2009-08-31 18:41:45 UTC
(In reply to comment #1)
> I believe that 4.3 and 4.4 had a bug. 
bug #38507 probably
Comment 4 kargls 2009-08-31 18:58:10 UTC
(In reply to comment #2)
> If I move "GOTO 50" outside of the block, gfortran 4.5 correctly gives the
> message "Warning: Label at (1) is not in the same block as the GOTO statement
> at (2)", but gfortran 4.3 and 4.4 give no message.
> 

As I said, 4.3 and 4.4 had/have a bug.  The PR that fixed this problem
is http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38507
The patch was committed to trunk on 2009-03-29.  Judging from the release
date of 4.4.0, it was deemed too close to release to do a backport.

A search of fortran@ finds the first analysis of the problem here:

http://gcc.gnu.org/ml/fortran/2008-12/msg00355.html

Here's my first attempt at fixing the problem before Tobias Schlueter
took over the PR.
Comment 5 Daniel Franke 2009-12-04 23:37:51 UTC
PR38507 is closed, no backport to 4.4 seems to be planned.
Shouldn't this PR be closed as INVALID?
Comment 6 kargls 2010-01-16 23:25:25 UTC
The (non?)issue was fixed on trunk in March 2009.  Since this
issues concerns only a warning and generating wrong code is
not possible, I'm closing this with WONTFIX under the 'too many
bugs too fix, too few hands to do the work' excuse.