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
This commit is contained in:
Tobias Schlüter 2005-04-29 02:13:08 +02:00
parent dd2778f346
commit 438e142878
4 changed files with 48 additions and 2 deletions

View File

@ -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 *.

View File

@ -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])

View File

@ -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.

View File

@ -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