From: Jakub Jelinek Date: Wed, 5 Dec 2001 14:14:01 +0000 (+0100) Subject: c-typeck.c (output_init_element): Call digest_init just once... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=822baa84c86a39c89b6f066210d645f36f4f3eee;p=gcc.git c-typeck.c (output_init_element): Call digest_init just once... * c-typeck.c (output_init_element): Call digest_init just once, not in each if branch and check its return value for error_mark_node. * gcc.dg/noncompile/20011025-1.c: New test. From-SVN: r47673 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 95e2075e3f8..e2485c52f22 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2001-12-05 Jakub Jelinek + + * c-typeck.c (output_init_element): Call digest_init + just once, not in each if branch and check its return value for + error_mark_node. + 2001-12-05 Jakub Jelinek * c-decl.c (pushdecl): Only increase n_incomplete if pushed decl's diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 297afad8ce8..56775049a1c 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -4701,7 +4701,7 @@ digest_init (type, init, require_constant, constructor_constant) if (type == error_mark_node || init == error_mark_node - || TREE_TYPE (init) == error_mark_node) + || TREE_TYPE (init) == error_mark_node) return error_mark_node; /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */ @@ -6267,6 +6267,8 @@ output_init_element (value, type, field, pending) || TREE_CHAIN (field))))) return; + value = digest_init (type, value, require_constant_value, + require_constant_elements); if (value == error_mark_node) { constructor_erroneous = 1; @@ -6283,9 +6285,7 @@ output_init_element (value, type, field, pending) && tree_int_cst_lt (field, constructor_unfilled_index)) set_nonincremental_init (); - add_pending_init (field, - digest_init (type, value, require_constant_value, - require_constant_elements)); + add_pending_init (field, value); return; } else if (TREE_CODE (constructor_type) == RECORD_TYPE @@ -6311,9 +6311,7 @@ output_init_element (value, type, field, pending) } } - add_pending_init (field, - digest_init (type, value, require_constant_value, - require_constant_elements)); + add_pending_init (field, value); return; } else if (TREE_CODE (constructor_type) == UNION_TYPE @@ -6332,10 +6330,7 @@ output_init_element (value, type, field, pending) if (field && TREE_CODE (field) == INTEGER_CST) field = copy_node (field); constructor_elements - = tree_cons (field, digest_init (type, value, - require_constant_value, - require_constant_elements), - constructor_elements); + = tree_cons (field, value, constructor_elements); /* Advance the variable that indicates sequential elements output. */ if (TREE_CODE (constructor_type) == ARRAY_TYPE) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c300901c5d9..56b2f089d40 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -2,6 +2,8 @@ * gcc.c-torture/compile/20011130-1.c: New test. + * gcc.dg/noncompile/20011025-1.c: New test. + 2001-12-04 Joseph S. Myers * gcc.c-torture/execute/20000722-1.x, diff --git a/gcc/testsuite/gcc.dg/noncompile/20011025-1.c b/gcc/testsuite/gcc.dg/noncompile/20011025-1.c new file mode 100644 index 00000000000..51e60e5cb9e --- /dev/null +++ b/gcc/testsuite/gcc.dg/noncompile/20011025-1.c @@ -0,0 +1,5 @@ +double foo [] = +{ &bar, /* { dg-error "undeclared|is not constant|near init" } */ + (void *) 0 }; /* { dg-error "incompatible types|is not constant|near init" } */ +double baz [] = +{ (void *) 0 }; /* { dg-error "incompatible types|is not constant|near init" } */