Mon, 28 Feb 2011 11:48:53 +0000
7015430: Incorrect thrown type determined for unchecked invocations
Summary: Thrown types do not get updated after 15.12.2.8, and do not get erased as per 15.12.2.6
Reviewed-by: jjg, dlsmith
duke@1 | 1 | /* |
ohair@554 | 2 | * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved. |
duke@1 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
duke@1 | 4 | * |
duke@1 | 5 | * This code is free software; you can redistribute it and/or modify it |
duke@1 | 6 | * under the terms of the GNU General Public License version 2 only, as |
ohair@554 | 7 | * published by the Free Software Foundation. Oracle designates this |
duke@1 | 8 | * particular file as subject to the "Classpath" exception as provided |
ohair@554 | 9 | * by Oracle in the LICENSE file that accompanied this code. |
duke@1 | 10 | * |
duke@1 | 11 | * This code is distributed in the hope that it will be useful, but WITHOUT |
duke@1 | 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
duke@1 | 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
duke@1 | 14 | * version 2 for more details (a copy is included in the LICENSE file that |
duke@1 | 15 | * accompanied this code). |
duke@1 | 16 | * |
duke@1 | 17 | * You should have received a copy of the GNU General Public License version |
duke@1 | 18 | * 2 along with this work; if not, write to the Free Software Foundation, |
duke@1 | 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
duke@1 | 20 | * |
ohair@554 | 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
ohair@554 | 22 | * or visit www.oracle.com if you need additional information or have any |
ohair@554 | 23 | * questions. |
duke@1 | 24 | */ |
duke@1 | 25 | |
duke@1 | 26 | package com.sun.tools.javac.jvm; |
duke@1 | 27 | |
duke@1 | 28 | |
duke@1 | 29 | /** Bytecode instruction codes, as well as typecodes used as |
duke@1 | 30 | * instruction modifiers. |
duke@1 | 31 | * |
jjg@581 | 32 | * <p><b>This is NOT part of any supported API. |
jjg@581 | 33 | * If you write code that depends on this, you do so at your own risk. |
duke@1 | 34 | * This code and its internal interfaces are subject to change or |
duke@1 | 35 | * deletion without notice.</b> |
duke@1 | 36 | */ |
duke@1 | 37 | public interface ByteCodes { |
duke@1 | 38 | |
duke@1 | 39 | /** Byte code instruction codes. |
duke@1 | 40 | */ |
duke@1 | 41 | int illegal = -1, |
duke@1 | 42 | nop = 0, |
duke@1 | 43 | aconst_null = 1, |
duke@1 | 44 | iconst_m1 = 2, |
duke@1 | 45 | iconst_0 = 3, |
duke@1 | 46 | iconst_1 = 4, |
duke@1 | 47 | iconst_2 = 5, |
duke@1 | 48 | iconst_3 = 6, |
duke@1 | 49 | iconst_4 = 7, |
duke@1 | 50 | iconst_5 = 8, |
duke@1 | 51 | lconst_0 = 9, |
duke@1 | 52 | lconst_1 = 10, |
duke@1 | 53 | fconst_0 = 11, |
duke@1 | 54 | fconst_1 = 12, |
duke@1 | 55 | fconst_2 = 13, |
duke@1 | 56 | dconst_0 = 14, |
duke@1 | 57 | dconst_1 = 15, |
duke@1 | 58 | bipush = 16, |
duke@1 | 59 | sipush = 17, |
duke@1 | 60 | ldc1 = 18, |
duke@1 | 61 | ldc2 = 19, |
duke@1 | 62 | ldc2w = 20, |
duke@1 | 63 | iload = 21, |
duke@1 | 64 | lload = 22, |
duke@1 | 65 | fload = 23, |
duke@1 | 66 | dload = 24, |
duke@1 | 67 | aload = 25, |
duke@1 | 68 | iload_0 = 26, |
duke@1 | 69 | iload_1 = 27, |
duke@1 | 70 | iload_2 = 28, |
duke@1 | 71 | iload_3 = 29, |
duke@1 | 72 | lload_0 = 30, |
duke@1 | 73 | lload_1 = 31, |
duke@1 | 74 | lload_2 = 32, |
duke@1 | 75 | lload_3 = 33, |
duke@1 | 76 | fload_0 = 34, |
duke@1 | 77 | fload_1 = 35, |
duke@1 | 78 | fload_2 = 36, |
duke@1 | 79 | fload_3 = 37, |
duke@1 | 80 | dload_0 = 38, |
duke@1 | 81 | dload_1 = 39, |
duke@1 | 82 | dload_2 = 40, |
duke@1 | 83 | dload_3 = 41, |
duke@1 | 84 | aload_0 = 42, |
duke@1 | 85 | aload_1 = 43, |
duke@1 | 86 | aload_2 = 44, |
duke@1 | 87 | aload_3 = 45, |
duke@1 | 88 | iaload = 46, |
duke@1 | 89 | laload = 47, |
duke@1 | 90 | faload = 48, |
duke@1 | 91 | daload = 49, |
duke@1 | 92 | aaload = 50, |
duke@1 | 93 | baload = 51, |
duke@1 | 94 | caload = 52, |
duke@1 | 95 | saload = 53, |
duke@1 | 96 | istore = 54, |
duke@1 | 97 | lstore = 55, |
duke@1 | 98 | fstore = 56, |
duke@1 | 99 | dstore = 57, |
duke@1 | 100 | astore = 58, |
duke@1 | 101 | istore_0 = 59, |
duke@1 | 102 | istore_1 = 60, |
duke@1 | 103 | istore_2 = 61, |
duke@1 | 104 | istore_3 = 62, |
duke@1 | 105 | lstore_0 = 63, |
duke@1 | 106 | lstore_1 = 64, |
duke@1 | 107 | lstore_2 = 65, |
duke@1 | 108 | lstore_3 = 66, |
duke@1 | 109 | fstore_0 = 67, |
duke@1 | 110 | fstore_1 = 68, |
duke@1 | 111 | fstore_2 = 69, |
duke@1 | 112 | fstore_3 = 70, |
duke@1 | 113 | dstore_0 = 71, |
duke@1 | 114 | dstore_1 = 72, |
duke@1 | 115 | dstore_2 = 73, |
duke@1 | 116 | dstore_3 = 74, |
duke@1 | 117 | astore_0 = 75, |
duke@1 | 118 | astore_1 = 76, |
duke@1 | 119 | astore_2 = 77, |
duke@1 | 120 | astore_3 = 78, |
duke@1 | 121 | iastore = 79, |
duke@1 | 122 | lastore = 80, |
duke@1 | 123 | fastore = 81, |
duke@1 | 124 | dastore = 82, |
duke@1 | 125 | aastore = 83, |
duke@1 | 126 | bastore = 84, |
duke@1 | 127 | castore = 85, |
duke@1 | 128 | sastore = 86, |
duke@1 | 129 | pop = 87, |
duke@1 | 130 | pop2 = 88, |
duke@1 | 131 | dup = 89, |
duke@1 | 132 | dup_x1 = 90, |
duke@1 | 133 | dup_x2 = 91, |
duke@1 | 134 | dup2 = 92, |
duke@1 | 135 | dup2_x1 = 93, |
duke@1 | 136 | dup2_x2 = 94, |
duke@1 | 137 | swap = 95, |
duke@1 | 138 | iadd = 96, |
duke@1 | 139 | ladd = 97, |
duke@1 | 140 | fadd = 98, |
duke@1 | 141 | dadd = 99, |
duke@1 | 142 | isub = 100, |
duke@1 | 143 | lsub = 101, |
duke@1 | 144 | fsub = 102, |
duke@1 | 145 | dsub = 103, |
duke@1 | 146 | imul = 104, |
duke@1 | 147 | lmul = 105, |
duke@1 | 148 | fmul = 106, |
duke@1 | 149 | dmul = 107, |
duke@1 | 150 | idiv = 108, |
duke@1 | 151 | ldiv = 109, |
duke@1 | 152 | fdiv = 110, |
duke@1 | 153 | ddiv = 111, |
duke@1 | 154 | imod = 112, |
duke@1 | 155 | lmod = 113, |
duke@1 | 156 | fmod = 114, |
duke@1 | 157 | dmod = 115, |
duke@1 | 158 | ineg = 116, |
duke@1 | 159 | lneg = 117, |
duke@1 | 160 | fneg = 118, |
duke@1 | 161 | dneg = 119, |
duke@1 | 162 | ishl = 120, |
duke@1 | 163 | lshl = 121, |
duke@1 | 164 | ishr = 122, |
duke@1 | 165 | lshr = 123, |
duke@1 | 166 | iushr = 124, |
duke@1 | 167 | lushr = 125, |
duke@1 | 168 | iand = 126, |
duke@1 | 169 | land = 127, |
duke@1 | 170 | ior = 128, |
duke@1 | 171 | lor = 129, |
duke@1 | 172 | ixor = 130, |
duke@1 | 173 | lxor = 131, |
duke@1 | 174 | iinc = 132, |
duke@1 | 175 | i2l = 133, |
duke@1 | 176 | i2f = 134, |
duke@1 | 177 | i2d = 135, |
duke@1 | 178 | l2i = 136, |
duke@1 | 179 | l2f = 137, |
duke@1 | 180 | l2d = 138, |
duke@1 | 181 | f2i = 139, |
duke@1 | 182 | f2l = 140, |
duke@1 | 183 | f2d = 141, |
duke@1 | 184 | d2i = 142, |
duke@1 | 185 | d2l = 143, |
duke@1 | 186 | d2f = 144, |
duke@1 | 187 | int2byte = 145, |
duke@1 | 188 | int2char = 146, |
duke@1 | 189 | int2short = 147, |
duke@1 | 190 | lcmp = 148, |
duke@1 | 191 | fcmpl = 149, |
duke@1 | 192 | fcmpg = 150, |
duke@1 | 193 | dcmpl = 151, |
duke@1 | 194 | dcmpg = 152, |
duke@1 | 195 | ifeq = 153, |
duke@1 | 196 | ifne = 154, |
duke@1 | 197 | iflt = 155, |
duke@1 | 198 | ifge = 156, |
duke@1 | 199 | ifgt = 157, |
duke@1 | 200 | ifle = 158, |
duke@1 | 201 | if_icmpeq = 159, |
duke@1 | 202 | if_icmpne = 160, |
duke@1 | 203 | if_icmplt = 161, |
duke@1 | 204 | if_icmpge = 162, |
duke@1 | 205 | if_icmpgt = 163, |
duke@1 | 206 | if_icmple = 164, |
duke@1 | 207 | if_acmpeq = 165, |
duke@1 | 208 | if_acmpne = 166, |
duke@1 | 209 | goto_ = 167, |
duke@1 | 210 | jsr = 168, |
duke@1 | 211 | ret = 169, |
duke@1 | 212 | tableswitch = 170, |
duke@1 | 213 | lookupswitch = 171, |
duke@1 | 214 | ireturn = 172, |
duke@1 | 215 | lreturn = 173, |
duke@1 | 216 | freturn = 174, |
duke@1 | 217 | dreturn = 175, |
duke@1 | 218 | areturn = 176, |
duke@1 | 219 | return_ = 177, |
duke@1 | 220 | getstatic = 178, |
duke@1 | 221 | putstatic = 179, |
duke@1 | 222 | getfield = 180, |
duke@1 | 223 | putfield = 181, |
duke@1 | 224 | invokevirtual = 182, |
duke@1 | 225 | invokespecial = 183, |
duke@1 | 226 | invokestatic = 184, |
duke@1 | 227 | invokeinterface = 185, |
jrose@267 | 228 | invokedynamic = 186, |
duke@1 | 229 | new_ = 187, |
duke@1 | 230 | newarray = 188, |
duke@1 | 231 | anewarray = 189, |
duke@1 | 232 | arraylength = 190, |
duke@1 | 233 | athrow = 191, |
duke@1 | 234 | checkcast = 192, |
duke@1 | 235 | instanceof_ = 193, |
duke@1 | 236 | monitorenter = 194, |
duke@1 | 237 | monitorexit = 195, |
duke@1 | 238 | wide = 196, |
duke@1 | 239 | multianewarray = 197, |
duke@1 | 240 | if_acmp_null = 198, |
duke@1 | 241 | if_acmp_nonnull = 199, |
duke@1 | 242 | goto_w = 200, |
duke@1 | 243 | jsr_w = 201, |
duke@1 | 244 | breakpoint = 202, |
duke@1 | 245 | ByteCodeCount = 203; |
duke@1 | 246 | |
duke@1 | 247 | /** Virtual instruction codes; used for constant folding. |
duke@1 | 248 | */ |
duke@1 | 249 | int string_add = 256, // string + |
duke@1 | 250 | bool_not = 257, // boolean ! |
duke@1 | 251 | bool_and = 258, // boolean && |
duke@1 | 252 | bool_or = 259; // boolean || |
duke@1 | 253 | |
duke@1 | 254 | /** Virtual opcodes; used for shifts with long shiftcount |
duke@1 | 255 | */ |
duke@1 | 256 | int ishll = 270, // int shift left with long count |
duke@1 | 257 | lshll = 271, // long shift left with long count |
duke@1 | 258 | ishrl = 272, // int shift right with long count |
duke@1 | 259 | lshrl = 273, // long shift right with long count |
duke@1 | 260 | iushrl = 274, // int unsigned shift right with long count |
duke@1 | 261 | lushrl = 275; // long unsigned shift right with long count |
duke@1 | 262 | |
duke@1 | 263 | /** Virtual opcode for null reference checks |
duke@1 | 264 | */ |
duke@1 | 265 | int nullchk = 276; // return operand if non-null, |
duke@1 | 266 | // otherwise throw NullPointerException. |
duke@1 | 267 | |
duke@1 | 268 | /** Virtual opcode for disallowed operations. |
duke@1 | 269 | */ |
duke@1 | 270 | int error = 277; |
duke@1 | 271 | |
duke@1 | 272 | /** All conditional jumps come in pairs. To streamline the |
duke@1 | 273 | * treatment of jumps, we also introduce a negation of an |
duke@1 | 274 | * unconditional jump. That opcode happens to be jsr. |
duke@1 | 275 | */ |
duke@1 | 276 | int dontgoto = jsr; |
duke@1 | 277 | |
duke@1 | 278 | /** Shift and mask constants for shifting prefix instructions. |
duke@1 | 279 | * a pair of instruction codes such as LCMP ; IFEQ is encoded |
duke@1 | 280 | * in Symtab as (LCMP << preShift) + IFEQ. |
duke@1 | 281 | */ |
duke@1 | 282 | int preShift = 9; |
duke@1 | 283 | int preMask = (1 << preShift) - 1; |
duke@1 | 284 | |
duke@1 | 285 | /** Type codes. |
duke@1 | 286 | */ |
duke@1 | 287 | int INTcode = 0, |
duke@1 | 288 | LONGcode = 1, |
duke@1 | 289 | FLOATcode = 2, |
duke@1 | 290 | DOUBLEcode = 3, |
duke@1 | 291 | OBJECTcode = 4, |
duke@1 | 292 | BYTEcode = 5, |
duke@1 | 293 | CHARcode = 6, |
duke@1 | 294 | SHORTcode = 7, |
duke@1 | 295 | VOIDcode = 8, |
duke@1 | 296 | TypeCodeCount = 9; |
duke@1 | 297 | |
duke@1 | 298 | static final String[] typecodeNames = { |
duke@1 | 299 | "int", |
duke@1 | 300 | "long", |
duke@1 | 301 | "float", |
duke@1 | 302 | "double", |
duke@1 | 303 | "object", |
duke@1 | 304 | "byte", |
duke@1 | 305 | "char", |
duke@1 | 306 | "short", |
duke@1 | 307 | "void", |
duke@1 | 308 | "oops" |
duke@1 | 309 | }; |
duke@1 | 310 | } |