From fe14572b1ae8dc408645a0c4ce1d043d44acece6 Mon Sep 17 00:00:00 2001 From: "Steven G. Kargl" Date: Thu, 27 Oct 2016 03:08:13 +0000 Subject: re PR fortran/78092 (ICE when calling SIZEOF on CLASS(*) entry) 2016-10-26 Steven G. Kargl PR fortran/78092 * trans-intrinsic.c (gfc_conv_intrinsic_sizeof): Fix reference to an array element of type CLASS. 2016-10-26 Steven G. Kargl PR fortran/78092 * gfortran.dg/pr78092.f90: New test. From-SVN: r241610 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/trans-intrinsic.c | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'gcc/fortran') diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index bae08b8..a4bfb0a 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2016-10-26 Steven G. Kargl + + PR fortran/78092 + * trans-intrinsic.c (gfc_conv_intrinsic_sizeof): Fix reference to an + array element of type CLASS. + 2016-10-26 Paul Thomas PR fortran/78108 diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index 2911d64..463bb58 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -6708,7 +6708,9 @@ gfc_conv_intrinsic_sizeof (gfc_se *se, gfc_expr *expr) TREE_OPERAND (argse.expr, 0), 0))) || GFC_DECL_CLASS (TREE_OPERAND (argse.expr, 0))))) byte_size = gfc_class_vtab_size_get (TREE_OPERAND (argse.expr, 0)); - else if (arg->rank > 0) + else if (arg->rank > 0 + || (arg->rank == 0 + && arg->ref && arg->ref->type == REF_COMPONENT)) /* The scalarizer added an additional temp. To get the class' vptr one has to look at the original backend_decl. */ byte_size = gfc_class_vtab_size_get ( -- cgit v1.1