diff options
| author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-05 14:14:01 +0000 |
|---|---|---|
| committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-05 14:14:01 +0000 |
| commit | b7b3c8bef11512b1d217f740ea9be0dceb7ed673 (patch) | |
| tree | 8e8b72268fc13ddf7e7db4761e72cef861989bf7 | |
| parent | 8987ae4317c11ca7e7cea71a5b6fbd52056a65f4 (diff) | |
| download | ppe42-gcc-b7b3c8bef11512b1d217f740ea9be0dceb7ed673.tar.gz ppe42-gcc-b7b3c8bef11512b1d217f740ea9be0dceb7ed673.zip | |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47673 138bc75d-0d04-0410-961f-82ee72b054a4
| -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 95e2075e3f8..e2485c52f22 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 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 <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 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" } */ |

