aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-03-19 06:29:25 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1994-03-19 06:29:25 -0500
commit1ff1a2d22056e67ef1af15754d3d097f7324e152 (patch)
treeeae07bf6360ce7d6f567a6a18641702fd7f872c0 /gcc
parent79c844cdcad22819e45e5ffc3f1f8dfb8cd5aa72 (diff)
downloadgcc-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.c9
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);