1*055d4590SKeyi Gui<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 2*055d4590SKeyi Gui 3*055d4590SKeyi Gui<html> 4*055d4590SKeyi Gui <head> 5*055d4590SKeyi Gui <title>Java bytecode constraints</title> 6*055d4590SKeyi Gui <link rel=stylesheet href="java-constraints.css"> 7*055d4590SKeyi Gui </head> 8*055d4590SKeyi Gui 9*055d4590SKeyi Gui <body> 10*055d4590SKeyi Gui <h1> 11*055d4590SKeyi Gui Bytecode constraints 12*055d4590SKeyi Gui </h1> 13*055d4590SKeyi Gui 14*055d4590SKeyi Gui <p> 15*055d4590SKeyi Gui From the point of view of a piece of code written in the Java 16*055d4590SKeyi Gui programming language or targeted in the same way to <code>.class</code> 17*055d4590SKeyi Gui files, the Dalvik VM aims to behave in a way 18*055d4590SKeyi Gui that is fully consistent with the language's definition. 19*055d4590SKeyi Gui That is, the code running in Dalvik will behave the same as it 20*055d4590SKeyi Gui would have running in any other virtual machine. This includes 21*055d4590SKeyi Gui verification failures. 22*055d4590SKeyi Gui The Dx/Dalvik system will check roughly the same 23*055d4590SKeyi Gui constraints that any other VM would, except as noted in the file 24*055d4590SKeyi Gui <a href="verifier.html">verifier.html</a>. The following table briefly 25*055d4590SKeyi Gui lists all Dx/Dalvik verification constraints together their analogs 26*055d4590SKeyi Gui from the book <i>The Java<super>TM</super> Language Specification</i>, 27*055d4590SKeyi Gui second edition. In the numbering scheme, the first three 28*055d4590SKeyi Gui elements refer to the specification chapter, the fourth one to the 29*055d4590SKeyi Gui bullet inside that chapter. The failure mode specifies whether the 30*055d4590SKeyi Gui constraint will fail during the Dx conversion or during verification in 31*055d4590SKeyi Gui the VM itself. 32*055d4590SKeyi Gui </p> 33*055d4590SKeyi Gui 34*055d4590SKeyi Gui <h2> 35*055d4590SKeyi Gui Static constraints 36*055d4590SKeyi Gui </h2> 37*055d4590SKeyi Gui 38*055d4590SKeyi Gui <p> 39*055d4590SKeyi Gui Static constraints are constraints on individual elements of the bytecode. 40*055d4590SKeyi Gui They usually can be checked without employing control or data-flow analysis 41*055d4590SKeyi Gui techniques. 42*055d4590SKeyi Gui </p> 43*055d4590SKeyi Gui 44*055d4590SKeyi Gui <table> 45*055d4590SKeyi Gui <tr> 46*055d4590SKeyi Gui <th> 47*055d4590SKeyi Gui Identifier 48*055d4590SKeyi Gui </th> 49*055d4590SKeyi Gui 50*055d4590SKeyi Gui <th> 51*055d4590SKeyi Gui Description 52*055d4590SKeyi Gui </th> 53*055d4590SKeyi Gui 54*055d4590SKeyi Gui <th> 55*055d4590SKeyi Gui Spec equivalent 56*055d4590SKeyi Gui </th> 57*055d4590SKeyi Gui 58*055d4590SKeyi Gui <th> 59*055d4590SKeyi Gui Failure mode 60*055d4590SKeyi Gui </th> 61*055d4590SKeyi Gui </tr> 62*055d4590SKeyi Gui 63*055d4590SKeyi Gui <tr> 64*055d4590SKeyi Gui <td> 65*055d4590SKeyi Gui A1 66*055d4590SKeyi Gui </td> 67*055d4590SKeyi Gui 68*055d4590SKeyi Gui <td> 69*055d4590SKeyi Gui The <code>code</code> array must not be empty. 70*055d4590SKeyi Gui </td> 71*055d4590SKeyi Gui 72*055d4590SKeyi Gui <td> 73*055d4590SKeyi Gui 4.8.1.1 74*055d4590SKeyi Gui </td> 75*055d4590SKeyi Gui 76*055d4590SKeyi Gui <td> 77*055d4590SKeyi Gui DX 78*055d4590SKeyi Gui </td> 79*055d4590SKeyi Gui </tr> 80*055d4590SKeyi Gui 81*055d4590SKeyi Gui <tr> 82*055d4590SKeyi Gui <td> 83*055d4590SKeyi Gui A2 84*055d4590SKeyi Gui </td> 85*055d4590SKeyi Gui 86*055d4590SKeyi Gui <td> 87*055d4590SKeyi Gui The <code>code</code> array must not be larger than 65535 bytes. 88*055d4590SKeyi Gui </td> 89*055d4590SKeyi Gui 90*055d4590SKeyi Gui <td> 91*055d4590SKeyi Gui 4.8.1.2 92*055d4590SKeyi Gui </td> 93*055d4590SKeyi Gui 94*055d4590SKeyi Gui <td> 95*055d4590SKeyi Gui DX 96*055d4590SKeyi Gui </td> 97*055d4590SKeyi Gui </tr> 98*055d4590SKeyi Gui 99*055d4590SKeyi Gui <tr> 100*055d4590SKeyi Gui <td> 101*055d4590SKeyi Gui A3 102*055d4590SKeyi Gui </td> 103*055d4590SKeyi Gui 104*055d4590SKeyi Gui <td> 105*055d4590SKeyi Gui The first opcode in <code>code</code> array must have index 106*055d4590SKeyi Gui <code>0</code>. 107*055d4590SKeyi Gui </td> 108*055d4590SKeyi Gui 109*055d4590SKeyi Gui <td> 110*055d4590SKeyi Gui 4.8.1.3 111*055d4590SKeyi Gui </td> 112*055d4590SKeyi Gui 113*055d4590SKeyi Gui <td> 114*055d4590SKeyi Gui DX 115*055d4590SKeyi Gui </td> 116*055d4590SKeyi Gui </tr> 117*055d4590SKeyi Gui 118*055d4590SKeyi Gui <tr> 119*055d4590SKeyi Gui <td> 120*055d4590SKeyi Gui A4 121*055d4590SKeyi Gui </td> 122*055d4590SKeyi Gui 123*055d4590SKeyi Gui <td> 124*055d4590SKeyi Gui The <code>code</code> array must only contain valid opcodes. 125*055d4590SKeyi Gui </td> 126*055d4590SKeyi Gui 127*055d4590SKeyi Gui <td> 128*055d4590SKeyi Gui 4.8.1.4 129*055d4590SKeyi Gui </td> 130*055d4590SKeyi Gui 131*055d4590SKeyi Gui <td> 132*055d4590SKeyi Gui DX 133*055d4590SKeyi Gui </td> 134*055d4590SKeyi Gui </tr> 135*055d4590SKeyi Gui 136*055d4590SKeyi Gui <tr> 137*055d4590SKeyi Gui <td> 138*055d4590SKeyi Gui A5 139*055d4590SKeyi Gui </td> 140*055d4590SKeyi Gui 141*055d4590SKeyi Gui <td> 142*055d4590SKeyi Gui The index of instruction <code>n+1</code> must equal the index of 143*055d4590SKeyi Gui instruction <code>n</code> plus the length of instruction 144*055d4590SKeyi Gui <code>n</code>, taking into account a possible <code>wide</code> 145*055d4590SKeyi Gui instruction. Opcodes modified by a <code>wide</code> instruction must 146*055d4590SKeyi Gui not be directly reachable. 147*055d4590SKeyi Gui </td> 148*055d4590SKeyi Gui 149*055d4590SKeyi Gui <td> 150*055d4590SKeyi Gui 4.8.1.5 151*055d4590SKeyi Gui </td> 152*055d4590SKeyi Gui 153*055d4590SKeyi Gui <td> 154*055d4590SKeyi Gui DX 155*055d4590SKeyi Gui </td> 156*055d4590SKeyi Gui </tr> 157*055d4590SKeyi Gui 158*055d4590SKeyi Gui <tr> 159*055d4590SKeyi Gui <td> 160*055d4590SKeyi Gui A6 161*055d4590SKeyi Gui </td> 162*055d4590SKeyi Gui 163*055d4590SKeyi Gui <td> 164*055d4590SKeyi Gui The last instruction in <code>code</code> array must end at index 165*055d4590SKeyi Gui <code>code_length-1</code>. 166*055d4590SKeyi Gui </td> 167*055d4590SKeyi Gui 168*055d4590SKeyi Gui <td> 169*055d4590SKeyi Gui 4.8.1.6 170*055d4590SKeyi Gui </td> 171*055d4590SKeyi Gui 172*055d4590SKeyi Gui <td> 173*055d4590SKeyi Gui DX 174*055d4590SKeyi Gui </td> 175*055d4590SKeyi Gui </tr> 176*055d4590SKeyi Gui 177*055d4590SKeyi Gui <tr> 178*055d4590SKeyi Gui <td> 179*055d4590SKeyi Gui A7 180*055d4590SKeyi Gui </td> 181*055d4590SKeyi Gui 182*055d4590SKeyi Gui <td> 183*055d4590SKeyi Gui All jump and branch targets must be opcodes within the same method. 184*055d4590SKeyi Gui Opcodes modified by a <code>wide</code> instruction must not be 185*055d4590SKeyi Gui directly reachable via a jump or branch instruction. 186*055d4590SKeyi Gui </td> 187*055d4590SKeyi Gui 188*055d4590SKeyi Gui <td> 189*055d4590SKeyi Gui 4.8.1.7 190*055d4590SKeyi Gui </td> 191*055d4590SKeyi Gui 192*055d4590SKeyi Gui <td> 193*055d4590SKeyi Gui DX 194*055d4590SKeyi Gui </td> 195*055d4590SKeyi Gui </tr> 196*055d4590SKeyi Gui 197*055d4590SKeyi Gui <tr> 198*055d4590SKeyi Gui <td> 199*055d4590SKeyi Gui A8 200*055d4590SKeyi Gui </td> 201*055d4590SKeyi Gui 202*055d4590SKeyi Gui <td> 203*055d4590SKeyi Gui All targets of a <code>tableswitch</code> instruction must be opcodes 204*055d4590SKeyi Gui within the same method. Upper and lower bounds must be consistent. 205*055d4590SKeyi Gui Opcodes modified by a <code>wide</code> instruction must not be 206*055d4590SKeyi Gui directly reachable via a <code>tableswitch</code> instruction. 207*055d4590SKeyi Gui </td> 208*055d4590SKeyi Gui 209*055d4590SKeyi Gui <td> 210*055d4590SKeyi Gui 4.8.1.8 211*055d4590SKeyi Gui </td> 212*055d4590SKeyi Gui 213*055d4590SKeyi Gui <td> 214*055d4590SKeyi Gui DX 215*055d4590SKeyi Gui </td> 216*055d4590SKeyi Gui </tr> 217*055d4590SKeyi Gui 218*055d4590SKeyi Gui <tr> 219*055d4590SKeyi Gui <td> 220*055d4590SKeyi Gui A9 221*055d4590SKeyi Gui </td> 222*055d4590SKeyi Gui 223*055d4590SKeyi Gui <td> 224*055d4590SKeyi Gui All targets of a <code>lookupswitch</code> instruction must be opcodes 225*055d4590SKeyi Gui within the same method. Its table must be consistent and sorted 226*055d4590SKeyi Gui low-to-high. Opcodes modified by a <code>wide</code> instruction must 227*055d4590SKeyi Gui not be directly reachable via a <code>lookupswitch</code> instruction. 228*055d4590SKeyi Gui </td> 229*055d4590SKeyi Gui 230*055d4590SKeyi Gui <td> 231*055d4590SKeyi Gui 4.8.1.9 232*055d4590SKeyi Gui </td> 233*055d4590SKeyi Gui 234*055d4590SKeyi Gui <td> 235*055d4590SKeyi Gui DX 236*055d4590SKeyi Gui </td> 237*055d4590SKeyi Gui </tr> 238*055d4590SKeyi Gui 239*055d4590SKeyi Gui <tr> 240*055d4590SKeyi Gui <td> 241*055d4590SKeyi Gui A10 242*055d4590SKeyi Gui </td> 243*055d4590SKeyi Gui 244*055d4590SKeyi Gui <td> 245*055d4590SKeyi Gui The operands of <code>ldc</code> and <code>ldc_w</code> instructions 246*055d4590SKeyi Gui must be valid indices into the constant pool. The respective entries 247*055d4590SKeyi Gui must be of type <code>CONSTANT_Integer</code>, 248*055d4590SKeyi Gui <code>CONSTANT_Float</code>, or <code>CONSTANT_String</code>. 249*055d4590SKeyi Gui </td> 250*055d4590SKeyi Gui 251*055d4590SKeyi Gui <td> 252*055d4590SKeyi Gui 4.8.1.10 253*055d4590SKeyi Gui </td> 254*055d4590SKeyi Gui 255*055d4590SKeyi Gui <td> 256*055d4590SKeyi Gui DX 257*055d4590SKeyi Gui </td> 258*055d4590SKeyi Gui </tr> 259*055d4590SKeyi Gui 260*055d4590SKeyi Gui <tr> 261*055d4590SKeyi Gui <td> 262*055d4590SKeyi Gui A11 263*055d4590SKeyi Gui </td> 264*055d4590SKeyi Gui 265*055d4590SKeyi Gui <td> 266*055d4590SKeyi Gui The operands of <code>ldc2_w</code> instructions must be valid indices 267*055d4590SKeyi Gui into the constant pool. The respective entries must be of type 268*055d4590SKeyi Gui <code>CONSTANT_Long</code> or <code>CONSTANT_Double</code>. The 269*055d4590SKeyi Gui subsequent constant pool entry must be valid and remain unused. 270*055d4590SKeyi Gui </td> 271*055d4590SKeyi Gui 272*055d4590SKeyi Gui <td> 273*055d4590SKeyi Gui 4.8.1.11 274*055d4590SKeyi Gui </td> 275*055d4590SKeyi Gui 276*055d4590SKeyi Gui <td> 277*055d4590SKeyi Gui DX 278*055d4590SKeyi Gui </td> 279*055d4590SKeyi Gui </tr> 280*055d4590SKeyi Gui 281*055d4590SKeyi Gui <tr> 282*055d4590SKeyi Gui <td> 283*055d4590SKeyi Gui A12 284*055d4590SKeyi Gui </td> 285*055d4590SKeyi Gui 286*055d4590SKeyi Gui <td> 287*055d4590SKeyi Gui The Operands of <code>get<kind></code> and 288*055d4590SKeyi Gui <code>put<kind></code> instructions must be valid indices into 289*055d4590SKeyi Gui constant pool. The respective entries must be of type 290*055d4590SKeyi Gui <code>CONSTANT_Fieldref</code>. 291*055d4590SKeyi Gui </td> 292*055d4590SKeyi Gui 293*055d4590SKeyi Gui <td> 294*055d4590SKeyi Gui 4.8.1.12 295*055d4590SKeyi Gui </td> 296*055d4590SKeyi Gui 297*055d4590SKeyi Gui <td> 298*055d4590SKeyi Gui DX 299*055d4590SKeyi Gui </td> 300*055d4590SKeyi Gui </tr> 301*055d4590SKeyi Gui 302*055d4590SKeyi Gui <tr> 303*055d4590SKeyi Gui <td> 304*055d4590SKeyi Gui A13 305*055d4590SKeyi Gui </td> 306*055d4590SKeyi Gui 307*055d4590SKeyi Gui <td> 308*055d4590SKeyi Gui The first two operands of <code>invokevirtual</code>, 309*055d4590SKeyi Gui <code>invokespecial</code>, and <code>invokestatic</code> must form a 310*055d4590SKeyi Gui valid 16-bit index into the constant pool. The respective entries must 311*055d4590SKeyi Gui be of type <code>CONSTANT_Methodref</code>. 312*055d4590SKeyi Gui </td> 313*055d4590SKeyi Gui 314*055d4590SKeyi Gui <td> 315*055d4590SKeyi Gui 4.8.1.13 316*055d4590SKeyi Gui </td> 317*055d4590SKeyi Gui 318*055d4590SKeyi Gui <td> 319*055d4590SKeyi Gui DX 320*055d4590SKeyi Gui </td> 321*055d4590SKeyi Gui </tr> 322*055d4590SKeyi Gui 323*055d4590SKeyi Gui <tr> 324*055d4590SKeyi Gui <td> 325*055d4590SKeyi Gui A14 326*055d4590SKeyi Gui </td> 327*055d4590SKeyi Gui 328*055d4590SKeyi Gui <td> 329*055d4590SKeyi Gui Methods whose names start with '<' must only be invoked implicitly by 330*055d4590SKeyi Gui the VM, not by class file code. The only exception is the instance 331*055d4590SKeyi Gui initializer, which may be invoked by <code>invokespecial</code>. 332*055d4590SKeyi Gui </td> 333*055d4590SKeyi Gui 334*055d4590SKeyi Gui <td> 335*055d4590SKeyi Gui 4.8.1.14 336*055d4590SKeyi Gui </td> 337*055d4590SKeyi Gui 338*055d4590SKeyi Gui <td> 339*055d4590SKeyi Gui DX 340*055d4590SKeyi Gui </td> 341*055d4590SKeyi Gui </tr> 342*055d4590SKeyi Gui 343*055d4590SKeyi Gui <tr> 344*055d4590SKeyi Gui <td> 345*055d4590SKeyi Gui A15 346*055d4590SKeyi Gui </td> 347*055d4590SKeyi Gui 348*055d4590SKeyi Gui <td> 349*055d4590SKeyi Gui The first two operands of <code>invokeinterface</code> must form a 350*055d4590SKeyi Gui valid 16-bit index into the constant pool. The entry must be of type 351*055d4590SKeyi Gui <code>CONSTANT_Interface_Methodref</code>. The third operand must 352*055d4590SKeyi Gui specify number of local variables and the fourth operand must always 353*055d4590SKeyi Gui be zero. 354*055d4590SKeyi Gui </td> 355*055d4590SKeyi Gui 356*055d4590SKeyi Gui <td> 357*055d4590SKeyi Gui 4.8.1.15 358*055d4590SKeyi Gui </td> 359*055d4590SKeyi Gui 360*055d4590SKeyi Gui <td> 361*055d4590SKeyi Gui DX 362*055d4590SKeyi Gui </td> 363*055d4590SKeyi Gui </tr> 364*055d4590SKeyi Gui 365*055d4590SKeyi Gui <tr> 366*055d4590SKeyi Gui <td> 367*055d4590SKeyi Gui A16 368*055d4590SKeyi Gui </td> 369*055d4590SKeyi Gui 370*055d4590SKeyi Gui <td> 371*055d4590SKeyi Gui The operands of <code>instanceof</code>, <code>checkcast</code>, 372*055d4590SKeyi Gui <code>new</code>, and <code>anewarray</code> instructions must 373*055d4590SKeyi Gui be a valid index into the constant pool. The first two operands of 374*055d4590SKeyi Gui <code>multianewarray</code> instruction must form a valid 16-bit index 375*055d4590SKeyi Gui into the constant pool. All respective entries must be of type 376*055d4590SKeyi Gui <code>CONSTANT_Class</code>. 377*055d4590SKeyi Gui </td> 378*055d4590SKeyi Gui 379*055d4590SKeyi Gui <td> 380*055d4590SKeyi Gui 4.8.1.16 381*055d4590SKeyi Gui </td> 382*055d4590SKeyi Gui 383*055d4590SKeyi Gui <td> 384*055d4590SKeyi Gui DX 385*055d4590SKeyi Gui </td> 386*055d4590SKeyi Gui </tr> 387*055d4590SKeyi Gui 388*055d4590SKeyi Gui <tr> 389*055d4590SKeyi Gui <td> 390*055d4590SKeyi Gui A17 391*055d4590SKeyi Gui </td> 392*055d4590SKeyi Gui 393*055d4590SKeyi Gui <td> 394*055d4590SKeyi Gui The dimensions of an array created by <code>anewarray</code> 395*055d4590SKeyi Gui instructions must be less than <code>256</code>. 396*055d4590SKeyi Gui </td> 397*055d4590SKeyi Gui 398*055d4590SKeyi Gui <td> 399*055d4590SKeyi Gui 4.8.1.17 400*055d4590SKeyi Gui </td> 401*055d4590SKeyi Gui 402*055d4590SKeyi Gui <td> 403*055d4590SKeyi Gui DX 404*055d4590SKeyi Gui </td> 405*055d4590SKeyi Gui </tr> 406*055d4590SKeyi Gui 407*055d4590SKeyi Gui <tr> 408*055d4590SKeyi Gui <td> 409*055d4590SKeyi Gui A18 410*055d4590SKeyi Gui </td> 411*055d4590SKeyi Gui 412*055d4590SKeyi Gui <td> 413*055d4590SKeyi Gui The <code>new</code> instruction must not reference array classes, 414*055d4590SKeyi Gui interfaces, or abstract classes. 415*055d4590SKeyi Gui </td> 416*055d4590SKeyi Gui 417*055d4590SKeyi Gui <td> 418*055d4590SKeyi Gui 4.8.1.18 419*055d4590SKeyi Gui </td> 420*055d4590SKeyi Gui 421*055d4590SKeyi Gui <td> 422*055d4590SKeyi Gui DX 423*055d4590SKeyi Gui </td> 424*055d4590SKeyi Gui </tr> 425*055d4590SKeyi Gui 426*055d4590SKeyi Gui <tr> 427*055d4590SKeyi Gui <td> 428*055d4590SKeyi Gui A19 429*055d4590SKeyi Gui </td> 430*055d4590SKeyi Gui 431*055d4590SKeyi Gui <td> 432*055d4590SKeyi Gui The type referenced by a <code>multinewarray</code> instruction must 433*055d4590SKeyi Gui have at least as many dimensions as specified in the instruction. The 434*055d4590SKeyi Gui dimensions operand must not be <code>0</code> 435*055d4590SKeyi Gui </td> 436*055d4590SKeyi Gui 437*055d4590SKeyi Gui <td> 438*055d4590SKeyi Gui 4.8.1.19 439*055d4590SKeyi Gui </td> 440*055d4590SKeyi Gui 441*055d4590SKeyi Gui <td> 442*055d4590SKeyi Gui DX 443*055d4590SKeyi Gui </td> 444*055d4590SKeyi Gui </tr> 445*055d4590SKeyi Gui 446*055d4590SKeyi Gui <tr> 447*055d4590SKeyi Gui <td> 448*055d4590SKeyi Gui A20 449*055d4590SKeyi Gui </td> 450*055d4590SKeyi Gui 451*055d4590SKeyi Gui <td> 452*055d4590SKeyi Gui The type referenced by a <code>newarray</code> instruction must be a 453*055d4590SKeyi Gui valid, non-reference type. 454*055d4590SKeyi Gui </td> 455*055d4590SKeyi Gui 456*055d4590SKeyi Gui <td> 457*055d4590SKeyi Gui 4.8.1.20 458*055d4590SKeyi Gui </td> 459*055d4590SKeyi Gui 460*055d4590SKeyi Gui <td> 461*055d4590SKeyi Gui DX 462*055d4590SKeyi Gui </td> 463*055d4590SKeyi Gui </tr> 464*055d4590SKeyi Gui 465*055d4590SKeyi Gui <tr> 466*055d4590SKeyi Gui <td> 467*055d4590SKeyi Gui A21 468*055d4590SKeyi Gui </td> 469*055d4590SKeyi Gui 470*055d4590SKeyi Gui <td> 471*055d4590SKeyi Gui The index operand of instructions explicitly referencing single-width 472*055d4590SKeyi Gui local variables must be non-negative and smaller than 473*055d4590SKeyi Gui <code>max_locals</code>. 474*055d4590SKeyi Gui </td> 475*055d4590SKeyi Gui 476*055d4590SKeyi Gui <td> 477*055d4590SKeyi Gui 4.8.1.21 478*055d4590SKeyi Gui </td> 479*055d4590SKeyi Gui 480*055d4590SKeyi Gui <td> 481*055d4590SKeyi Gui DX 482*055d4590SKeyi Gui </td> 483*055d4590SKeyi Gui </tr> 484*055d4590SKeyi Gui 485*055d4590SKeyi Gui <tr> 486*055d4590SKeyi Gui <td> 487*055d4590SKeyi Gui A22 488*055d4590SKeyi Gui </td> 489*055d4590SKeyi Gui 490*055d4590SKeyi Gui <td> 491*055d4590SKeyi Gui The index operand of instructions implicitly referencing single-width 492*055d4590SKeyi Gui local variables must be non-negative and smaller than 493*055d4590SKeyi Gui <code>max_locals</code>. 494*055d4590SKeyi Gui </td> 495*055d4590SKeyi Gui 496*055d4590SKeyi Gui <td> 497*055d4590SKeyi Gui 4.8.1.22 498*055d4590SKeyi Gui </td> 499*055d4590SKeyi Gui 500*055d4590SKeyi Gui <td> 501*055d4590SKeyi Gui DX 502*055d4590SKeyi Gui </td> 503*055d4590SKeyi Gui </tr> 504*055d4590SKeyi Gui 505*055d4590SKeyi Gui <tr> 506*055d4590SKeyi Gui <td> 507*055d4590SKeyi Gui A23 508*055d4590SKeyi Gui </td> 509*055d4590SKeyi Gui 510*055d4590SKeyi Gui <td> 511*055d4590SKeyi Gui The index operand of instructions explicitly referencing double-width 512*055d4590SKeyi Gui local variables must be non-negative and smaller than 513*055d4590SKeyi Gui <code>max_locals-1</code>. 514*055d4590SKeyi Gui </td> 515*055d4590SKeyi Gui 516*055d4590SKeyi Gui <td> 517*055d4590SKeyi Gui 4.8.1.23 518*055d4590SKeyi Gui </td> 519*055d4590SKeyi Gui 520*055d4590SKeyi Gui <td> 521*055d4590SKeyi Gui DX 522*055d4590SKeyi Gui </td> 523*055d4590SKeyi Gui </tr> 524*055d4590SKeyi Gui 525*055d4590SKeyi Gui <tr> 526*055d4590SKeyi Gui <td> 527*055d4590SKeyi Gui A24 528*055d4590SKeyi Gui </td> 529*055d4590SKeyi Gui 530*055d4590SKeyi Gui <td> 531*055d4590SKeyi Gui The index operand of instructions implicitly referencing double-width 532*055d4590SKeyi Gui local variables must be non-negative and smaller than 533*055d4590SKeyi Gui <code>max_locals-1</code>. 534*055d4590SKeyi Gui </td> 535*055d4590SKeyi Gui 536*055d4590SKeyi Gui <td> 537*055d4590SKeyi Gui 4.8.1.24 538*055d4590SKeyi Gui </td> 539*055d4590SKeyi Gui 540*055d4590SKeyi Gui <td> 541*055d4590SKeyi Gui DX 542*055d4590SKeyi Gui </td> 543*055d4590SKeyi Gui </tr> 544*055d4590SKeyi Gui 545*055d4590SKeyi Gui <tr> 546*055d4590SKeyi Gui <td> 547*055d4590SKeyi Gui A25 548*055d4590SKeyi Gui </td> 549*055d4590SKeyi Gui 550*055d4590SKeyi Gui <td> 551*055d4590SKeyi Gui The index operand of <code>wide</code> instructions explicitly 552*055d4590SKeyi Gui referencing single-width local variables must be non-negative and 553*055d4590SKeyi Gui smaller than <code>max_locals</code>. 554*055d4590SKeyi Gui </td> 555*055d4590SKeyi Gui 556*055d4590SKeyi Gui <td> 557*055d4590SKeyi Gui 4.8.1.25 558*055d4590SKeyi Gui </td> 559*055d4590SKeyi Gui 560*055d4590SKeyi Gui <td> 561*055d4590SKeyi Gui DX 562*055d4590SKeyi Gui </td> 563*055d4590SKeyi Gui </tr> 564*055d4590SKeyi Gui 565*055d4590SKeyi Gui <tr> 566*055d4590SKeyi Gui <td> 567*055d4590SKeyi Gui A26 568*055d4590SKeyi Gui </td> 569*055d4590SKeyi Gui 570*055d4590SKeyi Gui <td> 571*055d4590SKeyi Gui The index operand of <code>wide</code> instructions explicitly 572*055d4590SKeyi Gui referencing double-width local variables must be non-negative and 573*055d4590SKeyi Gui smaller than <code>max_locals-1</code>. 574*055d4590SKeyi Gui </td> 575*055d4590SKeyi Gui 576*055d4590SKeyi Gui <td> 577*055d4590SKeyi Gui 4.8.1.25 578*055d4590SKeyi Gui </td> 579*055d4590SKeyi Gui 580*055d4590SKeyi Gui <td> 581*055d4590SKeyi Gui DX 582*055d4590SKeyi Gui </td> 583*055d4590SKeyi Gui </tr> 584*055d4590SKeyi Gui </table> 585*055d4590SKeyi Gui 586*055d4590SKeyi Gui <h2> 587*055d4590SKeyi Gui Structural constraints 588*055d4590SKeyi Gui </h2> 589*055d4590SKeyi Gui 590*055d4590SKeyi Gui <p> 591*055d4590SKeyi Gui Structural constraints are constraints on relationships between several 592*055d4590SKeyi Gui elements of the bytecode. They usually can't be checked without employing 593*055d4590SKeyi Gui control or data-flow analysis techniques. 594*055d4590SKeyi Gui </p> 595*055d4590SKeyi Gui 596*055d4590SKeyi Gui <table> 597*055d4590SKeyi Gui <tr> 598*055d4590SKeyi Gui <th> 599*055d4590SKeyi Gui Identifier 600*055d4590SKeyi Gui </th> 601*055d4590SKeyi Gui 602*055d4590SKeyi Gui <th> 603*055d4590SKeyi Gui Description 604*055d4590SKeyi Gui </th> 605*055d4590SKeyi Gui 606*055d4590SKeyi Gui <th> 607*055d4590SKeyi Gui Spec equivalent 608*055d4590SKeyi Gui </th> 609*055d4590SKeyi Gui 610*055d4590SKeyi Gui <th> 611*055d4590SKeyi Gui Failure mode 612*055d4590SKeyi Gui </th> 613*055d4590SKeyi Gui </tr> 614*055d4590SKeyi Gui 615*055d4590SKeyi Gui <tr> 616*055d4590SKeyi Gui <td> 617*055d4590SKeyi Gui B1 618*055d4590SKeyi Gui </td> 619*055d4590SKeyi Gui 620*055d4590SKeyi Gui <td> 621*055d4590SKeyi Gui The number and types of arguments (operands and local variables) must 622*055d4590SKeyi Gui always match the instruction. 623*055d4590SKeyi Gui </td> 624*055d4590SKeyi Gui 625*055d4590SKeyi Gui <td> 626*055d4590SKeyi Gui 4.8.2.1 627*055d4590SKeyi Gui </td> 628*055d4590SKeyi Gui 629*055d4590SKeyi Gui <td> 630*055d4590SKeyi Gui DX 631*055d4590SKeyi Gui </td> 632*055d4590SKeyi Gui </tr> 633*055d4590SKeyi Gui 634*055d4590SKeyi Gui <tr> 635*055d4590SKeyi Gui <td> 636*055d4590SKeyi Gui B2 637*055d4590SKeyi Gui </td> 638*055d4590SKeyi Gui 639*055d4590SKeyi Gui <td> 640*055d4590SKeyi Gui The operand stack must have the same depth for all executions paths 641*055d4590SKeyi Gui leading to an instruction. 642*055d4590SKeyi Gui </td> 643*055d4590SKeyi Gui 644*055d4590SKeyi Gui <td> 645*055d4590SKeyi Gui 4.8.2.2 646*055d4590SKeyi Gui </td> 647*055d4590SKeyi Gui 648*055d4590SKeyi Gui <td> 649*055d4590SKeyi Gui DX 650*055d4590SKeyi Gui </td> 651*055d4590SKeyi Gui </tr> 652*055d4590SKeyi Gui 653*055d4590SKeyi Gui <tr> 654*055d4590SKeyi Gui <td> 655*055d4590SKeyi Gui B3 656*055d4590SKeyi Gui </td> 657*055d4590SKeyi Gui 658*055d4590SKeyi Gui <td> 659*055d4590SKeyi Gui Local variable pairs must never be broken up. 660*055d4590SKeyi Gui </td> 661*055d4590SKeyi Gui 662*055d4590SKeyi Gui <td> 663*055d4590SKeyi Gui 4.8.2.3 664*055d4590SKeyi Gui </td> 665*055d4590SKeyi Gui 666*055d4590SKeyi Gui <td> 667*055d4590SKeyi Gui DX 668*055d4590SKeyi Gui </td> 669*055d4590SKeyi Gui </tr> 670*055d4590SKeyi Gui 671*055d4590SKeyi Gui <tr> 672*055d4590SKeyi Gui <td> 673*055d4590SKeyi Gui B4 674*055d4590SKeyi Gui </td> 675*055d4590SKeyi Gui 676*055d4590SKeyi Gui <td> 677*055d4590SKeyi Gui A local variable (or pair) has to be assigned first before it can be 678*055d4590SKeyi Gui read. 679*055d4590SKeyi Gui </td> 680*055d4590SKeyi Gui 681*055d4590SKeyi Gui <td> 682*055d4590SKeyi Gui 4.8.2.4 683*055d4590SKeyi Gui </td> 684*055d4590SKeyi Gui 685*055d4590SKeyi Gui <td> 686*055d4590SKeyi Gui DX 687*055d4590SKeyi Gui </td> 688*055d4590SKeyi Gui </tr> 689*055d4590SKeyi Gui 690*055d4590SKeyi Gui <tr> 691*055d4590SKeyi Gui <td> 692*055d4590SKeyi Gui B5 693*055d4590SKeyi Gui </td> 694*055d4590SKeyi Gui 695*055d4590SKeyi Gui <td> 696*055d4590SKeyi Gui The operand stack must never grow beyond <code>max_stack</code>. 697*055d4590SKeyi Gui </td> 698*055d4590SKeyi Gui 699*055d4590SKeyi Gui <td> 700*055d4590SKeyi Gui 4.8.2.5 701*055d4590SKeyi Gui </td> 702*055d4590SKeyi Gui 703*055d4590SKeyi Gui <td> 704*055d4590SKeyi Gui DX 705*055d4590SKeyi Gui </td> 706*055d4590SKeyi Gui </tr> 707*055d4590SKeyi Gui 708*055d4590SKeyi Gui <tr> 709*055d4590SKeyi Gui <td> 710*055d4590SKeyi Gui B6 711*055d4590SKeyi Gui </td> 712*055d4590SKeyi Gui 713*055d4590SKeyi Gui <td> 714*055d4590SKeyi Gui The operand stack must never underflow. 715*055d4590SKeyi Gui </td> 716*055d4590SKeyi Gui 717*055d4590SKeyi Gui <td> 718*055d4590SKeyi Gui 4.8.2.6 719*055d4590SKeyi Gui </td> 720*055d4590SKeyi Gui 721*055d4590SKeyi Gui <td> 722*055d4590SKeyi Gui DX 723*055d4590SKeyi Gui </td> 724*055d4590SKeyi Gui </tr> 725*055d4590SKeyi Gui 726*055d4590SKeyi Gui <tr> 727*055d4590SKeyi Gui <td> 728*055d4590SKeyi Gui B7 729*055d4590SKeyi Gui </td> 730*055d4590SKeyi Gui 731*055d4590SKeyi Gui <td> 732*055d4590SKeyi Gui An <code>invokespecial</code> instruction must only invoke an instance 733*055d4590SKeyi Gui initializer or a method in the current class or one of its 734*055d4590SKeyi Gui superclasses. 735*055d4590SKeyi Gui </td> 736*055d4590SKeyi Gui 737*055d4590SKeyi Gui <td> 738*055d4590SKeyi Gui 4.8.2.7 739*055d4590SKeyi Gui </td> 740*055d4590SKeyi Gui 741*055d4590SKeyi Gui <td> 742*055d4590SKeyi Gui VM 743*055d4590SKeyi Gui </td> 744*055d4590SKeyi Gui </tr> 745*055d4590SKeyi Gui 746*055d4590SKeyi Gui <tr> 747*055d4590SKeyi Gui <td> 748*055d4590SKeyi Gui B8 749*055d4590SKeyi Gui </td> 750*055d4590SKeyi Gui 751*055d4590SKeyi Gui <td> 752*055d4590SKeyi Gui An instance initializer must only be invoked on an uninitialized 753*055d4590SKeyi Gui instance residing on the operand stack. 754*055d4590SKeyi Gui </td> 755*055d4590SKeyi Gui 756*055d4590SKeyi Gui <td> 757*055d4590SKeyi Gui 4.8.2.8 758*055d4590SKeyi Gui </td> 759*055d4590SKeyi Gui 760*055d4590SKeyi Gui <td> 761*055d4590SKeyi Gui VM 762*055d4590SKeyi Gui </td> 763*055d4590SKeyi Gui </tr> 764*055d4590SKeyi Gui 765*055d4590SKeyi Gui <tr> 766*055d4590SKeyi Gui <td> 767*055d4590SKeyi Gui B9 768*055d4590SKeyi Gui </td> 769*055d4590SKeyi Gui 770*055d4590SKeyi Gui <td> 771*055d4590SKeyi Gui Instance methods may only be invoked on and instance fields may only 772*055d4590SKeyi Gui be accessed on already initialized instances. 773*055d4590SKeyi Gui </td> 774*055d4590SKeyi Gui 775*055d4590SKeyi Gui <td> 776*055d4590SKeyi Gui 4.8.2.9 777*055d4590SKeyi Gui </td> 778*055d4590SKeyi Gui 779*055d4590SKeyi Gui <td> 780*055d4590SKeyi Gui VM 781*055d4590SKeyi Gui </td> 782*055d4590SKeyi Gui </tr> 783*055d4590SKeyi Gui 784*055d4590SKeyi Gui <tr> 785*055d4590SKeyi Gui <td> 786*055d4590SKeyi Gui B10 787*055d4590SKeyi Gui </td> 788*055d4590SKeyi Gui 789*055d4590SKeyi Gui <td> 790*055d4590SKeyi Gui The must be no backwards branches with uninitialized instances on the 791*055d4590SKeyi Gui operand stack or in local variables. There must be no code protected 792*055d4590SKeyi Gui by an exception handler that contains local variables with 793*055d4590SKeyi Gui uninitialized instances. 794*055d4590SKeyi Gui </td> 795*055d4590SKeyi Gui 796*055d4590SKeyi Gui <td> 797*055d4590SKeyi Gui 4.8.2.10 798*055d4590SKeyi Gui </td> 799*055d4590SKeyi Gui 800*055d4590SKeyi Gui <td> 801*055d4590SKeyi Gui DX 802*055d4590SKeyi Gui </td> 803*055d4590SKeyi Gui </tr> 804*055d4590SKeyi Gui 805*055d4590SKeyi Gui <tr> 806*055d4590SKeyi Gui <td> 807*055d4590SKeyi Gui B11 808*055d4590SKeyi Gui </td> 809*055d4590SKeyi Gui 810*055d4590SKeyi Gui <td> 811*055d4590SKeyi Gui An instance initializer must call another instance initializer (same 812*055d4590SKeyi Gui class or superclass) before any instance members can be accessed. 813*055d4590SKeyi Gui Exceptions are non-inherited instance fields, which can be assigned 814*055d4590SKeyi Gui before calling another initializer, and the <code>Object</code> class 815*055d4590SKeyi Gui in general. 816*055d4590SKeyi Gui </td> 817*055d4590SKeyi Gui 818*055d4590SKeyi Gui <td> 819*055d4590SKeyi Gui 4.8.2.11 820*055d4590SKeyi Gui </td> 821*055d4590SKeyi Gui 822*055d4590SKeyi Gui <td> 823*055d4590SKeyi Gui VM 824*055d4590SKeyi Gui </td> 825*055d4590SKeyi Gui </tr> 826*055d4590SKeyi Gui 827*055d4590SKeyi Gui <tr> 828*055d4590SKeyi Gui <td> 829*055d4590SKeyi Gui B12 830*055d4590SKeyi Gui </td> 831*055d4590SKeyi Gui 832*055d4590SKeyi Gui <td> 833*055d4590SKeyi Gui All actual method arguments must be assignment-compatible with formal 834*055d4590SKeyi Gui arguments. 835*055d4590SKeyi Gui </td> 836*055d4590SKeyi Gui 837*055d4590SKeyi Gui <td> 838*055d4590SKeyi Gui 4.8.2.12 839*055d4590SKeyi Gui </td> 840*055d4590SKeyi Gui 841*055d4590SKeyi Gui <td> 842*055d4590SKeyi Gui VM 843*055d4590SKeyi Gui </td> 844*055d4590SKeyi Gui </tr> 845*055d4590SKeyi Gui 846*055d4590SKeyi Gui <tr> 847*055d4590SKeyi Gui <td> 848*055d4590SKeyi Gui B13 849*055d4590SKeyi Gui </td> 850*055d4590SKeyi Gui 851*055d4590SKeyi Gui <td> 852*055d4590SKeyi Gui For each instance method invocation, the actual instance must be 853*055d4590SKeyi Gui assignment-compatible with the class or interface specified in the 854*055d4590SKeyi Gui instruction. 855*055d4590SKeyi Gui </td> 856*055d4590SKeyi Gui 857*055d4590SKeyi Gui <td> 858*055d4590SKeyi Gui 4.8.2.13 859*055d4590SKeyi Gui </td> 860*055d4590SKeyi Gui 861*055d4590SKeyi Gui <td> 862*055d4590SKeyi Gui VM 863*055d4590SKeyi Gui </td> 864*055d4590SKeyi Gui </tr> 865*055d4590SKeyi Gui 866*055d4590SKeyi Gui <tr> 867*055d4590SKeyi Gui <td> 868*055d4590SKeyi Gui B14 869*055d4590SKeyi Gui </td> 870*055d4590SKeyi Gui 871*055d4590SKeyi Gui <td> 872*055d4590SKeyi Gui A returns instruction must match its method's return type. 873*055d4590SKeyi Gui </td> 874*055d4590SKeyi Gui 875*055d4590SKeyi Gui <td> 876*055d4590SKeyi Gui 4.8.2.14 877*055d4590SKeyi Gui </td> 878*055d4590SKeyi Gui 879*055d4590SKeyi Gui <td> 880*055d4590SKeyi Gui VM 881*055d4590SKeyi Gui </td> 882*055d4590SKeyi Gui </tr> 883*055d4590SKeyi Gui 884*055d4590SKeyi Gui <tr> 885*055d4590SKeyi Gui <td> 886*055d4590SKeyi Gui B15 887*055d4590SKeyi Gui </td> 888*055d4590SKeyi Gui 889*055d4590SKeyi Gui <td> 890*055d4590SKeyi Gui When accessing protected members of a superclass, the actual type of 891*055d4590SKeyi Gui the instance being accessed must be either the current class or one 892*055d4590SKeyi Gui of its subclasses. 893*055d4590SKeyi Gui </td> 894*055d4590SKeyi Gui 895*055d4590SKeyi Gui <td> 896*055d4590SKeyi Gui 4.8.2.15 897*055d4590SKeyi Gui </td> 898*055d4590SKeyi Gui 899*055d4590SKeyi Gui <td> 900*055d4590SKeyi Gui VM 901*055d4590SKeyi Gui </td> 902*055d4590SKeyi Gui </tr> 903*055d4590SKeyi Gui 904*055d4590SKeyi Gui <tr> 905*055d4590SKeyi Gui <td> 906*055d4590SKeyi Gui B16 907*055d4590SKeyi Gui </td> 908*055d4590SKeyi Gui 909*055d4590SKeyi Gui <td> 910*055d4590SKeyi Gui The type of a value stored into a static field must be 911*055d4590SKeyi Gui assignment-compatible with or convertible to the field's type. 912*055d4590SKeyi Gui </td> 913*055d4590SKeyi Gui 914*055d4590SKeyi Gui <td> 915*055d4590SKeyi Gui 4.8.2.16 916*055d4590SKeyi Gui </td> 917*055d4590SKeyi Gui 918*055d4590SKeyi Gui <td> 919*055d4590SKeyi Gui VM 920*055d4590SKeyi Gui </td> 921*055d4590SKeyi Gui </tr> 922*055d4590SKeyi Gui 923*055d4590SKeyi Gui <tr> 924*055d4590SKeyi Gui <td> 925*055d4590SKeyi Gui B17 926*055d4590SKeyi Gui </td> 927*055d4590SKeyi Gui 928*055d4590SKeyi Gui <td> 929*055d4590SKeyi Gui The type of a value stored into a field must be assignment-compatible 930*055d4590SKeyi Gui with or convertible to the field's type. 931*055d4590SKeyi Gui </td> 932*055d4590SKeyi Gui 933*055d4590SKeyi Gui <td> 934*055d4590SKeyi Gui 4.8.2.17 935*055d4590SKeyi Gui </td> 936*055d4590SKeyi Gui 937*055d4590SKeyi Gui <td> 938*055d4590SKeyi Gui VM 939*055d4590SKeyi Gui </td> 940*055d4590SKeyi Gui </tr> 941*055d4590SKeyi Gui 942*055d4590SKeyi Gui <tr> 943*055d4590SKeyi Gui <td> 944*055d4590SKeyi Gui B18 945*055d4590SKeyi Gui </td> 946*055d4590SKeyi Gui 947*055d4590SKeyi Gui <td> 948*055d4590SKeyi Gui The type of every value stored into an array must be 949*055d4590SKeyi Gui assignment-compatible with the array's component type. 950*055d4590SKeyi Gui </td> 951*055d4590SKeyi Gui 952*055d4590SKeyi Gui <td> 953*055d4590SKeyi Gui 4.8.2.18 954*055d4590SKeyi Gui </td> 955*055d4590SKeyi Gui 956*055d4590SKeyi Gui <td> 957*055d4590SKeyi Gui VM 958*055d4590SKeyi Gui </td> 959*055d4590SKeyi Gui </tr> 960*055d4590SKeyi Gui 961*055d4590SKeyi Gui <tr> 962*055d4590SKeyi Gui <td> 963*055d4590SKeyi Gui B19 964*055d4590SKeyi Gui </td> 965*055d4590SKeyi Gui 966*055d4590SKeyi Gui <td> 967*055d4590SKeyi Gui The operand of an <code>athrow</code> instruction must be 968*055d4590SKeyi Gui assignment-compatible with <code>java.lang.Throwable</code>. 969*055d4590SKeyi Gui </td> 970*055d4590SKeyi Gui 971*055d4590SKeyi Gui <td> 972*055d4590SKeyi Gui 4.8.2.19 973*055d4590SKeyi Gui </td> 974*055d4590SKeyi Gui 975*055d4590SKeyi Gui <td> 976*055d4590SKeyi Gui VM 977*055d4590SKeyi Gui </td> 978*055d4590SKeyi Gui </tr> 979*055d4590SKeyi Gui 980*055d4590SKeyi Gui <tr> 981*055d4590SKeyi Gui <td> 982*055d4590SKeyi Gui B20 983*055d4590SKeyi Gui </td> 984*055d4590SKeyi Gui 985*055d4590SKeyi Gui <td> 986*055d4590SKeyi Gui The last reachable instruction of a method must either be a backwards 987*055d4590SKeyi Gui jump or branch, a return, or an <code>athrow</code> instruction. It 988*055d4590SKeyi Gui must not be possible to leave the <code>code</code> array at the 989*055d4590SKeyi Gui bottom. 990*055d4590SKeyi Gui </td> 991*055d4590SKeyi Gui 992*055d4590SKeyi Gui <td> 993*055d4590SKeyi Gui 4.8.2.20 994*055d4590SKeyi Gui </td> 995*055d4590SKeyi Gui 996*055d4590SKeyi Gui <td> 997*055d4590SKeyi Gui VM 998*055d4590SKeyi Gui </td> 999*055d4590SKeyi Gui </tr> 1000*055d4590SKeyi Gui 1001*055d4590SKeyi Gui <tr> 1002*055d4590SKeyi Gui <td> 1003*055d4590SKeyi Gui B21 1004*055d4590SKeyi Gui </td> 1005*055d4590SKeyi Gui 1006*055d4590SKeyi Gui <td> 1007*055d4590SKeyi Gui Local variable values must not be used as return addresses. 1008*055d4590SKeyi Gui </td> 1009*055d4590SKeyi Gui 1010*055d4590SKeyi Gui <td> 1011*055d4590SKeyi Gui 4.8.2.21 1012*055d4590SKeyi Gui </td> 1013*055d4590SKeyi Gui 1014*055d4590SKeyi Gui <td> 1015*055d4590SKeyi Gui VM 1016*055d4590SKeyi Gui </td> 1017*055d4590SKeyi Gui </tr> 1018*055d4590SKeyi Gui 1019*055d4590SKeyi Gui <tr> 1020*055d4590SKeyi Gui <td> 1021*055d4590SKeyi Gui B22 1022*055d4590SKeyi Gui </td> 1023*055d4590SKeyi Gui 1024*055d4590SKeyi Gui <td> 1025*055d4590SKeyi Gui There must be a single, uniquely determined return instruction per 1026*055d4590SKeyi Gui subroutine call. 1027*055d4590SKeyi Gui </td> 1028*055d4590SKeyi Gui 1029*055d4590SKeyi Gui <td> 1030*055d4590SKeyi Gui 4.8.2.22 1031*055d4590SKeyi Gui </td> 1032*055d4590SKeyi Gui 1033*055d4590SKeyi Gui <td> 1034*055d4590SKeyi Gui VM 1035*055d4590SKeyi Gui </td> 1036*055d4590SKeyi Gui </tr> 1037*055d4590SKeyi Gui 1038*055d4590SKeyi Gui <tr> 1039*055d4590SKeyi Gui <td> 1040*055d4590SKeyi Gui B23 1041*055d4590SKeyi Gui </td> 1042*055d4590SKeyi Gui 1043*055d4590SKeyi Gui <td> 1044*055d4590SKeyi Gui Subroutine calls must not be directly or indirectly self-recursive. 1045*055d4590SKeyi Gui </td> 1046*055d4590SKeyi Gui 1047*055d4590SKeyi Gui <td> 1048*055d4590SKeyi Gui 4.8.2.23 1049*055d4590SKeyi Gui </td> 1050*055d4590SKeyi Gui 1051*055d4590SKeyi Gui <td> 1052*055d4590SKeyi Gui DX 1053*055d4590SKeyi Gui </td> 1054*055d4590SKeyi Gui </tr> 1055*055d4590SKeyi Gui 1056*055d4590SKeyi Gui <tr> 1057*055d4590SKeyi Gui <td> 1058*055d4590SKeyi Gui B24 1059*055d4590SKeyi Gui </td> 1060*055d4590SKeyi Gui 1061*055d4590SKeyi Gui <td> 1062*055d4590SKeyi Gui <code>ReturnAddress</code> instances must not be reused. If a 1063*055d4590SKeyi Gui subroutine returns to a <code>ReturnAddress</code> further up the 1064*055d4590SKeyi Gui stack than where its original call instruction is located, then all 1065*055d4590SKeyi Gui <code>ReturnAddress</code> instances further down the stack must 1066*055d4590SKeyi Gui never be used. 1067*055d4590SKeyi Gui </td> 1068*055d4590SKeyi Gui 1069*055d4590SKeyi Gui <td> 1070*055d4590SKeyi Gui 4.8.2.24 1071*055d4590SKeyi Gui </td> 1072*055d4590SKeyi Gui 1073*055d4590SKeyi Gui <td> 1074*055d4590SKeyi Gui DX 1075*055d4590SKeyi Gui </td> 1076*055d4590SKeyi Gui </tr> 1077*055d4590SKeyi Gui 1078*055d4590SKeyi Gui </table> 1079*055d4590SKeyi Gui </body> 1080*055d4590SKeyi Gui</html> 1081