diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 352177038094ac33cad4f3c461c7b1acb1651058..9b851605110703990dbb5c6b48afaca5294da2db 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,9 @@
+2004-12-03  Andrew Haley  <aph@redhat.com>
+
+	PR java/18812
+	* except.c (link_handler): Patch 'outer' field of siblings of the
+	range we're demoting.
+
 2004-12-03  Andrew Haley  <aph@redhat.com>
 
 	PR java/18697 
diff --git a/gcc/java/except.c b/gcc/java/except.c
index 9ef549b3d2058ca4f41bc4f89d3f6626e20b0e09..6735b598311bdc8855489349aacfdece3dac7607 100644
--- a/gcc/java/except.c
+++ b/gcc/java/except.c
@@ -138,12 +138,18 @@ link_handler (struct eh_range *range, struct eh_range *outer)
       range->next_sibling = NULL;
       range->first_child = outer;
       {
+	struct eh_range *p = outer;
 	struct eh_range **pr = &(outer->outer->first_child);
 	while (*pr != outer)
 	  pr = &(*pr)->next_sibling;
 	*pr = range;
+
+	while (p)
+	  {
+	    p->outer = range;
+	    p = p->next_sibling;
+	  }
       }
-      outer->outer = range;
       return;
     }