From: Tobias Burnus Date: Wed, 16 Oct 2013 20:46:33 +0000 (+0200) Subject: re PR fortran/58652 (ICE with move_alloc and unlimited polymorphic) X-Git-Tag: releases/gcc-4.9.0~3423 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a8267f8d58e17be205e1147de957f059db88c739;p=thirdparty%2Fgcc.git re PR fortran/58652 (ICE with move_alloc and unlimited polymorphic) 2013-10-16 Tobias Burnus PR fortran/58652 * interface.c (compare_parameter): Accept passing CLASS(*) to CLASS(*). 2013-10-16 Tobias Burnus PR fortran/58652 * gfortran.dg/unlimited_polymorphic_12.f90: New. From-SVN: r203720 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index ee6b8ed770ad..068a11d49bb6 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2013-10-16 Tobias Burnus + + PR fortran/58652 + * interface.c (compare_parameter): Accept passing CLASS(*) + to CLASS(*). + 2013-10-16 Tobias Burnus * intrinsic.texi (OpenMP Modules): Update to OpenMPv4. diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index b8786440fbec..b3ddf5f08b33 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -1990,8 +1990,9 @@ compare_parameter (gfc_symbol *formal, gfc_expr *actual, if (!gfc_expr_attr (actual).class_ok) return 0; - if (!gfc_compare_derived_types (CLASS_DATA (actual)->ts.u.derived, - CLASS_DATA (formal)->ts.u.derived)) + if ((!UNLIMITED_POLY (formal) || !UNLIMITED_POLY(actual)) + && !gfc_compare_derived_types (CLASS_DATA (actual)->ts.u.derived, + CLASS_DATA (formal)->ts.u.derived)) { if (where) gfc_error ("Actual argument to '%s' at %L must have the same " diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fb246c540b77..faf76bd33ec1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-10-16 Tobias Burnus + + PR fortran/58652 + * gfortran.dg/unlimited_polymorphic_12.f90: New. + 2013-10-16 Thomas Schwinge * c-c++-common/cpp/openmp-define-1.c: Move diff --git a/gcc/testsuite/gfortran.dg/unlimited_polymorphic_12.f90 b/gcc/testsuite/gfortran.dg/unlimited_polymorphic_12.f90 new file mode 100644 index 000000000000..c583c6bbf5e1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/unlimited_polymorphic_12.f90 @@ -0,0 +1,44 @@ +! { dg-do compile } +! +! PR fortran/58652 +! +! Contributed by Vladimir Fuka +! +! The passing of a CLASS(*) to a CLASS(*) was reject before +! +module gen_lists + type list_node + class(*),allocatable :: item + contains + procedure :: move_alloc => list_move_alloc + end type + + contains + + subroutine list_move_alloc(self,item) + class(list_node),intent(inout) :: self + class(*),intent(inout),allocatable :: item + + call move_alloc(item, self%item) + end subroutine +end module + +module lists + use gen_lists, only: node => list_node +end module lists + + +module sexp + use lists +contains + subroutine parse(ast) + class(*), allocatable, intent(out) :: ast + class(*), allocatable :: expr + integer :: ierr + allocate(node::ast) + select type (ast) + type is (node) + call ast%move_alloc(expr) + end select + end subroutine +end module