From 09e87839d4255f7a9fd1c2531efacd7b8b6f33a8 Mon Sep 17 00:00:00 2001 From: Asher Langton Date: Mon, 24 Oct 2005 14:50:18 +0000 Subject: [PATCH] Commit for Asher Langton fortran/ * decl.c (gfc_match_save): Changed duplicate SAVE errors to warnings in the absence of strict standard conformance * symbol.c (gfc_add_save): Same. testsuite/ * gfortran.dg/dup_save_1.f90: New test. * gfortran.dg/dup_save_2.f90: New test. From-SVN: r105850 --- gcc/fortran/ChangeLog | 6 +++ gcc/fortran/decl.c | 15 ++++--- gcc/fortran/symbol.c | 7 ++- gcc/testsuite/ChangeLog | 9 +++- gcc/testsuite/gfortran.dg/dup_save_1.f90 | 57 ++++++++++++++++++++++++ gcc/testsuite/gfortran.dg/dup_save_2.f90 | 57 ++++++++++++++++++++++++ 6 files changed, 141 insertions(+), 10 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/dup_save_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/dup_save_2.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 5cb021b391f..a019a1b2512 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2005-10-24 Asher Langton + + * decl.c (gfc_match_save): Changed duplicate SAVE errors to + warnings in the absence of strict standard conformance + * symbol.c (gfc_add_save): Same. + 2005-10-24 Francois-Xavier Coudert PR fortran/15586 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 69c0fc87162..2ecd143190b 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -3271,10 +3271,11 @@ gfc_match_save (void) { if (gfc_current_ns->seen_save) { - gfc_error ("Blanket SAVE statement at %C follows previous " - "SAVE statement"); - - return MATCH_ERROR; + if (gfc_notify_std (GFC_STD_LEGACY, + "Blanket SAVE statement at %C follows previous " + "SAVE statement") + == FAILURE) + return MATCH_ERROR; } gfc_current_ns->save_all = gfc_current_ns->seen_save = 1; @@ -3283,8 +3284,10 @@ gfc_match_save (void) if (gfc_current_ns->save_all) { - gfc_error ("SAVE statement at %C follows blanket SAVE statement"); - return MATCH_ERROR; + if (gfc_notify_std (GFC_STD_LEGACY, + "SAVE statement at %C follows blanket SAVE statement") + == FAILURE) + return MATCH_ERROR; } gfc_match (" ::"); diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index 98ce66fef98..c1221eb72a5 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -681,8 +681,11 @@ gfc_add_save (symbol_attribute * attr, const char *name, locus * where) if (attr->save) { - duplicate_attr ("SAVE", where); - return FAILURE; + if (gfc_notify_std (GFC_STD_LEGACY, + "Duplicate SAVE attribute specified at %L", + where) + == FAILURE) + return FAILURE; } attr->save = 1; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3f575da056d..e8f970349f6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-10-24 Asher Langton + + * gfortran.dg/dup_save_1.f90: New test. + * gfortran.dg/dup_save_2.f90: New test. + 2005-10-24 Paul Brook PR 24107 @@ -6,8 +11,8 @@ 2005-10-23 Jerry DeLisle - PR libgfortran/24489 - * gfortran.dg/pr24489.f90: New test. + PR libgfortran/24489 + * gfortran.dg/pr24489.f90: New test. 2005-10-23 Andrew Pinski diff --git a/gcc/testsuite/gfortran.dg/dup_save_1.f90 b/gcc/testsuite/gfortran.dg/dup_save_1.f90 new file mode 100644 index 00000000000..d7ce8e127e6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dup_save_1.f90 @@ -0,0 +1,57 @@ +! { dg-do run } +program save_1 + implicit none + integer i + integer foo1, foo2, foo3, foo4 + do i=1,10 + if (foo1().ne.i) then + call abort + end if + if (foo2().ne.i) then + call abort + end if + if (foo3().ne.i) then + call abort + end if + if (foo4().ne.i) then + call abort + end if + end do +end program save_1 + +integer function foo1 + integer j + save + save ! { dg-warning "Blanket SAVE" } + data j /0/ + j = j + 1 + foo1 = j +end function foo1 + +integer function foo2 + integer j + save j + save j ! { dg-warning "Duplicate SAVE" } + data j /0/ + j = j + 1 + foo2 = j +end function foo2 + +integer function foo3 + integer j ! { dg-warning "Duplicate SAVE" } + save + save j ! { dg-warning "SAVE statement" } + data j /0/ + j = j + 1 + foo3 = j +end function foo3 + +integer function foo4 + integer j ! { dg-warning "Duplicate SAVE" } + save j + save + data j /0/ + j = j + 1 + foo4 = j +end function foo4 + diff --git a/gcc/testsuite/gfortran.dg/dup_save_2.f90 b/gcc/testsuite/gfortran.dg/dup_save_2.f90 new file mode 100644 index 00000000000..1c0bfdbe554 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dup_save_2.f90 @@ -0,0 +1,57 @@ +! { dg-do compile } +! { dg-options "-std=f95" } +program save_2 + implicit none + integer i + integer foo1, foo2, foo3, foo4 + do i=1,10 + if (foo1().ne.i) then + call abort + end if + if (foo2().ne.i) then + call abort + end if + if (foo3().ne.i) then + call abort + end if + if (foo4().ne.i) then + call abort + end if + end do +end program save_2 + +integer function foo1 + integer j + save + save ! { dg-error "Blanket SAVE" } + data j /0/ + j = j + 1 + foo1 = j +end function foo1 + +integer function foo2 + integer j + save j + save j ! { dg-error "Duplicate SAVE" } + data j /0/ + j = j + 1 + foo2 = j +end function foo2 + +integer function foo3 + integer j + save + save j ! { dg-error "SAVE statement" } + data j /0/ + j = j + 1 + foo3 = j +end function foo3 + +integer function foo4 + integer j ! { dg-error "Duplicate SAVE" } + save j + save + data j /0/ + j = j + 1 + foo4 = j +end function foo4