aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/class.c
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2013-01-04 09:57:58 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2013-01-04 09:57:58 +0100
commit15115f7aa839855a7f30f83b32070cee7f063c6d (patch)
tree60c0d24a866c648f2bab0750d1fba7855b784647 /gcc/fortran/class.c
parente58d2e48e45ac4823248b3e8ddba96ec1ba401ae (diff)
downloadgcc-15115f7aa839855a7f30f83b32070cee7f063c6d.zip
gcc-15115f7aa839855a7f30f83b32070cee7f063c6d.tar.gz
gcc-15115f7aa839855a7f30f83b32070cee7f063c6d.tar.bz2
re PR fortran/55854 (ICE on intent(out) dummy argument with unlimited polymorphic component)
2013-01-03 Tobias Burnus <burnus@net-b.de> PR fortran/55854 PR fortran/55763 * class.c (gfc_class_null_initializer): Fix finding the vtab. (gfc_find_intrinsic_vtab): Use BT_VOID for some components. 2013-01-03 Tobias Burnus <burnus@net-b.de> PR fortran/55854 PR fortran/55763 * gfortran.dg/unlimited_polymorphic_3.f03: Remove invalid code. * gfortran.dg/unlimited_polymorphic_7.f90: New. * gfortran.dg/unlimited_polymorphic_8.f90: New. From-SVN: r194885
Diffstat (limited to 'gcc/fortran/class.c')
-rw-r--r--gcc/fortran/class.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c
index 61d65e7..607af10 100644
--- a/gcc/fortran/class.c
+++ b/gcc/fortran/class.c
@@ -1,5 +1,5 @@
/* Implementation of Fortran 2003 Polymorphism.
- Copyright (C) 2009, 2010, 2011, 2012
+ Copyright (C) 2009, 2010, 2011, 2012, 2013
Free Software Foundation, Inc.
Contributed by Paul Richard Thomas <pault@gcc.gnu.org>
and Janus Weil <janus@gcc.gnu.org>
@@ -414,7 +414,7 @@ gfc_class_null_initializer (gfc_typespec *ts, gfc_expr *init_expr)
&& ts->u.derived->components->ts.u.derived->attr.unlimited_polymorphic;
if (is_unlimited_polymorphic && init_expr)
- vtab = gfc_find_intrinsic_vtab (&(init_expr->ts));
+ vtab = gfc_find_intrinsic_vtab (&ts->u.derived->components->ts);
else
vtab = gfc_find_derived_vtab (ts->u.derived);
@@ -2224,9 +2224,7 @@ gfc_find_intrinsic_vtab (gfc_typespec *ts)
goto cleanup;
c->attr.pointer = 1;
c->attr.access = ACCESS_PRIVATE;
- /* Avoid segfaults because due to character length. */
- c->ts.type = ts->type == BT_CHARACTER ? BT_VOID : ts->type;
- c->ts.kind = ts->kind;
+ c->ts.type = BT_VOID;
c->initializer = gfc_get_null_expr (NULL);
/* Add component _def_init. */
@@ -2234,9 +2232,7 @@ gfc_find_intrinsic_vtab (gfc_typespec *ts)
goto cleanup;
c->attr.pointer = 1;
c->attr.access = ACCESS_PRIVATE;
- /* Avoid segfaults due to missing character length. */
- c->ts.type = ts->type == BT_CHARACTER ? BT_VOID : ts->type;
- c->ts.kind = ts->kind;
+ c->ts.type = BT_VOID;
c->initializer = gfc_get_null_expr (NULL);
/* Add component _copy. */