* src/vm/jit/verify/icmds.c: Check basic types of instance for field
authoredwin <none@none>
Fri, 13 Oct 2006 18:25:21 +0000 (18:25 +0000)
committeredwin <none@none>
Fri, 13 Oct 2006 18:25:21 +0000 (18:25 +0000)
access.
* src/vm/jit/verify/typecheck-fields.inc: Check basic type of value.

* src/vm/jit/verify/typecheck-stackbased-gen.inc: Regenerated.
* src/vm/jit/verify/typecheck-variablesbased-gen.inc: Likewise.

* src/vm/jit/verify/typecheck.c (verify_fieldaccess): Define
VERIFY_ERROR for the include file.

* src/vm/jit/verify/typecheck-stackbased.c (VERIFY_ERROR): Fixed
macro.

* tests/regression/jasmin/test_verify_fail_putfieldconst_basic_type_instance.j,
tests/regression/jasmin/test_verify_fail_getfield_basic_type_instance.j,
tests/regression/jasmin/test_verify_fail_putfield_basic_type_value.j,
tests/regression/jasmin/test_verify_fail_putstatic_basic_type_value.j,
tests/regression/jasmin/test_verify_fail_putfieldconst_basic_type_value.j,
tests/regression/jasmin/test_verify_fail_getfield_basic_type_value.j,
tests/regression/jasmin/test_verify_fail_putfield_basic_type_instance.j,
tests/regression/jasmin/test_verify_fail_putfield_basic_type_lookup.j,
tests/regression/jasmin/test_verify_fail_getfield_basic_type_lookup.j,
tests/regression/jasmin/test_verify_fail_putstaticconst_basic_type_value.j:
New tests.

* tests/regression/jasmin/runtest: Look for specified ICMDs in -sia
output.

17 files changed:
src/vm/jit/verify/icmds.c
src/vm/jit/verify/typecheck-fields.inc
src/vm/jit/verify/typecheck-stackbased-gen.inc
src/vm/jit/verify/typecheck-stackbased.c
src/vm/jit/verify/typecheck-variablesbased-gen.inc
src/vm/jit/verify/typecheck.c
tests/regression/jasmin/runtest
tests/regression/jasmin/test_verify_fail_getfield_basic_type_instance.j [new file with mode: 0644]
tests/regression/jasmin/test_verify_fail_getfield_basic_type_lookup.j [new file with mode: 0644]
tests/regression/jasmin/test_verify_fail_getfield_basic_type_value.j [new file with mode: 0644]
tests/regression/jasmin/test_verify_fail_putfield_basic_type_instance.j [new file with mode: 0644]
tests/regression/jasmin/test_verify_fail_putfield_basic_type_lookup.j [new file with mode: 0644]
tests/regression/jasmin/test_verify_fail_putfield_basic_type_value.j [new file with mode: 0644]
tests/regression/jasmin/test_verify_fail_putfieldconst_basic_type_instance.j [new file with mode: 0644]
tests/regression/jasmin/test_verify_fail_putfieldconst_basic_type_value.j [new file with mode: 0644]
tests/regression/jasmin/test_verify_fail_putstatic_basic_type_value.j [new file with mode: 0644]
tests/regression/jasmin/test_verify_fail_putstaticconst_basic_type_value.j [new file with mode: 0644]

index 5a3042040b736bf29380b067eef96f5078e8c524..24a3cd85ad6eb92a04252cc9bc6d785200217cd9 100644 (file)
@@ -86,31 +86,30 @@ case ICMD_AALOAD:
 
 case ICMD_PUTFIELD: /* {STACKBASED} */
        CHECK_STACK_DEPTH(2);
-       if (IS_CAT1(stack[0]))
-               stack -= 2;
-       else {
-               stack -= 3;
+       if (!IS_CAT1(stack[0])) {
+               CHECK_STACK_DEPTH(3);
+               stack -= 1;
        }
-       stack = typecheck_stackbased_verify_fieldaccess(STATE, stack+1, stack+2, stack);
+       CHECK_STACK_TYPE(stack[-1], TYPE_ADR);
+       stack = typecheck_stackbased_verify_fieldaccess(STATE, stack-1, stack, stack-2);
        if (stack == NULL)
                EXCEPTION;
        break;
 
 case ICMD_PUTSTATIC: /* {STACKBASED} */
        CHECK_STACK_DEPTH(1);
-       if (IS_CAT1(stack[0]))
+       if (!IS_CAT1(stack[0])) {
+               /* (stack depth >= 2 is guaranteed) */
                stack -= 1;
-       else {
-               stack -= 2;
        }
-       stack = typecheck_stackbased_verify_fieldaccess(STATE, NULL, stack+1, stack);
+       stack = typecheck_stackbased_verify_fieldaccess(STATE, NULL, stack, stack-1);
        if (stack == NULL)
                EXCEPTION;
        break;
 
 case ICMD_GETFIELD: /* {STACKBASED} */
-       stack -= 1;
-       stack = typecheck_stackbased_verify_fieldaccess(STATE, stack+1, NULL, stack);
+       CHECK_STACK_TYPE(stack[0], TYPE_ADR);
+       stack = typecheck_stackbased_verify_fieldaccess(STATE, stack, NULL, stack-1);
        if (stack == NULL)
                EXCEPTION;
        break;
index e3f8b5a894136c883bdbafac9cf29b9a4d602e5f..b777385b570a475187bfb2fd61dca47b0913baf6 100644 (file)
                fieldref = state->iptr->sx.s23.s3.fmiref;
        }
 
+       /* check the basic value type for PUT instructions */
+
+       if (value && value->type != fieldref->parseddesc.fd->type)
+               VERIFY_ERROR("Field type mismatch");
+
        /* try to resolve the field reference lazily */
 
        result = resolve_field_lazy(state->m, fieldref);
index a46fdb7a06ef5a488b44095e949d5ca0bb3e4a53..a1abfd95e2ef44101a892e787b4d7342fccc364f 100644 (file)
@@ -14,7 +14,7 @@
   GENERATED    /* may use stack[1] ... stack[1] */
   GENERATED  
   GENERATED  
-#              line 308 "src/vm/jit/verify/icmds.c"
+#              line 307 "src/vm/jit/verify/icmds.c"
   GENERATED    if (IPTR->flags.bits & INS_FLAG_CLASS) {
   GENERATED            /* a java.lang.Class reference */
   GENERATED            TYPEINFO_INIT_JAVA_LANG_CLASS(DST->typeinfo,IPTR->sx.val.c);
   GENERATED    /* may use stack[-1] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 219 "src/vm/jit/verify/icmds.c"
+#              line 218 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_INT))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
   GENERATED    /* may use stack[-1] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 229 "src/vm/jit/verify/icmds.c"
+#              line 228 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_LONG))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
   GENERATED    /* may use stack[-1] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 214 "src/vm/jit/verify/icmds.c"
+#              line 213 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_FLOAT))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
   GENERATED    /* may use stack[-1] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 209 "src/vm/jit/verify/icmds.c"
+#              line 208 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_DOUBLE))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
   GENERATED    /* may use stack[-1] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 198 "src/vm/jit/verify/icmds.c"
+#              line 197 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BOOLEAN)
   GENERATED                    && !TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BYTE))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED    /* may use stack[-1] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 204 "src/vm/jit/verify/icmds.c"
+#              line 203 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_CHAR))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
   GENERATED    /* may use stack[-1] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 224 "src/vm/jit/verify/icmds.c"
+#              line 223 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_SHORT))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
   GENERATED    /* may use stack[-2] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 255 "src/vm/jit/verify/icmds.c"
+#              line 254 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_INT))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
   GENERATED    /* may use stack[-3] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 265 "src/vm/jit/verify/icmds.c"
+#              line 264 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_LONG))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
   GENERATED    /* may use stack[-2] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 250 "src/vm/jit/verify/icmds.c"
+#              line 249 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_FLOAT))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
   GENERATED    /* may use stack[-3] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 245 "src/vm/jit/verify/icmds.c"
+#              line 244 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_DOUBLE))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
   GENERATED    /* may use stack[-2] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 270 "src/vm/jit/verify/icmds.c"
+#              line 269 "src/vm/jit/verify/icmds.c"
   GENERATED    /* we just check the basic input types and that the           */
   GENERATED    /* destination is an array of references. Assignability to    */
   GENERATED    /* the actual array must be checked at runtime, each time the */
   GENERATED    /* may use stack[-2] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 234 "src/vm/jit/verify/icmds.c"
+#              line 233 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BOOLEAN)
   GENERATED                    && !TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BYTE))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED    /* may use stack[-2] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 240 "src/vm/jit/verify/icmds.c"
+#              line 239 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_CHAR))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
   GENERATED    /* may use stack[-2] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 260 "src/vm/jit/verify/icmds.c"
+#              line 259 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_SHORT))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
   GENERATED    /* may use stack[0] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 656 "src/vm/jit/verify/icmds.c"
+#              line 655 "src/vm/jit/verify/icmds.c"
   GENERATED    /* we pop 1 */
   GENERATED    CHECK_CAT1(stack[0]);
   GENERATED  
   GENERATED    /* may use stack[-1] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 661 "src/vm/jit/verify/icmds.c"
+#              line 660 "src/vm/jit/verify/icmds.c"
   GENERATED    /* we pop either 11 or 2 */
   GENERATED    if (IS_CAT1(stack[0]))
   GENERATED            CHECK_CAT1(stack[-1]);
   GENERATED    /* may use stack[0] ... stack[1] */
   GENERATED  
   GENERATED  
-#              line 676 "src/vm/jit/verify/icmds.c"
+#              line 675 "src/vm/jit/verify/icmds.c"
   GENERATED    /* we dup 1 */
   GENERATED    CHECK_CAT1(stack[0]);
   GENERATED  
   GENERATED    /* may use stack[-1] ... stack[1] */
   GENERATED  
   GENERATED  
-#              line 683 "src/vm/jit/verify/icmds.c"
+#              line 682 "src/vm/jit/verify/icmds.c"
   GENERATED    /* we dup 1 */
   GENERATED    CHECK_CAT1(stack[0]);
   GENERATED    /* we skip 1 */
   GENERATED    /* may use stack[-2] ... stack[1] */
   GENERATED  
   GENERATED  
-#              line 694 "src/vm/jit/verify/icmds.c"
+#              line 693 "src/vm/jit/verify/icmds.c"
   GENERATED    /* we dup 1 */
   GENERATED    CHECK_CAT1(stack[0]);
   GENERATED    /* we skip either 11 or 2 */
   GENERATED    /* may use stack[-1] ... stack[2] */
   GENERATED  
   GENERATED  
-#              line 707 "src/vm/jit/verify/icmds.c"
+#              line 706 "src/vm/jit/verify/icmds.c"
   GENERATED    /* we dup either 11 or 2 */
   GENERATED    if (IS_CAT1(stack[0]))
   GENERATED            CHECK_CAT1(stack[-1]);
   GENERATED    /* may use stack[-2] ... stack[2] */
   GENERATED  
   GENERATED  
-#              line 716 "src/vm/jit/verify/icmds.c"
+#              line 715 "src/vm/jit/verify/icmds.c"
   GENERATED    /* we dup either 11 or 2 */
   GENERATED    if (IS_CAT1(stack[0]))
   GENERATED            CHECK_CAT1(stack[-1]);
   GENERATED    /* may use stack[-3] ... stack[2] */
   GENERATED  
   GENERATED  
-#              line 730 "src/vm/jit/verify/icmds.c"
+#              line 729 "src/vm/jit/verify/icmds.c"
   GENERATED    /* we dup either 11 or 2 */
   GENERATED    if (IS_CAT1(stack[0]))
   GENERATED            CHECK_CAT1(stack[-1]);
   GENERATED    /* may use stack[-1] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 667 "src/vm/jit/verify/icmds.c"
+#              line 666 "src/vm/jit/verify/icmds.c"
   GENERATED    CHECK_CAT1(stack[0]);
   GENERATED    CHECK_CAT1(stack[-1]);
   GENERATED  
   GENERATED    /* may use stack[1] ... stack[1] */
   GENERATED  
   GENERATED  
-#              line 347 "src/vm/jit/verify/icmds.c"
+#              line 346 "src/vm/jit/verify/icmds.c"
   GENERATED    /* {RESULTNOW} */
   GENERATED    TYPECHECK_COUNT(stat_ins_branch);
   GENERATED  
   GENERATED    /* may use stack[1] ... stack[2] */
   GENERATED  
   GENERATED  
-#              line 353 "src/vm/jit/verify/icmds.c"
+#              line 352 "src/vm/jit/verify/icmds.c"
   GENERATED    /* {RESULTNOW} */
   GENERATED    TYPECHECK_COUNT(stat_ins_branch);
   GENERATED  
   GENERATED    /* may use stack[1] ... stack[2] */
   GENERATED  
   GENERATED  
-#              line 359 "src/vm/jit/verify/icmds.c"
+#              line 358 "src/vm/jit/verify/icmds.c"
   GENERATED    /* {RESULTNOW} */
   GENERATED    TYPECHECK_COUNT(stat_ins_branch);
   GENERATED  
   GENERATED    superblockend = true;
   GENERATED  
   GENERATED  
-#              line 344 "src/vm/jit/verify/icmds.c"
+#              line 343 "src/vm/jit/verify/icmds.c"
   GENERATED    /* {RESULTNOW} */
   GENERATED    TYPECHECK_COUNT(stat_ins_branch);
   GENERATED  
   GENERATED    /* may use stack[0] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 540 "src/vm/jit/verify/icmds.c"
+#              line 539 "src/vm/jit/verify/icmds.c"
   GENERATED    /* {RESULTNOW} */
   GENERATED    tbptr = BLOCK_OF(IPTR->sx.s23.s3.jsrtarget.insindex);
   GENERATED  
   GENERATED    superblockend = true;
   GENERATED  
   GENERATED  
-#              line 559 "src/vm/jit/verify/icmds.c"
+#              line 558 "src/vm/jit/verify/icmds.c"
   GENERATED    /* {RESULTNOW} */
   GENERATED    CHECK_LOCAL_TYPE(IPTR->s1.varindex, TYPE_ADR);
   GENERATED    if (!TYPEINFO_IS_PRIMITIVE(STATE->locals[IPTR->s1.varindex].typeinfo))
   GENERATED    /* may use stack[1] ... stack[1] */
   GENERATED  
   GENERATED  
-#              line 411 "src/vm/jit/verify/icmds.c"
+#              line 410 "src/vm/jit/verify/icmds.c"
   GENERATED    /* {RESULTNOW} */
   GENERATED    TYPECHECK_COUNT(stat_ins_switch);
   GENERATED  
   GENERATED    /* may use stack[1] ... stack[1] */
   GENERATED  
   GENERATED  
-#              line 427 "src/vm/jit/verify/icmds.c"
+#              line 426 "src/vm/jit/verify/icmds.c"
   GENERATED    /* {RESULTNOW} */
   GENERATED    TYPECHECK_COUNT(stat_ins_switch);
   GENERATED  
   GENERATED    /* may use stack[0] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 493 "src/vm/jit/verify/icmds.c"
+#              line 492 "src/vm/jit/verify/icmds.c"
   GENERATED    if (STATE->returntype.type != TYPE_INT)
   GENERATED            VERIFY_ERROR("Return type mismatch");
   GENERATED  
   GENERATED    /* may use stack[-1] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 498 "src/vm/jit/verify/icmds.c"
+#              line 497 "src/vm/jit/verify/icmds.c"
   GENERATED    if (STATE->returntype.type != TYPE_LNG)
   GENERATED            VERIFY_ERROR("Return type mismatch");
   GENERATED  
   GENERATED    /* may use stack[0] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 503 "src/vm/jit/verify/icmds.c"
+#              line 502 "src/vm/jit/verify/icmds.c"
   GENERATED    if (STATE->returntype.type != TYPE_FLT)
   GENERATED            VERIFY_ERROR("Return type mismatch");
   GENERATED  
   GENERATED    /* may use stack[-1] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 508 "src/vm/jit/verify/icmds.c"
+#              line 507 "src/vm/jit/verify/icmds.c"
   GENERATED    if (STATE->returntype.type != TYPE_DBL)
   GENERATED            VERIFY_ERROR("Return type mismatch");
   GENERATED  
   GENERATED    /* may use stack[0] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 468 "src/vm/jit/verify/icmds.c"
+#              line 467 "src/vm/jit/verify/icmds.c"
   GENERATED    TYPECHECK_COUNT(stat_ins_areturn);
   GENERATED    if (!TYPEINFO_IS_REFERENCE(OP1->typeinfo))
   GENERATED            VERIFY_ERROR("illegal instruction: ARETURN on non-reference");
   GENERATED    superblockend = true;
   GENERATED  
   GENERATED  
-#              line 513 "src/vm/jit/verify/icmds.c"
+#              line 512 "src/vm/jit/verify/icmds.c"
   GENERATED    if (STATE->returntype.type != TYPE_VOID)
   GENERATED            VERIFY_ERROR("Return type mismatch");
   GENERATED  
   GENERATED    /* variable number of outslots! */
   GENERATED  
   GENERATED  
-#              line 119 "src/vm/jit/verify/icmds.c"
+#              line 118 "src/vm/jit/verify/icmds.c"
   GENERATED    stack = typecheck_stackbased_verify_fieldaccess(STATE, NULL, NULL, stack);
   GENERATED    if (stack == NULL)
   GENERATED            EXCEPTION;
   GENERATED  
 #              line 100 "src/vm/jit/verify/icmds.c"
   GENERATED    CHECK_STACK_DEPTH(1);
-  GENERATED    if (IS_CAT1(stack[0]))
+  GENERATED    if (!IS_CAT1(stack[0])) {
+  GENERATED            /* (stack depth >= 2 is guaranteed) */
   GENERATED            stack -= 1;
-  GENERATED    else {
-  GENERATED            stack -= 2;
   GENERATED    }
-  GENERATED    stack = typecheck_stackbased_verify_fieldaccess(STATE, NULL, stack+1, stack);
+  GENERATED    stack = typecheck_stackbased_verify_fieldaccess(STATE, NULL, stack, stack-1);
   GENERATED    if (stack == NULL)
   GENERATED            EXCEPTION;
   GENERATED  
-#              line 1672 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+#              line 1671 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
   GENERATED  
   GENERATED    break;
   GENERATED  
   GENERATED    /* variable number of outslots! */
   GENERATED  
   GENERATED  
-#              line 112 "src/vm/jit/verify/icmds.c"
-  GENERATED    stack -= 1;
-  GENERATED    stack = typecheck_stackbased_verify_fieldaccess(STATE, stack+1, NULL, stack);
+#              line 111 "src/vm/jit/verify/icmds.c"
+  GENERATED    CHECK_STACK_TYPE(stack[0], TYPE_ADR);
+  GENERATED    stack = typecheck_stackbased_verify_fieldaccess(STATE, stack, NULL, stack-1);
   GENERATED    if (stack == NULL)
   GENERATED            EXCEPTION;
   GENERATED  
-#              line 1690 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+#              line 1689 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
   GENERATED  
   GENERATED    break;
   GENERATED  
   GENERATED  
 #              line 88 "src/vm/jit/verify/icmds.c"
   GENERATED    CHECK_STACK_DEPTH(2);
-  GENERATED    if (IS_CAT1(stack[0]))
-  GENERATED            stack -= 2;
-  GENERATED    else {
-  GENERATED            stack -= 3;
+  GENERATED    if (!IS_CAT1(stack[0])) {
+  GENERATED            CHECK_STACK_DEPTH(3);
+  GENERATED            stack -= 1;
   GENERATED    }
-  GENERATED    stack = typecheck_stackbased_verify_fieldaccess(STATE, stack+1, stack+2, stack);
+  GENERATED    CHECK_STACK_TYPE(stack[-1], TYPE_ADR);
+  GENERATED    stack = typecheck_stackbased_verify_fieldaccess(STATE, stack-1, stack, stack-2);
   GENERATED    if (stack == NULL)
   GENERATED            EXCEPTION;
   GENERATED  
-#              line 1712 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+#              line 1711 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
   GENERATED  
   GENERATED    break;
   GENERATED  
   GENERATED    /* variable number of outslots! */
   GENERATED  
   GENERATED  
-#              line 582 "src/vm/jit/verify/icmds.c"
+#              line 581 "src/vm/jit/verify/icmds.c"
   GENERATED    TYPECHECK_COUNT(stat_ins_invoke);
   GENERATED  
   GENERATED    INSTRUCTION_GET_METHODDESC(IPTR, md);
   GENERATED    }
   GENERATED    TYPECHECK_COUNTIF(INSTRUCTION_IS_UNRESOLVED(IPTR), stat_ins_invoke_unresolved);
   GENERATED  
-#              line 1753 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+#              line 1752 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
   GENERATED  
   GENERATED    break;
   GENERATED  
   GENERATED    /* may use stack[0] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 192 "src/vm/jit/verify/icmds.c"
+#              line 191 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_ARRAY(OP1->typeinfo)
   GENERATED                    && OP1->typeinfo.typeclass.cls != pseudo_class_Arraystub)
   GENERATED            VERIFY_ERROR("illegal instruction: ARRAYLENGTH on non-array");
   GENERATED  
-#              line 1775 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+#              line 1774 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
   GENERATED  
   GENERATED    stack[0].type = TYPE_INT;
   GENERATED    break;
   GENERATED    /* may use stack[0] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 447 "src/vm/jit/verify/icmds.c"
+#              line 446 "src/vm/jit/verify/icmds.c"
   GENERATED    TYPECHECK_COUNT(stat_ins_athrow);
   GENERATED    r = typeinfo_is_assignable_to_class(&OP1->typeinfo,
   GENERATED                    CLASSREF_OR_CLASSINFO(class_java_lang_Throwable));
   GENERATED            IPTR->flags.bits |= INS_FLAG_UNRESOLVED;
   GENERATED    }
   GENERATED  
-#              line 1817 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+#              line 1816 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
   GENERATED  
   GENERATED    stack += -1;
   GENERATED    break;
   GENERATED    /* may use stack[0] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 326 "src/vm/jit/verify/icmds.c"
+#              line 325 "src/vm/jit/verify/icmds.c"
   GENERATED    /* returnAddress is not allowed */
   GENERATED    if (!TYPEINFO_IS_REFERENCE(OP1->typeinfo))
   GENERATED            VERIFY_ERROR("Illegal instruction: CHECKCAST on non-reference");
   GENERATED    if (!typeinfo_init_class(&(DST->typeinfo),IPTR->sx.s23.s3.c))
   GENERATED            EXCEPTION;
   GENERATED  
-#              line 1846 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+#              line 1845 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
   GENERATED  
   GENERATED    break;
   GENERATED  
   GENERATED    /* may use stack[0] ... stack[0] */
   GENERATED  
   GENERATED  
-#              line 335 "src/vm/jit/verify/icmds.c"
+#              line 334 "src/vm/jit/verify/icmds.c"
   GENERATED    /* returnAddress is not allowed */
   GENERATED    if (!TYPEINFO_IS_REFERENCE(OP1->typeinfo))
   GENERATED            VERIFY_ERROR("Illegal instruction: INSTANCEOF on non-reference");
   GENERATED  
-#              line 1873 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+#              line 1872 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
   GENERATED  
   GENERATED    stack[0].type = TYPE_INT;
   GENERATED    break;
   GENERATED    /* variable number of inslots! */
   GENERATED  
   GENERATED  
-#              line 620 "src/vm/jit/verify/icmds.c"
+#              line 619 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!typecheck_stackbased_multianewarray(STATE, stack, stackfloor))
   GENERATED            EXCEPTION;
   GENERATED    stack -= (IPTR->s1.argcount - 1);
   GENERATED    stack[0].type = TYPE_ADR;
   GENERATED  
-#              line 1896 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+#              line 1895 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
   GENERATED  
   GENERATED    break;
   GENERATED  
   GENERATED    /* may use stack[1] ... stack[1] */
   GENERATED  
   GENERATED  
-#              line 345 "src/vm/jit/verify/icmds.c"
+#              line 344 "src/vm/jit/verify/icmds.c"
   GENERATED    /* {RESULTNOW} */
   GENERATED    TYPECHECK_COUNT(stat_ins_branch);
   GENERATED  
   GENERATED    /* propagate stack and variables to the target block */
   GENERATED    REACH(IPTR->dst);
   GENERATED  
-#              line 1920 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+#              line 1919 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
   GENERATED  
   GENERATED    break;
   GENERATED  
   GENERATED    /* variable number of outslots! */
   GENERATED  
   GENERATED  
-#              line 636 "src/vm/jit/verify/icmds.c"
+#              line 635 "src/vm/jit/verify/icmds.c"
   GENERATED    TYPECHECK_COUNT(stat_ins_builtin);
   GENERATED    if (!typecheck_stackbased_verify_builtin(STATE, stack, stackfloor))
   GENERATED            EXCEPTION;
   GENERATED            }
   GENERATED    }
   GENERATED  
-#              line 1952 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
+#              line 1951 "src/vm/jit/verify/typecheck-stackbased-gen.inc"
   GENERATED  
   GENERATED    break;
   GENERATED  
index a79f6b1a124aa2a234af4f3f62d805e461702552..97661184d4ffab93791709a7dc34fb063d880a5a 100644 (file)
@@ -106,7 +106,7 @@ static void typecheck_stackbased_show_state(verifier_state *state,
 #define VERIFY_ERROR(msg)                                            \
     do {                                                             \
         LOG1("VerifyError: %s", msg);                                \
-        exceptions_throw_verifyerror(state.m, msg);                  \
+        exceptions_throw_verifyerror(STATE->m, msg);                 \
         return false;                                                \
     } while (0)
 
index b31b7141ec094d68896eecda7506870eebf71431..86a41fc326487854bcf0ab501f2727ca21cc18c2 100644 (file)
@@ -12,7 +12,7 @@
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 308 "src/vm/jit/verify/icmds.c"
+#              line 307 "src/vm/jit/verify/icmds.c"
   GENERATED    if (IPTR->flags.bits & INS_FLAG_CLASS) {
   GENERATED            /* a java.lang.Class reference */
   GENERATED            TYPEINFO_INIT_JAVA_LANG_CLASS(DST->typeinfo,IPTR->sx.val.c);
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 219 "src/vm/jit/verify/icmds.c"
+#              line 218 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_INT))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 229 "src/vm/jit/verify/icmds.c"
+#              line 228 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_LONG))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 214 "src/vm/jit/verify/icmds.c"
+#              line 213 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_FLOAT))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 209 "src/vm/jit/verify/icmds.c"
+#              line 208 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_DOUBLE))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 198 "src/vm/jit/verify/icmds.c"
+#              line 197 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BOOLEAN)
   GENERATED                    && !TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BYTE))
   GENERATED            VERIFY_ERROR("Array type mismatch");
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 204 "src/vm/jit/verify/icmds.c"
+#              line 203 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_CHAR))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 224 "src/vm/jit/verify/icmds.c"
+#              line 223 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_SHORT))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 362 "src/vm/jit/verify/icmds.c"
+#              line 361 "src/vm/jit/verify/icmds.c"
   GENERATED    /* {RESULTNOW} */
   GENERATED    TYPECHECK_COUNT(stat_ins_branch);
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 255 "src/vm/jit/verify/icmds.c"
+#              line 254 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_INT))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 265 "src/vm/jit/verify/icmds.c"
+#              line 264 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_LONG))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 250 "src/vm/jit/verify/icmds.c"
+#              line 249 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_FLOAT))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 245 "src/vm/jit/verify/icmds.c"
+#              line 244 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_DOUBLE))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 270 "src/vm/jit/verify/icmds.c"
+#              line 269 "src/vm/jit/verify/icmds.c"
   GENERATED    /* we just check the basic input types and that the           */
   GENERATED    /* destination is an array of references. Assignability to    */
   GENERATED    /* the actual array must be checked at runtime, each time the */
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 234 "src/vm/jit/verify/icmds.c"
+#              line 233 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BOOLEAN)
   GENERATED                    && !TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_BYTE))
   GENERATED            VERIFY_ERROR("Array type mismatch");
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 240 "src/vm/jit/verify/icmds.c"
+#              line 239 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_CHAR))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 260 "src/vm/jit/verify/icmds.c"
+#              line 259 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo,ARRAYTYPE_SHORT))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
   GENERATED    superblockend = true;
   GENERATED  
   GENERATED  
-#              line 344 "src/vm/jit/verify/icmds.c"
+#              line 343 "src/vm/jit/verify/icmds.c"
   GENERATED    /* {RESULTNOW} */
   GENERATED    TYPECHECK_COUNT(stat_ins_branch);
   GENERATED  
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 535 "src/vm/jit/verify/icmds.c"
+#              line 534 "src/vm/jit/verify/icmds.c"
   GENERATED    TYPEINFO_INIT_RETURNADDRESS(DST->typeinfo, BPTR->next);
   GENERATED    REACH(IPTR->sx.s23.s3.jsrtarget);
   GENERATED  
   GENERATED    superblockend = true;
   GENERATED  
   GENERATED  
-#              line 552 "src/vm/jit/verify/icmds.c"
+#              line 551 "src/vm/jit/verify/icmds.c"
   GENERATED    /* check returnAddress variable */
   GENERATED    if (!typevector_checkretaddr(jd->var,IPTR->s1.varindex))
   GENERATED            VERIFY_ERROR("illegal instruction: RET using non-returnAddress variable");
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 411 "src/vm/jit/verify/icmds.c"
+#              line 410 "src/vm/jit/verify/icmds.c"
   GENERATED    /* {RESULTNOW} */
   GENERATED    TYPECHECK_COUNT(stat_ins_switch);
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 427 "src/vm/jit/verify/icmds.c"
+#              line 426 "src/vm/jit/verify/icmds.c"
   GENERATED    /* {RESULTNOW} */
   GENERATED    TYPECHECK_COUNT(stat_ins_switch);
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 493 "src/vm/jit/verify/icmds.c"
+#              line 492 "src/vm/jit/verify/icmds.c"
   GENERATED    if (STATE->returntype.type != TYPE_INT)
   GENERATED            VERIFY_ERROR("Return type mismatch");
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 498 "src/vm/jit/verify/icmds.c"
+#              line 497 "src/vm/jit/verify/icmds.c"
   GENERATED    if (STATE->returntype.type != TYPE_LNG)
   GENERATED            VERIFY_ERROR("Return type mismatch");
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 503 "src/vm/jit/verify/icmds.c"
+#              line 502 "src/vm/jit/verify/icmds.c"
   GENERATED    if (STATE->returntype.type != TYPE_FLT)
   GENERATED            VERIFY_ERROR("Return type mismatch");
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 508 "src/vm/jit/verify/icmds.c"
+#              line 507 "src/vm/jit/verify/icmds.c"
   GENERATED    if (STATE->returntype.type != TYPE_DBL)
   GENERATED            VERIFY_ERROR("Return type mismatch");
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 468 "src/vm/jit/verify/icmds.c"
+#              line 467 "src/vm/jit/verify/icmds.c"
   GENERATED    TYPECHECK_COUNT(stat_ins_areturn);
   GENERATED    if (!TYPEINFO_IS_REFERENCE(OP1->typeinfo))
   GENERATED            VERIFY_ERROR("illegal instruction: ARETURN on non-reference");
   GENERATED    superblockend = true;
   GENERATED  
   GENERATED  
-#              line 513 "src/vm/jit/verify/icmds.c"
+#              line 512 "src/vm/jit/verify/icmds.c"
   GENERATED    if (STATE->returntype.type != TYPE_VOID)
   GENERATED            VERIFY_ERROR("Return type mismatch");
   GENERATED  
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 183 "src/vm/jit/verify/icmds.c"
+#              line 182 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!verify_fieldaccess(state, NULL, NULL))
   GENERATED            return false;
   GENERATED    maythrow = true;
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 131 "src/vm/jit/verify/icmds.c"
+#              line 130 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!verify_fieldaccess(state, NULL, VAROP(iptr->s1)))
   GENERATED            return false;
   GENERATED    maythrow = true;
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 177 "src/vm/jit/verify/icmds.c"
+#              line 176 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!verify_fieldaccess(state, VAROP(iptr->s1), NULL))
   GENERATED            return false;
   GENERATED    maythrow = true;
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 125 "src/vm/jit/verify/icmds.c"
+#              line 124 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!verify_fieldaccess(state, VAROP(iptr->s1), VAROP(iptr->sx.s23.s2)))
   GENERATED            return false;
   GENERATED    maythrow = true;
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 572 "src/vm/jit/verify/icmds.c"
+#              line 571 "src/vm/jit/verify/icmds.c"
   GENERATED    TYPECHECK_COUNT(stat_ins_invoke);
   GENERATED    if (!verify_invocation(state))
   GENERATED            EXCEPTION;
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 192 "src/vm/jit/verify/icmds.c"
+#              line 191 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_ARRAY(OP1->typeinfo)
   GENERATED                    && OP1->typeinfo.typeclass.cls != pseudo_class_Arraystub)
   GENERATED            VERIFY_ERROR("illegal instruction: ARRAYLENGTH on non-array");
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 447 "src/vm/jit/verify/icmds.c"
+#              line 446 "src/vm/jit/verify/icmds.c"
   GENERATED    TYPECHECK_COUNT(stat_ins_athrow);
   GENERATED    r = typeinfo_is_assignable_to_class(&OP1->typeinfo,
   GENERATED                    CLASSREF_OR_CLASSINFO(class_java_lang_Throwable));
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 326 "src/vm/jit/verify/icmds.c"
+#              line 325 "src/vm/jit/verify/icmds.c"
   GENERATED    /* returnAddress is not allowed */
   GENERATED    if (!TYPEINFO_IS_REFERENCE(OP1->typeinfo))
   GENERATED            VERIFY_ERROR("Illegal instruction: CHECKCAST on non-reference");
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 335 "src/vm/jit/verify/icmds.c"
+#              line 334 "src/vm/jit/verify/icmds.c"
   GENERATED    /* returnAddress is not allowed */
   GENERATED    if (!TYPEINFO_IS_REFERENCE(OP1->typeinfo))
   GENERATED            VERIFY_ERROR("Illegal instruction: INSTANCEOF on non-reference");
 #              define DST  VAROP(iptr->dst)
   GENERATED  
   GENERATED  
-#              line 615 "src/vm/jit/verify/icmds.c"
+#              line 614 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!verify_multianewarray(STATE))
   GENERATED            EXCEPTION;
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 279 "src/vm/jit/verify/icmds.c"
+#              line 278 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_INT))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 284 "src/vm/jit/verify/icmds.c"
+#              line 283 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_LONG))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 289 "src/vm/jit/verify/icmds.c"
+#              line 288 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_BOOLEAN)
   GENERATED                    && !TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_BYTE))
   GENERATED            VERIFY_ERROR("Array type mismatch");
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 295 "src/vm/jit/verify/icmds.c"
+#              line 294 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_CHAR))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 300 "src/vm/jit/verify/icmds.c"
+#              line 299 "src/vm/jit/verify/icmds.c"
   GENERATED    if (!TYPEINFO_MAYBE_PRIMITIVE_ARRAY(OP1->typeinfo, ARRAYTYPE_SHORT))
   GENERATED            VERIFY_ERROR("Array type mismatch");
   GENERATED  
   GENERATED    maythrow = true;
   GENERATED  
   GENERATED  
-#              line 157 "src/vm/jit/verify/icmds.c"
+#              line 156 "src/vm/jit/verify/icmds.c"
   GENERATED    /* XXX this mess will go away with const operands */
   GENERATED    INSTRUCTION_GET_FIELDREF(state->iptr, fieldref);
   GENERATED    constvalue.type = fieldref->parseddesc.fd->type;
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 137 "src/vm/jit/verify/icmds.c"
+#              line 136 "src/vm/jit/verify/icmds.c"
   GENERATED    /* XXX this mess will go away with const operands */
   GENERATED    INSTRUCTION_GET_FIELDREF(state->iptr, fieldref);
   GENERATED    constvalue.type = fieldref->parseddesc.fd->type;
 #              define OP1  VAROP(iptr->s1)
   GENERATED  
   GENERATED  
-#              line 630 "src/vm/jit/verify/icmds.c"
+#              line 629 "src/vm/jit/verify/icmds.c"
   GENERATED    TYPECHECK_COUNT(stat_ins_builtin);
   GENERATED    if (!verify_builtin(state))
   GENERATED            EXCEPTION;
index 6bcc88b2c416f5e570a0fe9b1ccc6fe7e61d9ea5..90d34f9779416660fed35ef2f78df5c5843e57f5 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes: Christian Thalinger
 
-   $Id: typecheck.c 5773 2006-10-13 14:34:19Z edwin $
+   $Id: typecheck.c 5777 2006-10-13 18:25:21Z edwin $
 
 */
 
@@ -533,8 +533,10 @@ verify_fieldaccess(verifier_state *state,
 
 #define TYPECHECK_VARIABLESBASED
 #define EXCEPTION  do { return false; } while (0)
+#define VERIFY_ERROR(msg)  TYPECHECK_VERIFYERROR_bool(msg)
 #include <typecheck-fields.inc>
 #undef  EXCEPTION
+#undef  VERIFY_ERROR
 #undef  TYPECHECK_VARIABLESBASED
 
        return true;
index d2740a304cbd7205d07074f6417c355418f3fbad..0d4105d5ebfa49c00a589ad14bee0cea855b2a0e 100755 (executable)
@@ -67,8 +67,10 @@ do
     TESTEXPECT="TESTEXPECT"
     TESTLOG="TESTLOG"
     TESTERR="TESTERR"
+       TESTSIA="TESTSIA"
 
        EXPECTSTATUS=0
+       CHECKICMD=0
 
        # compile the test
 
@@ -79,6 +81,11 @@ do
                EXPECTERROR=$(grep 'ERROR:.*' "$TEST" | sed 's,.*ERROR:[ \t]*,,')
        fi
 
+       if grep 'ICMD:' "$TEST" >/dev/null ; then
+               CHECKICMD=1
+               EXPECTICMD=$(grep 'ICMD:.*' "$TEST" | sed 's,.*ICMD:[ \t]*,,')
+       fi
+
        # run the test
 
     $TIMEOUTRUN $JAVA $JAVAFLAGS "$TESTBASENAME" >"$TESTOUT" 2>"$TESTERR"
@@ -114,6 +121,13 @@ do
                fi
        fi
 
+       if [ "$CHECKICMD" -ne 0 ] ; then
+               rm -f "$TESTSIA"
+               touch "$TESTSIA"
+               $JAVA $JAVAFLAGS -sia "$TESTBASENAME" >"$TESTSIA" 2>/dev/null
+               cat "$TESTSIA" | sed -n '/^'"$TESTBASENAME"'\.main/,$p' | sed '/^=====.*flags: -1/,$d' | tee TEST | grep "$EXPECTICMD"
+       fi
+
     shift
 done
 
diff --git a/tests/regression/jasmin/test_verify_fail_getfield_basic_type_instance.j b/tests/regression/jasmin/test_verify_fail_getfield_basic_type_instance.j
new file mode 100644 (file)
index 0000000..662757c
--- /dev/null
@@ -0,0 +1,52 @@
+.class public test_verify_fail_getfield_basic_type_instance
+.super java/lang/Object
+
+.field public "intfield" I
+
+; ======================================================================
+
+.method public <init>()V
+   .limit stack 2
+
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+
+   aload_0
+   ldc 567
+   putfield test_verify_fail_getfield_basic_type_instance/intfield I
+
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 2
+       .limit locals 2
+
+       new test_verify_fail_getfield_basic_type_instance
+       dup
+       invokespecial test_verify_fail_getfield_basic_type_instance/<init>()V
+
+       pop
+       iconst_1
+
+       getfield test_verify_fail_getfield_basic_type_instance/intfield I
+       ; ERROR: VerifyError
+
+       invokestatic test_verify_fail_getfield_basic_type_instance/check(I)V
+
+       return
+.end method
+
diff --git a/tests/regression/jasmin/test_verify_fail_getfield_basic_type_lookup.j b/tests/regression/jasmin/test_verify_fail_getfield_basic_type_lookup.j
new file mode 100644 (file)
index 0000000..72e2151
--- /dev/null
@@ -0,0 +1,49 @@
+.class public test_verify_fail_getfield_basic_type_lookup
+.super java/lang/Object
+
+.field public "f" Ljava/lang/String;
+
+; ======================================================================
+
+.method public <init>()V
+   .limit stack 2
+
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+
+   aload_0
+   ldc "test"
+   putfield test_verify_fail_getfield_basic_type_lookup/f Ljava/lang/String;
+
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 2
+       .limit locals 2
+
+       new test_verify_fail_getfield_basic_type_lookup
+       dup
+       invokespecial test_verify_fail_getfield_basic_type_lookup/<init>()V
+
+       getfield test_verify_fail_getfield_basic_type_lookup/f I
+       ; ERROR: NoSuchFieldError
+
+       invokestatic test_verify_fail_getfield_basic_type_lookup/check(I)V
+
+       return
+.end method
+
diff --git a/tests/regression/jasmin/test_verify_fail_getfield_basic_type_value.j b/tests/regression/jasmin/test_verify_fail_getfield_basic_type_value.j
new file mode 100644 (file)
index 0000000..403ccbd
--- /dev/null
@@ -0,0 +1,49 @@
+.class public test_verify_fail_getfield_basic_type_value
+.super java/lang/Object
+
+.field public "f" Ljava/lang/String;
+
+; ======================================================================
+
+.method public <init>()V
+   .limit stack 2
+
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+
+   aload_0
+   ldc "test"
+   putfield test_verify_fail_getfield_basic_type_value/f Ljava/lang/String;
+
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 2
+       .limit locals 2
+
+       new test_verify_fail_getfield_basic_type_value
+       dup
+       invokespecial test_verify_fail_getfield_basic_type_value/<init>()V
+
+       getfield test_verify_fail_getfield_basic_type_value/f Ljava/lang/String;
+
+       invokestatic test_verify_fail_getfield_basic_type_value/check(I)V
+       ; ERROR: VerifyError
+
+       return
+.end method
+
diff --git a/tests/regression/jasmin/test_verify_fail_putfield_basic_type_instance.j b/tests/regression/jasmin/test_verify_fail_putfield_basic_type_instance.j
new file mode 100644 (file)
index 0000000..5e1b01f
--- /dev/null
@@ -0,0 +1,55 @@
+.class public test_verify_fail_putfield_basic_type_instance
+.super java/lang/Object
+
+.field public "intfield" I
+
+; ======================================================================
+
+.method public <init>()V
+   .limit stack 2
+
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+
+   aload_0
+   ldc 567
+   putfield test_verify_fail_putfield_basic_type_instance/intfield I
+
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 2
+       .limit locals 2
+
+       ldc 42
+       istore 1
+
+       new test_verify_fail_putfield_basic_type_instance
+       dup
+       invokespecial test_verify_fail_putfield_basic_type_instance/<init>()V
+
+       pop
+       iconst_1
+
+       iload 1
+       putfield test_verify_fail_putfield_basic_type_instance/intfield I
+       ; ERROR: VerifyError
+       ; ICMD: PUTFIELD
+
+       return
+.end method
+
diff --git a/tests/regression/jasmin/test_verify_fail_putfield_basic_type_lookup.j b/tests/regression/jasmin/test_verify_fail_putfield_basic_type_lookup.j
new file mode 100644 (file)
index 0000000..034af7c
--- /dev/null
@@ -0,0 +1,48 @@
+.class public test_verify_fail_putfield_basic_type_lookup
+.super java/lang/Object
+
+.field public "f" Ljava/lang/String;
+
+; ======================================================================
+
+.method public <init>()V
+   .limit stack 2
+
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+
+   aload_0
+   ldc "test"
+   putfield test_verify_fail_putfield_basic_type_lookup/f Ljava/lang/String;
+
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 2
+       .limit locals 2
+
+       new test_verify_fail_putfield_basic_type_lookup
+       dup
+       invokespecial test_verify_fail_putfield_basic_type_lookup/<init>()V
+
+       iconst_2
+       putfield test_verify_fail_putfield_basic_type_lookup/f I
+       ; ERROR: NoSuchFieldError
+
+       return
+.end method
+
diff --git a/tests/regression/jasmin/test_verify_fail_putfield_basic_type_value.j b/tests/regression/jasmin/test_verify_fail_putfield_basic_type_value.j
new file mode 100644 (file)
index 0000000..fe3a82f
--- /dev/null
@@ -0,0 +1,51 @@
+.class public test_verify_fail_putfield_basic_type_value
+.super java/lang/Object
+
+.field public "f" Ljava/lang/String;
+
+; ======================================================================
+
+.method public <init>()V
+   .limit stack 2
+
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+
+   aload_0
+   ldc "test"
+   putfield test_verify_fail_putfield_basic_type_value/f Ljava/lang/String;
+
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 2
+       .limit locals 2
+
+       ldc 42
+       istore 1
+
+       new test_verify_fail_putfield_basic_type_value
+       dup
+       invokespecial test_verify_fail_putfield_basic_type_value/<init>()V
+
+       iload 1
+       putfield test_verify_fail_putfield_basic_type_value/f Ljava/lang/String;
+       ; ERROR: VerifyError
+
+       return
+.end method
+
diff --git a/tests/regression/jasmin/test_verify_fail_putfieldconst_basic_type_instance.j b/tests/regression/jasmin/test_verify_fail_putfieldconst_basic_type_instance.j
new file mode 100644 (file)
index 0000000..26c715f
--- /dev/null
@@ -0,0 +1,52 @@
+.class public test_verify_fail_putfieldconst_basic_type_instance
+.super java/lang/Object
+
+.field public "intfield" I
+
+; ======================================================================
+
+.method public <init>()V
+   .limit stack 2
+
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+
+   aload_0
+   ldc 567
+   putfield test_verify_fail_putfieldconst_basic_type_instance/intfield I
+
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 2
+       .limit locals 2
+
+       new test_verify_fail_putfieldconst_basic_type_instance
+       dup
+       invokespecial test_verify_fail_putfieldconst_basic_type_instance/<init>()V
+
+       pop
+       iconst_1
+
+       iconst_2
+       putfield test_verify_fail_putfieldconst_basic_type_instance/intfield I
+       ; ERROR: VerifyError
+       ; CACAOICMD: PUTFIELDCONST
+
+       return
+.end method
+
diff --git a/tests/regression/jasmin/test_verify_fail_putfieldconst_basic_type_value.j b/tests/regression/jasmin/test_verify_fail_putfieldconst_basic_type_value.j
new file mode 100644 (file)
index 0000000..7e2f8cf
--- /dev/null
@@ -0,0 +1,48 @@
+.class public test_verify_fail_putfieldconst_basic_type_value
+.super java/lang/Object
+
+.field public "f" Ljava/lang/String;
+
+; ======================================================================
+
+.method public <init>()V
+   .limit stack 2
+
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+
+   aload_0
+   ldc "test"
+   putfield test_verify_fail_putfieldconst_basic_type_value/f Ljava/lang/String;
+
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 2
+       .limit locals 2
+
+       new test_verify_fail_putfieldconst_basic_type_value
+       dup
+       invokespecial test_verify_fail_putfieldconst_basic_type_value/<init>()V
+
+       ldc 42
+       putfield test_verify_fail_putfieldconst_basic_type_value/f Ljava/lang/String;
+       ; ERROR: VerifyError
+
+       return
+.end method
+
diff --git a/tests/regression/jasmin/test_verify_fail_putstatic_basic_type_value.j b/tests/regression/jasmin/test_verify_fail_putstatic_basic_type_value.j
new file mode 100644 (file)
index 0000000..44943ec
--- /dev/null
@@ -0,0 +1,43 @@
+.class public test_verify_fail_putstatic_basic_type_value
+.super java/lang/Object
+
+.field public static "f" Ljava/lang/String;
+
+; ======================================================================
+
+.method public <init>()V
+   .limit stack 2
+
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 2
+       .limit locals 2
+
+       ldc 42
+       istore 1
+
+       iload 1
+       putstatic test_verify_fail_putstatic_basic_type_value/f Ljava/lang/String;
+       ; ERROR: VerifyError
+
+       return
+.end method
+
diff --git a/tests/regression/jasmin/test_verify_fail_putstaticconst_basic_type_value.j b/tests/regression/jasmin/test_verify_fail_putstaticconst_basic_type_value.j
new file mode 100644 (file)
index 0000000..9836f11
--- /dev/null
@@ -0,0 +1,40 @@
+.class public test_verify_fail_putstaticconst_basic_type_value
+.super java/lang/Object
+
+.field public static "f" Ljava/lang/String;
+
+; ======================================================================
+
+.method public <init>()V
+   .limit stack 2
+
+   aload_0
+   invokenonvirtual java/lang/Object/<init>()V
+
+   return
+.end method
+
+; ======================================================================
+
+.method public static check(I)V
+       .limit locals 1
+       .limit stack 10
+       getstatic java/lang/System/out Ljava/io/PrintStream;
+       iload_0
+       invokevirtual java/io/PrintStream/println(I)V
+       return
+.end method
+
+; ======================================================================
+
+.method public static main([Ljava/lang/String;)V
+       .limit stack 2
+       .limit locals 2
+
+       ldc 42
+       putstatic test_verify_fail_putstaticconst_basic_type_value/f Ljava/lang/String;
+       ; ERROR: VerifyError
+
+       return
+.end method
+