diff options
author | Tobias Burnus <burnus@net-b.de> | 2013-09-18 20:14:57 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2013-09-18 20:14:57 +0200 |
commit | 83ba23b7aa47ed35554dd5654f0e372d824f81e3 (patch) | |
tree | 800e25b834dfcf4e2501b24f9bce291d8109d684 /gcc/fortran/primary.c | |
parent | 3f3fd87d46ec45a4894ae9390424bf7663f771e4 (diff) | |
download | gcc-83ba23b7aa47ed35554dd5654f0e372d824f81e3.zip gcc-83ba23b7aa47ed35554dd5654f0e372d824f81e3.tar.gz gcc-83ba23b7aa47ed35554dd5654f0e372d824f81e3.tar.bz2 |
re PR fortran/43366 ([OOP][F08] Intrinsic assign to polymorphic variable)
2013-09-15 Tobias Burnus <burnus@net-b.de>
PR fortran/43366
* primary.c (gfc_variable_attr): Also handle codimension.
* resolve.c (resolve_ordinary_assign): Add invalid-diagnostic
* for
polymorphic assignment.
2013-09-15 Tobias Burnus <burnus@net-b.de>
PR fortran/43366
* gfortran.dg/class_39.f03: Update dg-error.
* gfortran.dg/class_5.f03: Ditto.
* gfortran.dg/class_53.f90: Ditto.
* gfortran.dg/realloc_on_assign_20.f90: New.
* gfortran.dg/realloc_on_assign_21.f90: New.
* gfortran.dg/realloc_on_assign_22.f90: New.
From-SVN: r202713
Diffstat (limited to 'gcc/fortran/primary.c')
-rw-r--r-- | gcc/fortran/primary.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index 1276abb..80d45ea 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -2134,7 +2134,7 @@ check_substring: symbol_attribute gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts) { - int dimension, pointer, allocatable, target; + int dimension, codimension, pointer, allocatable, target; symbol_attribute attr; gfc_ref *ref; gfc_symbol *sym; @@ -2149,12 +2149,14 @@ gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts) if (sym->ts.type == BT_CLASS && sym->attr.class_ok) { dimension = CLASS_DATA (sym)->attr.dimension; + codimension = CLASS_DATA (sym)->attr.codimension; pointer = CLASS_DATA (sym)->attr.class_pointer; allocatable = CLASS_DATA (sym)->attr.allocatable; } else { dimension = attr.dimension; + codimension = attr.codimension; pointer = attr.pointer; allocatable = attr.allocatable; } @@ -2209,11 +2211,13 @@ gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts) if (comp->ts.type == BT_CLASS) { + codimension = CLASS_DATA (comp)->attr.codimension; pointer = CLASS_DATA (comp)->attr.class_pointer; allocatable = CLASS_DATA (comp)->attr.allocatable; } else { + codimension = comp->attr.codimension; pointer = comp->attr.pointer; allocatable = comp->attr.allocatable; } @@ -2228,6 +2232,7 @@ gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts) } attr.dimension = dimension; + attr.codimension = codimension; attr.pointer = pointer; attr.allocatable = allocatable; attr.target = target; |