comparison src/share/vm/classfile/verifier.cpp @ 4460:09b0d3e9ba6c

8011671: JCK tests on static interface methods fail under b84: Illegal type at constant pool entry 5 Summary: Restore incorrect removal of support for static interface method verification in Java 8 Reviewed-by: kvn, coleenp
author bharadwaj
date Tue, 09 Apr 2013 08:52:32 -0700
parents 36376b540a98
children 92ef81e2f571
comparison
equal deleted inserted replaced
42:3709016e7abe 43:c509df3f1449
61 # include "bytes_ppc.hpp" 61 # include "bytes_ppc.hpp"
62 #endif 62 #endif
63 63
64 #define NOFAILOVER_MAJOR_VERSION 51 64 #define NOFAILOVER_MAJOR_VERSION 51
65 #define NONZERO_PADDING_BYTES_IN_SWITCH_MAJOR_VERSION 51 65 #define NONZERO_PADDING_BYTES_IN_SWITCH_MAJOR_VERSION 51
66 #define STATIC_METHOD_IN_INTERFACE_MAJOR_VERSION 52
66 67
67 // Access to external entry for VerifyClassCodes - old byte code verifier 68 // Access to external entry for VerifyClassCodes - old byte code verifier
68 69
69 extern "C" { 70 extern "C" {
70 typedef jboolean (*verify_byte_codes_fn_t)(JNIEnv *, jclass, char *, jint); 71 typedef jboolean (*verify_byte_codes_fn_t)(JNIEnv *, jclass, char *, jint);
2317 types = 1 << JVM_CONSTANT_InvokeDynamic; 2318 types = 1 << JVM_CONSTANT_InvokeDynamic;
2318 break; 2319 break;
2319 case Bytecodes::_invokespecial: 2320 case Bytecodes::_invokespecial:
2320 types = (1 << JVM_CONSTANT_InterfaceMethodref) | 2321 types = (1 << JVM_CONSTANT_InterfaceMethodref) |
2321 (1 << JVM_CONSTANT_Methodref); 2322 (1 << JVM_CONSTANT_Methodref);
2323 break;
2324 case Bytecodes::_invokestatic:
2325 types = (_klass->major_version() < STATIC_METHOD_IN_INTERFACE_MAJOR_VERSION) ?
2326 (1 << JVM_CONSTANT_Methodref) :
2327 ((1 << JVM_CONSTANT_InterfaceMethodref) | (1 << JVM_CONSTANT_Methodref));
2322 break; 2328 break;
2323 default: 2329 default:
2324 types = 1 << JVM_CONSTANT_Methodref; 2330 types = 1 << JVM_CONSTANT_Methodref;
2325 } 2331 }
2326 verify_cp_type(bcs->bci(), index, cp, types, CHECK_VERIFY(this)); 2332 verify_cp_type(bcs->bci(), index, cp, types, CHECK_VERIFY(this));