Commit 7a803dd8 by Eric Botcazou Committed by Eric Botcazou

* decl.c (make_type_from_size) <INTEGER_TYPE>: Fix typo and tidy up.

From-SVN: r137350
parent a167a676
2008-07-02 Eric Botcazou <ebotcazou@adacore.com>
* decl.c (make_type_from_size) <INTEGER_TYPE>: Fix typo and tidy up.
2008-06-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2008-06-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* ada-tree.h (SET_TYPE_LANG_SPECIFIC, SET_DECL_LANG_SPECIFIC): Fix * ada-tree.h (SET_TYPE_LANG_SPECIFIC, SET_DECL_LANG_SPECIFIC): Fix
...@@ -7105,41 +7105,43 @@ set_rm_size (Uint uint_size, tree gnu_type, Entity_Id gnat_entity) ...@@ -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. /* 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 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. */ we are making a biased type. */
static tree 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; 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 /* If size indicates an error, just return TYPE to avoid propagating
error. Likewise if it's too large to represent. */ the error. Likewise if it's too large to represent. */
if (!size_tree || !host_integerp (size_tree, 1)) if (!size_tree || !host_integerp (size_tree, 1))
return type; return type;
size = tree_low_cst (size_tree, 1); size = tree_low_cst (size_tree, 1);
switch (TREE_CODE (type)) switch (TREE_CODE (type))
{ {
case INTEGER_TYPE: case INTEGER_TYPE:
case ENUMERAL_TYPE: case ENUMERAL_TYPE:
/* Only do something if the type is not already the proper size and is biased_p = (TREE_CODE (type) == INTEGER_TYPE
not a packed array 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) if (TYPE_PACKED_ARRAY_TYPE_P (type)
|| (TYPE_PRECISION (type) == size || (TYPE_PRECISION (type) == size && biased_p == for_biased))
&& biased_p == (TREE_CODE (type) == INTEGER_CST
&& TYPE_BIASED_REPRESENTATION_P (type))))
break; break;
biased_p |= (TREE_CODE (type) == INTEGER_TYPE biased_p |= for_biased;
&& TYPE_BIASED_REPRESENTATION_P (type));
unsigned_p = TYPE_UNSIGNED (type) || biased_p;
size = MIN (size, LONG_LONG_TYPE_SIZE); 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; TREE_TYPE (new_type) = TREE_TYPE (type) ? TREE_TYPE (type) : type;
TYPE_MIN_VALUE (new_type) TYPE_MIN_VALUE (new_type)
= convert (TREE_TYPE (new_type), TYPE_MIN_VALUE (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) ...@@ -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) if (TYPE_THIN_POINTER_P (type) && size >= POINTER_SIZE * 2)
return return
build_pointer_type (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))); build_pointer_type (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type)));
break; break;
default: default:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment