re PR fortran/45916 (ICE in match_procedure_in_type, at fortran/decl.c:7921)

2010-10-07  Mikael Morin  <mikael@gcc.gnu.org>

	PR fortran/45916
	Revert revision 165026:
	2010-10-06  Mikael Morin  <mikael@gcc.gnu.org>

	* decl.c (match_procedure_in_type): Assertify if conditions.

2010-10-07  Mikael Morin  <mikael@gcc.gnu.org>

	PR fortran/45916
	* gfortran.dg/generic_typebound_operator_1.f90: New test.

From-SVN: r165089
This commit is contained in:
Mikael Morin 2010-10-07 10:46:58 +00:00
parent fa8d6f0771
commit 9f23af489a
4 changed files with 38 additions and 5 deletions

View File

@ -1,3 +1,11 @@
2010-10-07 Mikael Morin <mikael@gcc.gnu.org>
PR fortran/45916
Revert revision 165026:
2010-10-06 Mikael Morin <mikael@gcc.gnu.org>
* decl.c (match_procedure_in_type): Assertify if conditions.
2010-10-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/45889

View File

@ -7916,9 +7916,8 @@ match_procedure_in_type (void)
would be an error. If a GENERIC already targetted this binding, it may
be already there but then typebound is still NULL. */
stree = gfc_find_symtree (ns->tb_sym_root, name);
if (stree)
if (stree && stree->n.tb)
{
gcc_assert (stree->n.tb);
gfc_error ("There is already a procedure with binding name '%s' for "
"the derived type '%s' at %C", name, block->name);
return MATCH_ERROR;
@ -7926,9 +7925,11 @@ match_procedure_in_type (void)
/* Insert it and set attributes. */
gcc_assert (!stree);
stree = gfc_new_symtree (&ns->tb_sym_root, name);
gcc_assert (stree);
if (!stree)
{
stree = gfc_new_symtree (&ns->tb_sym_root, name);
gcc_assert (stree);
}
stree->n.tb = gfc_get_typebound_proc (&tb);
if (gfc_get_sym_tree (target, gfc_current_ns, &stree->n.tb->u.specific,

View File

@ -1,3 +1,8 @@
2010-10-07 Mikael Morin <mikael@gcc.gnu.org>
PR fortran/45916
* gfortran.dg/generic_typebound_operator_1.f90: New test.
2010-10-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/45889

View File

@ -0,0 +1,19 @@
! { dg-do compile }
!
! PR fortran/45916
! ICE with generic type-bound operator
module m_sort
implicit none
type, abstract :: sort_t
contains
generic :: operator(.gt.) => gt_cmp
procedure(gt_cmp), deferred :: gt_cmp
end type sort_t
interface
logical function gt_cmp(a,b)
import
class(sort_t), intent(in) :: a, b
end function gt_cmp
end interface
end module m_sort