Index: doc/jikes.1
--- doc/jikes.1.orig	2004-03-02 10:02:11 +0100
+++ doc/jikes.1	2007-09-16 09:40:39 +0200
@@ -185,7 +185,7 @@
 compatibility to older virtual machines, and some source constructs
 will be compiled to less efficient workarounds in order to avoid known
 virtual machine bugs or deficiencies.  However, a lower target may
-occaisionally produce incorrect semantic behavior.  Furthermore, some
+occasionally produce incorrect semantic behavior.  Furthermore, some
 language features require virtual machine support, where there are no
 known workarounds in earlier releases: the assert statement requires
 1.4 (unless you also use \fB\-noassert\fP), and the planned addition
Index: src/decl.cpp
--- src/decl.cpp.orig	2004-09-27 00:40:41 +0200
+++ src/decl.cpp	2007-09-16 09:40:39 +0200
@@ -2596,7 +2596,9 @@
     //
     if (control.option.deprecation &&
         hidden_method -> IsDeprecated() &&
-        ! method -> containing_type -> file_symbol -> IsClassOnly())
+        ! method -> containing_type -> file_symbol -> IsClassOnly() &&
+        ! method -> IsDeprecated() &&
+        ! InDeprecatedContext())
     {
         ReportSemError(SemanticError::DEPRECATED_METHOD_OVERRIDE,
                        left_tok, right_tok, method -> Header(),
Index: src/double.h
--- src/double.h.orig	2004-06-02 13:26:22 +0200
+++ src/double.h	2007-09-16 09:40:39 +0200
@@ -63,6 +63,11 @@
 #include "platform.h"
 #include "long.h"
 
+// We should really have an autoconf test for this, but autoconf hates me.
+#if defined(WORDS_BIGENDIAN) || (defined(__arm__) && !defined(__VFP_FP__))
+#define DOUBLES_BIGENDIAN_WORDS
+#endif
+
 #ifdef HAVE_JIKES_NAMESPACE
 namespace Jikes { // Open namespace Jikes block
 #endif
@@ -395,7 +400,25 @@
     static const IEEEdouble bigtens[]; // powers of 10 by powers of 2
 #endif
 
+#if defined(WORDS_BIGENDIAN) != defined(DOUBLES_BIGENDIAN_WORDS)
+    // This is sick, but then so is this entire class hierarchy.
+    inline void setHighWord(u4 high) { BaseLong::setLowWord(high); }
+    inline void setLowWord(u4 low) { BaseLong::setHighWord(low); }
+    using BaseLong::setHighAndLowWords;
+    inline void setHighAndLowWords(u4 high, u4 low)
+    { BaseLong::setHighAndLowWords(low, high); }
+#endif
+#ifdef HAVE_64BIT_TYPES
+    // This really isn't going to help anyone.  Make it private.
+    using BaseLong::Words;
+#endif
+
 public:
+#if defined(WORDS_BIGENDIAN) != defined(DOUBLES_BIGENDIAN_WORDS)
+    inline u4 HighWord() const { return BaseLong::LowWord(); }
+    inline u4 LowWord() const { return BaseLong::HighWord(); }
+#endif
+
     //
     // Information methods, for evaluating components of the float
     //
Index: src/error.cpp
--- src/error.cpp.orig	2004-09-27 00:40:41 +0200
+++ src/error.cpp	2007-09-16 09:40:39 +0200
@@ -1,4 +1,4 @@
-// $Id: jikes.patch,v 1.3 2007/09/16 07:43:14 rse Exp $
+// $Id: jikes.patch,v 1.3 2007/09/16 07:43:14 rse Exp $
 //
 // This software is subject to the terms of the IBM Jikes Compiler
 // License Agreement available at the following URL:
@@ -513,6 +513,7 @@
     warning[DEPRECATED_FIELD] = WEAK_WARNING;
     warning[DEPRECATED_METHOD] = WEAK_WARNING;
     warning[DEPRECATED_CONSTRUCTOR] = WEAK_WARNING;
+    warning[DEPRECATED_METHOD_OVERRIDE] = WEAK_WARNING;
 
     warning[UNNECESSARY_TYPE_IMPORT] = WEAK_WARNING;
     warning[MULTIPLE_PUBLIC_TYPES] = WEAK_WARNING;
Index: src/platform.h
--- src/platform.h.orig	2004-08-20 02:21:17 +0200
+++ src/platform.h	2007-09-16 09:40:39 +0200
@@ -151,6 +151,18 @@
 # include STD_LIB_NAME(time)
 #endif
 
+//
+// In the compiler, we want EXACT control over signed and unsigned values
+// of certain bit widths. Configure should have already found us what we need.
+//
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif // HAVE_INTTYPES_H
+
 // C++ standard support
 
 #ifdef HAVE_STD
@@ -182,18 +194,6 @@
 #endif
 
 
-//
-// In the compiler, we want EXACT control over signed and unsigned values
-// of certain bit widths. Configure should have already found us what we need.
-//
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#else
-# if HAVE_STDINT_H
-#  include <stdint.h>
-# endif
-#endif // HAVE_INTTYPES_H
-
 typedef uint8_t u1;
 typedef int8_t i1;
 typedef uint16_t u2;
Index: src/set.cpp
--- src/set.cpp.orig	2002-12-11 01:55:04 +0100
+++ src/set.cpp	2007-09-16 09:40:39 +0200
@@ -43,6 +43,9 @@
 
 bool SymbolSet::operator==(const SymbolSet& rhs) const
 {
+    if (!&rhs)
+        return false;
+
     if (this != &rhs)
     {
         if (symbol_pool.Length() != rhs.symbol_pool.Length())
@@ -70,6 +73,9 @@
 //
 void SymbolSet::Union(const SymbolSet& set)
 {
+    if (!&set)
+        return;
+
     if (this != &set)
     {
         for (unsigned i = 0; i < set.symbol_pool.Length(); i++)
@@ -90,6 +96,9 @@
 //
 void SymbolSet::Intersection(const SymbolSet& set)
 {
+    if (!&set)
+        return;
+
     if (this != &set)
     {
         Tuple<Symbol*> old_symbol_pool(symbol_pool.Length());
@@ -120,6 +129,9 @@
 //
 bool SymbolSet::Intersects(const SymbolSet& set) const
 {
+    if (!&set)
+        return false;
+
     for (unsigned i = 0; i < set.symbol_pool.Length(); i++)
     {
         ShadowSymbol* shadow = set.symbol_pool[i];
@@ -139,6 +151,9 @@
 //
 void SymbolSet::RemoveElement(const Symbol* element)
 {
+    if (!element)
+        return;
+
     const NameSymbol* name_symbol = element -> Identity();
     unsigned i = name_symbol -> index % hash_size;
     ShadowSymbol* previous = NULL;
Index: src/symbol.h
--- src/symbol.h.orig	2004-09-27 01:10:19 +0200
+++ src/symbol.h	2007-09-16 09:40:39 +0200
@@ -1106,8 +1106,6 @@
     //
     bool IsInner() const
     {
-        assert((! IsLocal() && ! Anonymous()) ||
-               (IsNested() && ! ACC_STATIC()));
         return IsNested() && ! ACC_STATIC();
     }
 
