diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2015-11-08 16:47:58 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2015-11-08 16:47:58 +0000 |
commit | 57905c2bb3dc00409591f58a8e335cd16c2940ff (patch) | |
tree | 7720d688995fe86e6ff242df8dbbe7f19bf73554 /gcc/fortran/class.c | |
parent | 210172f47dac16f21001d617e9175c563f2fdfd1 (diff) | |
download | gcc-57905c2bb3dc00409591f58a8e335cd16c2940ff.zip gcc-57905c2bb3dc00409591f58a8e335cd16c2940ff.tar.gz gcc-57905c2bb3dc00409591f58a8e335cd16c2940ff.tar.bz2 |
re PR fortran/68196 (ICE on function result with procedure pointer component)
2015-11-08 Paul Thomas <pault@gcc.gnu.org>
PR fortran/68196
* class.c (has_finalizer_component): Prevent infinite recursion
through this function if the derived type and that of its
component are the same.
* trans-types.c (gfc_get_derived_type): Do the same for proc
pointers by ignoring the explicit interface for the component.
PR fortran/66465
* check.c (same_type_check): If either of the expressions is
BT_PROCEDURE, use the typespec from the symbol, rather than the
expression.
2015-11-08 Paul Thomas <pault@gcc.gnu.org>
PR fortran/68196
* gfortran.dg/proc_ptr_47.f90: New test.
PR fortran/66465
* gfortran.dg/pr66465.f90: New test.
From-SVN: r229954
Diffstat (limited to 'gcc/fortran/class.c')
-rw-r--r-- | gcc/fortran/class.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index 7a9e275..8b49ae9 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -843,7 +843,11 @@ has_finalizer_component (gfc_symbol *derived) && c->ts.u.derived->f2k_derived->finalizers) return true; + /* Stop infinite recursion through this function by inhibiting + calls when the derived type and that of the component are + the same. */ if (c->ts.type == BT_DERIVED + && !gfc_compare_derived_types (derived, c->ts.u.derived) && !c->attr.pointer && !c->attr.allocatable && has_finalizer_component (c->ts.u.derived)) return true; |