diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 2044fc4969470f0c33713949aa405833fc72567b..1d8107b206e4ca95355eee3cc8fdfab719416190 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,18 @@
+2002-12-27  Mark Mitchell  <mark@codesourcery.com>
+
+	* boehm.cc: Remove stray semicolon.
+	* interpret.cc: Likewise.
+	* prims.cc: Likewise.
+	* verify.cc (_Jv_BytecodeVerifier::verify_fail): Move definition
+	earlier to ensure default arguments are processed.
+	* gcj/array.h (JArray): Add forward declaration.
+	(elements): Likewise.
+	* gcj/javaprim.h: Remove stray semicolons.
+	* include/bohm-gc.h: Likewise.
+	* include/jni.h: Likewise.
+	* include/jvm.h: Likewise.
+	* java/lang/Class.h (_Jv_GetArrayClass): Declare _Jv_NewArrayClass.
+	
 2002-12-23  Jeff Sturm  <jsturm@one-point.com>
 
 	* exception.cc (PERSONALITY_FUNCTION): Clear least-significant-bit
diff --git a/libjava/boehm.cc b/libjava/boehm.cc
index 90796f2ddf0491d718825e9fd4e5344360157dde..df17ce82d9f9e0b4e254e85910e87c18b58e66be 100644
--- a/libjava/boehm.cc
+++ b/libjava/boehm.cc
@@ -37,7 +37,7 @@ extern "C"
   // These aren't declared in any Boehm GC header.
   void GC_finalize_all (void);
   ptr_t GC_debug_generic_malloc (size_t size, int k, GC_EXTRA_PARAMS);
-};
+}
 
 #define MAYBE_MARK(Obj, Top, Limit, Source, Exit)  \
 	Top=GC_MARK_AND_PUSH((GC_PTR)Obj, Top, Limit, (GC_PTR *)Source)
diff --git a/libjava/gcj/array.h b/libjava/gcj/array.h
index db58ddfbdf874f71c1ac852fc9050b7190cd85ba..33ea038df93bb67eb62e9dee1c7c58ba09afa8f3 100644
--- a/libjava/gcj/array.h
+++ b/libjava/gcj/array.h
@@ -1,6 +1,6 @@
 // array.h - Header file for CNI arrays.  -*- c++ -*-
 
-/* Copyright (C) 1998, 1999, 2000, 2001  Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -29,6 +29,14 @@ public:
   friend jsize JvGetArrayLength (__JArray*);
 };
 
+template<class T>
+class JArray;
+
+template<class T>
+inline T* elements(JArray<T>& x);
+template<class T>
+inline T* elements(JArray<T>* x);
+
 template<class T>
 class JArray : public __JArray
 {
@@ -45,7 +53,7 @@ inline T* elements(JArray<T>& x) { return x.data; }
 template<class T>
 inline T* elements(JArray<T>* x) { return x->data; }
 
-}; // end extern "Java"
+} // end extern "Java"
 
 /* These typesdefs match those in JNI. */
 typedef __JArray *jarray;
diff --git a/libjava/gcj/javaprims.h b/libjava/gcj/javaprims.h
index 8ed649432a21f9521099432ba7de25b991d3c47e..c6e4a00ae39ee1f33d0a5c837fff4bcaf8ef0f57 100644
--- a/libjava/gcj/javaprims.h
+++ b/libjava/gcj/javaprims.h
@@ -123,7 +123,7 @@ extern "Java"
       class ValidatorAndPriority;
       class WriteAbortedException;
       class Writer;
-    };
+    }
 
     namespace lang
     {
@@ -222,7 +222,7 @@ extern "Java"
         class ReferenceQueue;
         class SoftReference;
         class WeakReference;
-      };
+      }
 
       namespace reflect
       {
@@ -240,8 +240,8 @@ extern "Java"
 	class Proxy$ProxyType;
         class ReflectPermission;
 	class UndeclaredThrowableException;
-      };
-    };
+      }
+    }
 
     namespace util
     {
@@ -369,7 +369,7 @@ extern "Java"
         class JarInputStream;
         class JarOutputStream;
         class Manifest;
-      };
+      }
 
       namespace zip
       {
@@ -393,10 +393,10 @@ extern "Java"
         class ZipFile$ZipEntryEnumeration;
         class ZipInputStream;
         class ZipOutputStream;
-      };
-    };
-  };
-};
+      }
+    }
+  }
+}
   
 typedef struct java::lang::Object* jobject;
 typedef class java::lang::Class* jclass;
diff --git a/libjava/include/boehm-gc.h b/libjava/include/boehm-gc.h
index 6c60c7945024cce10f9eebbf84b30b0dcccaff10..509900c737c3c53da9b03747560215a62cf6c063 100644
--- a/libjava/include/boehm-gc.h
+++ b/libjava/include/boehm-gc.h
@@ -1,7 +1,7 @@
 // -*- c++ -*-
 // boehm-gc.h - Defines for Boehm collector.
 
-/* Copyright (C) 1998, 1999  Free Software Foundation
+/* Copyright (C) 1998, 1999, 2002  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -19,7 +19,7 @@ extern "C"
 {
   JV_MARKOBJ_DECL;
   JV_MARKARRAY_DECL;
-};
+}
 
 // Enough stuff to inline _Jv_AllocObj.  Ugly.
 #include <gcj/javaprims.h>
diff --git a/libjava/include/jni.h b/libjava/include/jni.h
index 31f57985683ba26df10e43f1c57c4788d00636e7..cab4571b094ff2e79c1670c258cd3261685e9457 100644
--- a/libjava/include/jni.h
+++ b/libjava/include/jni.h
@@ -211,7 +211,7 @@ extern JNIIMPEXP jint JNICALL JNI_CreateJavaVM (JavaVM **, void **, void *);
 extern JNIIMPEXP jint JNICALL JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
 
 #ifdef __cplusplus
-};
+}
 #endif /* __cplusplus */
 
 typedef union jvalue
diff --git a/libjava/include/jvm.h b/libjava/include/jvm.h
index e02901de824dc7411f931552a5b4bb625ae4b870..1e604980e0e6948af464da1e2bf08463b510fd1c 100644
--- a/libjava/include/jvm.h
+++ b/libjava/include/jvm.h
@@ -162,7 +162,7 @@ namespace gcj
   
   /* Set to true by _Jv_CreateJavaVM. */
   extern bool runtimeInitialized;
-};
+}
 
 /* Type of pointer used as finalizer.  */
 typedef void _Jv_FinalizerFunc (jobject);
diff --git a/libjava/interpret.cc b/libjava/interpret.cc
index 9791b4a5cd801d607f7a7cfa1fd6424c2cef7e24..15fb413e8357bdaed7f4869b17e1371b8f458811 100644
--- a/libjava/interpret.cc
+++ b/libjava/interpret.cc
@@ -91,7 +91,7 @@ static inline void dupx (_Jv_word *sp, int n, int x)
       sp[top-(n+x)-i] = sp[top-i];
     }
   
-};
+}
 
 // Used to convert from floating types to integral types.
 template<typename TO, typename FROM>
diff --git a/libjava/java/lang/Class.h b/libjava/java/lang/Class.h
index d59899a81829263984b2197c1681271dc0af7c87..5a56fd35c3b954ab4913f0917740361658a1683e 100644
--- a/libjava/java/lang/Class.h
+++ b/libjava/java/lang/Class.h
@@ -333,6 +333,9 @@ private:
   inline friend jclass
   _Jv_GetArrayClass (jclass klass, java::lang::ClassLoader *loader)
   {
+    extern void _Jv_NewArrayClass (jclass element,
+				   java::lang::ClassLoader *loader,
+				   _Jv_VTable *array_vtable = 0);
     if (__builtin_expect (!klass->arrayclass, false))
       _Jv_NewArrayClass (klass, loader);
     return klass->arrayclass;
diff --git a/libjava/prims.cc b/libjava/prims.cc
index 2195db161e1f0162c76e4cf4fb90222a1d9477d5..61c66540831d4564673e7cfb205c983fc8346cc3 100644
--- a/libjava/prims.cc
+++ b/libjava/prims.cc
@@ -592,15 +592,15 @@ _Jv_NewMultiArray (jclass array_type, jint dimensions, ...)
   _Jv_ArrayVTable _Jv_##NAME##VTable;		\
   java::lang::Class _Jv_##NAME##Class __attribute__ ((aligned (8)));
 
-DECLARE_PRIM_TYPE(byte);
-DECLARE_PRIM_TYPE(short);
-DECLARE_PRIM_TYPE(int);
-DECLARE_PRIM_TYPE(long);
-DECLARE_PRIM_TYPE(boolean);
-DECLARE_PRIM_TYPE(char);
-DECLARE_PRIM_TYPE(float);
-DECLARE_PRIM_TYPE(double);
-DECLARE_PRIM_TYPE(void);
+DECLARE_PRIM_TYPE(byte)
+DECLARE_PRIM_TYPE(short)
+DECLARE_PRIM_TYPE(int)
+DECLARE_PRIM_TYPE(long)
+DECLARE_PRIM_TYPE(boolean)
+DECLARE_PRIM_TYPE(char)
+DECLARE_PRIM_TYPE(float)
+DECLARE_PRIM_TYPE(double)
+DECLARE_PRIM_TYPE(void)
 
 void
 _Jv_InitPrimClass (jclass cl, char *cname, char sig, int len, 
diff --git a/libjava/verify.cc b/libjava/verify.cc
index dbf80d4bf03841392a95066d95ecf79fded36d02..238a3e926f1e833eca06ffa085857fbd647193d3 100644
--- a/libjava/verify.cc
+++ b/libjava/verify.cc
@@ -128,6 +128,34 @@ private:
     return r;
   }
 
+  __attribute__ ((__noreturn__)) void verify_fail (char *s, jint pc = -1)
+  {
+    using namespace java::lang;
+    StringBuffer *buf = new StringBuffer ();
+
+    buf->append (JvNewStringLatin1 ("verification failed"));
+    if (pc == -1)
+      pc = start_PC;
+    if (pc != -1)
+      {
+	buf->append (JvNewStringLatin1 (" at PC "));
+	buf->append (pc);
+      }
+
+    _Jv_InterpMethod *method = current_method;
+    buf->append (JvNewStringLatin1 (" in "));
+    buf->append (current_class->getName());
+    buf->append ((jchar) ':');
+    buf->append (JvNewStringUTF (method->get_method()->name->data));
+    buf->append ((jchar) '(');
+    buf->append (JvNewStringUTF (method->get_method()->signature->data));
+    buf->append ((jchar) ')');
+
+    buf->append (JvNewStringLatin1 (": "));
+    buf->append (JvNewStringLatin1 (s));
+    throw new java::lang::VerifyError (buf->toString ());
+  }
+
   // This enum holds a list of tags for all the different types we
   // need to handle.  Reference types are treated specially by the
   // type class.
@@ -3064,34 +3092,6 @@ private:
       }
   }
 
-  __attribute__ ((__noreturn__)) void verify_fail (char *s, jint pc = -1)
-  {
-    using namespace java::lang;
-    StringBuffer *buf = new StringBuffer ();
-
-    buf->append (JvNewStringLatin1 ("verification failed"));
-    if (pc == -1)
-      pc = start_PC;
-    if (pc != -1)
-      {
-	buf->append (JvNewStringLatin1 (" at PC "));
-	buf->append (pc);
-      }
-
-    _Jv_InterpMethod *method = current_method;
-    buf->append (JvNewStringLatin1 (" in "));
-    buf->append (current_class->getName());
-    buf->append ((jchar) ':');
-    buf->append (JvNewStringUTF (method->get_method()->name->data));
-    buf->append ((jchar) '(');
-    buf->append (JvNewStringUTF (method->get_method()->signature->data));
-    buf->append ((jchar) ')');
-
-    buf->append (JvNewStringLatin1 (": "));
-    buf->append (JvNewStringLatin1 (s));
-    throw new java::lang::VerifyError (buf->toString ());
-  }
-
 public:
 
   void verify_instructions ()