From: Richard Kenner Date: Sun, 2 Mar 1997 18:25:40 +0000 (-0500) Subject: (process_init_element): Warn and truncate if upper bound of index is X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ee2990e780903c327ff2fe9314a7bac0bfc788b5;p=gcc.git (process_init_element): Warn and truncate if upper bound of index is out of range. From-SVN: r13684 --- diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 592cad1b7f3..32d5c27a0cf 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -5769,10 +5769,8 @@ set_init_index (first, last) error_init ("duplicate array index in initializer%s", " for `%s'", NULL); else { - TREE_INT_CST_LOW (constructor_index) - = TREE_INT_CST_LOW (first); - TREE_INT_CST_HIGH (constructor_index) - = TREE_INT_CST_HIGH (first); + TREE_INT_CST_LOW (constructor_index) = TREE_INT_CST_LOW (first); + TREE_INT_CST_HIGH (constructor_index) = TREE_INT_CST_HIGH (first); if (last != 0 && tree_int_cst_lt (last, first)) error_init ("empty index range in initializer%s", " for `%s'", NULL); @@ -6377,7 +6375,21 @@ process_init_element (value) /* In the case of [LO .. HI] = VALUE, only evaluate VALUE once. */ if (constructor_range_end) - value = save_expr (value); + { + if (constructor_max_index != 0 + && tree_int_cst_lt (constructor_max_index, + constructor_range_end)) + { + pedwarn_init ("excess elements in array initializer%s", + " after `%s'", NULL_PTR); + TREE_INT_CST_HIGH (constructor_range_end) + = TREE_INT_CST_HIGH (constructor_max_index); + TREE_INT_CST_LOW (constructor_range_end) + = TREE_INT_CST_LOW (constructor_max_index); + } + + value = save_expr (value); + } /* Now output the actual element. Ordinarily, output once. @@ -6395,10 +6407,8 @@ process_init_element (value) tem = size_binop (PLUS_EXPR, constructor_index, integer_one_node); - TREE_INT_CST_LOW (constructor_index) - = TREE_INT_CST_LOW (tem); - TREE_INT_CST_HIGH (constructor_index) - = TREE_INT_CST_HIGH (tem); + TREE_INT_CST_LOW (constructor_index) = TREE_INT_CST_LOW (tem); + TREE_INT_CST_HIGH (constructor_index) = TREE_INT_CST_HIGH (tem); if (!value) /* If we are doing the bookkeeping for an element that was