diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index c1206c46c122b278d85bc87304f8b68f63a8e94a..21be2063c834cd0371e2f1c2d565208909e3e0c3 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,8 @@
+2002-03-28  Tom Tromey  <tromey@redhat.com>
+
+	* except.c (expand_end_java_handler): If the handler type is NULL,
+	use java.lang.Throwable.  Fixes PR java/5986.
+
 2002-03-28  Alexandre Petit-Bianco  <apbianco@redhat.com>
 
 	Fix for PR java/4715:
diff --git a/gcc/java/except.c b/gcc/java/except.c
index 184f7e5a88be2b1d34966e4b4e8388ed62b15c15..5b315185807aa3d425ba08dcbad7be3d6246302c 100644
--- a/gcc/java/except.c
+++ b/gcc/java/except.c
@@ -1,5 +1,5 @@
 /* Handle exceptions for GNU compiler for the Java(TM) language.
-   Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -372,7 +372,17 @@ expand_end_java_handler (range)
   expand_start_all_catch ();
   for ( ; handler != NULL_TREE; handler = TREE_CHAIN (handler))
     {
-      expand_start_catch (TREE_PURPOSE (handler));
+      /* For bytecode we treat exceptions a little unusually.  A
+	 `finally' clause looks like an ordinary exception handler for
+	 Throwable.  The reason for this is that the bytecode has
+	 already expanded the finally logic, and we would have to do
+	 extra (and difficult) work to get this to look like a
+	 gcc-style finally clause.  */
+      tree type = TREE_PURPOSE (handler);
+      if (type == NULL)
+	type = throwable_type_node;
+
+      expand_start_catch (type);
       expand_goto (TREE_VALUE (handler));
       expand_end_catch ();
     }