This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [Patch, fortran] PR29641 [4.1/4.2/4.3 regression] ICE in gfc_get_derived_type
- From: Bud Davis <bdavis9659 at sbcglobal dot net>
- To: Paul Richard Thomas <paul dot richard dot thomas at gmail dot com>, fortran at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Mon, 30 Oct 2006 08:15:25 -0800 (PST)
- Subject: Re: [Patch, fortran] PR29641 [4.1/4.2/4.3 regression] ICE in gfc_get_derived_type
check the 'indenture' (?) it looks like it is not
perfect..
--bud
--- Paul Richard Thomas
<paul.richard.thomas@gmail.com> wrote:
> :ADDPATCH fortran:
>
> Jakub Jelinek posted this rather embarrassing PR -
> in spite of all the
> testing a month ago, the rather simple testcase,
> attached, causes an
> ICE because the derived type does not have a
> proc_name. The fix is
> utterly trivial - bail out with a NULL namespace if
> there is no parent
> to search. The testcase is the reporters, with the
> addition of a main
> programme. Whilst the test is dg-do compile, the
> programme does run to
> test functionality, if needed.
>
> Regtested on Cygwin_NT/PIV - I intend to commit this
> tomorrow morning
> under the obvious rule unless I receive any
> objections. I will have
> to follow it in a few days with commits to 4.2 and
> 4.1, since I
> temporarily do not have anything other than trunk.
> The same goes for
> a couple of okayed patches that I will commit
> tomorrow.
>
> Best regards
>
> Paul
>
> 2006-10-31 Paul Thomas <pault@gcc.gnu.org>
>
> PR fortran/29641
> * trans-types.c (gfc_get_derived_type): If the
> derived type
> namespace has neither a parent nor a proc_name, set
> NULL for
> the search namespace.
>
> 2006-10-31 Paul Thomas <pault@gcc.gnu.org>
>
> PR fortran/29641
> * gfortran.dg/used_types_11.f90: New test.
> > Index: gcc/fortran/trans-types.c
>
===================================================================
> *** gcc/fortran/trans-types.c (révision 118179)
> --- gcc/fortran/trans-types.c (copie de travail)
> *************** gfc_get_derived_type (gfc_symbol *
> deriv
> *** 1482,1492 ****
> building anew so that potential dummy and actual
> arguments use the
> same TREE_TYPE. If an equal type is found
> without a backend_decl,
> build the parent version and use it in the
> current namespace. */
> !
> ! /* Derived types in an interface body obtain
> their parent reference
> ! through the proc_name symbol. */
> ! ns = derived->ns->parent ?
> derived->ns->parent
> ! : derived->ns->proc_name->ns;
>
> for (; ns; ns = ns->parent)
> {
> --- 1482,1496 ----
> building anew so that potential dummy and actual
> arguments use the
> same TREE_TYPE. If an equal type is found
> without a backend_decl,
> build the parent version and use it in the
> current namespace. */
> ! if (derived->ns->parent)
> ! ns = derived->ns->parent;
> ! else if (derived->ns->proc_name)
> ! /* Derived types in an interface body obtain
> their parent reference
> ! through the proc_name symbol. */
> ! ns = derived->ns->proc_name->ns;
> ! else
> ! /* Sometimes there isn't a parent reference! */
> ! ns = NULL;
>
> for (; ns; ns = ns->parent)
> {
> Index: gcc/testsuite/gfortran.dg/used_types_11.f90
>
===================================================================
> *** gcc/testsuite/gfortran.dg/used_types_11.f90
> (révision 0)
> --- gcc/testsuite/gfortran.dg/used_types_11.f90
> (révision 0)
> ***************
> *** 0 ****
> --- 1,37 ----
> + ! { dg-do compile }
> + ! Tests the patch for PR 29641, in which an ICE
> would occur with
> + ! the ordering of USE statements below.
> + !
> + ! Contributed by Jakub Jelinek <jakub@gcc.gnu.org>
> + !
> + module A
> + type :: T
> + integer :: u
> + end type T
> + end module A
> +
> + module B
> + contains
> + function foo()
> + use A
> + type(T), pointer :: foo
> + nullify (foo)
> + end function foo
> + end module B
> +
> + subroutine bar()
> + use B ! The order here is important
> + use A ! If use A comes before use B,
> it works
> + type(T), pointer :: x
> + x => foo()
> + end subroutine bar
> +
> + use B
> + use A
> + type(T), pointer :: x
> + type(T), target :: y
> + x => y
> + print *, associated (x)
> + x => foo ()
> + print *, associated (x)
> + end
> > 2006-10-31 Paul Thomas <pault@gcc.gnu.org>
>
> PR fortran/29641
> * trans-types.c (gfc_get_derived_type): If the
> derived type
> namespace has neither a parent nor a proc_name, set
> NULL for
> the search namespace.
>
> 2006-10-31 Paul Thomas <pault@gcc.gnu.org>
>
> PR fortran/29641
> * gfortran.dg/used_types_11.f90: New test.
>