aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Schlüter <tobi@gcc.gnu.org>2005-05-09 20:26:20 +0200
committerTobias Schlüter <tobi@gcc.gnu.org>2005-05-09 20:26:20 +0200
commit7f42f27f33ae26a2be1c45e919ff25dbc62a3b36 (patch)
tree6cbc92e1a470f9ed0e5cfee87f772eefa3d3c7a6 /gcc
parent8d933e3147616e970f36e1b01d2b389ecc87b15c (diff)
downloadgcc-7f42f27f33ae26a2be1c45e919ff25dbc62a3b36.zip
gcc-7f42f27f33ae26a2be1c45e919ff25dbc62a3b36.tar.gz
gcc-7f42f27f33ae26a2be1c45e919ff25dbc62a3b36.tar.bz2
match.c (gfc_match_return): Only require space after keyword when it is obligatory.
fortran/ * match.c (gfc_match_return): Only require space after keyword when it is obligatory. Only give stdwarn to after matching is successful. * dump-parse-tree.c (gfc_show_symbol): Deal with alternate returns. testsuite/ * gfortran.dg/return_1.f90: New test. From-SVN: r99467
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/dump-parse-tree.c7
-rw-r--r--gcc/fortran/match.c26
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/return_1.f906
5 files changed, 42 insertions, 9 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 679729b..1210aab 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2005-05-09 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de>
+
+ * match.c (gfc_match_return): Only require space after keyword when
+ it is obligatory. Only give stdwarn to after matching is successful.
+ * dump-parse-tree.c (gfc_show_symbol): Deal with alternate returns.
+
2005-05-08 Kazu Hirata <kazu@cs.umass.edu>
* intrinsic.texi: Fix typos.
diff --git a/gcc/fortran/dump-parse-tree.c b/gcc/fortran/dump-parse-tree.c
index 61e5568..70f91e4 100644
--- a/gcc/fortran/dump-parse-tree.c
+++ b/gcc/fortran/dump-parse-tree.c
@@ -665,7 +665,12 @@ gfc_show_symbol (gfc_symbol * sym)
gfc_status ("Formal arglist:");
for (formal = sym->formal; formal; formal = formal->next)
- gfc_status (" %s", formal->sym->name);
+ {
+ if (formal->sym != NULL)
+ gfc_status (" %s", formal->sym->name);
+ else
+ gfc_status (" [Alt Return]");
+ }
}
if (sym->formal_ns)
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index d81686b..741e1a3 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -1983,12 +1983,7 @@ gfc_match_return (void)
gfc_expr *e;
match m;
gfc_compile_state s;
-
- gfc_enclosing_unit (&s);
- if (s == COMP_PROGRAM
- && gfc_notify_std (GFC_STD_GNU, "Extension: RETURN statement in "
- "main program at %C") == FAILURE)
- return MATCH_ERROR;
+ int c;
e = NULL;
if (gfc_match_eos () == MATCH_YES)
@@ -2001,7 +1996,18 @@ gfc_match_return (void)
goto cleanup;
}
- m = gfc_match ("% %e%t", &e);
+ if (gfc_current_form == FORM_FREE)
+ {
+ /* The following are valid, so we can't require a blank after the
+ RETURN keyword:
+ return+1
+ return(1) */
+ c = gfc_peek_char ();
+ if (ISALPHA (c) || ISDIGIT (c))
+ return MATCH_NO;
+ }
+
+ m = gfc_match (" %e%t", &e);
if (m == MATCH_YES)
goto done;
if (m == MATCH_ERROR)
@@ -2014,6 +2020,12 @@ cleanup:
return MATCH_ERROR;
done:
+ gfc_enclosing_unit (&s);
+ if (s == COMP_PROGRAM
+ && gfc_notify_std (GFC_STD_GNU, "Extension: RETURN statement in "
+ "main program at %C") == FAILURE)
+ return MATCH_ERROR;
+
new_st.op = EXEC_RETURN;
new_st.expr = e;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 67d948a..4bd3645 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,4 +1,8 @@
-2005-05-06 J"orn Rennecke <joern.rennecke@st.com>
+2005-05-09 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de>
+
+ * gfortran.dg/return_1.f90: New test.
+
+2005-05-09 J"orn Rennecke <joern.rennecke@st.com>
* gcc.dg/pr15784-3.c: Add -fno-finite-math-only option.
diff --git a/gcc/testsuite/gfortran.dg/return_1.f90 b/gcc/testsuite/gfortran.dg/return_1.f90
new file mode 100644
index 0000000..1358af2
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/return_1.f90
@@ -0,0 +1,6 @@
+! { dg-do compile }
+! Test cases where no blank is required after RETURN
+subroutine sub(*)
+return(1)
+return1 ! { dg-error }
+end subroutine