summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libjava/ChangeLog12
-rw-r--r--libjava/Makefile.am2
-rw-r--r--libjava/Makefile.in1
-rw-r--r--libjava/include/java-insns.h6
-rw-r--r--libjava/interpret.cc2
-rw-r--r--libjava/verify.cc61
6 files changed, 81 insertions, 3 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index a7d34198068..293358ac36d 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,15 @@
+2002-04-26 Tom Tromey <tromey@redhat.com>
+
+ * verify.cc (construct_primitive_array_type) [void_type]: New
+ case.
+ (branch_prepass): Added dummy entries for unused instruction
+ values.
+ (verify_instructions_0): Likewise.
+ * interpret.cc (continue1): Comment fix.
+ * include/java-insns.h (op_xxxunusedxxx1): Removed.
+ * Makefile.in: Rebuilt.
+ * Makefile.am: Added -Wswitch-enum.
+
2002-04-24 Tom Tromey <tromey@redhat.com>
* gnu/gcj/natCore.cc (create): Use __builtin_alloca, and compute
diff --git a/libjava/Makefile.am b/libjava/Makefile.am
index 3caec30f672..92432eff22a 100644
--- a/libjava/Makefile.am
+++ b/libjava/Makefile.am
@@ -91,6 +91,8 @@ WARNINGS = -W -Wall
AM_CXXFLAGS = -fno-rtti -fnon-call-exceptions \
## Some systems don't allow `$' in identifiers by default, so we force it.
-fdollars-in-identifiers \
+## Detect bugs in the verifier implementation, and maybe other places.
+ -Wswitch-enum \
@LIBGCJ_CXXFLAGS@ @X_CFLAGS@ $(WARNINGS) -D_GNU_SOURCE \
-DPREFIX="\"$(prefix)\""
if USING_GCC
diff --git a/libjava/Makefile.in b/libjava/Makefile.in
index 15c7677d26c..0b288e56a64 100644
--- a/libjava/Makefile.in
+++ b/libjava/Makefile.in
@@ -181,6 +181,7 @@ GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@
WARNINGS = -W -Wall
AM_CXXFLAGS = -fno-rtti -fnon-call-exceptions \
-fdollars-in-identifiers \
+ -Wswitch-enum \
@LIBGCJ_CXXFLAGS@ @X_CFLAGS@ $(WARNINGS) -D_GNU_SOURCE \
-DPREFIX="\"$(prefix)\""
diff --git a/libjava/include/java-insns.h b/libjava/include/java-insns.h
index 327fcd373b0..a065987fc51 100644
--- a/libjava/include/java-insns.h
+++ b/libjava/include/java-insns.h
@@ -1,6 +1,6 @@
// java-insns.h - Instruction encodings. This is -*- c++ -*-
-/* Copyright (C) 1999, 2001 Free Software Foundation
+/* Copyright (C) 1999, 2001, 2002 Free Software Foundation
This file is part of libgcj.
@@ -199,7 +199,9 @@ enum java_opcode
op_invokespecial = 0xb7,
op_invokestatic = 0xb8,
op_invokeinterface = 0xb9,
- op_xxxunusedxxx1 = 0xba,
+
+ // 0xba is unused.
+
op_new = 0xbb,
op_newarray = 0xbc,
op_anewarray = 0xbd,
diff --git a/libjava/interpret.cc b/libjava/interpret.cc
index 198ec45eb16..4db9dca08ec 100644
--- a/libjava/interpret.cc
+++ b/libjava/interpret.cc
@@ -628,7 +628,7 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
INSN_LABEL(invokespecial),
INSN_LABEL(invokestatic),
INSN_LABEL(invokeinterface),
- 0, /* op_xxxunusedxxx1, */
+ 0, /* Unused. */
INSN_LABEL(new),
INSN_LABEL(newarray),
INSN_LABEL(anewarray),
diff --git a/libjava/verify.cc b/libjava/verify.cc
index 2fcfb607cc9..405481977d7 100644
--- a/libjava/verify.cc
+++ b/libjava/verify.cc
@@ -1525,6 +1525,19 @@ private:
case long_type:
k = JvPrimClass (long);
break;
+
+ // These aren't used here but we call them out to avoid
+ // warnings.
+ case void_type:
+ case unsuitable_type:
+ case return_address_type:
+ case continuation_type:
+ case unused_by_subroutine_type:
+ case reference_type:
+ case null_type:
+ case unresolved_reference_type:
+ case uninitialized_reference_type:
+ case uninitialized_unresolved_reference_type:
default:
verify_fail ("unknown type in construct_primitive_array_type");
}
@@ -1828,6 +1841,30 @@ private:
note_branch_target (compute_jump (get_int ()), last_was_jsr);
break;
+ // These are unused here, but we call them out explicitly
+ // so that -Wswitch-enum doesn't complain.
+ case op_putfield_1:
+ case op_putfield_2:
+ case op_putfield_4:
+ case op_putfield_8:
+ case op_putfield_a:
+ case op_putstatic_1:
+ case op_putstatic_2:
+ case op_putstatic_4:
+ case op_putstatic_8:
+ case op_putstatic_a:
+ case op_getfield_1:
+ case op_getfield_2s:
+ case op_getfield_2u:
+ case op_getfield_4:
+ case op_getfield_8:
+ case op_getfield_a:
+ case op_getstatic_1:
+ case op_getstatic_2s:
+ case op_getstatic_2u:
+ case op_getstatic_4:
+ case op_getstatic_8:
+ case op_getstatic_a:
default:
verify_fail ("unrecognized instruction in branch_prepass",
start_PC);
@@ -2974,6 +3011,30 @@ private:
handle_jsr_insn (get_int ());
break;
+ // These are unused here, but we call them out explicitly
+ // so that -Wswitch-enum doesn't complain.
+ case op_putfield_1:
+ case op_putfield_2:
+ case op_putfield_4:
+ case op_putfield_8:
+ case op_putfield_a:
+ case op_putstatic_1:
+ case op_putstatic_2:
+ case op_putstatic_4:
+ case op_putstatic_8:
+ case op_putstatic_a:
+ case op_getfield_1:
+ case op_getfield_2s:
+ case op_getfield_2u:
+ case op_getfield_4:
+ case op_getfield_8:
+ case op_getfield_a:
+ case op_getstatic_1:
+ case op_getstatic_2s:
+ case op_getstatic_2u:
+ case op_getstatic_4:
+ case op_getstatic_8:
+ case op_getstatic_a:
default:
// Unrecognized opcode.
verify_fail ("unrecognized instruction in verify_instructions_0",