/* Handle superfluous braces around string cst as in
char x[] = {"foo"}; */
- if (string_flag
- && constructor_type
+ if (constructor_type
&& !was_designated
&& TREE_CODE (constructor_type) == ARRAY_TYPE
&& INTEGRAL_TYPE_P (TREE_TYPE (constructor_type))
&& integer_zerop (constructor_unfilled_index))
{
if (constructor_stack->replacement_value.value)
- error_init (loc, "excess elements in %<char%> array initializer");
- constructor_stack->replacement_value = value;
- return;
+ {
+ error_init (loc, "excess elements in %<char%> array initializer");
+ return;
+ }
+ else if (string_flag)
+ {
+ constructor_stack->replacement_value = value;
+ return;
+ }
}
if (constructor_stack->replacement_value.value != NULL_TREE)
--- /dev/null
+/* Test for various cases of excess initializers for char arrays,
+ bug 107926. */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+
+char s0[] = {"abc",1}; /* { dg-error "array initializer|near init" } */
+char s1[] = {"abc","a"}; /* { dg-error "array initializer|near init" } */
+char s2[] = {1,"abc"}; /* { dg-error "array initializer|near init|computable at load time" } */
+/* { dg-warning "integer from pointer without a cast" "" { target *-*-* } .-1 } */
+
+char s3[5] = {"abc",1}; /* { dg-error "array initializer|near init" } */
+char s4[5] = {"abc","a"}; /* { dg-error "array initializer|near init" } */
+char s5[5] = {1,"abc"}; /* { dg-error "array initializer|near init|computable at load time" } */
+/* { dg-warning "integer from pointer without a cast" "" { target *-*-* } .-1 } */