From: janus Date: Fri, 11 Jun 2010 16:45:48 +0000 (+0000) Subject: 2010-06-11 Paul Thomas X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=750b874c85470db91ca50a0654cb3f85899d1e07;p=thirdparty%2Fgcc.git 2010-06-11 Paul Thomas PR fortran/42051 PR fortran/43896 * trans-expr.c (gfc_conv_derived_to_class): Handle array-valued functions with CLASS formal arguments. 2010-06-11 Paul Thomas PR fortran/42051 PR fortran/43896 * gfortran.dg/class_23.f03: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160622 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6cf60ee47b2d..6f17693e596d 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2010-06-11 Paul Thomas + + PR fortran/42051 + PR fortran/43896 + * trans-expr.c (gfc_conv_derived_to_class): Handle array-valued + functions with CLASS formal arguments. + 2010-06-10 Janus Weil PR fortran/44207 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 6c5c3286eb87..416e67d45cbd 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -2492,12 +2492,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 ce3db3ef9452..aeda5b9399da 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-06-11 Paul Thomas + + PR fortran/42051 + PR fortran/43896 + * gfortran.dg/class_23.f03: New test. + 2010-06-11 Jan Hubicka * gcc.dg/ipa/pure-const-2.c: New testcase. 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