diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d38c54986e9ac5d60df98dc74dbdf8d4d946efbe..b7ae95a83aa66403811880a0160c7b6a5b034ff8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-04-05  Nathan Froyd  <froydnj@codesourcery.com>
+
+	* combine.c (combine_instructions) [AUTO_INC_DEC]: Declare links
+	as an rtx.
+	(try_combine) [AUTO_INC_DEC]: Declare a local link rtx.
+
 2011-04-05  Steven Bosscher  <steven@gcc.gnu.org>
 
 	PR middle-end/48441
diff --git a/gcc/combine.c b/gcc/combine.c
index 30b7fdd041d926f0b567d62f59e16ff6bdc15e56..3e4a38c0a4603c8ff7a91c5a246ad80237707ff9 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -1139,6 +1139,8 @@ combine_instructions (rtx f, unsigned int nregs)
       FOR_BB_INSNS (this_basic_block, insn)
         if (INSN_P (insn) && BLOCK_FOR_INSN (insn))
 	  {
+            rtx links;
+
             subst_low_luid = DF_INSN_LUID (insn);
             subst_insn = insn;
 
@@ -2911,15 +2913,18 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p)
     /* It's not the exception.  */
 #endif
 #ifdef AUTO_INC_DEC
-    for (link = REG_NOTES (i3); link; link = XEXP (link, 1))
-      if (REG_NOTE_KIND (link) == REG_INC
-	  && (reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (i2))
-	      || (i1 != 0
-		  && reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (i1)))))
-	{
-	  undo_all ();
-	  return 0;
-	}
+    {
+      rtx link;
+      for (link = REG_NOTES (i3); link; link = XEXP (link, 1))
+	if (REG_NOTE_KIND (link) == REG_INC
+	    && (reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (i2))
+		|| (i1 != 0
+		    && reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (i1)))))
+	  {
+	    undo_all ();
+	    return 0;
+	  }
+    }
 #endif
 
   /* See if the SETs in I1 or I2 need to be kept around in the merged