From: Janus Weil Date: Sat, 4 Jan 2014 09:25:04 +0000 (+0100) Subject: re PR fortran/59547 ([OOP] Problem with using tbp specification function in multiple... X-Git-Tag: releases/gcc-4.9.0~1839 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e8ed37508957f989a10b0d66dc0910ced0b2716b;p=thirdparty%2Fgcc.git re PR fortran/59547 ([OOP] Problem with using tbp specification function in multiple class procedures) 2014-01-04 Janus Weil PR fortran/59547 * class.c (add_proc_comp): Copy pure attribute. 2014-01-04 Janus Weil PR fortran/59547 * gfortran.dg/typebound_proc_32.f90: New. From-SVN: r206331 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 202c0479e426..40a26dba6326 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2014-01-04 Janus Weil + + PR fortran/59547 + * class.c (add_proc_comp): Copy pure attribute. + 2014-01-02 Richard Sandiford Update copyright years diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index 47a308257eba..1b243f686b90 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -714,9 +714,11 @@ add_proc_comp (gfc_symbol *vtype, const char *name, gfc_typebound_proc *tb) if (tb->u.specific) { - c->ts.interface = tb->u.specific->n.sym; + gfc_symbol *ifc = tb->u.specific->n.sym; + c->ts.interface = ifc; if (!tb->deferred) c->initializer = gfc_get_variable_expr (tb->u.specific); + c->attr.pure = ifc->attr.pure; } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 517c7240d14d..8a9c0cbaf0e5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-01-04 Janus Weil + + PR fortran/59547 + * gfortran.dg/typebound_proc_32.f90: New. + 2014-01-03 Marc Glisse PR c++/58950 diff --git a/gcc/testsuite/gfortran.dg/typebound_proc_32.f90 b/gcc/testsuite/gfortran.dg/typebound_proc_32.f90 new file mode 100644 index 000000000000..00ae9c732633 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_proc_32.f90 @@ -0,0 +1,35 @@ +! { dg-do compile } +! +! PR 59547: [OOP] Problem with using tbp specification function in multiple class procedures +! +! Contributed by + +module classes + + implicit none + + type :: base_class + contains + procedure, nopass :: get_num + procedure :: get_array, get_array2 + end type + +contains + + pure integer function get_num() + get_num = 2 + end function + + function get_array( this ) result(array) + class(base_class), intent(in) :: this + integer, dimension( this%get_num() ) :: array + end function + + function get_array2( this ) result(array) + class(base_class), intent(in) :: this + integer, dimension( this%get_num(), this%get_num() ) :: array + end function + +end module + +! { dg-final { cleanup-modules "classes" } }