From 15f8087142b144a4c273faacad1b9fcb2cbf73c2 Mon Sep 17 00:00:00 2001 From: janus Date: Fri, 23 Oct 2009 16:10:08 +0000 Subject: 2009-10-23 Janus Weil PR fortran/41800 * trans-expr.c (gfc_trans_scalar_assign): Handle CLASS variables. 2009-10-23 Janus Weil PR fortran/41800 * gfortran.dg/class_10.f03: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@153504 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/trans-expr.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/class_10.f03 | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/class_10.f03 (limited to 'gcc') diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 0668a68305c..bc4ecb03d3e 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2009-10-23 Janus Weil + + PR fortran/41800 + * trans-expr.c (gfc_trans_scalar_assign): Handle CLASS variables. + 2009-10-23 Janus Weil PR fortran/41758 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index dc58dbf943d..da442edba4b 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -4660,7 +4660,7 @@ gfc_trans_scalar_assign (gfc_se * lse, gfc_se * rse, gfc_typespec ts, gfc_add_expr_to_block (&block, tmp); } } - else if (ts.type == BT_DERIVED) + else if (ts.type == BT_DERIVED || ts.type == BT_CLASS) { gfc_add_block_to_block (&block, &lse->pre); gfc_add_block_to_block (&block, &rse->pre); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 03d21650a0d..0fdbc541331 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-10-23 Janus Weil + + PR fortran/41800 + * gfortran.dg/class_10.f03: New test. + 2009-10-22 Michael Meissner PR target/41787 diff --git a/gcc/testsuite/gfortran.dg/class_10.f03 b/gcc/testsuite/gfortran.dg/class_10.f03 new file mode 100644 index 00000000000..f238a597a65 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_10.f03 @@ -0,0 +1,32 @@ +! { dg-do compile } +! +! PR 41800: [OOP] ICE in fold_convert_loc, at fold-const.c:2789 +! +! Contributed by Harald Anlauf + +module abstract_gradient + + implicit none + private + + type, public, abstract :: gradient_class + contains + procedure, nopass :: inner_product + end type + +contains + + function inner_product () + class(gradient_class), pointer :: inner_product + inner_product => NULL() + end function + +end module + + + use abstract_gradient + class(gradient_class), pointer :: g_initial, ip_save + ip_save => g_initial%inner_product() ! ICE +end + +! { dg-final { cleanup-modules "abstract_gradient" } } -- cgit v1.2.3