diff options
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 55f4ce4..0e301a7 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -7436,11 +7436,17 @@ tree_expr_nonnegative_p (t) { case ABS_EXPR: case FFS_EXPR: - case CLZ_EXPR: - case CTZ_EXPR: case POPCOUNT_EXPR: case PARITY_EXPR: return 1; + + case CLZ_EXPR: + case CTZ_EXPR: + /* These are undefined at zero. This is true even if + C[LT]Z_DEFINED_VALUE_AT_ZERO is set, since what we're + computing here is a user-visible property. */ + return 0; + case INTEGER_CST: return tree_int_cst_sgn (t) >= 0; case TRUNC_DIV_EXPR: |