aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>2000-02-20 00:30:30 -0800
committerRichard Henderson <rth@gcc.gnu.org>2000-02-20 00:30:30 -0800
commit83b091c77aa68744ddc7a6ec17f8641ff36dea0f (patch)
tree55cc1417e9084086bbc4e2e20891fec270626a06 /gcc
parent4a6cfa6347b32e6e522f28dfed841101afda2dd0 (diff)
downloadgcc-83b091c77aa68744ddc7a6ec17f8641ff36dea0f.zip
gcc-83b091c77aa68744ddc7a6ec17f8641ff36dea0f.tar.gz
gcc-83b091c77aa68744ddc7a6ec17f8641ff36dea0f.tar.bz2
c-typeck.c (add_pending_init): Don't abort for multiple fields at the same offset.
* c-typeck.c (add_pending_init): Don't abort for multiple fields at the same offset. (pending_init_member): Test the correct member. From-SVN: r32076
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-typeck.c7
2 files changed, 9 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8479c7b..67623e1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2000-02-19 Richard Henderson <rth@cygnus.com>
+
+ * c-typeck.c (add_pending_init): Don't abort for multiple
+ fields at the same offset.
+ (pending_init_member): Test the correct member.
+
2000-02-19 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
* except.c (start_dynamic_handler) : Use TYPE_MODE (integer_type_node)
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 7a5941e..6ce22c5 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -5580,7 +5580,7 @@ add_pending_init (purpose, value)
p = *q;
if (tree_int_cst_lt (purpose, p->purpose))
q = &p->left;
- else if (tree_int_cst_lt (p->purpose, purpose))
+ else if (p->purpose != purpose)
q = &p->right;
else
abort ();
@@ -5594,8 +5594,7 @@ add_pending_init (purpose, value)
if (tree_int_cst_lt (DECL_FIELD_BITPOS (purpose),
DECL_FIELD_BITPOS (p->purpose)))
q = &p->left;
- else if (tree_int_cst_lt (DECL_FIELD_BITPOS (p->purpose),
- DECL_FIELD_BITPOS (purpose)))
+ else if (p->purpose != purpose)
q = &p->right;
else
abort ();
@@ -5780,7 +5779,7 @@ pending_init_member (field)
{
while (p)
{
- if (tree_int_cst_equal (field, p->purpose))
+ if (field == p->purpose)
return 1;
else if (tree_int_cst_lt (field, p->purpose))
p = p->left;