From 68a230443864dcefe9e368997d65e1d1777d6fc8 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Sat, 15 Mar 2014 11:53:04 +0100 Subject: [PATCH] re PR fortran/55207 ([F08] Variables declared in the main program should implicitly get the SAVE attribute) 2014-03-15 Janus Weil PR fortran/55207 * decl.c (match_attr_spec): Variables in the main program implicitly get the SAVE attribute in Fortran 2008. 2014-03-15 Janus Weil PR fortran/55207 * gfortran.dg/assumed_rank_7.f90: Explicitly deallocate variables. * gfortran.dg/c_ptr_tests_16.f90: Put into subroutine. * gfortran.dg/inline_sum_bounds_check_1.f90: Add -Wno-aggressive-loop-optimizations and remove an unused variable. * gfortran.dg/intent_optimize_1.f90: Put into subroutine. * gfortran.dg/pointer_init_9.f90: New. * gfortran.dg/volatile4.f90: Put into subroutine. * gfortran.dg/volatile6.f90: Ditto. From-SVN: r208590 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/decl.c | 8 +++++--- gcc/testsuite/ChangeLog | 12 ++++++++++++ gcc/testsuite/gfortran.dg/assumed_rank_7.f90 | 2 ++ gcc/testsuite/gfortran.dg/c_ptr_tests_16.f90 | 4 ++-- .../gfortran.dg/inline_sum_bounds_check_1.f90 | 4 ++-- gcc/testsuite/gfortran.dg/intent_optimize_1.f90 | 5 ++++- gcc/testsuite/gfortran.dg/pointer_init_9.f90 | 14 ++++++++++++++ gcc/testsuite/gfortran.dg/volatile4.f90 | 2 ++ gcc/testsuite/gfortran.dg/volatile6.f90 | 2 ++ 10 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pointer_init_9.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index ba4bdf05d98..ce4063edd06 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2014-03-15 Janus Weil + + PR fortran/55207 + * decl.c (match_attr_spec): Variables in the main program implicitly + get the SAVE attribute in Fortran 2008. + 2014-03-14 Mikael Morin PR fortran/60392 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 2d405fe9838..c7f5eed3682 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -3827,9 +3827,11 @@ match_attr_spec (void) } } - /* Since Fortran 2008 module variables implicitly have the SAVE attribute. */ - if (gfc_current_state () == COMP_MODULE && !current_attr.save - && (gfc_option.allow_std & GFC_STD_F2008) != 0) + /* Since Fortran 2008, variables declared in a MODULE or PROGRAM + implicitly have the SAVE attribute. */ + if ((gfc_current_state () == COMP_MODULE + || gfc_current_state () == COMP_PROGRAM) + && !current_attr.save && (gfc_option.allow_std & GFC_STD_F2008) != 0) current_attr.save = SAVE_IMPLICIT; colon_seen = 1; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 19557d8ad7d..d444e4288cc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,15 @@ +2014-03-15 Janus Weil + + PR fortran/55207 + * gfortran.dg/assumed_rank_7.f90: Explicitly deallocate variables. + * gfortran.dg/c_ptr_tests_16.f90: Put into subroutine. + * gfortran.dg/inline_sum_bounds_check_1.f90: Add + -Wno-aggressive-loop-optimizations and remove an unused variable. + * gfortran.dg/intent_optimize_1.f90: Put into subroutine. + * gfortran.dg/pointer_init_9.f90: New. + * gfortran.dg/volatile4.f90: Put into subroutine. + * gfortran.dg/volatile6.f90: Ditto. + 2014-03-14 Mikael Morin PR fortran/60392 diff --git a/gcc/testsuite/gfortran.dg/assumed_rank_7.f90 b/gcc/testsuite/gfortran.dg/assumed_rank_7.f90 index f9ff3b9aa42..a5dc8157a4f 100644 --- a/gcc/testsuite/gfortran.dg/assumed_rank_7.f90 +++ b/gcc/testsuite/gfortran.dg/assumed_rank_7.f90 @@ -24,6 +24,8 @@ call bar(ac) call bar(at) if (i /= 12) call abort() +deallocate(ac,at) + contains subroutine bar(x) type(t) :: x(..) diff --git a/gcc/testsuite/gfortran.dg/c_ptr_tests_16.f90 b/gcc/testsuite/gfortran.dg/c_ptr_tests_16.f90 index 8855d62abaa..3602428a0ac 100644 --- a/gcc/testsuite/gfortran.dg/c_ptr_tests_16.f90 +++ b/gcc/testsuite/gfortran.dg/c_ptr_tests_16.f90 @@ -3,7 +3,7 @@ ! ! PR fortran/46974 -program test +subroutine test use ISO_C_BINDING implicit none type(c_ptr) :: m @@ -15,7 +15,7 @@ program test .and. int(z'41424345') /= a & .and. int(z'4142434500000000',kind=8) /= a) & call i_do_not_exist() -end program test +end subroutine ! Examples contributed by Steve Kargl and James Van Buskirk diff --git a/gcc/testsuite/gfortran.dg/inline_sum_bounds_check_1.f90 b/gcc/testsuite/gfortran.dg/inline_sum_bounds_check_1.f90 index 39984683d4b..579e936624d 100644 --- a/gcc/testsuite/gfortran.dg/inline_sum_bounds_check_1.f90 +++ b/gcc/testsuite/gfortran.dg/inline_sum_bounds_check_1.f90 @@ -1,9 +1,9 @@ ! { dg-do run } -! { dg-options "-fbounds-check" } +! { dg-options "-fbounds-check -Wno-aggressive-loop-optimizations" } integer, parameter :: nx = 3, ny = 4 - integer :: i, j, too_big + integer :: i, too_big integer, parameter, dimension(nx,ny) :: p = & reshape((/ (i*i, i=1,size(p)) /), shape(p)) diff --git a/gcc/testsuite/gfortran.dg/intent_optimize_1.f90 b/gcc/testsuite/gfortran.dg/intent_optimize_1.f90 index dbe0128d7f0..580db4284f9 100644 --- a/gcc/testsuite/gfortran.dg/intent_optimize_1.f90 +++ b/gcc/testsuite/gfortran.dg/intent_optimize_1.f90 @@ -6,7 +6,10 @@ ! honoured. ! ! PR fortran/43665 -! + + +subroutine test + interface subroutine foo(x) integer, intent(in) :: x diff --git a/gcc/testsuite/gfortran.dg/pointer_init_9.f90 b/gcc/testsuite/gfortran.dg/pointer_init_9.f90 new file mode 100644 index 00000000000..1b47135f627 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pointer_init_9.f90 @@ -0,0 +1,14 @@ +! { dg-do run } +! +! PR 55207: [F08] Variables declared in the main program should implicitly get the SAVE attribute +! +! Contributed by Tobias Burnus + + type :: c + end type c + + type(c), target :: x + class(c), pointer :: px => x + + if (.not. associated(px)) call abort() +end diff --git a/gcc/testsuite/gfortran.dg/volatile4.f90 b/gcc/testsuite/gfortran.dg/volatile4.f90 index f58a873dfb4..4ad09dcb5d7 100644 --- a/gcc/testsuite/gfortran.dg/volatile4.f90 +++ b/gcc/testsuite/gfortran.dg/volatile4.f90 @@ -2,6 +2,8 @@ ! { dg-options "-O2 -fdump-tree-optimized" } ! Tests whether volatile really works ! PR fortran/29601 + +subroutine sub logical, volatile :: t1 logical :: t2 integer :: i diff --git a/gcc/testsuite/gfortran.dg/volatile6.f90 b/gcc/testsuite/gfortran.dg/volatile6.f90 index e42e3de3acb..439183a1794 100644 --- a/gcc/testsuite/gfortran.dg/volatile6.f90 +++ b/gcc/testsuite/gfortran.dg/volatile6.f90 @@ -2,6 +2,8 @@ ! { dg-options "-O2 -fdump-tree-optimized" } ! Tests whether volatile really works for arrays ! PR fortran/29601 + +subroutine sub logical, allocatable, volatile :: t1(:) logical, allocatable :: t2(:) integer :: i