aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-10-18 08:36:28 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-10-18 08:36:28 +0000
commitc0e081a968c78d13a2bba17a8f865fac03cc6194 (patch)
tree6ac87ce50110858e62204b3bb3df8bca29b549ef
parent054fceb5eef383cad943cc695fe25ccbff66d2d2 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/stor-layout.c17
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);