+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++"
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 ();
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)
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;
}