aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.cc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2023-09-19 09:50:35 +0200
committerJakub Jelinek <jakub@redhat.com>2023-09-19 09:50:35 +0200
commite16dee6df363b37a6e2f4cadc6fc242b541dbbc5 (patch)
tree8b181f0954d456615d69f8df9455028b8311ce99 /gcc/tree.cc
parent15345980633c502f0486a2e40e96224f49134130 (diff)
downloadgcc-e16dee6df363b37a6e2f4cadc6fc242b541dbbc5.zip
gcc-e16dee6df363b37a6e2f4cadc6fc242b541dbbc5.tar.gz
gcc-e16dee6df363b37a6e2f4cadc6fc242b541dbbc5.tar.bz2
small _BitInt tweaks
I think it is undesirable when being asked for signed_type_for of unsigned _BitInt(1) (which is valid) to get signed _BitInt(1) (which is invalid, the standard only allows signed _BitInt(2) and larger), so the patch returns 1-bit signed INTEGER_TYPE for those cases. Furthermore it asserts in build_bitint_type that nothing attempts to create signed _BitInt(0), unsigned _BitInt(0) or signed _BitInt(1) types. 2023-09-18 Jakub Jelinek <jakub@redhat.com> gcc/ * tree.cc (build_bitint_type): Assert precision is not 0, or for signed types 1. (signed_or_unsigned_type_for): Return INTEGER_TYPE for signed variant of unsigned _BitInt(1). gcc/c-family/ * c-common.cc (c_common_signed_or_unsigned_type): Return INTEGER_TYPE for signed variant of unsigned _BitInt(1).
Diffstat (limited to 'gcc/tree.cc')
-rw-r--r--gcc/tree.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/tree.cc b/gcc/tree.cc
index b34d75f..8a8d6d5 100644
--- a/gcc/tree.cc
+++ b/gcc/tree.cc
@@ -7179,6 +7179,8 @@ build_bitint_type (unsigned HOST_WIDE_INT precision, int unsignedp)
{
tree itype, ret;
+ gcc_checking_assert (precision >= 1 + !unsignedp);
+
if (unsignedp)
unsignedp = MAX_INT_CACHED_PREC + 1;
@@ -11096,7 +11098,7 @@ signed_or_unsigned_type_for (int unsignedp, tree type)
else
return NULL_TREE;
- if (TREE_CODE (type) == BITINT_TYPE)
+ if (TREE_CODE (type) == BITINT_TYPE && (unsignedp || bits > 1))
return build_bitint_type (bits, unsignedp);
return build_nonstandard_integer_type (bits, unsignedp);
}