aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Schlüter <tobi@gcc.gnu.org>2005-04-29 02:13:08 +0200
committerTobias Schlüter <tobi@gcc.gnu.org>2005-04-29 02:13:08 +0200
commit438e142878a8971c6d94c431b87bb3d481d9a4f2 (patch)
tree2051a24ebabc1b52ffc476e56425d722d44bad2e
parentdd2778f346eeff349f8e5d86932e9f90e5ffa8a0 (diff)
downloadgcc-438e142878a8971c6d94c431b87bb3d481d9a4f2.zip
gcc-438e142878a8971c6d94c431b87bb3d481d9a4f2.tar.gz
gcc-438e142878a8971c6d94c431b87bb3d481d9a4f2.tar.bz2
gfortran.h (gfc_namespace): Add seen_implicit_none field.
fortran/ * gfortran.h (gfc_namespace): Add seen_implicit_none field. * symbol.c (gfc_set_implicit_none): Give error if there's a previous IMPLICIT NONE, set seen_implicit_none. (gfc_merge_new_implicit): Error if there's an IMPLICIT NONE statement. testsuite/ * gfortran.dg/implicit_4.f90: New test. From-SVN: r98952
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/symbol.c14
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/gfortran.dg/implicit_4.f9021
4 files changed, 48 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 8d8e000..7ef40e0 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2005-04-29 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de>
+
+ * gfortran.h (gfc_namespace): Add seen_implicit_none field.
+ * symbol.c (gfc_set_implicit_none): Give error if there's a previous
+ IMPLICIT NONE, set seen_implicit_none.
+ (gfc_merge_new_implicit): Error if there's an IMPLICIT NONE statement.
+
2005-04-28 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de>
* gfortran.h (gfc_gsymbol): Make name a const char *.
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index 6906b81..5fb9f53 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -106,6 +106,14 @@ gfc_set_implicit_none (void)
{
int i;
+ if (gfc_current_ns->seen_implicit_none)
+ {
+ gfc_error ("Duplicate IMPLICIT NONE statement at %C");
+ return;
+ }
+
+ gfc_current_ns->seen_implicit_none = 1;
+
for (i = 0; i < GFC_LETTERS; i++)
{
gfc_clear_ts (&gfc_current_ns->default_type[i]);
@@ -160,6 +168,12 @@ gfc_merge_new_implicit (gfc_typespec * ts)
{
int i;
+ if (gfc_current_ns->seen_implicit_none)
+ {
+ gfc_error ("Cannot specify IMPLICIT at %C after IMPLICIT NONE");
+ return FAILURE;
+ }
+
for (i = 0; i < GFC_LETTERS; i++)
{
if (new_flag[i])
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4135446..0ab6998 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,9 +1,13 @@
-2004-04-28 Bob Wilson <bob.wilson@acm.org>
+2005-04-29 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de>
+
+ * gfortran.dg/implicit_4.f90: New test.
+
+2005-04-28 Bob Wilson <bob.wilson@acm.org>
* lib/target-supports.exp (check_profiling_available): Return
false for xtensa-*-elf.
-2004-04-29 David Billinghurst (David.Billinghurst@riotinto.com)
+2005-04-29 David Billinghurst (David.Billinghurst@riotinto.com)
* lib/fortran-torture.exp (fortran-torture.exp): Catch
error if file cannot be deleted.
diff --git a/gcc/testsuite/gfortran.dg/implicit_4.f90 b/gcc/testsuite/gfortran.dg/implicit_4.f90
new file mode 100644
index 0000000..2e871b0
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/implicit_4.f90
@@ -0,0 +1,21 @@
+! { dg-do compile }
+! Verify error diagnosis for invalid combinations of IMPLICIT statements
+IMPLICIT NONE
+IMPLICIT NONE ! { dg-error "Duplicate" }
+END
+
+SUBROUTINE a
+IMPLICIT REAL(b-j) ! { dg-error "cannot follow" }
+implicit none ! { dg-error "cannot follow" }
+END SUBROUTINE a
+
+subroutine b
+implicit none
+implicit real(g-k) ! { dg-error "Cannot specify" }
+end subroutine b
+
+subroutine c
+implicit real(a-b)
+implicit integer (b-c) ! { dg-error "already" }
+implicit real(d-f), complex(f-g) ! { dg-error "already" }
+end subroutine c