diff options
author | Richard Biener <rguenther@suse.de> | 2013-10-18 08:36:28 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2013-10-18 08:36:28 +0000 |
commit | c0e081a968c78d13a2bba17a8f865fac03cc6194 (patch) | |
tree | 6ac87ce50110858e62204b3bb3df8bca29b549ef | |
parent | 054fceb5eef383cad943cc695fe25ccbff66d2d2 (diff) | |
download | gcc-c0e081a968c78d13a2bba17a8f865fac03cc6194.zip gcc-c0e081a968c78d13a2bba17a8f865fac03cc6194.tar.gz gcc-c0e081a968c78d13a2bba17a8f865fac03cc6194.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/stor-layout.c | 17 |
2 files changed, 14 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 10be813..28b8e49 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +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> * config/aarch64/arm_neon.h diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index 6584b57..20e577d 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -2052,18 +2052,9 @@ layout_type (tree type) of the language-specific code. */ gcc_unreachable (); - case BOOLEAN_TYPE: /* Used for Java, Pascal, and Chill. */ - if (TYPE_PRECISION (type) == 0) - TYPE_PRECISION (type) = 1; /* default to one byte/boolean. */ - - /* ... fall through ... */ - + case BOOLEAN_TYPE: case INTEGER_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, smallest_mode_for_size (TYPE_PRECISION (type), MODE_INT)); 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, tree min_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) { min_value = build_int_cst (type, 0); |