diff options
author | Jakub Jelinek <jakub@gcc.gnu.org> | 2002-02-20 23:54:35 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2002-02-20 23:54:35 +0100 |
commit | 4636c87e232d7df60478859d9a15556d5bc3c0c8 (patch) | |
tree | 92091a1ae9884506ec5a5bd1f121978289726ebf /gcc/tree.c | |
parent | c98b201bd9e49891ff049835c3ae79897a885071 (diff) | |
download | gcc-4636c87e232d7df60478859d9a15556d5bc3c0c8.zip gcc-4636c87e232d7df60478859d9a15556d5bc3c0c8.tar.gz gcc-4636c87e232d7df60478859d9a15556d5bc3c0c8.tar.bz2 |
re PR c/4389 (Improper constant folding)
PR c/4389
* tree.c (host_integerp): Ensure that the constant integer is
representable in a HOST_WIDE_INT or an unsigned HOST_WIDE_INT
when pos is zero or non-zero respectively. Clarify comment.
* c-format.c (check_format_info_recurse): Fix host_integerp
usage; the pos argument should be zero when assigning to a
signed HOST_WIDE_INT.
* gcc.dg/20020219-1.c: New test.
From-SVN: r49914
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -3436,8 +3436,10 @@ tree_int_cst_compare (t1, t2) return 0; } -/* Return 1 if T is an INTEGER_CST that can be represented in a single - HOST_WIDE_INT value. If POS is nonzero, the result must be positive. */ +/* Return 1 if T is an INTEGER_CST that can be manipulated efficiently on + the host. If POS is zero, the value can be represented in a single + HOST_WIDE_INT. If POS is nonzero, the value must be positive and can + be represented in a single unsigned HOST_WIDE_INT. */ int host_integerp (t, pos) @@ -3449,9 +3451,9 @@ host_integerp (t, pos) && ((TREE_INT_CST_HIGH (t) == 0 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0) || (! pos && TREE_INT_CST_HIGH (t) == -1 - && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0) - || (! pos && TREE_INT_CST_HIGH (t) == 0 - && TREE_UNSIGNED (TREE_TYPE (t))))); + && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0 + && ! TREE_UNSIGNED (TREE_TYPE (t))) + || (pos && TREE_INT_CST_HIGH (t) == 0))); } /* Return the HOST_WIDE_INT least significant bits of T if it is an |