I fell over an ICE where wide_int_to_type_1's expectations of pointer
value caching didn't match that of cache_integer_cst's behaviour. I
don't know why it only exhibited on the modules branch, but it seems
pretty wrong. This patch matches up the behaviours and adds a comment
about that.
gcc/
* tree.c (cache_integer_cst): Fixup pointer caching to match
wide_int_to_type_1's expectations. Add comment.
gcc_assert (!TREE_OVERFLOW (t));
+ /* The caching indices here must match those in
+ wide_int_to_type_1. */
switch (TREE_CODE (type))
{
case NULLPTR_TYPE:
case POINTER_TYPE:
case REFERENCE_TYPE:
- /* Cache NULL pointer. */
- if (integer_zerop (t))
- {
- limit = 1;
+ {
+ if (integer_zerop (t))
ix = 0;
- }
+ else if (integer_onep (t))
+ ix = 2;
+
+ if (ix >= 0)
+ limit = 3;
+ }
break;
case BOOLEAN_TYPE: