Commit c0e081a9 by Richard Biener Committed by Richard Biener

stor-layout.c (layout_type): Do not change TYPE_PRECISION or TYPE_UNSIGNED of integral types.

2013-10-18  Richard Biener  <rguenther@suse.de>

	* stor-layout.c (layout_type): Do not change TYPE_PRECISION
	or TYPE_UNSIGNED of integral types.
	(set_min_and_max_values_for_integral_type): Leave TYPE_MIN/MAX_VALUE
	NULL_TREE for zero-precision integral types.

From-SVN: r203813
parent 054fceb5
2013-10-18 Richard Biener <rguenther@suse.de>
* stor-layout.c (layout_type): Do not change TYPE_PRECISION
or TYPE_UNSIGNED of integral types.
(set_min_and_max_values_for_integral_type): Leave TYPE_MIN/MAX_VALUE
NULL_TREE for zero-precision integral types.
2013-10-18 James Greenhalgh <james.greenhalgh@arm.com> 2013-10-18 James Greenhalgh <james.greenhalgh@arm.com>
* config/aarch64/arm_neon.h * config/aarch64/arm_neon.h
......
...@@ -2052,18 +2052,9 @@ layout_type (tree type) ...@@ -2052,18 +2052,9 @@ layout_type (tree type)
of the language-specific code. */ of the language-specific code. */
gcc_unreachable (); gcc_unreachable ();
case BOOLEAN_TYPE: /* Used for Java, Pascal, and Chill. */ case BOOLEAN_TYPE:
if (TYPE_PRECISION (type) == 0)
TYPE_PRECISION (type) = 1; /* default to one byte/boolean. */
/* ... fall through ... */
case INTEGER_TYPE: case INTEGER_TYPE:
case ENUMERAL_TYPE: case ENUMERAL_TYPE:
if (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
&& tree_int_cst_sgn (TYPE_MIN_VALUE (type)) >= 0)
TYPE_UNSIGNED (type) = 1;
SET_TYPE_MODE (type, SET_TYPE_MODE (type,
smallest_mode_for_size (TYPE_PRECISION (type), MODE_INT)); smallest_mode_for_size (TYPE_PRECISION (type), MODE_INT));
TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type))); TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
...@@ -2520,6 +2511,12 @@ set_min_and_max_values_for_integral_type (tree type, ...@@ -2520,6 +2511,12 @@ set_min_and_max_values_for_integral_type (tree type,
tree min_value; tree min_value;
tree max_value; tree max_value;
/* For bitfields with zero width we end up creating integer types
with zero precision. Don't assign any minimum/maximum values
to those types, they don't have any valid value. */
if (precision < 1)
return;
if (is_unsigned) if (is_unsigned)
{ {
min_value = build_int_cst (type, 0); min_value = build_int_cst (type, 0);
......
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