aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2001-12-05 15:14:01 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2001-12-05 15:14:01 +0100
commit822baa84c86a39c89b6f066210d645f36f4f3eee (patch)
tree8e8b72268fc13ddf7e7db4761e72cef861989bf7
parenta3315b5399cd6a3c23f2640abbb32d04cfbaa5c1 (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-typeck.c17
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/gcc.dg/noncompile/20011025-1.c5
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" } */