aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-09-28 02:01:14 +0000
committerRichard Stallman <rms@gnu.org>1993-09-28 02:01:14 +0000
commitb03d739a609bcd91799638742ad4b62a3264ed1d (patch)
tree8f8e112762d2d8bbce4c218abecdbe5be64e0f31
parent235174ce3024532ed61336cb9e66c0faa0ca9e37 (diff)
downloadgcc-b03d739a609bcd91799638742ad4b62a3264ed1d.zip
gcc-b03d739a609bcd91799638742ad4b62a3264ed1d.tar.gz
gcc-b03d739a609bcd91799638742ad4b62a3264ed1d.tar.bz2
(pop_init_level): Add special case for nonincremental scalar initializers.
From-SVN: r5503
-rw-r--r--gcc/c-typeck.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 4cdbc2c..9cd22c8 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -5712,6 +5712,28 @@ pop_init_level (implicit)
}
else if (constructor_type == 0)
;
+ else if (TREE_CODE (constructor_type) != RECORD_TYPE
+ && TREE_CODE (constructor_type) != UNION_TYPE
+ && TREE_CODE (constructor_type) != ARRAY_TYPE
+ && ! constructor_incremental)
+ {
+ /* A nonincremental scalar initializer--just return
+ the element, after verifying there is just one. */
+ if (constructor_elements == 0)
+ {
+ error_init ("empty scalar initializer%s",
+ " for `%s'", NULL);
+ constructor = error_mark_node;
+ }
+ else if (TREE_CHAIN (constructor_elements) != 0)
+ {
+ error_init ("extra elements in scalar initializer%s",
+ " for `%s'", NULL);
+ constructor = TREE_VALUE (constructor_elements);
+ }
+ else
+ constructor = TREE_VALUE (constructor_elements);
+ }
else if (! constructor_incremental)
{
if (constructor_erroneous)
@@ -5726,6 +5748,7 @@ pop_init_level (implicit)
TREE_CONSTANT (constructor) = 1;
if (constructor_constant && constructor_simple)
TREE_STATIC (constructor) = 1;
+
resume_momentary (momentary);
}
}