Revert "Test for jit deadlock"

This reverts commit b7ac4a077a99d3f2a41bef0a5c6cc74343458dcf.

Bug: 112074977
Bug: 70838465

Reason for revert: Test segfaults here:
https://build.chromium.org/p/client.art/builders/bullhead-armv7-gcstress-ndebug/builds/1719/steps/test%20optimizing/logs/stdio

Change-Id: I9e105b630b1509689d27a154cc356fbe11018fce
diff --git a/runtime/jit/jit_code_cache.cc b/runtime/jit/jit_code_cache.cc
index a2ebc7c..bcbdc3b 100644
--- a/runtime/jit/jit_code_cache.cc
+++ b/runtime/jit/jit_code_cache.cc
@@ -1761,7 +1761,6 @@
     }
 
     if (info->IsMethodBeingCompiled(osr)) {
-      VLOG(jit) << method->PrettyMethod() << " is already being compiled";
       return false;
     }
 
diff --git a/test/1952-bad-jit-suspend/bad_suspend.cc b/test/1952-bad-jit-suspend/bad_suspend.cc
deleted file mode 100644
index fe18a41..0000000
--- a/test/1952-bad-jit-suspend/bad_suspend.cc
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <atomic>
-#include <mutex>
-#include <vector>
-
-#include <jvmti.h>
-#include <jni.h>
-
-#include <android-base/logging.h>
-#include <android-base/macros.h>
-
-#include "art_method.h"
-#include "base/runtime_debug.h"
-#include "jit/jit.h"
-#include "jit/jit_code_cache.h"
-#include "jni/jni_internal.h"
-#include "runtime-inl.h"
-#include "scoped_thread_state_change-inl.h"
-#include "thread_list.h"
-#include "thread-inl.h"
-
-// Test infrastructure
-#include "nativehelper/ScopedLocalRef.h"
-
-// Slicer's headers have code that triggers these warnings. b/65298177
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wsign-compare"
-#pragma clang diagnostic ignored "-Wunused-parameter"
-#include "slicer/instrumentation.h"
-#include "slicer/reader.h"
-#include "slicer/writer.h"
-#pragma clang diagnostic pop
-
-
-namespace art {
-namespace Test1952BadSuspend {
-
-// The jvmti env we will be using.
-static jvmtiEnv* jvmti_env = nullptr;
-
-// Marker to allow us to stop after 30 seconds.
-static std::atomic<bool> should_continue(true);
-
-// Whether we need to add or remove a nop from the class being redefined. This toggles every
-// transform.
-static bool add_nops = true;
-
-// Marker to request that the main thread clear all compiled jit code and a barrier to wait for this
-// to occur.
-static std::atomic<bool> clear_jit(false);
-static Barrier barrier(0);
-
-// Marker and barrier to ensure both redefine thread and main thread have started.
-static std::atomic<bool> starting(true);
-static Barrier start_barrier(2);
-
-static jthread GetJitThread() {
-  ScopedObjectAccess soa(Thread::Current());
-  auto* jit = Runtime::Current()->GetJit();
-  if (jit == nullptr) {
-    return nullptr;
-  }
-  auto* thread_pool = jit->GetThreadPool();
-  if (thread_pool == nullptr) {
-    return nullptr;
-  }
-  // It doesn't really matter which jit-thread we pick as long as a class-load happens on it. Since
-  // this is equally likely to happen on any of them (and currently we only have one jit-thread) we
-  // just pick the first thread.
-  return soa.AddLocalReference<jthread>(
-          thread_pool->GetWorkers()[0]->GetThread()->GetPeerFromOtherThread());
-}
-
-static JNICALL void AgentThreadWait(jvmtiEnv* jvmti ATTRIBUTE_UNUSED,
-                                    JNIEnv* env ATTRIBUTE_UNUSED,
-                                    void* arg ATTRIBUTE_UNUSED) {
-  // Give us 30 seconds to deadlock. If we don't get a deadlock then, better restart the test than
-  // continue.
-  sleep(30);
-  should_continue.store(false);
-}
-
-static JNICALL void AgentThreadRedefine(jvmtiEnv* jvmti,
-                                        JNIEnv* env,
-                                        void* arg ATTRIBUTE_UNUSED) {
-  start_barrier.Wait(Thread::Current());
-
-  jclass target = env->FindClass("Main$TargetClass");
-  jclass main = env->FindClass("Main");
-  ArtMethod* doNothingMethod =
-      jni::DecodeArtMethod(env->GetStaticMethodID(main, "doNothing", "()V"));
-  Runtime* runtime = Runtime::Current();
-
-  while (should_continue.load()) {
-    if (runtime->GetJit() != nullptr &&
-        runtime->GetJit()->GetCodeCache()->WillExecuteJitCode(doNothingMethod)) {
-      // Let main thread clear the jit so the method won't be live on stack.
-      clear_jit.store(true);
-      barrier.Increment(Thread::Current(), 1);
-      continue;
-    }
-    jvmti->RetransformClasses(1, &target);
-  }
-}
-
-static void StartThread(jvmtiEnv* jvmti, jvmtiStartFunction func, jobject thr) {
-  jvmtiError err = jvmti->RunAgentThread(thr, func, nullptr, JVMTI_THREAD_NORM_PRIORITY);
-  CHECK_EQ(err, JVMTI_ERROR_NONE);
-}
-
-class NoOps : public slicer::Transformation {
- public:
-  explicit NoOps(bool should_add_nops) : should_add_nops_(should_add_nops) {}
-
-  virtual bool Apply(lir::CodeIr* code_ir) {
-    ir::Builder builder(code_ir->dex_ir);
-
-    // insert the hook before the first bytecode in the method body
-    for (auto instr : code_ir->instructions) {
-      // Annoying laziness on part of slicer. This dynamic cast is nessecary to write a
-      // transformation.
-      auto bytecode = dynamic_cast<lir::Bytecode*>(instr);
-      if (bytecode == nullptr) {
-        continue;
-      }
-      if (should_add_nops_) {
-        // add nop bytecode.
-        auto hook_invoke = code_ir->Alloc<lir::Bytecode>();
-        hook_invoke->opcode = ::dex::OP_NOP;
-        code_ir->instructions.InsertBefore(bytecode, hook_invoke);
-      } else {
-        code_ir->instructions.Remove(bytecode);
-      }
-      break;
-    }
-
-    return true;
-  }
-
- private:
-  bool should_add_nops_;
-};
-
-static JNICALL void LoadHookCb(jvmtiEnv *jvmti,
-                               JNIEnv* env ATTRIBUTE_UNUSED,
-                               jclass class_being_redefined,
-                               jobject loader ATTRIBUTE_UNUSED,
-                               const char* name,
-                               jobject protection_domain ATTRIBUTE_UNUSED,
-                               jint class_data_len,
-                               const unsigned char* class_data,
-                               jint* new_class_data_len,
-                               unsigned char** new_class_data) {
-  if (class_being_redefined == nullptr || strcmp(name, "LMain$TargetClass") != 0) {
-    return;
-  }
-  ::dex::Reader reader(class_data, class_data_len);
-  ::dex::u4 class_index = reader.FindClassIndex("LMain$TargetClass;");
-  if (class_index == ::dex::kNoIndex) {
-    LOG(FATAL) << "Failed to find object in dex file!";
-    return;
-  }
-
-  reader.CreateClassIr(class_index);
-  auto dex_ir = reader.GetIr();
-
-  slicer::MethodInstrumenter mi(dex_ir);
-  mi.AddTransformation<NoOps>(add_nops);
-  if (!mi.InstrumentMethod(ir::MethodId("LMain$TargetClass", "foo", "()V"))) {
-    LOG(FATAL) << "Failed to find LMain$TargetClass->foo()V in dex file!";
-    return;
-  }
-
-
-  ::dex::Writer writer(dex_ir);
-
-  class JvmtiAllocator : public ::dex::Writer::Allocator {
-   public:
-    explicit JvmtiAllocator(jvmtiEnv* jvmti) : jvmti_(jvmti) {}
-
-    void* Allocate(size_t size) {
-      unsigned char* res = nullptr;
-      jvmti_->Allocate(size, &res);
-      return res;
-    }
-
-    void Free(void* ptr) {
-      jvmti_->Deallocate(reinterpret_cast<unsigned char*>(ptr));
-    }
-
-   private:
-    jvmtiEnv* jvmti_;
-  };
-  JvmtiAllocator allocator(jvmti);
-  size_t new_size;
-  *new_class_data = writer.CreateImage(&allocator, &new_size);
-  if (new_size > std::numeric_limits<jint>::max()) {
-    *new_class_data = nullptr;
-    LOG(FATAL) << "transform result is too large!";
-    return;
-  }
-  *new_class_data_len = static_cast<jint>(new_size);
-  add_nops = !add_nops;
-}
-
-extern "C" JNIEXPORT JNICALL void Java_Main_startWaitThread(JNIEnv*, jclass, jobject thr) {
-  StartThread(jvmti_env, AgentThreadWait, thr);
-}
-extern "C" JNIEXPORT JNICALL void Java_Main_startRedefineThread(JNIEnv*, jclass, jobject thr) {
-  StartThread(jvmti_env, AgentThreadRedefine, thr);
-}
-
-// This function will be called when a class is prepared according to JLS 12.3.2. The event is
-// restricted to just the JIT thread by the JVMTI SetEventNotificationMode thread argument. See
-// go/jvmti-spec#ClassPrepare for more information.
-//
-// Pause the jit thread and never let it finish compiling whatever class we have here. Currently we
-// have a bit of a hack (b/70838465) that prevents SuspendThread from working on the JitThread but
-// this demonstrates that this solution is not really sufficient.
-JNICALL void ClassPrepareJit(jvmtiEnv* jvmti ATTRIBUTE_UNUSED,
-                             JNIEnv* jni_env ATTRIBUTE_UNUSED,
-                             jthread thread ATTRIBUTE_UNUSED,
-                             jclass klass ATTRIBUTE_UNUSED) {
-  Runtime* runtime = Runtime::Current();
-  Thread* self = Thread::Current();
-  LOG(WARNING) << "Looping forever on jit thread!";
-  while (!runtime->IsShuttingDown(self)) {
-    sched_yield();
-  }
-}
-
-JNICALL void VmInitCb(jvmtiEnv *jvmti,
-                      JNIEnv* env ATTRIBUTE_UNUSED,
-                      jthread curthread ATTRIBUTE_UNUSED) {
-  // Handler already set to ClassPrepareJit
-  jthread jit_thread = GetJitThread();
-  if (jit_thread != nullptr) {
-    CHECK_EQ(jvmti->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_CLASS_PREPARE, jit_thread),
-             JVMTI_ERROR_NONE);
-  }
-}
-
-extern "C" jint JNICALL Agent_OnLoad(JavaVM* vm,
-                                     char* options ATTRIBUTE_UNUSED,
-                                     void* reserved ATTRIBUTE_UNUSED) {
-  jvmtiEnv* env = nullptr;
-
-#define CHECK_CALL_SUCCESS(c) \
-  do { \
-    auto vc = (c); \
-    CHECK(vc == JNI_OK || vc == JVMTI_ERROR_NONE) << "call " << #c  << " did not succeed\n"; \
-  } while (false)
-
-  CHECK_CALL_SUCCESS(vm->GetEnv(reinterpret_cast<void**>(&env), JVMTI_VERSION_1_0));
-  jvmtiEventCallbacks cb {
-        .VMInit = VmInitCb,
-        .ClassFileLoadHook = LoadHookCb,
-        .ClassPrepare = ClassPrepareJit,
-  };
-  jvmtiCapabilities caps { .can_retransform_classes = 1, .can_suspend = 1, };
-  CHECK_CALL_SUCCESS(env->SetEventCallbacks(&cb, sizeof(cb)));
-  CHECK_CALL_SUCCESS(env->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_VM_INIT, nullptr));
-  CHECK_CALL_SUCCESS(
-      env->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_CLASS_FILE_LOAD_HOOK, nullptr));
-  CHECK_CALL_SUCCESS(env->AddCapabilities(&caps));
-
-  jvmti_env = env;
-#undef CHECK_CALL_SUCCESS
-
-  return 0;
-}
-
-extern "C" JNIEXPORT jboolean Java_Main_shouldContinue(JNIEnv* env, jclass main) {
-  if (starting.load()) {
-    start_barrier.Pass(Thread::Current());
-    starting.store(false);
-  }
-  if (clear_jit.load()) {
-    Runtime* runtime = Runtime::Current();
-    ArtMethod* doNothingMethod =
-        jni::DecodeArtMethod(env->GetStaticMethodID(main, "doNothing", "()V"));
-    jit::ScopedJitSuspend sjs;
-    if (runtime->GetJit() != nullptr) {
-      {
-        // Remove the method's compiled code in the same way that JVMTI class redefinition would.
-        ScopedSuspendAll soa("Remove method from jit", /*long*/ false);
-        runtime->GetJit()->GetCodeCache()->NotifyMethodRedefined(doNothingMethod);
-        runtime->GetInstrumentation()->UpdateMethodsCodeToInterpreterEntryPoint(doNothingMethod);
-      }
-      {
-        ScopedObjectAccess soa(Thread::Current());
-        // Clear the jit and try again.
-        runtime->GetJit()->GetCodeCache()->GarbageCollectCache(Thread::Current());
-      }
-    }
-    clear_jit.store(false);
-    // Tell the redefine thread that we just cleared the jit and allow it to continue.
-    barrier.Pass(Thread::Current());
-    // Try to make sure the redefine thread has a chance to wake up by yielding. This seems to make
-    // the deadlock much more likely.
-    sched_yield();
-  }
-  return should_continue.load();
-}
-
-};  // namespace Test1952BadSuspend
-};  // namespace art
diff --git a/test/1952-bad-jit-suspend/check b/test/1952-bad-jit-suspend/check
deleted file mode 100755
index e6b7a8c..0000000
--- a/test/1952-bad-jit-suspend/check
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-#
-# Copyright (C) 2018 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# We don't care what we printed. We only print anything since it seems to
-# (usually) cause a class to be loaded by the JIT.
-exit 0
diff --git a/test/1952-bad-jit-suspend/expected.txt b/test/1952-bad-jit-suspend/expected.txt
deleted file mode 100644
index e69de29..0000000
--- a/test/1952-bad-jit-suspend/expected.txt
+++ /dev/null
diff --git a/test/1952-bad-jit-suspend/info.txt b/test/1952-bad-jit-suspend/info.txt
deleted file mode 100644
index 8939f68..0000000
--- a/test/1952-bad-jit-suspend/info.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Test that tries to deadlock class redefinition with the jit thread. If the jit
-thread loads a class the process might deadlock.
diff --git a/test/1952-bad-jit-suspend/run b/test/1952-bad-jit-suspend/run
deleted file mode 100755
index f083e63..0000000
--- a/test/1952-bad-jit-suspend/run
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2018 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-if [[ "$@" == *-O* ]]; then
-  agent=libbadsuspend.so
-else
-  agent=libbadsuspendd.so
-fi
-
-./default-run "$@" --with-agent $agent
diff --git a/test/1952-bad-jit-suspend/src/Main.java b/test/1952-bad-jit-suspend/src/Main.java
deleted file mode 100644
index 0149374..0000000
--- a/test/1952-bad-jit-suspend/src/Main.java
+++ /dev/null
@@ -1,804 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-public class Main {
-
-  public static class TargetClass {
-    public void foo() {}
-  }
-
-  // Stress testing class-loading by jit. We found that 250 classes triggers the jit loading a class
-  // fairly consistently.
-  public static class TC0 { public static final int FOO; static { FOO = 1; } }
-  public static class TC1 { public static final int FOO; static { FOO = 2; } }
-  public static class TC2 { public static final int FOO; static { FOO = 3; } }
-  public static class TC3 { public static final int FOO; static { FOO = 4; } }
-  public static class TC4 { public static final int FOO; static { FOO = 5; } }
-  public static class TC5 { public static final int FOO; static { FOO = 6; } }
-  public static class TC6 { public static final int FOO; static { FOO = 7; } }
-  public static class TC7 { public static final int FOO; static { FOO = 8; } }
-  public static class TC8 { public static final int FOO; static { FOO = 9; } }
-  public static class TC9 { public static final int FOO; static { FOO = 10; } }
-  public static class TC10 { public static final int FOO; static { FOO = 11; } }
-  public static class TC11 { public static final int FOO; static { FOO = 12; } }
-  public static class TC12 { public static final int FOO; static { FOO = 13; } }
-  public static class TC13 { public static final int FOO; static { FOO = 14; } }
-  public static class TC14 { public static final int FOO; static { FOO = 15; } }
-  public static class TC15 { public static final int FOO; static { FOO = 16; } }
-  public static class TC16 { public static final int FOO; static { FOO = 17; } }
-  public static class TC17 { public static final int FOO; static { FOO = 18; } }
-  public static class TC18 { public static final int FOO; static { FOO = 19; } }
-  public static class TC19 { public static final int FOO; static { FOO = 20; } }
-  public static class TC20 { public static final int FOO; static { FOO = 21; } }
-  public static class TC21 { public static final int FOO; static { FOO = 22; } }
-  public static class TC22 { public static final int FOO; static { FOO = 23; } }
-  public static class TC23 { public static final int FOO; static { FOO = 24; } }
-  public static class TC24 { public static final int FOO; static { FOO = 25; } }
-  public static class TC25 { public static final int FOO; static { FOO = 26; } }
-  public static class TC26 { public static final int FOO; static { FOO = 27; } }
-  public static class TC27 { public static final int FOO; static { FOO = 28; } }
-  public static class TC28 { public static final int FOO; static { FOO = 29; } }
-  public static class TC29 { public static final int FOO; static { FOO = 30; } }
-  public static class TC30 { public static final int FOO; static { FOO = 31; } }
-  public static class TC31 { public static final int FOO; static { FOO = 32; } }
-  public static class TC32 { public static final int FOO; static { FOO = 33; } }
-  public static class TC33 { public static final int FOO; static { FOO = 34; } }
-  public static class TC34 { public static final int FOO; static { FOO = 35; } }
-  public static class TC35 { public static final int FOO; static { FOO = 36; } }
-  public static class TC36 { public static final int FOO; static { FOO = 37; } }
-  public static class TC37 { public static final int FOO; static { FOO = 38; } }
-  public static class TC38 { public static final int FOO; static { FOO = 39; } }
-  public static class TC39 { public static final int FOO; static { FOO = 40; } }
-  public static class TC40 { public static final int FOO; static { FOO = 41; } }
-  public static class TC41 { public static final int FOO; static { FOO = 42; } }
-  public static class TC42 { public static final int FOO; static { FOO = 43; } }
-  public static class TC43 { public static final int FOO; static { FOO = 44; } }
-  public static class TC44 { public static final int FOO; static { FOO = 45; } }
-  public static class TC45 { public static final int FOO; static { FOO = 46; } }
-  public static class TC46 { public static final int FOO; static { FOO = 47; } }
-  public static class TC47 { public static final int FOO; static { FOO = 48; } }
-  public static class TC48 { public static final int FOO; static { FOO = 49; } }
-  public static class TC49 { public static final int FOO; static { FOO = 50; } }
-  public static class TC50 { public static final int FOO; static { FOO = 51; } }
-  public static class TC51 { public static final int FOO; static { FOO = 52; } }
-  public static class TC52 { public static final int FOO; static { FOO = 53; } }
-  public static class TC53 { public static final int FOO; static { FOO = 54; } }
-  public static class TC54 { public static final int FOO; static { FOO = 55; } }
-  public static class TC55 { public static final int FOO; static { FOO = 56; } }
-  public static class TC56 { public static final int FOO; static { FOO = 57; } }
-  public static class TC57 { public static final int FOO; static { FOO = 58; } }
-  public static class TC58 { public static final int FOO; static { FOO = 59; } }
-  public static class TC59 { public static final int FOO; static { FOO = 60; } }
-  public static class TC60 { public static final int FOO; static { FOO = 61; } }
-  public static class TC61 { public static final int FOO; static { FOO = 62; } }
-  public static class TC62 { public static final int FOO; static { FOO = 63; } }
-  public static class TC63 { public static final int FOO; static { FOO = 64; } }
-  public static class TC64 { public static final int FOO; static { FOO = 65; } }
-  public static class TC65 { public static final int FOO; static { FOO = 66; } }
-  public static class TC66 { public static final int FOO; static { FOO = 67; } }
-  public static class TC67 { public static final int FOO; static { FOO = 68; } }
-  public static class TC68 { public static final int FOO; static { FOO = 69; } }
-  public static class TC69 { public static final int FOO; static { FOO = 70; } }
-  public static class TC70 { public static final int FOO; static { FOO = 71; } }
-  public static class TC71 { public static final int FOO; static { FOO = 72; } }
-  public static class TC72 { public static final int FOO; static { FOO = 73; } }
-  public static class TC73 { public static final int FOO; static { FOO = 74; } }
-  public static class TC74 { public static final int FOO; static { FOO = 75; } }
-  public static class TC75 { public static final int FOO; static { FOO = 76; } }
-  public static class TC76 { public static final int FOO; static { FOO = 77; } }
-  public static class TC77 { public static final int FOO; static { FOO = 78; } }
-  public static class TC78 { public static final int FOO; static { FOO = 79; } }
-  public static class TC79 { public static final int FOO; static { FOO = 80; } }
-  public static class TC80 { public static final int FOO; static { FOO = 81; } }
-  public static class TC81 { public static final int FOO; static { FOO = 82; } }
-  public static class TC82 { public static final int FOO; static { FOO = 83; } }
-  public static class TC83 { public static final int FOO; static { FOO = 84; } }
-  public static class TC84 { public static final int FOO; static { FOO = 85; } }
-  public static class TC85 { public static final int FOO; static { FOO = 86; } }
-  public static class TC86 { public static final int FOO; static { FOO = 87; } }
-  public static class TC87 { public static final int FOO; static { FOO = 88; } }
-  public static class TC88 { public static final int FOO; static { FOO = 89; } }
-  public static class TC89 { public static final int FOO; static { FOO = 90; } }
-  public static class TC90 { public static final int FOO; static { FOO = 91; } }
-  public static class TC91 { public static final int FOO; static { FOO = 92; } }
-  public static class TC92 { public static final int FOO; static { FOO = 93; } }
-  public static class TC93 { public static final int FOO; static { FOO = 94; } }
-  public static class TC94 { public static final int FOO; static { FOO = 95; } }
-  public static class TC95 { public static final int FOO; static { FOO = 96; } }
-  public static class TC96 { public static final int FOO; static { FOO = 97; } }
-  public static class TC97 { public static final int FOO; static { FOO = 98; } }
-  public static class TC98 { public static final int FOO; static { FOO = 99; } }
-  public static class TC99 { public static final int FOO; static { FOO = 100; } }
-  public static class TC100 { public static final int FOO; static { FOO = 101; } }
-  public static class TC101 { public static final int FOO; static { FOO = 102; } }
-  public static class TC102 { public static final int FOO; static { FOO = 103; } }
-  public static class TC103 { public static final int FOO; static { FOO = 104; } }
-  public static class TC104 { public static final int FOO; static { FOO = 105; } }
-  public static class TC105 { public static final int FOO; static { FOO = 106; } }
-  public static class TC106 { public static final int FOO; static { FOO = 107; } }
-  public static class TC107 { public static final int FOO; static { FOO = 108; } }
-  public static class TC108 { public static final int FOO; static { FOO = 109; } }
-  public static class TC109 { public static final int FOO; static { FOO = 110; } }
-  public static class TC110 { public static final int FOO; static { FOO = 111; } }
-  public static class TC111 { public static final int FOO; static { FOO = 112; } }
-  public static class TC112 { public static final int FOO; static { FOO = 113; } }
-  public static class TC113 { public static final int FOO; static { FOO = 114; } }
-  public static class TC114 { public static final int FOO; static { FOO = 115; } }
-  public static class TC115 { public static final int FOO; static { FOO = 116; } }
-  public static class TC116 { public static final int FOO; static { FOO = 117; } }
-  public static class TC117 { public static final int FOO; static { FOO = 118; } }
-  public static class TC118 { public static final int FOO; static { FOO = 119; } }
-  public static class TC119 { public static final int FOO; static { FOO = 120; } }
-  public static class TC120 { public static final int FOO; static { FOO = 121; } }
-  public static class TC121 { public static final int FOO; static { FOO = 122; } }
-  public static class TC122 { public static final int FOO; static { FOO = 123; } }
-  public static class TC123 { public static final int FOO; static { FOO = 124; } }
-  public static class TC124 { public static final int FOO; static { FOO = 125; } }
-  public static class TC125 { public static final int FOO; static { FOO = 126; } }
-  public static class TC126 { public static final int FOO; static { FOO = 127; } }
-  public static class TC127 { public static final int FOO; static { FOO = 128; } }
-  public static class TC128 { public static final int FOO; static { FOO = 129; } }
-  public static class TC129 { public static final int FOO; static { FOO = 130; } }
-  public static class TC130 { public static final int FOO; static { FOO = 131; } }
-  public static class TC131 { public static final int FOO; static { FOO = 132; } }
-  public static class TC132 { public static final int FOO; static { FOO = 133; } }
-  public static class TC133 { public static final int FOO; static { FOO = 134; } }
-  public static class TC134 { public static final int FOO; static { FOO = 135; } }
-  public static class TC135 { public static final int FOO; static { FOO = 136; } }
-  public static class TC136 { public static final int FOO; static { FOO = 137; } }
-  public static class TC137 { public static final int FOO; static { FOO = 138; } }
-  public static class TC138 { public static final int FOO; static { FOO = 139; } }
-  public static class TC139 { public static final int FOO; static { FOO = 140; } }
-  public static class TC140 { public static final int FOO; static { FOO = 141; } }
-  public static class TC141 { public static final int FOO; static { FOO = 142; } }
-  public static class TC142 { public static final int FOO; static { FOO = 143; } }
-  public static class TC143 { public static final int FOO; static { FOO = 144; } }
-  public static class TC144 { public static final int FOO; static { FOO = 145; } }
-  public static class TC145 { public static final int FOO; static { FOO = 146; } }
-  public static class TC146 { public static final int FOO; static { FOO = 147; } }
-  public static class TC147 { public static final int FOO; static { FOO = 148; } }
-  public static class TC148 { public static final int FOO; static { FOO = 149; } }
-  public static class TC149 { public static final int FOO; static { FOO = 150; } }
-  public static class TC150 { public static final int FOO; static { FOO = 151; } }
-  public static class TC151 { public static final int FOO; static { FOO = 152; } }
-  public static class TC152 { public static final int FOO; static { FOO = 153; } }
-  public static class TC153 { public static final int FOO; static { FOO = 154; } }
-  public static class TC154 { public static final int FOO; static { FOO = 155; } }
-  public static class TC155 { public static final int FOO; static { FOO = 156; } }
-  public static class TC156 { public static final int FOO; static { FOO = 157; } }
-  public static class TC157 { public static final int FOO; static { FOO = 158; } }
-  public static class TC158 { public static final int FOO; static { FOO = 159; } }
-  public static class TC159 { public static final int FOO; static { FOO = 160; } }
-  public static class TC160 { public static final int FOO; static { FOO = 161; } }
-  public static class TC161 { public static final int FOO; static { FOO = 162; } }
-  public static class TC162 { public static final int FOO; static { FOO = 163; } }
-  public static class TC163 { public static final int FOO; static { FOO = 164; } }
-  public static class TC164 { public static final int FOO; static { FOO = 165; } }
-  public static class TC165 { public static final int FOO; static { FOO = 166; } }
-  public static class TC166 { public static final int FOO; static { FOO = 167; } }
-  public static class TC167 { public static final int FOO; static { FOO = 168; } }
-  public static class TC168 { public static final int FOO; static { FOO = 169; } }
-  public static class TC169 { public static final int FOO; static { FOO = 170; } }
-  public static class TC170 { public static final int FOO; static { FOO = 171; } }
-  public static class TC171 { public static final int FOO; static { FOO = 172; } }
-  public static class TC172 { public static final int FOO; static { FOO = 173; } }
-  public static class TC173 { public static final int FOO; static { FOO = 174; } }
-  public static class TC174 { public static final int FOO; static { FOO = 175; } }
-  public static class TC175 { public static final int FOO; static { FOO = 176; } }
-  public static class TC176 { public static final int FOO; static { FOO = 177; } }
-  public static class TC177 { public static final int FOO; static { FOO = 178; } }
-  public static class TC178 { public static final int FOO; static { FOO = 179; } }
-  public static class TC179 { public static final int FOO; static { FOO = 180; } }
-  public static class TC180 { public static final int FOO; static { FOO = 181; } }
-  public static class TC181 { public static final int FOO; static { FOO = 182; } }
-  public static class TC182 { public static final int FOO; static { FOO = 183; } }
-  public static class TC183 { public static final int FOO; static { FOO = 184; } }
-  public static class TC184 { public static final int FOO; static { FOO = 185; } }
-  public static class TC185 { public static final int FOO; static { FOO = 186; } }
-  public static class TC186 { public static final int FOO; static { FOO = 187; } }
-  public static class TC187 { public static final int FOO; static { FOO = 188; } }
-  public static class TC188 { public static final int FOO; static { FOO = 189; } }
-  public static class TC189 { public static final int FOO; static { FOO = 190; } }
-  public static class TC190 { public static final int FOO; static { FOO = 191; } }
-  public static class TC191 { public static final int FOO; static { FOO = 192; } }
-  public static class TC192 { public static final int FOO; static { FOO = 193; } }
-  public static class TC193 { public static final int FOO; static { FOO = 194; } }
-  public static class TC194 { public static final int FOO; static { FOO = 195; } }
-  public static class TC195 { public static final int FOO; static { FOO = 196; } }
-  public static class TC196 { public static final int FOO; static { FOO = 197; } }
-  public static class TC197 { public static final int FOO; static { FOO = 198; } }
-  public static class TC198 { public static final int FOO; static { FOO = 199; } }
-  public static class TC199 { public static final int FOO; static { FOO = 200; } }
-  public static class TC200 { public static final int FOO; static { FOO = 201; } }
-  public static class TC201 { public static final int FOO; static { FOO = 202; } }
-  public static class TC202 { public static final int FOO; static { FOO = 203; } }
-  public static class TC203 { public static final int FOO; static { FOO = 204; } }
-  public static class TC204 { public static final int FOO; static { FOO = 205; } }
-  public static class TC205 { public static final int FOO; static { FOO = 206; } }
-  public static class TC206 { public static final int FOO; static { FOO = 207; } }
-  public static class TC207 { public static final int FOO; static { FOO = 208; } }
-  public static class TC208 { public static final int FOO; static { FOO = 209; } }
-  public static class TC209 { public static final int FOO; static { FOO = 210; } }
-  public static class TC210 { public static final int FOO; static { FOO = 211; } }
-  public static class TC211 { public static final int FOO; static { FOO = 212; } }
-  public static class TC212 { public static final int FOO; static { FOO = 213; } }
-  public static class TC213 { public static final int FOO; static { FOO = 214; } }
-  public static class TC214 { public static final int FOO; static { FOO = 215; } }
-  public static class TC215 { public static final int FOO; static { FOO = 216; } }
-  public static class TC216 { public static final int FOO; static { FOO = 217; } }
-  public static class TC217 { public static final int FOO; static { FOO = 218; } }
-  public static class TC218 { public static final int FOO; static { FOO = 219; } }
-  public static class TC219 { public static final int FOO; static { FOO = 220; } }
-  public static class TC220 { public static final int FOO; static { FOO = 221; } }
-  public static class TC221 { public static final int FOO; static { FOO = 222; } }
-  public static class TC222 { public static final int FOO; static { FOO = 223; } }
-  public static class TC223 { public static final int FOO; static { FOO = 224; } }
-  public static class TC224 { public static final int FOO; static { FOO = 225; } }
-  public static class TC225 { public static final int FOO; static { FOO = 226; } }
-  public static class TC226 { public static final int FOO; static { FOO = 227; } }
-  public static class TC227 { public static final int FOO; static { FOO = 228; } }
-  public static class TC228 { public static final int FOO; static { FOO = 229; } }
-  public static class TC229 { public static final int FOO; static { FOO = 230; } }
-  public static class TC230 { public static final int FOO; static { FOO = 231; } }
-  public static class TC231 { public static final int FOO; static { FOO = 232; } }
-  public static class TC232 { public static final int FOO; static { FOO = 233; } }
-  public static class TC233 { public static final int FOO; static { FOO = 234; } }
-  public static class TC234 { public static final int FOO; static { FOO = 235; } }
-  public static class TC235 { public static final int FOO; static { FOO = 236; } }
-  public static class TC236 { public static final int FOO; static { FOO = 237; } }
-  public static class TC237 { public static final int FOO; static { FOO = 238; } }
-  public static class TC238 { public static final int FOO; static { FOO = 239; } }
-  public static class TC239 { public static final int FOO; static { FOO = 240; } }
-  public static class TC240 { public static final int FOO; static { FOO = 241; } }
-  public static class TC241 { public static final int FOO; static { FOO = 242; } }
-  public static class TC242 { public static final int FOO; static { FOO = 243; } }
-  public static class TC243 { public static final int FOO; static { FOO = 244; } }
-  public static class TC244 { public static final int FOO; static { FOO = 245; } }
-  public static class TC245 { public static final int FOO; static { FOO = 246; } }
-  public static class TC246 { public static final int FOO; static { FOO = 247; } }
-  public static class TC247 { public static final int FOO; static { FOO = 248; } }
-  public static class TC248 { public static final int FOO; static { FOO = 249; } }
-  public static class TC249 { public static final int FOO; static { FOO = 250; } }
-
-  public static int cnt = 0;
-
-  public static void getNothing(int x) { System.out.println("In num " + x);}
-
-  public static void doNothing() {
-    int cur = cnt++;
-    // These 'if' statements ensure that the interpreter won't just load all of the classes the
-    // first time this function is run, before the JIT has a chance to do anything.
-    if (cur == 0) {
-      getNothing(TC0.FOO);
-    } else if (cur == 1) {
-      getNothing(TC1.FOO);
-    } else if (cur == 2) {
-      getNothing(TC2.FOO);
-    } else if (cur == 3) {
-      getNothing(TC3.FOO);
-    } else if (cur == 4) {
-      getNothing(TC4.FOO);
-    } else if (cur == 5) {
-      getNothing(TC5.FOO);
-    } else if (cur == 6) {
-      getNothing(TC6.FOO);
-    } else if (cur == 7) {
-      getNothing(TC7.FOO);
-    } else if (cur == 8) {
-      getNothing(TC8.FOO);
-    } else if (cur == 9) {
-      getNothing(TC9.FOO);
-    } else if (cur == 10) {
-      getNothing(TC10.FOO);
-    } else if (cur == 11) {
-      getNothing(TC11.FOO);
-    } else if (cur == 12) {
-      getNothing(TC12.FOO);
-    } else if (cur == 13) {
-      getNothing(TC13.FOO);
-    } else if (cur == 14) {
-      getNothing(TC14.FOO);
-    } else if (cur == 15) {
-      getNothing(TC15.FOO);
-    } else if (cur == 16) {
-      getNothing(TC16.FOO);
-    } else if (cur == 17) {
-      getNothing(TC17.FOO);
-    } else if (cur == 18) {
-      getNothing(TC18.FOO);
-    } else if (cur == 19) {
-      getNothing(TC19.FOO);
-    } else if (cur == 20) {
-      getNothing(TC20.FOO);
-    } else if (cur == 21) {
-      getNothing(TC21.FOO);
-    } else if (cur == 22) {
-      getNothing(TC22.FOO);
-    } else if (cur == 23) {
-      getNothing(TC23.FOO);
-    } else if (cur == 24) {
-      getNothing(TC24.FOO);
-    } else if (cur == 25) {
-      getNothing(TC25.FOO);
-    } else if (cur == 26) {
-      getNothing(TC26.FOO);
-    } else if (cur == 27) {
-      getNothing(TC27.FOO);
-    } else if (cur == 28) {
-      getNothing(TC28.FOO);
-    } else if (cur == 29) {
-      getNothing(TC29.FOO);
-    } else if (cur == 30) {
-      getNothing(TC30.FOO);
-    } else if (cur == 31) {
-      getNothing(TC31.FOO);
-    } else if (cur == 32) {
-      getNothing(TC32.FOO);
-    } else if (cur == 33) {
-      getNothing(TC33.FOO);
-    } else if (cur == 34) {
-      getNothing(TC34.FOO);
-    } else if (cur == 35) {
-      getNothing(TC35.FOO);
-    } else if (cur == 36) {
-      getNothing(TC36.FOO);
-    } else if (cur == 37) {
-      getNothing(TC37.FOO);
-    } else if (cur == 38) {
-      getNothing(TC38.FOO);
-    } else if (cur == 39) {
-      getNothing(TC39.FOO);
-    } else if (cur == 40) {
-      getNothing(TC40.FOO);
-    } else if (cur == 41) {
-      getNothing(TC41.FOO);
-    } else if (cur == 42) {
-      getNothing(TC42.FOO);
-    } else if (cur == 43) {
-      getNothing(TC43.FOO);
-    } else if (cur == 44) {
-      getNothing(TC44.FOO);
-    } else if (cur == 45) {
-      getNothing(TC45.FOO);
-    } else if (cur == 46) {
-      getNothing(TC46.FOO);
-    } else if (cur == 47) {
-      getNothing(TC47.FOO);
-    } else if (cur == 48) {
-      getNothing(TC48.FOO);
-    } else if (cur == 49) {
-      getNothing(TC49.FOO);
-    } else if (cur == 50) {
-      getNothing(TC50.FOO);
-    } else if (cur == 51) {
-      getNothing(TC51.FOO);
-    } else if (cur == 52) {
-      getNothing(TC52.FOO);
-    } else if (cur == 53) {
-      getNothing(TC53.FOO);
-    } else if (cur == 54) {
-      getNothing(TC54.FOO);
-    } else if (cur == 55) {
-      getNothing(TC55.FOO);
-    } else if (cur == 56) {
-      getNothing(TC56.FOO);
-    } else if (cur == 57) {
-      getNothing(TC57.FOO);
-    } else if (cur == 58) {
-      getNothing(TC58.FOO);
-    } else if (cur == 59) {
-      getNothing(TC59.FOO);
-    } else if (cur == 60) {
-      getNothing(TC60.FOO);
-    } else if (cur == 61) {
-      getNothing(TC61.FOO);
-    } else if (cur == 62) {
-      getNothing(TC62.FOO);
-    } else if (cur == 63) {
-      getNothing(TC63.FOO);
-    } else if (cur == 64) {
-      getNothing(TC64.FOO);
-    } else if (cur == 65) {
-      getNothing(TC65.FOO);
-    } else if (cur == 66) {
-      getNothing(TC66.FOO);
-    } else if (cur == 67) {
-      getNothing(TC67.FOO);
-    } else if (cur == 68) {
-      getNothing(TC68.FOO);
-    } else if (cur == 69) {
-      getNothing(TC69.FOO);
-    } else if (cur == 70) {
-      getNothing(TC70.FOO);
-    } else if (cur == 71) {
-      getNothing(TC71.FOO);
-    } else if (cur == 72) {
-      getNothing(TC72.FOO);
-    } else if (cur == 73) {
-      getNothing(TC73.FOO);
-    } else if (cur == 74) {
-      getNothing(TC74.FOO);
-    } else if (cur == 75) {
-      getNothing(TC75.FOO);
-    } else if (cur == 76) {
-      getNothing(TC76.FOO);
-    } else if (cur == 77) {
-      getNothing(TC77.FOO);
-    } else if (cur == 78) {
-      getNothing(TC78.FOO);
-    } else if (cur == 79) {
-      getNothing(TC79.FOO);
-    } else if (cur == 80) {
-      getNothing(TC80.FOO);
-    } else if (cur == 81) {
-      getNothing(TC81.FOO);
-    } else if (cur == 82) {
-      getNothing(TC82.FOO);
-    } else if (cur == 83) {
-      getNothing(TC83.FOO);
-    } else if (cur == 84) {
-      getNothing(TC84.FOO);
-    } else if (cur == 85) {
-      getNothing(TC85.FOO);
-    } else if (cur == 86) {
-      getNothing(TC86.FOO);
-    } else if (cur == 87) {
-      getNothing(TC87.FOO);
-    } else if (cur == 88) {
-      getNothing(TC88.FOO);
-    } else if (cur == 89) {
-      getNothing(TC89.FOO);
-    } else if (cur == 90) {
-      getNothing(TC90.FOO);
-    } else if (cur == 91) {
-      getNothing(TC91.FOO);
-    } else if (cur == 92) {
-      getNothing(TC92.FOO);
-    } else if (cur == 93) {
-      getNothing(TC93.FOO);
-    } else if (cur == 94) {
-      getNothing(TC94.FOO);
-    } else if (cur == 95) {
-      getNothing(TC95.FOO);
-    } else if (cur == 96) {
-      getNothing(TC96.FOO);
-    } else if (cur == 97) {
-      getNothing(TC97.FOO);
-    } else if (cur == 98) {
-      getNothing(TC98.FOO);
-    } else if (cur == 99) {
-      getNothing(TC99.FOO);
-    } else if (cur == 100) {
-      getNothing(TC100.FOO);
-    } else if (cur == 101) {
-      getNothing(TC101.FOO);
-    } else if (cur == 102) {
-      getNothing(TC102.FOO);
-    } else if (cur == 103) {
-      getNothing(TC103.FOO);
-    } else if (cur == 104) {
-      getNothing(TC104.FOO);
-    } else if (cur == 105) {
-      getNothing(TC105.FOO);
-    } else if (cur == 106) {
-      getNothing(TC106.FOO);
-    } else if (cur == 107) {
-      getNothing(TC107.FOO);
-    } else if (cur == 108) {
-      getNothing(TC108.FOO);
-    } else if (cur == 109) {
-      getNothing(TC109.FOO);
-    } else if (cur == 110) {
-      getNothing(TC110.FOO);
-    } else if (cur == 111) {
-      getNothing(TC111.FOO);
-    } else if (cur == 112) {
-      getNothing(TC112.FOO);
-    } else if (cur == 113) {
-      getNothing(TC113.FOO);
-    } else if (cur == 114) {
-      getNothing(TC114.FOO);
-    } else if (cur == 115) {
-      getNothing(TC115.FOO);
-    } else if (cur == 116) {
-      getNothing(TC116.FOO);
-    } else if (cur == 117) {
-      getNothing(TC117.FOO);
-    } else if (cur == 118) {
-      getNothing(TC118.FOO);
-    } else if (cur == 119) {
-      getNothing(TC119.FOO);
-    } else if (cur == 120) {
-      getNothing(TC120.FOO);
-    } else if (cur == 121) {
-      getNothing(TC121.FOO);
-    } else if (cur == 122) {
-      getNothing(TC122.FOO);
-    } else if (cur == 123) {
-      getNothing(TC123.FOO);
-    } else if (cur == 124) {
-      getNothing(TC124.FOO);
-    } else if (cur == 125) {
-      getNothing(TC125.FOO);
-    } else if (cur == 126) {
-      getNothing(TC126.FOO);
-    } else if (cur == 127) {
-      getNothing(TC127.FOO);
-    } else if (cur == 128) {
-      getNothing(TC128.FOO);
-    } else if (cur == 129) {
-      getNothing(TC129.FOO);
-    } else if (cur == 130) {
-      getNothing(TC130.FOO);
-    } else if (cur == 131) {
-      getNothing(TC131.FOO);
-    } else if (cur == 132) {
-      getNothing(TC132.FOO);
-    } else if (cur == 133) {
-      getNothing(TC133.FOO);
-    } else if (cur == 134) {
-      getNothing(TC134.FOO);
-    } else if (cur == 135) {
-      getNothing(TC135.FOO);
-    } else if (cur == 136) {
-      getNothing(TC136.FOO);
-    } else if (cur == 137) {
-      getNothing(TC137.FOO);
-    } else if (cur == 138) {
-      getNothing(TC138.FOO);
-    } else if (cur == 139) {
-      getNothing(TC139.FOO);
-    } else if (cur == 140) {
-      getNothing(TC140.FOO);
-    } else if (cur == 141) {
-      getNothing(TC141.FOO);
-    } else if (cur == 142) {
-      getNothing(TC142.FOO);
-    } else if (cur == 143) {
-      getNothing(TC143.FOO);
-    } else if (cur == 144) {
-      getNothing(TC144.FOO);
-    } else if (cur == 145) {
-      getNothing(TC145.FOO);
-    } else if (cur == 146) {
-      getNothing(TC146.FOO);
-    } else if (cur == 147) {
-      getNothing(TC147.FOO);
-    } else if (cur == 148) {
-      getNothing(TC148.FOO);
-    } else if (cur == 149) {
-      getNothing(TC149.FOO);
-    } else if (cur == 150) {
-      getNothing(TC150.FOO);
-    } else if (cur == 151) {
-      getNothing(TC151.FOO);
-    } else if (cur == 152) {
-      getNothing(TC152.FOO);
-    } else if (cur == 153) {
-      getNothing(TC153.FOO);
-    } else if (cur == 154) {
-      getNothing(TC154.FOO);
-    } else if (cur == 155) {
-      getNothing(TC155.FOO);
-    } else if (cur == 156) {
-      getNothing(TC156.FOO);
-    } else if (cur == 157) {
-      getNothing(TC157.FOO);
-    } else if (cur == 158) {
-      getNothing(TC158.FOO);
-    } else if (cur == 159) {
-      getNothing(TC159.FOO);
-    } else if (cur == 160) {
-      getNothing(TC160.FOO);
-    } else if (cur == 161) {
-      getNothing(TC161.FOO);
-    } else if (cur == 162) {
-      getNothing(TC162.FOO);
-    } else if (cur == 163) {
-      getNothing(TC163.FOO);
-    } else if (cur == 164) {
-      getNothing(TC164.FOO);
-    } else if (cur == 165) {
-      getNothing(TC165.FOO);
-    } else if (cur == 166) {
-      getNothing(TC166.FOO);
-    } else if (cur == 167) {
-      getNothing(TC167.FOO);
-    } else if (cur == 168) {
-      getNothing(TC168.FOO);
-    } else if (cur == 169) {
-      getNothing(TC169.FOO);
-    } else if (cur == 170) {
-      getNothing(TC170.FOO);
-    } else if (cur == 171) {
-      getNothing(TC171.FOO);
-    } else if (cur == 172) {
-      getNothing(TC172.FOO);
-    } else if (cur == 173) {
-      getNothing(TC173.FOO);
-    } else if (cur == 174) {
-      getNothing(TC174.FOO);
-    } else if (cur == 175) {
-      getNothing(TC175.FOO);
-    } else if (cur == 176) {
-      getNothing(TC176.FOO);
-    } else if (cur == 177) {
-      getNothing(TC177.FOO);
-    } else if (cur == 178) {
-      getNothing(TC178.FOO);
-    } else if (cur == 179) {
-      getNothing(TC179.FOO);
-    } else if (cur == 180) {
-      getNothing(TC180.FOO);
-    } else if (cur == 181) {
-      getNothing(TC181.FOO);
-    } else if (cur == 182) {
-      getNothing(TC182.FOO);
-    } else if (cur == 183) {
-      getNothing(TC183.FOO);
-    } else if (cur == 184) {
-      getNothing(TC184.FOO);
-    } else if (cur == 185) {
-      getNothing(TC185.FOO);
-    } else if (cur == 186) {
-      getNothing(TC186.FOO);
-    } else if (cur == 187) {
-      getNothing(TC187.FOO);
-    } else if (cur == 188) {
-      getNothing(TC188.FOO);
-    } else if (cur == 189) {
-      getNothing(TC189.FOO);
-    } else if (cur == 190) {
-      getNothing(TC190.FOO);
-    } else if (cur == 191) {
-      getNothing(TC191.FOO);
-    } else if (cur == 192) {
-      getNothing(TC192.FOO);
-    } else if (cur == 193) {
-      getNothing(TC193.FOO);
-    } else if (cur == 194) {
-      getNothing(TC194.FOO);
-    } else if (cur == 195) {
-      getNothing(TC195.FOO);
-    } else if (cur == 196) {
-      getNothing(TC196.FOO);
-    } else if (cur == 197) {
-      getNothing(TC197.FOO);
-    } else if (cur == 198) {
-      getNothing(TC198.FOO);
-    } else if (cur == 199) {
-      getNothing(TC199.FOO);
-    } else if (cur == 200) {
-      getNothing(TC200.FOO);
-    } else if (cur == 201) {
-      getNothing(TC201.FOO);
-    } else if (cur == 202) {
-      getNothing(TC202.FOO);
-    } else if (cur == 203) {
-      getNothing(TC203.FOO);
-    } else if (cur == 204) {
-      getNothing(TC204.FOO);
-    } else if (cur == 205) {
-      getNothing(TC205.FOO);
-    } else if (cur == 206) {
-      getNothing(TC206.FOO);
-    } else if (cur == 207) {
-      getNothing(TC207.FOO);
-    } else if (cur == 208) {
-      getNothing(TC208.FOO);
-    } else if (cur == 209) {
-      getNothing(TC209.FOO);
-    } else if (cur == 210) {
-      getNothing(TC210.FOO);
-    } else if (cur == 211) {
-      getNothing(TC211.FOO);
-    } else if (cur == 212) {
-      getNothing(TC212.FOO);
-    } else if (cur == 213) {
-      getNothing(TC213.FOO);
-    } else if (cur == 214) {
-      getNothing(TC214.FOO);
-    } else if (cur == 215) {
-      getNothing(TC215.FOO);
-    } else if (cur == 216) {
-      getNothing(TC216.FOO);
-    } else if (cur == 217) {
-      getNothing(TC217.FOO);
-    } else if (cur == 218) {
-      getNothing(TC218.FOO);
-    } else if (cur == 219) {
-      getNothing(TC219.FOO);
-    } else if (cur == 220) {
-      getNothing(TC220.FOO);
-    } else if (cur == 221) {
-      getNothing(TC221.FOO);
-    } else if (cur == 222) {
-      getNothing(TC222.FOO);
-    } else if (cur == 223) {
-      getNothing(TC223.FOO);
-    } else if (cur == 224) {
-      getNothing(TC224.FOO);
-    } else if (cur == 225) {
-      getNothing(TC225.FOO);
-    } else if (cur == 226) {
-      getNothing(TC226.FOO);
-    } else if (cur == 227) {
-      getNothing(TC227.FOO);
-    } else if (cur == 228) {
-      getNothing(TC228.FOO);
-    } else if (cur == 229) {
-      getNothing(TC229.FOO);
-    } else if (cur == 230) {
-      getNothing(TC230.FOO);
-    } else if (cur == 231) {
-      getNothing(TC231.FOO);
-    } else if (cur == 232) {
-      getNothing(TC232.FOO);
-    } else if (cur == 233) {
-      getNothing(TC233.FOO);
-    } else if (cur == 234) {
-      getNothing(TC234.FOO);
-    } else if (cur == 235) {
-      getNothing(TC235.FOO);
-    } else if (cur == 236) {
-      getNothing(TC236.FOO);
-    } else if (cur == 237) {
-      getNothing(TC237.FOO);
-    } else if (cur == 238) {
-      getNothing(TC238.FOO);
-    } else if (cur == 239) {
-      getNothing(TC239.FOO);
-    } else if (cur == 240) {
-      getNothing(TC240.FOO);
-    } else if (cur == 241) {
-      getNothing(TC241.FOO);
-    } else if (cur == 242) {
-      getNothing(TC242.FOO);
-    } else if (cur == 243) {
-      getNothing(TC243.FOO);
-    } else if (cur == 244) {
-      getNothing(TC244.FOO);
-    } else if (cur == 245) {
-      getNothing(TC245.FOO);
-    } else if (cur == 246) {
-      getNothing(TC246.FOO);
-    } else if (cur == 247) {
-      getNothing(TC247.FOO);
-    } else if (cur == 248) {
-      getNothing(TC248.FOO);
-    } else if (cur == 249) {
-      getNothing(TC249.FOO);
-    }
-  }
-
-  public static void main(String[] args) throws Exception {
-    Thread wait_thread = new Thread("Wait thread");
-    Thread redefine_thread = new Thread("Redefine Thread");
-    startWaitThread(wait_thread);
-    startRedefineThread(redefine_thread);
-    // Force initialize.
-    TargetClass.class.toString();
-    while (shouldContinue()) {
-      doNothing();
-    }
-    wait_thread.join();
-    redefine_thread.join();
-  }
-
-  public static native boolean shouldContinue();
-  public static native void startWaitThread(Thread thr);
-  public static native void startRedefineThread(Thread thr);
-}
diff --git a/test/Android.bp b/test/Android.bp
index d1b23b1..4b61463 100644
--- a/test/Android.bp
+++ b/test/Android.bp
@@ -540,74 +540,3 @@
     header_libs: ["libnativebridge-dummy-headers"],
     srcs: ["115-native-bridge/nativebridge.cc"],
 }
-
-cc_defaults {
-    name: "badsuspend-defaults",
-    host_supported: true,
-    srcs: ["1952-bad-jit-suspend/bad_suspend.cc"],
-    defaults: ["art_defaults"],
-
-    // Note that this tool needs to be built for both 32-bit and 64-bit since it requires
-    // to be same ISA as what it is attached to.
-    compile_multilib: "both",
-
-    cflags: [ "-frtti", ],
-
-    shared_libs: [
-        "libbase",
-        "slicer",
-    ],
-    target: {
-        android: {
-            shared_libs: [
-                "libcutils",
-            ],
-        },
-        host: {
-        },
-        darwin: {
-            enabled: false,
-        },
-    },
-    header_libs: [
-        "libnativehelper_header_only",
-        "libopenjdkjvmti_headers",
-    ],
-    multilib: {
-        lib32: {
-            suffix: "32",
-        },
-        lib64: {
-            suffix: "64",
-        },
-    },
-    symlink_preferred_arch: true,
-    rtti: true,
-}
-
-art_cc_test_library {
-    name: "libbadsuspend",
-    defaults: ["badsuspend-defaults"],
-    shared_libs: [
-        "libart",
-        "libart-compiler",
-        "libart-dexlayout",
-        "libdexfile",
-        "libartbase",
-    ],
-}
-
-art_cc_test_library {
-    name: "libbadsuspendd",
-    defaults: [
-        "art_debug_defaults",
-        "badsuspend-defaults",
-    ],
-    shared_libs: [
-        "libartd",
-        "libartd-compiler",
-        "libartd-dexlayout",
-        "libdexfiled",
-        "libartbased",
-    ],
-}
diff --git a/test/Android.run-test.mk b/test/Android.run-test.mk
index e30b2b0..ffaa2cd 100644
--- a/test/Android.run-test.mk
+++ b/test/Android.run-test.mk
@@ -35,9 +35,6 @@
 # Also need libtiagent.
 TEST_ART_TARGET_SYNC_DEPS += libtiagent-target libtiagentd-target
 
-# Also need libbadsuspend.
-TEST_ART_TARGET_SYNC_DEPS += libbadsuspend-target libbadsuspendd-target
-
 # Also need libtistress.
 TEST_ART_TARGET_SYNC_DEPS += libtistress-target libtistressd-target
 
@@ -62,8 +59,6 @@
 ART_TEST_HOST_RUN_TEST_DEPENDENCIES := \
   $(ART_HOST_EXECUTABLES) \
   $(HOST_OUT_EXECUTABLES)/hprof-conv \
-  $(OUT_DIR)/$(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libbadsuspend) \
-  $(OUT_DIR)/$(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libbadsuspendd) \
   $(OUT_DIR)/$(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libtiagent) \
   $(OUT_DIR)/$(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libtiagentd) \
   $(OUT_DIR)/$(ART_TEST_LIST_host_$(ART_HOST_ARCH)_libtistress) \
@@ -81,8 +76,6 @@
 
 ifneq ($(HOST_PREFER_32_BIT),true)
 ART_TEST_HOST_RUN_TEST_DEPENDENCIES += \
-  $(OUT_DIR)/$(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libbadsuspend) \
-  $(OUT_DIR)/$(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libbadsuspendd) \
   $(OUT_DIR)/$(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libtiagent) \
   $(OUT_DIR)/$(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libtiagentd) \
   $(OUT_DIR)/$(ART_TEST_LIST_host_$(2ND_ART_HOST_ARCH)_libtistress) \
diff --git a/test/knownfailures.json b/test/knownfailures.json
index 2fd0b71..426bbaf 100644
--- a/test/knownfailures.json
+++ b/test/knownfailures.json
@@ -1081,12 +1081,6 @@
         "description": ["Stack too big."]
     },
     {
-      "tests": ["1952-bad-jit-suspend"],
-      "variant": "jit | jvm",
-      "description": ["This test demonstrates a possible deadlock between the jit and JVMTI"],
-      "bug": "b/112074977 & b/70838465"
-    },
-    {
         "tests": ["566-polymorphic-inlining"],
         "variant": "jit & debuggable",
         "description": ["We do not inline with debuggable."]