builtins.c (expand_builtin_expect_jump): Fix thinko of reusing live "next" variable...
authorRoger Sayle <roger@eyesopen.com>
Sun, 18 Jan 2004 20:04:59 +0000 (20:04 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Sun, 18 Jan 2004 20:04:59 +0000 (20:04 +0000)
* builtins.c (expand_builtin_expect_jump): Fix thinko of reusing
live "next" variable, which can lead to an infinite loop.

From-SVN: r76111

gcc/ChangeLog
gcc/builtins.c

index 3e28fe1fd9336b488ced687bc9727aa9b1dc6dcb..922bbb90668716ad90b099e698c539cf62b6dfcb 100644 (file)
@@ -1,3 +1,8 @@
+2004-01-18  Roger Sayle  <roger@eyesopen.com>
+
+       * builtins.c (expand_builtin_expect_jump): Fix thinko of reusing
+       live "next" variable, which could lead to an infinite loop.
+
 2004-01-18  Andrew Pinski  <pinskia@physics.uc.edu>
 
        * config/rs6000/altivec.h: Wrap C++ functions in extern "C++"
index d34cbd6a0b705c02d88425da4972e51e99524396..3174e75cea2fce9943d08ccbaf0b0d95bd2f2478 100644 (file)
@@ -4458,7 +4458,7 @@ expand_builtin_expect_jump (tree exp, rtx if_false_label, rtx if_true_label)
   if (TREE_CODE (TREE_TYPE (arg1)) == INTEGER_TYPE
       && (integer_zerop (arg1) || integer_onep (arg1)))
     {
-      rtx insn, drop_through_label;
+      rtx insn, drop_through_label, temp;
 
       /* Expand the jump insns.  */
       start_sequence ();
@@ -4511,13 +4511,15 @@ expand_builtin_expect_jump (tree exp, rtx if_false_label, rtx if_true_label)
 
                  if (next && GET_CODE (next) == JUMP_INSN
                      && any_uncondjump_p (next))
-                   next = XEXP (SET_SRC (pc_set (next)), 0);
+                   temp = XEXP (SET_SRC (pc_set (next)), 0);
+                 else
+                   temp = next;
 
-                 /* NEXT is either a CODE_LABEL, NULL_RTX or something
+                 /* TEMP is either a CODE_LABEL, NULL_RTX or something
                     else that can't possibly match either target label.  */
-                 if (next == if_false_label)
+                 if (temp == if_false_label)
                    taken = 1;
-                 else if (next == if_true_label)
+                 else if (temp == if_true_label)
                    taken = 0;
                }
              else if (then_dest == pc_rtx)
@@ -4527,11 +4529,13 @@ expand_builtin_expect_jump (tree exp, rtx if_false_label, rtx if_true_label)
 
                  if (next && GET_CODE (next) == JUMP_INSN
                      && any_uncondjump_p (next))
-                   next = XEXP (SET_SRC (pc_set (next)), 0);
+                   temp = XEXP (SET_SRC (pc_set (next)), 0);
+                 else
+                   temp = next;
 
-                 if (next == if_false_label)
+                 if (temp == if_false_label)
                    taken = 0;
-                 else if (next == if_true_label)
+                 else if (temp == if_true_label)
                    taken = 1;
                }