diff options
| author | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-01-06 18:07:52 +0000 |
|---|---|---|
| committer | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-01-06 18:07:52 +0000 |
| commit | b4bcbcd7851d8c511334d491592a12483bf48e9d (patch) | |
| tree | 23e732adc566fc2363414dd1082478914fb933d0 | |
| parent | aa620173eb5c350ab316602f970010b450786b35 (diff) | |
| download | ppe42-gcc-b4bcbcd7851d8c511334d491592a12483bf48e9d.tar.gz ppe42-gcc-b4bcbcd7851d8c511334d491592a12483bf48e9d.zip | |
2008-01-06 Tobias Burnus <burnus@net-b.de>
PR fortran/34655
* resolve.c (resolve_equivalence_derived): Reject derived types
* with
default initialization if equivalenced with COMMON variable.
2008-01-06 Tobias Burnus <burnus@net-b.de>
PR fortran/34655
* gfortran.dg/equiv_constraint_9.f90: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131353 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/fortran/resolve.c | 8 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/gfortran.dg/equiv_constraint_9.f90 | 28 |
4 files changed, 47 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 2fccd4862f8..a3d2ee8fe71 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2008-01-06 Tobias Burnus <burnus@net-b.de> + PR fortran/34655 + * resolve.c (resolve_equivalence_derived): Reject derived types with + default initialization if equivalenced with COMMON variable. + +2008-01-06 Tobias Burnus <burnus@net-b.de> + PR fortran/34654 * io.c (check_io_constraints): Disallow unformatted I/O for internal units. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index e4f7dcbac4a..6cde79fb755 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -8534,6 +8534,14 @@ resolve_equivalence_derived (gfc_symbol *derived, gfc_symbol *sym, gfc_expr *e) return FAILURE; } + if (sym->attr.in_common && has_default_initializer (sym->ts.derived)) + { + gfc_error ("Derived type variable '%s' at %L with default " + "initialization cannot be in EQUIVALENCE with a variable " + "in COMMON", sym->name, &e->where); + return FAILURE; + } + for (; c ; c = c->next) { d = c->ts.derived; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2b08e5793e2..549a0074f6b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-01-06 Tobias Burnus <burnus@net-b.de> + + PR fortran/34655 + * gfortran.dg/equiv_constraint_9.f90: New. + 2008-01-06 Revital Eres <eres@il.ibm.com> PR tree-optimization/34263 diff --git a/gcc/testsuite/gfortran.dg/equiv_constraint_9.f90 b/gcc/testsuite/gfortran.dg/equiv_constraint_9.f90 new file mode 100644 index 00000000000..33744414011 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/equiv_constraint_9.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +! +! PR fortran/34655 +! +! Check for F2003's 5.5.2.5 Restrictions on common and equivalence +! Test case contributed by Joost VandeVondele. +! +implicit none +type data_type + sequence + integer :: I = 7 +end type data_type + + +type data_type2 + sequence + integer :: I +end type data_type2 + +type(data_type) :: dd, ff +type(data_type2) :: gg +integer :: j, k, m +EQUIVALENCE(dd,J) ! { dg-error "with default initializations cannot be in EQUIVALENCE with a variable in COMMON" } +EQUIVALENCE(ff,k) +EQUIVALENCE(gg,m) +COMMON /COM/ j +COMMON /COM/ m +END |

