This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix PR middle-end/6096, middle-end/6098, middle-end/6099


Hi!

REG_LABEL may point to NOTE_INSN_DELETED_LABEL, in which
case doing anything with LABEL_NUSES is not appropriate.

2002-03-30  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/6096, middle-end/6098, middle-end/6099
	* reorg.c (emit_delay_sequence): Only increment LABEL_NUSES for
	CODE_LABELs.
	(fill_slots_from_thread): Likewise.

--- gcc/reorg.c.jj	Mon Jan  7 14:57:23 2002
+++ gcc/reorg.c	Sat Mar 30 21:11:10 2002
@@ -511,7 +511,8 @@ emit_delay_sequence (insn, list, length)
 
 	    case REG_LABEL:
 	      /* Keep the label reference count up to date.  */
-	      LABEL_NUSES (XEXP (note, 0)) ++;
+	      if (GET_CODE (XEXP (note, 0)) == CODE_LABEL)
+		LABEL_NUSES (XEXP (note, 0)) ++;
 	      break;
 
 	    default:
@@ -2732,12 +2733,13 @@ fill_slots_from_thread (insn, condition,
 			 temporarily increment the use count on any referenced
 			 label lest it be deleted by delete_related_insns.  */
 		      note = find_reg_note (trial, REG_LABEL, 0);
-		      if (note)
+		      /* REG_LABEL could be NOTE_INSN_DELETED_LABEL too.  */
+		      if (note && GET_CODE (XEXP (note, 0)) == CODE_LABEL)
 			LABEL_NUSES (XEXP (note, 0))++;
 
 		      delete_related_insns (trial);
 
-		      if (note)
+		      if (note && GET_CODE (XEXP (note, 0)) == CODE_LABEL)
 			LABEL_NUSES (XEXP (note, 0))--;
 		    }
 		  else

	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]