case RID_INT_N_2:
case RID_INT_N_3:
specs->int_n_idx = i - RID_INT_N_0;
- if (!in_system_header_at (input_location)
- /* As a special exception, allow a type that's used
- for __SIZE_TYPE__. */
- && int_n_data[specs->int_n_idx].bitsize != POINTER_SIZE)
+ if (!in_system_header_at (input_location))
pedwarn (loc, OPT_Wpedantic,
"ISO C does not support %<__int%d%> types",
int_n_data[specs->int_n_idx].bitsize);
: long_long_integer_type_node);
return build_type_attribute_variant (t, attributes);
}
- for (i = 0; i < NUM_INT_N_ENTS; i ++)
- {
- if (int_n_enabled_p [i]
- && (same_type_p (TYPE_MAIN_VARIANT (t1),
- int_n_trees[i].signed_type)
- || same_type_p (TYPE_MAIN_VARIANT (t2),
- int_n_trees[i].signed_type)))
- {
- tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
- ? int_n_trees[i].unsigned_type
- : int_n_trees[i].signed_type);
- return build_type_attribute_variant (t, attributes);
- }
- }
/* Go through the same procedure, but for longs. */
if (same_type_p (TYPE_MAIN_VARIANT (t1), long_unsigned_type_node)
? long_unsigned_type_node : long_integer_type_node);
return build_type_attribute_variant (t, attributes);
}
+
+ /* For __intN types, either the type is __int128 (and is lower
+ priority than the types checked above, but higher than other
+ 128-bit types) or it's known to not be the same size as other
+ types (enforced in toplev.c). Prefer the unsigned type. */
+ for (i = 0; i < NUM_INT_N_ENTS; i ++)
+ {
+ if (int_n_enabled_p [i]
+ && (same_type_p (TYPE_MAIN_VARIANT (t1), int_n_trees[i].signed_type)
+ || same_type_p (TYPE_MAIN_VARIANT (t2), int_n_trees[i].signed_type)
+ || same_type_p (TYPE_MAIN_VARIANT (t1), int_n_trees[i].unsigned_type)
+ || same_type_p (TYPE_MAIN_VARIANT (t2), int_n_trees[i].unsigned_type)))
+ {
+ tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2))
+ ? int_n_trees[i].unsigned_type
+ : int_n_trees[i].signed_type);
+ return build_type_attribute_variant (t, attributes);
+ }
+ }
+
/* Otherwise prefer the unsigned one. */
if (TYPE_UNSIGNED (t1))
return build_type_attribute_variant (t1, attributes);