I have committed the attached patch as obvious (Rev. 182497).

gfortran merged the symbol of a local label like:
  label_name: block
  end block label_name
with a later-declared procedure with the same name ("subroutine label_name()") which lead to an ICE and interesting code paths.

Built, regtested and committed on x86-64-linux.

Tobias
Index: gcc/fortran/ChangeLog
===================================================================
--- gcc/fortran/ChangeLog	(Revision 182496)
+++ gcc/fortran/ChangeLog	(Arbeitskopie)
@@ -1,6 +1,12 @@
 2011-12-19  Tobias Burnus  <bur...@net-b.de>
 
 	PR fortran/51605
+	* parse.c (gfc_fixup_sibling_symbols): Regard FL_LABEL as
+	local symbol.
+
+2011-12-19  Tobias Burnus  <bur...@net-b.de>
+
+	PR fortran/51605
 	* match.c (gfc_match_select_type): Handle
 	scalar polymophic coarrays.
 	(select_type_set_tmp, ): Ditto; avoid segfault if !class_ok.
Index: gcc/fortran/parse.c
===================================================================
--- gcc/fortran/parse.c	(Revision 182496)
+++ gcc/fortran/parse.c	(Arbeitskopie)
@@ -3908,6 +3908,7 @@
 		  || old_sym->attr.intrinsic
 		  || old_sym->attr.generic
 		  || old_sym->attr.flavor == FL_NAMELIST
+		  || old_sym->attr.flavor == FL_LABEL
 		  || old_sym->attr.proc == PROC_ST_FUNCTION))
 	{
 	  /* Replace it with the symbol from the parent namespace.  */
Index: gcc/testsuite/gfortran.dg/block_10.f90
===================================================================
--- gcc/testsuite/gfortran.dg/block_10.f90	(Revision 0)
+++ gcc/testsuite/gfortran.dg/block_10.f90	(Arbeitskopie)
@@ -0,0 +1,34 @@
+! { dg-do compile }
+!
+! PR fortran/51605
+!
+
+contains
+  subroutine foo
+    BLOCK_NAME: block
+    end block BLOCK_NAME
+  end subroutine foo
+
+  subroutine BLOCK_NAME()
+  end subroutine BLOCK_NAME
+
+  subroutine bar()
+  end subroutine bar
+end
+
+subroutine test()
+contains
+  subroutine BLOCK_NAME()
+  end subroutine BLOCK_NAME
+
+  subroutine foobar()
+  end subroutine foobar
+
+  subroutine foo
+    BLOCK_NAME: block
+    end block BLOCK_NAME
+  end subroutine foo
+
+  subroutine bar()
+  end subroutine bar
+end
Index: gcc/testsuite/ChangeLog
===================================================================
--- gcc/testsuite/ChangeLog	(Revision 182496)
+++ gcc/testsuite/ChangeLog	(Arbeitskopie)
@@ -1,3 +1,8 @@
+2011-12-19  Tobias Burnus  <bur...@net-b.de>
+
+	PR fortran/51605
+	* gfortran.dg/block_10.f90: New.
+
 2011-12-19  Jason Merrill  <ja...@redhat.com>
 
 	PR c++/51553

Reply via email to