http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46647
--- Comment #7 from H.J. Lu <hjl.tools at gmail dot com> 2010-11-24 22:00:25 UTC --- This seems to work: --- diff --git a/gcc/builtins.c b/gcc/builtins.c index c9e8e68..840ec29 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -630,11 +630,10 @@ target_char_cast (tree cst, char *p) { unsigned HOST_WIDE_INT val, hostval; - if (!host_integerp (cst, 1) - || CHAR_TYPE_SIZE > HOST_BITS_PER_WIDE_INT) + if (CHAR_TYPE_SIZE > HOST_BITS_PER_WIDE_INT) return 1; - val = tree_low_cst (cst, 1); + val = TREE_INT_CST_LOW (cst); if (CHAR_TYPE_SIZE < HOST_BITS_PER_WIDE_INT) val &= (((unsigned HOST_WIDE_INT) 1) << CHAR_TYPE_SIZE) - 1; ----