diff options
author | Jakub Jelinek <jakub@redhat.com> | 2001-12-05 15:14:01 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2001-12-05 15:14:01 +0100 |
commit | 822baa84c86a39c89b6f066210d645f36f4f3eee (patch) | |
tree | 8e8b72268fc13ddf7e7db4761e72cef861989bf7 /gcc | |
parent | a3315b5399cd6a3c23f2640abbb32d04cfbaa5c1 (diff) | |
download | gcc-822baa84c86a39c89b6f066210d645f36f4f3eee.zip gcc-822baa84c86a39c89b6f066210d645f36f4f3eee.tar.gz gcc-822baa84c86a39c89b6f066210d645f36f4f3eee.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-typeck.c | 17 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/noncompile/20011025-1.c | 5 |
4 files changed, 19 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 95e2075..e2485c5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2001-12-05 Jakub Jelinek <jakub@redhat.com> + * 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 <jakub@redhat.com> + * c-decl.c (pushdecl): Only increase n_incomplete if pushed decl's type is RECORD_TYPE, UNION_TYPE or ARRAY_TYPE thereof. (finish_struct): Break the loop if n_incomplete went to 0. diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 297afad..5677504 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 c300901..56b2f08 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 <jsm28@cam.ac.uk> * 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 0000000..51e60e5 --- /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" } */ |