summaryrefslogtreecommitdiffstats
path: root/test/004-JniTest
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2014-08-13 23:05:38 -0700
committerAndreas Gampe <agampe@google.com>2014-08-14 09:12:38 -0700
commit0d334ce54efd791da14536b6a16f61d9085b8785 (patch)
tree1ae8dda45a1d253dd5aced580850bce5f5481923 /test/004-JniTest
parent70acd53dafbd74d3cd72924216e438fce820beb1 (diff)
downloadandroid_art-0d334ce54efd791da14536b6a16f61d9085b8785.tar.gz
android_art-0d334ce54efd791da14536b6a16f61d9085b8785.tar.bz2
android_art-0d334ce54efd791da14536b6a16f61d9085b8785.zip
ART: Fix another potential N-th visitor issue
Bug: 16867274 (cherry picked from commit ab61295e55c38072095e498053b8f5bebf46ad63) Change-Id: I5466af563032041ef4a547894f40f303871302c6
Diffstat (limited to 'test/004-JniTest')
-rw-r--r--test/004-JniTest/jni_test.cc37
-rw-r--r--test/004-JniTest/src/Main.java7
2 files changed, 44 insertions, 0 deletions
diff --git a/test/004-JniTest/jni_test.cc b/test/004-JniTest/jni_test.cc
index 9a2fbdf267..f5a1d65ac1 100644
--- a/test/004-JniTest/jni_test.cc
+++ b/test/004-JniTest/jni_test.cc
@@ -316,3 +316,40 @@ extern "C" JNIEXPORT void JNICALL Java_Main_nativeTestShallowGetCallingClassLoad
jclass) {
PthreadHelper(&testShallowGetCallingClassLoader);
}
+
+static void testShallowGetStackClass2(JNIEnv* env) {
+ jclass vmstack_clazz = env->FindClass("dalvik/system/VMStack");
+ assert(vmstack_clazz != nullptr);
+ assert(!env->ExceptionCheck());
+
+ // Test direct call.
+ {
+ jmethodID getStackClass2MethodId = env->GetStaticMethodID(vmstack_clazz, "getStackClass2",
+ "()Ljava/lang/Class;");
+ assert(getStackClass2MethodId != nullptr);
+ assert(!env->ExceptionCheck());
+
+ jobject caller_class = env->CallStaticObjectMethod(vmstack_clazz, getStackClass2MethodId);
+ assert(caller_class == nullptr);
+ assert(!env->ExceptionCheck());
+ }
+
+ // Test one-level call. Use VMStack.getStackClass1().
+ {
+ jmethodID getStackClass1MethodId = env->GetStaticMethodID(vmstack_clazz, "getStackClass1",
+ "()Ljava/lang/Class;");
+ assert(getStackClass1MethodId != nullptr);
+ assert(!env->ExceptionCheck());
+
+ jobject caller_class = env->CallStaticObjectMethod(vmstack_clazz, getStackClass1MethodId);
+ assert(caller_class == nullptr);
+ assert(!env->ExceptionCheck());
+ }
+
+ // For better testing we would need to compile against libcore and have a two-deep stack
+ // ourselves.
+}
+
+extern "C" JNIEXPORT void JNICALL Java_Main_nativeTestShallowGetStackClass2(JNIEnv* env, jclass) {
+ PthreadHelper(&testShallowGetStackClass2);
+}
diff --git a/test/004-JniTest/src/Main.java b/test/004-JniTest/src/Main.java
index 6d7d647d07..5884bc0e2b 100644
--- a/test/004-JniTest/src/Main.java
+++ b/test/004-JniTest/src/Main.java
@@ -31,6 +31,7 @@ public class Main {
testCharMethod();
testIsAssignableFromOnPrimitiveTypes();
testShallowGetCallingClassLoader();
+ testShallowGetStackClass2();
}
private static native void testFindClassOnAttachedNativeThread();
@@ -174,4 +175,10 @@ public class Main {
}
native static void nativeTestShallowGetCallingClassLoader();
+
+ static void testShallowGetStackClass2() {
+ nativeTestShallowGetStackClass2();
+ }
+
+ native static void nativeTestShallowGetStackClass2();
}