diff options
author | brolley <brolley@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-07-27 14:37:00 +0000 |
---|---|---|
committer | brolley <brolley@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-07-27 14:37:00 +0000 |
commit | c33b1c18606e17b011308ad5f9a4420d319cdbf3 (patch) | |
tree | ffa2167aaf158c2fc77376592c3f34d3d595c5ee /gcc/expr.c | |
parent | 4b1b77f144735af938fef9feee407e16bcaf2692 (diff) | |
download | gcc-c33b1c18606e17b011308ad5f9a4420d319cdbf3.tar.gz |
Mon Jul 27 17:18:52 1998 Dave Brolley <brolley@cygnus.com>
* stor-layout.c (layout_type): Handle arrays of bits, for Chill.
* expr.c (get_inner_reference): Handle zero-based, unsigned, array
index conversion.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@21416 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c index fd43689724b..208db5cb2d8 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4546,8 +4546,20 @@ get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode, index_type = TREE_TYPE (index); } + /* Optimize the special-case of a zero lower bound. + + We convert the low_bound to sizetype to avoid some problems + with constant folding. (E.g. suppose the lower bound is 1, + and its mode is QI. Without the conversion, (ARRAY + +(INDEX-(unsigned char)1)) becomes ((ARRAY+(-(unsigned char)1)) + +INDEX), which becomes (ARRAY+255+INDEX). Oops!) + + But sizetype isn't quite right either (especially if + the lowbound is negative). FIXME */ + if (! integer_zerop (low_bound)) - index = fold (build (MINUS_EXPR, index_type, index, low_bound)); + index = fold (build (MINUS_EXPR, index_type, index, + convert (sizetype, low_bound))); if (TREE_CODE (index) == INTEGER_CST) { |