[llvm-commits] [llvm-gcc-4.2] r57482 - /llvm-gcc-4.2/trunk/gcc/fold-const.c
Chris Lattner
sabre at nondot.org
Mon Oct 13 23:58:18 PDT 2008
Author: lattner
Date: Tue Oct 14 01:58:18 2008
New Revision: 57482
URL: http://llvm.org/viewvc/llvm-project?rev=57482&view=rev
Log:
Fix a broken invariant in fold-const that caused it to infinitely recurse on the testcase
in PR2797. It requires that nested folds be already folded on input. It gets this right
in most places in fold_binary, but fails in these two places. This makes the code
consistent, which fixes the bug. Yay for much head scratching.
Testcase here: llvm/FrontendC/2008-10-13-FrontendCrash.c
Modified:
llvm-gcc-4.2/trunk/gcc/fold-const.c
Modified: llvm-gcc-4.2/trunk/gcc/fold-const.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/fold-const.c?rev=57482&r1=57481&r2=57482&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/fold-const.c (original)
+++ llvm-gcc-4.2/trunk/gcc/fold-const.c Tue Oct 14 01:58:18 2008
@@ -10571,12 +10571,12 @@
/* bool_var != 1 becomes !bool_var. */
if (TREE_CODE (TREE_TYPE (arg0)) == BOOLEAN_TYPE && integer_onep (arg1)
&& code == NE_EXPR)
- return fold_build1 (TRUTH_NOT_EXPR, type, arg0);
+ return fold_build1 (TRUTH_NOT_EXPR, type, fold_convert (type, arg0));
/* bool_var == 0 becomes !bool_var. */
if (TREE_CODE (TREE_TYPE (arg0)) == BOOLEAN_TYPE && integer_zerop (arg1)
&& code == EQ_EXPR)
- return fold_build1 (TRUTH_NOT_EXPR, type, arg0);
+ return fold_build1 (TRUTH_NOT_EXPR, type, fold_convert (type, arg0));
/* ~a != C becomes a != ~C where C is a constant. Likewise for ==. */
if (TREE_CODE (arg0) == BIT_NOT_EXPR
More information about the llvm-commits
mailing list