diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2010-06-11 16:45:48 +0000 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2010-06-11 18:45:48 +0200 |
commit | 92bb7768d3d621f91cb92c7958a7e651a47febe2 (patch) | |
tree | 9e5595536e121a8dd011dbb47974077ae32cf871 | |
parent | b0e788cc09b06d66038cc6cbe2082e832a7ebefd (diff) | |
download | gcc-92bb7768d3d621f91cb92c7958a7e651a47febe2.zip gcc-92bb7768d3d621f91cb92c7958a7e651a47febe2.tar.gz gcc-92bb7768d3d621f91cb92c7958a7e651a47febe2.tar.bz2 |
re PR fortran/42051 ([OOP] ICE on array-valued function with CLASS formal argument)
2010-06-11 Paul Thomas <pault@gcc.gnu.org>
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 <pault@gcc.gnu.org>
PR fortran/42051
PR fortran/43896
* gfortran.dg/class_23.f03: New test.
From-SVN: r160622
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-expr.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/class_23.f03 | 24 |
4 files changed, 39 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6cf60ee..6f17693 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2010-06-11 Paul Thomas <pault@gcc.gnu.org> + + 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 <janus@gcc.gnu.org> PR fortran/44207 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 6c5c328..416e67d 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 ce3db3e..aeda5b9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-06-11 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/42051 + PR fortran/43896 + * gfortran.dg/class_23.f03: New test. + 2010-06-11 Jan Hubicka <jh@suse.cz> * 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 0000000..e1e3517 --- /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 <damian@rouson.net> +! Modified by Janus Weil <janus@gcc.gnu.org> + + 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 |