Patchwork [fortran,committed] PR fortran/45916 revert revision 165026

login
register
mail settings
Submitter Mikael Morin
Date Oct. 7, 2010, 10:54 a.m.
Message ID <201010071254.59435.mikael.morin@sfr.fr>
Download mbox | patch
Permalink /patch/67030/
State New
Headers show

Comments

Mikael Morin - Oct. 7, 2010, 10:54 a.m.
Hello, 

The patch at http://gcc.gnu.org/ml/fortran/2010-10/msg00047.html
was obvious...   ...ly wrong, as it was in contradiction with a comment two 
lines above. 
Reverted with a testcase at revision 165089. 

Mikael

Patch

Index: testsuite/ChangeLog
===================================================================
--- testsuite/ChangeLog	(révision 165088)
+++ testsuite/ChangeLog	(révision 165089)
@@ -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
Index: testsuite/gfortran.dg/generic_typebound_operator_1.f90
===================================================================
--- testsuite/gfortran.dg/generic_typebound_operator_1.f90	(révision 0)
+++ testsuite/gfortran.dg/generic_typebound_operator_1.f90	(révision 165089)
@@ -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
Index: fortran/decl.c
===================================================================
--- fortran/decl.c	(révision 165088)
+++ fortran/decl.c	(révision 165089)
@@ -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,
Index: fortran/ChangeLog
===================================================================
--- fortran/ChangeLog	(révision 165088)
+++ fortran/ChangeLog	(révision 165089)
@@ -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