From: Paul Thomas Date: Tue, 16 Aug 2011 21:22:31 +0000 (+0000) Subject: re PR fortran/42051 ([OOP] ICE on array-valued function with CLASS formal argument) X-Git-Tag: releases/gcc-4.5.4~475 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fc2737ae46c68cd6f9bcf8484916f4a9091bf8c8;p=thirdparty%2Fgcc.git re PR fortran/42051 ([OOP] ICE on array-valued function with CLASS formal argument) 2011-08-16 Paul Thomas PR fortran/42051 PR fortran/43896 PR fortran/49962 * trans-expr.c (gfc_conv_derived_to_class): Handle array-valued functions with CLASS formal arguments. 2011-08-16 Paul Thomas PR fortran/42051 PR fortran/43896 PR fortran/49962 * gfortran.dg/class_23.f03: New test. From-SVN: r177800 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 28d574a46765..ba107157cce1 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2011-08-16 Paul Thomas + + PR fortran/42051 + PR fortran/43896 + PR fortran/49962 + * trans-expr.c (gfc_conv_derived_to_class): Handle array-valued + functions with CLASS formal arguments. + 2011-07-23 Janus Weil PR fortran/49708 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index aa91aa3c15a1..b3d49cc50d0b 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -2638,12 +2638,14 @@ gfc_conv_derived_to_class (gfc_se *parmse, gfc_expr *e, ss = gfc_walk_expr (e); if (ss == gfc_ss_terminator) { + parmse->ss = NULL; gfc_conv_expr_reference (parmse, e); tmp = fold_convert (TREE_TYPE (ctree), parmse->expr); gfc_add_modify (&parmse->pre, ctree, tmp); } else { + parmse->ss = ss; gfc_conv_expr (parmse, e); gfc_add_modify (&parmse->pre, ctree, parmse->expr); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 667d4a73891e..040c6b8c2604 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2011-08-16 Paul Thomas + + PR fortran/42051 + PR fortran/43896 + PR fortran/49962 + * gfortran.dg/class_23.f03: New test. + 2011-07-31 Uros Bizjak PR target/49920 diff --git a/gcc/testsuite/gfortran.dg/class_23.f03 b/gcc/testsuite/gfortran.dg/class_23.f03 new file mode 100644 index 000000000000..e1e351762948 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_23.f03 @@ -0,0 +1,24 @@ +! { dg-do compile } +! +! PR 42051: [OOP] ICE on array-valued function with CLASS formal argument +! +! Original test case by Damian Rouson +! Modified by Janus Weil + + type grid + end type + +contains + + function return_x(this) result(this_x) + class(grid) :: this + real ,dimension(1) :: this_x + end function + + subroutine output() + type(grid) :: mesh + real ,dimension(1) :: x + x = return_x(mesh) + end subroutine + +end