aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-08-06 07:08:12 +0000
committerRichard Stallman <rms@gnu.org>1993-08-06 07:08:12 +0000
commitd3ab975391c98188899c1519703af44995d47c53 (patch)
treeb2bf95e9cccfdb9056549073ba377223530d114b /gcc
parentfda59a9a3fbfd129dbe3869e7aef5530e6ac0229 (diff)
downloadgcc-d3ab975391c98188899c1519703af44995d47c53.zip
gcc-d3ab975391c98188899c1519703af44995d47c53.tar.gz
gcc-d3ab975391c98188899c1519703af44995d47c53.tar.bz2
(output_init_element): Call default_conversion here.
Set constructor_erroneous, etc., here. (process_init_element): Not here. From-SVN: r5086
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-typeck.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index a08b723..ec9d44e 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -5734,6 +5734,18 @@ output_init_element (value, type, field, pending)
{
int duplicate = 0;
+ if (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE
+ || (TREE_CODE (TREE_TYPE (value)) == ARRAY_TYPE
+ && comptypes (TREE_TYPE (value), type)))
+ value = default_conversion (value);
+
+ if (value == error_mark_node)
+ constructor_erroneous = 1;
+ else if (!TREE_CONSTANT (value))
+ constructor_constant = 0;
+ else if (initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
+ constructor_simple = 0;
+
if (require_constant_value && ! TREE_CONSTANT (value))
{
error_init ("initializer element%s is not constant",
@@ -6026,18 +6038,6 @@ process_init_element (value)
return;
}
- if (value != 0)
- value = default_conversion (value);
-
- if (value == 0)
- ;
- else if (value == error_mark_node)
- constructor_erroneous = 1;
- else if (!TREE_CONSTANT (value))
- constructor_constant = 0;
- else if (initializer_constant_valid_p (value, TREE_TYPE (value)) == 0)
- constructor_simple = 0;
-
if (constructor_stack->replacement_value != 0)
{
error_init ("excess elements in struct initializer%s",