Fix creating self-recursive obsolete methods.
We were using recursive loading of the current art method which was
making us miss obsolete methods in some cases.
We could also end up checking the wrong method when walking the stack.
We also add tests for recursive obsolete methods in general.
Bug: 34815470
Test: mma -j40 test-art-host
Test: ART_TEST_JIT=true mma -j40 test-art-host
Change-Id: I522fd4cac4e3f9d35d03b128bad6d6971cfe6c4a
diff --git a/test/943-private-recursive-jit/src/Transform.java b/test/943-private-recursive-jit/src/Transform.java
new file mode 100644
index 0000000..9ec3e42
--- /dev/null
+++ b/test/943-private-recursive-jit/src/Transform.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+import java.util.function.Consumer;
+class Transform {
+ public void sayHi(int recur, Consumer<String> reporter, Runnable r) {
+ privateSayHi(recur, reporter, r);
+ }
+
+ private void privateSayHi(int recur, Consumer<String> reporter, Runnable r) {
+ reporter.accept("hello" + recur);
+ if (recur == 1) {
+ r.run();
+ privateSayHi(recur - 1, reporter, r);
+ } else if (recur != 0) {
+ privateSayHi(recur - 1, reporter, r);
+ }
+ reporter.accept("goodbye" + recur);
+ }
+}