diff options
author | Andreas Gampe <agampe@google.com> | 2014-08-13 23:05:38 -0700 |
---|---|---|
committer | Andreas Gampe <agampe@google.com> | 2014-08-14 09:12:38 -0700 |
commit | 0d334ce54efd791da14536b6a16f61d9085b8785 (patch) | |
tree | 1ae8dda45a1d253dd5aced580850bce5f5481923 /test/004-JniTest | |
parent | 70acd53dafbd74d3cd72924216e438fce820beb1 (diff) | |
download | art-0d334ce54efd791da14536b6a16f61d9085b8785.tar.gz art-0d334ce54efd791da14536b6a16f61d9085b8785.tar.bz2 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.cc | 37 | ||||
-rw-r--r-- | test/004-JniTest/src/Main.java | 7 |
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(); } |