diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1994-03-19 06:29:25 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1994-03-19 06:29:25 -0500 |
commit | 1ff1a2d22056e67ef1af15754d3d097f7324e152 (patch) | |
tree | eae07bf6360ce7d6f567a6a18641702fd7f872c0 /gcc | |
parent | 79c844cdcad22819e45e5ffc3f1f8dfb8cd5aa72 (diff) | |
download | gcc-1ff1a2d22056e67ef1af15754d3d097f7324e152.zip gcc-1ff1a2d22056e67ef1af15754d3d097f7324e152.tar.gz gcc-1ff1a2d22056e67ef1af15754d3d097f7324e152.tar.bz2 |
(grokdeclarator): Use signed version of `sizetype' for type of array
index.
From-SVN: r6822
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c-decl.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 7e07932..a95e725 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -4220,6 +4220,8 @@ grokdeclarator (declarator, declspecs, decl_context, initialized) register tree size = TREE_OPERAND (declarator, 1); /* An uninitialized decl with `extern' is a reference. */ int extern_ref = !initialized && (specbits & (1 << (int) RID_EXTERN)); + /* The index is a signed object `sizetype' bits wide. */ + tree index_type = signed_type (sizetype); declarator = TREE_OPERAND (declarator, 0); @@ -4292,10 +4294,11 @@ grokdeclarator (declarator, declspecs, decl_context, initialized) } } - /* Convert size to sizetype, so that if it is a variable + /* Convert size to index_type, so that if it is a variable the computations will be done in the proper mode. */ - itype = fold (build (MINUS_EXPR, sizetype, - convert (sizetype, size), size_one_node)); + itype = fold (build (MINUS_EXPR, index_type, + convert (index_type, size), + convert (index_type, size_one_node))); if (size_varies) itype = variable_size (itype); |