Commit e66e5d9e by Eric Botcazou Committed by Eric Botcazou

re PR ada/38127 (ACATS cd1c04e fails on sparc, hppa)

	PR ada/38127
	* gcc-interface/decl.c (make_type_from_size): Do not special-case
	boolean types.
	* gcc-interface/targtyps.c: Tweak comment.

From-SVN: r141913
parent 4c533e5a
2008-11-16 Eric Botcazou <ebotcazou@adacore.com>
PR ada/38127
* gcc-interface/decl.c (make_type_from_size): Do not special-case
boolean types.
* gcc-interface/targtyps.c: Tweak comment.
2008-11-15 Geert Bosch <bosch@adacore.com> 2008-11-15 Geert Bosch <bosch@adacore.com>
* gcc-interface/trans.c (emit_check): Put back a final save_expr * gcc-interface/trans.c (emit_check): Put back a final save_expr
...@@ -7184,7 +7184,7 @@ static tree ...@@ -7184,7 +7184,7 @@ static tree
make_type_from_size (tree type, tree size_tree, bool for_biased) make_type_from_size (tree type, tree size_tree, bool for_biased)
{ {
unsigned HOST_WIDE_INT size; unsigned HOST_WIDE_INT size;
bool biased_p, boolean_p; bool biased_p;
tree new_type; tree new_type;
/* If size indicates an error, just return TYPE to avoid propagating /* If size indicates an error, just return TYPE to avoid propagating
...@@ -7202,19 +7202,10 @@ make_type_from_size (tree type, tree size_tree, bool for_biased) ...@@ -7202,19 +7202,10 @@ make_type_from_size (tree type, tree size_tree, bool for_biased)
biased_p = (TREE_CODE (type) == INTEGER_TYPE biased_p = (TREE_CODE (type) == INTEGER_TYPE
&& TYPE_BIASED_REPRESENTATION_P (type)); && TYPE_BIASED_REPRESENTATION_P (type));
boolean_p = (TREE_CODE (type) == BOOLEAN_TYPE
|| (TREE_CODE (type) == INTEGER_TYPE
&& TREE_TYPE (type)
&& TREE_CODE (TREE_TYPE (type)) == BOOLEAN_TYPE));
if (boolean_p)
size = round_up_to_align (size, BITS_PER_UNIT);
/* Only do something if the type is not a packed array type and /* Only do something if the type is not a packed array type and
doesn't already have the proper size. */ doesn't already have the proper size. */
if (TYPE_PACKED_ARRAY_TYPE_P (type) if (TYPE_PACKED_ARRAY_TYPE_P (type)
|| (biased_p == for_biased && TYPE_PRECISION (type) == size) || (TYPE_PRECISION (type) == size && biased_p == for_biased))
|| (boolean_p && compare_tree_int (TYPE_SIZE (type), size) == 0))
break; break;
biased_p |= for_biased; biased_p |= for_biased;
...@@ -7224,18 +7215,13 @@ make_type_from_size (tree type, tree size_tree, bool for_biased) ...@@ -7224,18 +7215,13 @@ make_type_from_size (tree type, tree size_tree, bool for_biased)
new_type = make_unsigned_type (size); new_type = make_unsigned_type (size);
else else
new_type = make_signed_type (size); new_type = make_signed_type (size);
if (boolean_p)
TYPE_PRECISION (new_type) = 1;
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));
TYPE_MAX_VALUE (new_type) TYPE_MAX_VALUE (new_type)
= convert (TREE_TYPE (new_type), TYPE_MAX_VALUE (type)); = convert (TREE_TYPE (new_type), TYPE_MAX_VALUE (type));
TYPE_BIASED_REPRESENTATION_P (new_type) = biased_p; TYPE_BIASED_REPRESENTATION_P (new_type) = biased_p;
if (boolean_p) TYPE_RM_SIZE_NUM (new_type) = bitsize_int (size);
TYPE_RM_SIZE_NUM (new_type) = bitsize_int (1);
else
TYPE_RM_SIZE_NUM (new_type) = bitsize_int (size);
return new_type; return new_type;
case RECORD_TYPE: case RECORD_TYPE:
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* * * *
* Body * * Body *
* * * *
* Copyright (C) 1992-2007, Free Software Foundation, Inc. * * Copyright (C) 1992-2008, Free Software Foundation, Inc. *
* * * *
* GNAT is free software; you can redistribute it and/or modify it under * * GNAT is free software; you can redistribute it and/or modify it under *
* terms of the GNU General Public License as published by the Free Soft- * * terms of the GNU General Public License as published by the Free Soft- *
...@@ -164,12 +164,13 @@ get_target_maximum_default_alignment (void) ...@@ -164,12 +164,13 @@ get_target_maximum_default_alignment (void)
Stricter alignment requests trigger gigi's aligning_type circuitry for Stricter alignment requests trigger gigi's aligning_type circuitry for
objects allocated by the default allocator. */ objects allocated by the default allocator. */
/* ??? Need a way to get info about __gnat_malloc from here (whether it is
handy and what alignment it honors). In the meantime, resort to malloc
considerations only. */
Pos Pos
get_target_default_allocator_alignment (void) get_target_default_allocator_alignment (void)
{ {
/* ??? Need a way to get info about __gnat_malloc from here (whether
it is handy and what alignment it honors). */
return MALLOC_ABI_ALIGNMENT / BITS_PER_UNIT; return MALLOC_ABI_ALIGNMENT / BITS_PER_UNIT;
} }
......
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