aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Enberg <penberg@kernel.org>2013-03-10 18:16:35 +0200
committerPekka Enberg <penberg@kernel.org>2013-03-10 18:16:35 +0200
commit4c43f40e263abd54e5e3523ed8f463c820e0eef5 (patch)
treefede5039600e88da96e5fb8177f6190a242e01dd
parentdb0c745cc273e1ee8e7323525f57cc8d9f922938 (diff)
downloadjato-4c43f40e263abd54e5e3523ed8f463c820e0eef5.tar.gz
x86-64: Fix infinite loop in compiler when method is missing
Don't add the same call instruction twice to the compilation unit; otherwise the compile will enter an infinite loop in the liveness analysis. Signed-off-by: Pekka Enberg <penberg@kernel.org>
-rw-r--r--arch/x86/insn-selector_64.brg4
-rwxr-xr-xtools/test.py2
2 files changed, 1 insertions, 5 deletions
diff --git a/arch/x86/insn-selector_64.brg b/arch/x86/insn-selector_64.brg
index 18662d21..06261f2c 100644
--- a/arch/x86/insn-selector_64.brg
+++ b/arch/x86/insn-selector_64.brg
@@ -2559,8 +2559,6 @@ static void invokevirtual(struct _MBState *state, struct basic_block *s, struct
if (vm_method_is_missing(method)) {
call_insn = rel_insn(INSN_CALL_REL, (unsigned long) jit_no_such_method_stub);
-
- select_safepoint_insn(s, tree, call_insn);
} else {
/* object reference */
call_target = state->left->reg1;
@@ -2604,8 +2602,6 @@ static void invokeinterface(struct _MBState *state, struct basic_block *s, struc
if (vm_method_is_missing(method)) {
call_insn = rel_insn(INSN_CALL_REL, (unsigned long) jit_no_such_method_stub);
-
- select_safepoint_insn(s, tree, call_insn);
} else {
/* object reference */
call_target = state->left->reg1;
diff --git a/tools/test.py b/tools/test.py
index a213aeba..dbb7b776 100755
--- a/tools/test.py
+++ b/tools/test.py
@@ -65,7 +65,7 @@ TESTS = [
, ( "jvm.MethodInvocationExceptionsTest", 0, NO_SYSTEM_CLASSLOADER, [ "i386", "x86_64" ] )
, ( "jvm.MultithreadingTest", 0, [ ], [ "i386", "x86_64" ] )
, ( "jvm.MethodOverridingFinal", 1, NO_SYSTEM_CLASSLOADER, [ "i386", "x86_64" ] )
-, ( "jvm.NoSuchMethodErrorTest", 0, NO_SYSTEM_CLASSLOADER, [ "i386" ] )
+, ( "jvm.NoSuchMethodErrorTest", 0, NO_SYSTEM_CLASSLOADER, [ "i386", "x86_64" ] )
, ( "jvm.ObjectArrayTest", 0, NO_SYSTEM_CLASSLOADER, [ "i386", "x86_64" ] )
, ( "jvm.ObjectCreationAndManipulationExceptionsTest", 0, NO_SYSTEM_CLASSLOADER, [ "i386", "x86_64" ] )
, ( "jvm.ObjectCreationAndManipulationTest", 0, NO_SYSTEM_CLASSLOADER, [ "i386", "x86_64" ] )