comparison src/share/vm/classfile/verifier.cpp @ 8060:3a531d40ad93

8007736: VerifyError for static method in interface Reviewed-by: dholmes, acorn Contributed-by: bharadwaj.yadavalli@oracle.com
author acorn
date Thu, 14 Feb 2013 14:33:35 -0500
parents 18fb7da42534
children 729be16a470b
comparison
equal deleted inserted replaced
8059:49618582fc5b 8060:3a531d40ad93
1 /* 1 /*
2 * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
59 #endif 59 #endif
60 #ifdef TARGET_ARCH_ppc 60 #ifdef TARGET_ARCH_ppc
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 STATIC_METHOD_IN_INTERFACE_MAJOR_VERSION 52
65 66
66 // Access to external entry for VerifyClassCodes - old byte code verifier 67 // Access to external entry for VerifyClassCodes - old byte code verifier
67 68
68 extern "C" { 69 extern "C" {
69 typedef jboolean (*verify_byte_codes_fn_t)(JNIEnv *, jclass, char *, jint); 70 typedef jboolean (*verify_byte_codes_fn_t)(JNIEnv *, jclass, char *, jint);
2314 types = 1 << JVM_CONSTANT_InvokeDynamic; 2315 types = 1 << JVM_CONSTANT_InvokeDynamic;
2315 break; 2316 break;
2316 case Bytecodes::_invokespecial: 2317 case Bytecodes::_invokespecial:
2317 types = (1 << JVM_CONSTANT_InterfaceMethodref) | 2318 types = (1 << JVM_CONSTANT_InterfaceMethodref) |
2318 (1 << JVM_CONSTANT_Methodref); 2319 (1 << JVM_CONSTANT_Methodref);
2320 break;
2321 case Bytecodes::_invokestatic:
2322 types = (_klass->major_version() < STATIC_METHOD_IN_INTERFACE_MAJOR_VERSION) ?
2323 (1 << JVM_CONSTANT_Methodref) :
2324 ((1 << JVM_CONSTANT_InterfaceMethodref) | (1 << JVM_CONSTANT_Methodref));
2319 break; 2325 break;
2320 default: 2326 default:
2321 types = 1 << JVM_CONSTANT_Methodref; 2327 types = 1 << JVM_CONSTANT_Methodref;
2322 } 2328 }
2323 verify_cp_type(bcs->bci(), index, cp, types, CHECK_VERIFY(this)); 2329 verify_cp_type(bcs->bci(), index, cp, types, CHECK_VERIFY(this));