diff mbox

fortran/66040 -- convert internal error into normal error

Message ID 20150515145759.GC82729@troutmask.apl.washington.edu
State New
Headers show

Commit Message

Steve Kargl May 15, 2015, 2:57 p.m. UTC
The attached patch has been regression tested on 
trunk.  OK to commit?

As shown by the testcase, each individual line of code 
is legal, but the ordering is incorrect.  This leads to
an ICE, which can be correctly reported as a user error.

2015-05-XX  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/66040
	* parse.c(verify_st_order): Replace a gfc_internal_error with your
	generic gfc_error.

2015-05-XX  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/66040
	* gfortran.dg/misplaced_statement.f90: New test.

Comments

FX Coudert May 15, 2015, 8:39 p.m. UTC | #1
> 2015-05-XX  Steven G. Kargl  <kargl@gcc.gnu.org>
> 
> 	PR fortran/66040
> 	* parse.c(verify_st_order): Replace a gfc_internal_error with your
> 	generic gfc_error.
> 
> 2015-05-XX  Steven G. Kargl  <kargl@gcc.gnu.org>
> 
> 	PR fortran/66040
> 	* gfortran.dg/misplaced_statement.f90: New test.

OK
diff mbox

Patch

Index: gcc/fortran/parse.c
===================================================================
--- gcc/fortran/parse.c	(revision 223094)
+++ gcc/fortran/parse.c	(working copy)
@@ -2425,8 +2425,7 @@  verify_st_order (st_state *p, gfc_statem
       break;
 
     default:
-      gfc_internal_error ("Unexpected %s statement in verify_st_order() at %C",
-			  gfc_ascii_statement (st));
+      return false;
     }
 
   /* All is well, record the statement in case we need it next time.  */
Index: gcc/testsuite/gfortran.dg/misplaced_statement.f90
===================================================================
--- gcc/testsuite/gfortran.dg/misplaced_statement.f90	(revision 0)
+++ gcc/testsuite/gfortran.dg/misplaced_statement.f90	(working copy)
@@ -0,0 +1,20 @@ 
+!{ dg-do compile }
+! PR fortran/66040
+!
+! Original code from Gerhard Steinmetz
+! <gerhard dot steinmetz dot fortran at t-online dot de>
+real function f1(x)
+   sequence          ! { dg-error "Unexpected SEQUENCE statement" }
+end function f1
+
+real function f2()
+   else              ! { dg-error "Unexpected ELSE statement" }
+end function f2
+
+real function f3()
+   block data        ! { dg-error "Unexpected BLOCK DATA statement" }
+end function f3
+
+real function f4()
+   program p         ! { dg-error "Unexpected PROGRAM statement" }
+end function f4