aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2001-01-31 18:38:11 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2001-01-31 18:38:11 +0100
commitce662d4c92d5a0fd86a4ea80e91ca58db778b7ee (patch)
tree707e99442268409e3649852380d881d2309809da /gcc
parent4673dd2cc142a761e9a5d0df21e1001f52498ec5 (diff)
downloadgcc-ce662d4c92d5a0fd86a4ea80e91ca58db778b7ee.zip
gcc-ce662d4c92d5a0fd86a4ea80e91ca58db778b7ee.tar.gz
gcc-ce662d4c92d5a0fd86a4ea80e91ca58db778b7ee.tar.bz2
c-typeck.c (set_init_index): If first is equal to last, assume as if it was not a range at all.
* c-typeck.c (set_init_index): If first is equal to last, assume as if it was not a range at all. * gcc.dg/gnu99-init-1.c: Add test for [0 ... 0] range. From-SVN: r39380
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/c-typeck.c26
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/gnu99-init-1.c3
4 files changed, 28 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cf31ea1..d82c6c9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2001-01-31 Jakub Jelinek <jakub@redhat.com>
+
+ * c-typeck.c (set_init_index): If first is equal to last, assume as
+ if it was not a range at all.
+
2001-01-31 Alexandre Oliva <aoliva@redhat.com>
* config/fp-bit.c: Include tm.h.
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 3dc52e4..3b8f9b0 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -5688,21 +5688,27 @@ set_init_index (first, last)
{
constructor_index = convert (bitsizetype, first);
- if (last != 0 && tree_int_cst_lt (last, first))
+ if (last)
{
- error_init ("empty index range in initializer");
- last = 0;
- }
- else if (last)
- {
- last = convert (bitsizetype, last);
- if (constructor_max_index != 0
- && tree_int_cst_lt (constructor_max_index, last))
+ if (tree_int_cst_equal (first, last))
+ last = 0;
+ else if (tree_int_cst_lt (last, first))
{
- error_init ("array index range in initializer exceeds array bounds");
+ error_init ("empty index range in initializer");
last = 0;
}
+ else
+ {
+ last = convert (bitsizetype, last);
+ if (constructor_max_index != 0
+ && tree_int_cst_lt (constructor_max_index, last))
+ {
+ error_init ("array index range in initializer exceeds array bounds");
+ last = 0;
+ }
+ }
}
+
designator_depth++;
designator_errorneous = 0;
if (constructor_range_stack || last)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7d20abc..14117ae 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2001-01-31 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.dg/gnu99-init-1.c: Add test for [0 ... 0] range.
+
2001-01-31 Jeffrey Oldham <oldham@codesourcery.com>
* gcc.dg/c99-float-1.c: Back out "XFAIL FLT_EVAL_METHOD and
diff --git a/gcc/testsuite/gcc.dg/gnu99-init-1.c b/gcc/testsuite/gcc.dg/gnu99-init-1.c
index 9c22c90..009c851 100644
--- a/gcc/testsuite/gcc.dg/gnu99-init-1.c
+++ b/gcc/testsuite/gcc.dg/gnu99-init-1.c
@@ -24,6 +24,7 @@ struct M o[] = { [0 ... 5].O = { [1 ... 2].K[0 ... 1] = 4 },
struct M p[] = { [0 ... 5].O[1 ... 2].K = { [0 ... 1] = 4 },
[5].O[2].K[2] = 5, 6, 7 };
int q[3][3] = { [0 ... 1] = { [1 ... 2] = 23 }, [1][2] = 24 };
+int r[1] = { [0 ... 1 - 1] = 27 };
int main (void)
{
@@ -73,5 +74,7 @@ int main (void)
abort ();
if (q[2][0] || q[2][1] || q[2][2])
abort ();
+ if (r[0] != 27)
+ abort ();
exit (0);
}