diff options
author | Jakub Jelinek <jakub@redhat.com> | 2001-01-31 18:38:11 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2001-01-31 18:38:11 +0100 |
commit | ce662d4c92d5a0fd86a4ea80e91ca58db778b7ee (patch) | |
tree | 707e99442268409e3649852380d881d2309809da /gcc | |
parent | 4673dd2cc142a761e9a5d0df21e1001f52498ec5 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c-typeck.c | 26 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/gnu99-init-1.c | 3 |
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); } |