aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/decl.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2008-07-02 10:10:15 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2008-07-02 10:10:15 +0000
commit7a803dd8e7a249e2202098ebe8e9f7b79611afdc (patch)
treea59070fcf6386353d629e220b6650062c30ddc0f /gcc/ada/decl.c
parenta167a67620fe7124ed29891ba32e7af676831a3c (diff)
downloadgcc-7a803dd8e7a249e2202098ebe8e9f7b79611afdc.zip
gcc-7a803dd8e7a249e2202098ebe8e9f7b79611afdc.tar.gz
gcc-7a803dd8e7a249e2202098ebe8e9f7b79611afdc.tar.bz2
* decl.c (make_type_from_size) <INTEGER_TYPE>: Fix typo and tidy up.
From-SVN: r137350
Diffstat (limited to 'gcc/ada/decl.c')
-rw-r--r--gcc/ada/decl.c37
1 files changed, 19 insertions, 18 deletions
diff --git a/gcc/ada/decl.c b/gcc/ada/decl.c
index e6865d2..ebc2e5e 100644
--- a/gcc/ada/decl.c
+++ b/gcc/ada/decl.c
@@ -7105,41 +7105,43 @@ set_rm_size (Uint uint_size, tree gnu_type, Entity_Id gnat_entity)
/* Given a type TYPE, return a new type whose size is appropriate for SIZE.
If TYPE is the best type, return it. Otherwise, make a new type. We
- only support new integral and pointer types. BIASED_P is nonzero if
+ only support new integral and pointer types. FOR_BIASED is nonzero if
we are making a biased type. */
static tree
-make_type_from_size (tree type, tree size_tree, bool biased_p)
+make_type_from_size (tree type, tree size_tree, bool for_biased)
{
- tree new_type;
unsigned HOST_WIDE_INT size;
- bool unsigned_p;
+ bool biased_p;
+ tree new_type;
- /* If size indicates an error, just return TYPE to avoid propagating the
- error. Likewise if it's too large to represent. */
+ /* If size indicates an error, just return TYPE to avoid propagating
+ the error. Likewise if it's too large to represent. */
if (!size_tree || !host_integerp (size_tree, 1))
return type;
size = tree_low_cst (size_tree, 1);
+
switch (TREE_CODE (type))
{
case INTEGER_TYPE:
case ENUMERAL_TYPE:
- /* Only do something if the type is not already the proper size and is
- not a packed array type. */
+ biased_p = (TREE_CODE (type) == INTEGER_TYPE
+ && TYPE_BIASED_REPRESENTATION_P (type));
+
+ /* Only do something if the type is not a packed array type and
+ doesn't already have the proper size. */
if (TYPE_PACKED_ARRAY_TYPE_P (type)
- || (TYPE_PRECISION (type) == size
- && biased_p == (TREE_CODE (type) == INTEGER_CST
- && TYPE_BIASED_REPRESENTATION_P (type))))
+ || (TYPE_PRECISION (type) == size && biased_p == for_biased))
break;
- biased_p |= (TREE_CODE (type) == INTEGER_TYPE
- && TYPE_BIASED_REPRESENTATION_P (type));
- unsigned_p = TYPE_UNSIGNED (type) || biased_p;
-
+ biased_p |= for_biased;
size = MIN (size, LONG_LONG_TYPE_SIZE);
- new_type
- = unsigned_p ? make_unsigned_type (size) : make_signed_type (size);
+
+ if (TYPE_UNSIGNED (type) || biased_p)
+ new_type = make_unsigned_type (size);
+ else
+ new_type = make_signed_type (size);
TREE_TYPE (new_type) = TREE_TYPE (type) ? TREE_TYPE (type) : type;
TYPE_MIN_VALUE (new_type)
= convert (TREE_TYPE (new_type), TYPE_MIN_VALUE (type));
@@ -7164,7 +7166,6 @@ make_type_from_size (tree type, tree size_tree, bool biased_p)
if (TYPE_THIN_POINTER_P (type) && size >= POINTER_SIZE * 2)
return
build_pointer_type (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type)));
-
break;
default: