aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDJ Delorie <dj@gcc.gnu.org>2014-10-14 16:53:29 -0400
committerDJ Delorie <dj@gcc.gnu.org>2014-10-14 16:53:29 -0400
commit9edc6e4cf97d207b3c0e12096cc1e733d36a81e1 (patch)
tree86a7ed83411ac670ac0ff149d0c718c8bca646b2 /gcc
parente1217ac7f26aca7f383229eea72dc895007cb8a8 (diff)
downloadgcc-9edc6e4cf97d207b3c0e12096cc1e733d36a81e1.zip
gcc-9edc6e4cf97d207b3c0e12096cc1e733d36a81e1.tar.gz
gcc-9edc6e4cf97d207b3c0e12096cc1e733d36a81e1.tar.bz2
More missed bits from the big __intN patch
From-SVN: r216222
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c/c-decl.c5
-rw-r--r--gcc/cp/typeck.c34
2 files changed, 21 insertions, 18 deletions
diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c
index 2900c71..d994114 100644
--- a/gcc/c/c-decl.c
+++ b/gcc/c/c-decl.c
@@ -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);
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index bc30a08..99f4b88 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -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);