aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2010-02-27 18:25:05 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2010-02-27 18:25:05 +0100
commitcea2d589bd22a51d35f5c138fd847a58f9e15e9a (patch)
treec74a285a23e3f51acfc893b7d3a1ccf188aa7056 /gcc
parent58f1b7061e21da2b4abe14498bf79e8cad5450bf (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/resolve.c13
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/default_initialization_1.f903
-rw-r--r--gcc/testsuite/gfortran.dg/default_initialization_4.f9022
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" } }