diff options
author | Tobias Burnus <burnus@net-b.de> | 2010-02-27 18:25:05 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2010-02-27 18:25:05 +0100 |
commit | cea2d589bd22a51d35f5c138fd847a58f9e15e9a (patch) | |
tree | c74a285a23e3f51acfc893b7d3a1ccf188aa7056 | |
parent | 58f1b7061e21da2b4abe14498bf79e8cad5450bf (diff) | |
download | gcc-cea2d589bd22a51d35f5c138fd847a58f9e15e9a.zip gcc-cea2d589bd22a51d35f5c138fd847a58f9e15e9a.tar.gz gcc-cea2d589bd22a51d35f5c138fd847a58f9e15e9a.tar.bz2 |
re PR fortran/43185 ([F2008] Implicit SAVE in MODULEs)
2010-02-27 Tobias Burnus <burnus@net-b.de>
PR fortran/43185
* resolve.c (resolve_fl_variable_derived): Imply SAVE
for module variables for Fortran 2008.
2010-02-27 Tobias Burnus <burnus@net-b.de>
PR fortran/43185
* gfortran.dg/default_initialization_1.f90: Add -std=f2003.
* gfortran.dg/default_initialization_4.f90: New test.
From-SVN: r157109
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/default_initialization_1.f90 | 3 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/default_initialization_4.f90 | 22 |
5 files changed, 42 insertions, 8 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 08a6b68..e5d7224 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2010-02-27 Tobias Burnus <burnus@net-b.de> + + PR fortran/43185 + * resolve.c (resolve_fl_variable_derived): Imply SAVE + for module variables for Fortran 2008. + 2010-02-25 Jakub Jelinek <jakub@redhat.com> PR debug/43166 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index bcc8eae..4f9eb01 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -8937,13 +8937,12 @@ resolve_fl_variable_derived (gfc_symbol *sym, int no_init_flag) && sym->ns->proc_name->attr.flavor == FL_MODULE && !sym->ns->save_all && !sym->attr.save && !sym->attr.pointer && !sym->attr.allocatable - && has_default_initializer (sym->ts.u.derived)) - { - gfc_error("Object '%s' at %L must have the SAVE attribute for " - "default initialization of a component", - sym->name, &sym->declared_at); - return FAILURE; - } + && has_default_initializer (sym->ts.u.derived) + && gfc_notify_std (GFC_STD_F2008, "Fortran 2008: Implied SAVE for " + "module variable '%s' at %L, needed due to " + "the default initialization", sym->name, + &sym->declared_at) == FAILURE) + return FAILURE; if (sym->ts.type == BT_CLASS) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bc56a66..6de1a8b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-02-27 Tobias Burnus <burnus@net-b.de> + + PR fortran/43185 + * gfortran.dg/default_initialization_1.f90: Add -std=f2003. + * gfortran.dg/default_initialization_4.f90: New test. + 2010-02-27 Eric Botcazou <ebotcazou@adacore.com> * gnat.dg/thin_pointer.ad[sb]: Rename into... diff --git a/gcc/testsuite/gfortran.dg/default_initialization_1.f90 b/gcc/testsuite/gfortran.dg/default_initialization_1.f90 index fe67e2f..b03b698 100644 --- a/gcc/testsuite/gfortran.dg/default_initialization_1.f90 +++ b/gcc/testsuite/gfortran.dg/default_initialization_1.f90 @@ -1,6 +1,7 @@ ! ! { dg-do compile } -! PR 20845 +! { dg-options "-std=f2003" } +! PR 20845; for F2008: PR fortran/43185 ! ! In ISO/IEC 1539-1:1997(E), 4th constraint in section 11.3: ! diff --git a/gcc/testsuite/gfortran.dg/default_initialization_4.f90 b/gcc/testsuite/gfortran.dg/default_initialization_4.f90 new file mode 100644 index 0000000..7a15ba2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/default_initialization_4.f90 @@ -0,0 +1,22 @@ +! +! { dg-do run } +! +! PR fortran/43185 +! +! The following is valid F2008 but not valid Fortran 90/2003 +! Cf. PR 20845 +! +module good + implicit none + type default_initialization + integer :: x = 42 + end type default_initialization + type (default_initialization) t ! OK in F2008 +end module good + +use good +if (t%x /= 42) call abort() +t%x = 0 +if (t%x /= 0) call abort() +end +! { dg-final { cleanup-modules "good" } } |