pp_c_character_constant only calls pp_p_char for values that fit into
a HWI of the constant's signedness (i.e. an unsigned HWI if TYPE_UNSIGNED
and a signed HWI otherwise). But pp_c_character_constant is only called by:
case INTEGER_CST:
{
tree type = TREE_TYPE (e);
...
else if (type == char_type_node)
pp_c_character_constant (this, e);
and in practice a character constant is always going to fit into a HWI.
The current !host_integerp case simply truncates the constant to an
unsigned int anyway.
Maybe the type == wchar_type_node test is dead too, I'm not sure.
I'm happy to remove it at the same time if that seems like the right
thing to do.
Tested on x86_64-linux-gnu. OK to install?
Thanks,
Richard
gcc/c-family/
* c-pretty-print.c (pp_c_character_constant): Remove unnecessary
host_integerp check.
Index: gcc/c-family/c-pretty-print.c
===================================================================
--- gcc/c-family/c-pretty-print.c 2013-11-14 20:21:27.183058648 +0000
+++ gcc/c-family/c-pretty-print.c 2013-11-14 20:22:20.664818284 +0000
@@ -954,10 +954,7 @@ pp_c_character_constant (c_pretty_printe
if (type == wchar_type_node)
pp_character (pp, 'L');
pp_quote (pp);
- if (host_integerp (c, TYPE_UNSIGNED (type)))
- pp_c_char (pp, tree_low_cst (c, TYPE_UNSIGNED (type)));
- else
- pp_scalar (pp, "\\x%x", (unsigned) TREE_INT_CST_LOW (c));
+ pp_c_char (pp, (unsigned) TREE_INT_CST_LOW (c));
pp_quote (pp);
}