From be2fa2118342b5a2b489de82cc73da4dd75b7771 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Wed, 5 Mar 2003 09:37:57 +0100 Subject: [PATCH] re PR c/9799 (mismatching structure initializer with nested flexible array member, segfaults) PR c/9799 * c-typeck.c (push_init_level): Add sanity check. From-SVN: r63831 --- gcc/ChangeLog | 5 +++++ gcc/c-typeck.c | 1 + gcc/testsuite/ChangeLog | 4 ++++ .../gcc.c-torture/compile/20030305-1.c | 18 ++++++++++++++++++ 4 files changed, 28 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/compile/20030305-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4d30aba002b..c2f7841329a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-03-05 Eric Botcazou + + PR c/9799 + * c-typeck.c (push_init_level): Add sanity check. + Wed Mar 5 02:04:04 CET 2003 Jan Hubicka * toplev.c (rest_of_compilation): Deffer RTL compilation only when diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 8302a9678f0..52105ac84ec 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -5273,6 +5273,7 @@ push_init_level (implicit) && constructor_fields == 0) process_init_element (pop_init_level (1)); else if (TREE_CODE (constructor_type) == ARRAY_TYPE + && constructor_max_index && tree_int_cst_lt (constructor_max_index, constructor_index)) process_init_element (pop_init_level (1)); else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b67b566c858..006017276a4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2003-03-05 Eric Botcazou + + * gcc.c-torture/compile/20030305-1.c + Wed Mar 5 02:05:19 CET 2003 Jan Hubicka * gcc.dg/i386-local.c: New. diff --git a/gcc/testsuite/gcc.c-torture/compile/20030305-1.c b/gcc/testsuite/gcc.c-torture/compile/20030305-1.c new file mode 100644 index 00000000000..2f608196fdd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20030305-1.c @@ -0,0 +1,18 @@ +/* PR c/9799 */ +/* Verify that GCC doesn't crash on excess elements + in initializer for a flexible array member. */ + +typedef struct { + int aaa; +} s1_t; + +typedef struct { + int bbb; + s1_t s1_array[]; +} s2_t; + +static s2_t s2_array[]= { + { 1, 4 }, + { 2, 5 }, + { 3, 6 } +}; -- 2.30.2