mirror of
https://gcc.gnu.org/git/gcc.git
synced 2025-01-15 00:04:33 +08:00
More missed bits from the big __intN patch
From-SVN: r216222
This commit is contained in:
parent
e1217ac7f2
commit
9edc6e4cf9
@ -9711,10 +9711,7 @@ declspecs_add_type (location_t loc, struct c_declspecs *specs,
|
||||
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);
|
||||
|
@ -365,20 +365,6 @@ cp_common_type (tree t1, tree t2)
|
||||
: 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)
|
||||
@ -392,6 +378,26 @@ cp_common_type (tree t1, tree t2)
|
||||
? 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);
|
||||
|
Loading…
Reference in New Issue
Block a user