diff options
author | Jeff Law <law@redhat.com> | 2006-02-16 17:18:03 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2006-02-16 17:18:03 -0700 |
commit | 7f18f91710ecaf3f6f90989716f07f5a247d0764 (patch) | |
tree | e862177b74293f68fdf42829df228e471d62e970 | |
parent | b18b991a8cfa668851ba490065a095d3d8669667 (diff) | |
download | gcc-7f18f91710ecaf3f6f90989716f07f5a247d0764.zip gcc-7f18f91710ecaf3f6f90989716f07f5a247d0764.tar.gz gcc-7f18f91710ecaf3f6f90989716f07f5a247d0764.tar.bz2 |
stor-layout.c (set_sizetype): Set TYPE_MAX_VALUE properly for sizetype when sizetype is unsigned.
* stor-layout.c (set_sizetype): Set TYPE_MAX_VALUE properly
for sizetype when sizetype is unsigned.
From-SVN: r111170
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/stor-layout.c | 19 |
2 files changed, 24 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fc3e1c8..57696b6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-02-16 Jeff Law <law@redhat.com> + + * stor-layout.c (set_sizetype): Set TYPE_MAX_VALUE properly + for sizetype when sizetype is unsigned. + 2006-02-16 Denis Nagorny <denis_nagorny@linux.intel.com> PR rtl-optimization/25603 diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index bf25e97..caf176f 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -2018,6 +2018,25 @@ set_sizetype (tree type) ssizetype = sizetype; sbitsizetype = bitsizetype; } + + /* If SIZETYPE is unsigned, we need to fix TYPE_MAX_VALUE so that + it is sign extended in a way consistent with force_fit_type. */ + if (TYPE_UNSIGNED (type)) + { + tree orig_max, new_max; + + orig_max = TYPE_MAX_VALUE (sizetype); + + /* Build a new node with the same values, but a different type. */ + new_max = build_int_cst_wide (sizetype, + TREE_INT_CST_LOW (orig_max), + TREE_INT_CST_HIGH (orig_max)); + + /* Now sign extend it using force_fit_type to ensure + consistency. */ + new_max = force_fit_type (new_max, 0, 0, 0); + TYPE_MAX_VALUE (sizetype) = new_max; + } } /* TYPE is an integral type, i.e., an INTEGRAL_TYPE, ENUMERAL_TYPE |