From: Janus Weil Date: Mon, 3 Feb 2014 08:16:06 +0000 (+0100) Subject: re PR fortran/59941 ([OOP] ICE with polymorphic types) X-Git-Tag: releases/gcc-4.7.4~269 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=05ea6f3ec01a8b4412823a536cb12d38e4cdb79e;p=thirdparty%2Fgcc.git re PR fortran/59941 ([OOP] ICE with polymorphic types) 2014-02-03 Janus Weil PR fortran/59941 * expr.c (replace_comp): Check for isym to avoid ICE. 2014-02-03 Janus Weil PR fortran/59941 * gfortran.dg/typebound_proc_26.f90: New. From-SVN: r207417 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e3988a0ae451..b3168179085b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2014-02-03 Janus Weil + + PR fortran/59941 + * expr.c (replace_comp): Check for isym to avoid ICE. + 2014-01-27 Mikael Morin PR fortran/58007 diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index 194deb6fb2b1..c0cc6886a526 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -4195,7 +4195,7 @@ replace_comp (gfc_expr *expr, gfc_symbol *sym, int *i ATTRIBUTE_UNUSED) gfc_component *comp; comp = (gfc_component *)sym; if ((expr->expr_type == EXPR_VARIABLE - || (expr->expr_type == EXPR_FUNCTION + || (expr->expr_type == EXPR_FUNCTION && !expr->value.function.isym && !gfc_is_intrinsic (expr->symtree->n.sym, 0, expr->where))) && expr->symtree->n.sym->ns == comp->ts.interface->formal_ns) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 152554dcfcda..8ede531afba3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-02-03 Janus Weil + + PR fortran/59941 + * gfortran.dg/typebound_proc_26.f90: New. + 2014-01-29 Markus Trippelsdorf Backport from mainline diff --git a/gcc/testsuite/gfortran.dg/typebound_proc_26.f90 b/gcc/testsuite/gfortran.dg/typebound_proc_26.f90 new file mode 100644 index 000000000000..ec2e0e842857 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_proc_26.f90 @@ -0,0 +1,38 @@ +! { dg-do compile } +! +! PR 59941: [4.7 Regression] [OOP] ICE with polymorphic types +! +! Contributed by Jürgen Reuter + +module tao_random_numbers + integer, dimension(10), private :: s_buffer + integer, private :: s_buffer_end = size (s_buffer) +end module + + +module beam_structures + + private + + type :: beam_structure_t + integer, dimension(:), allocatable :: smatrix + contains + procedure :: get_smatrix + end type + +contains + + function get_smatrix (beam_structure) result (matrix) + class(beam_structure_t), intent(in) :: beam_structure + integer, dimension (size (beam_structure%smatrix)) :: matrix + end function + +end module + + +program p + use tao_random_numbers + use beam_structures +end + +! { dg-final { cleanup-modules "tao_random_numbers beam_structures" } }