aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog.multi-target2
-rw-r--r--gcc/genmodes.c11
2 files changed, 9 insertions, 4 deletions
diff --git a/gcc/ChangeLog.multi-target b/gcc/ChangeLog.multi-target
index 6e354bdab70..fe64bfa5bd1 100644
--- a/gcc/ChangeLog.multi-target
+++ b/gcc/ChangeLog.multi-target
@@ -1,5 +1,7 @@
2009-05-11 J"orn Rennecke <joern.rennecke@arc.com>
+ * genmodes.c (drop_mode): handle !old_contained.
+
* genmodes.c (find_mode): Set target field for to-be searched mode.
(eq_mode): Also consider target.
(drop_mode): New function.
diff --git a/gcc/genmodes.c b/gcc/genmodes.c
index 716d5c102d7..047586aec10 100644
--- a/gcc/genmodes.c
+++ b/gcc/genmodes.c
@@ -446,10 +446,13 @@ drop_mode (struct mode_data *old, struct mode_data *new)
struct mode_data *m, *last;
DEBUG ("dropping %s %s\n", m->name, m->target);
- for (m = old->contained; m; last = m, m = m->next_cont)
- m->component = new;
- last->next_cont = new->contained;
- new->contained = old->contained;
+ if old->contained)
+ {
+ for (m = old->contained; m; last = m, m = m->next_cont)
+ m->component = new;
+ last->next_cont = new->contained;
+ new->contained = old->contained;
+ }
}
static void