test/hotspot/jtreg/vmTestbase/nsk/jvmti/unit/GetLocalVariable/getlocal003/getlocal003.cpp
author sspitsyn
Fri, 22 Nov 2019 10:07:21 +0000
changeset 59223 f16e4154dd7b
parent 55117 b6418e5aad70
permissions -rw-r--r--
8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method Summary: Add necessary check to GetLocalInstance implementation Reviewed-by: amenkov, cjplummer
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
     1
/*
55117
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
     2
 * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
     4
 *
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
     7
 * published by the Free Software Foundation.
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
     8
 *
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    13
 * accompanied this code).
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    14
 *
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    18
 *
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    21
 * questions.
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    22
 */
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    23
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    24
#include <stdio.h>
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    25
#include <string.h>
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    26
#include "jvmti.h"
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    27
#include "jni_tools.h"
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    28
#include "agent_common.h"
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    29
#include "JVMTITools.h"
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    30
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    31
extern "C" {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    32
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    33
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    34
#define STATUS_PASSED 0
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    35
#define STATUS_FAILED 2
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    36
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    37
static jvmtiEnv *jvmti = NULL;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    38
static jvmtiEventCallbacks callbacks;
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    39
static jint result = STATUS_PASSED;
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    40
static jboolean printdump = JNI_FALSE;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    41
static jmethodID mid = NULL;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    42
static jvmtiLocalVariableEntry *table = NULL;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    43
static jint entryCount = 0;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    44
static jint methodExitCnt = -1;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    45
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    46
void print_LocalVariableEntry(jvmtiLocalVariableEntry *lvt_elem) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    47
  printf("\n Var name: %s, slot: %d", lvt_elem->name, lvt_elem->slot);
51551
e409244ce72e 8209611: use C++ compiler for hotspot tests
iignatyev
parents: 50260
diff changeset
    48
  printf(", start_bci: %" LL "d", lvt_elem->start_location);
e409244ce72e 8209611: use C++ compiler for hotspot tests
iignatyev
parents: 50260
diff changeset
    49
  printf(", end_bci: %" LL "d",   lvt_elem->start_location + lvt_elem->length);
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    50
  printf(", signature: %s\n", lvt_elem->signature);
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    51
}
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    52
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    53
static void
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    54
test_locals(jvmtiEnv *jvmti, jthread thr, jlocation location) {
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    55
    jvmtiError err;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    56
    jint intVal;
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    57
    jlong longVal;
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    58
    jfloat floatVal;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    59
    jdouble doubleVal;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    60
    jobject obj;
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    61
    jint i;
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    62
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    63
    for (i = 0; i < entryCount; i++) {
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    64
        if (table[i].start_location > location ||
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    65
            table[i].start_location + table[i].length < location) {
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    66
            continue;  /* The local variable is not visible */
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    67
        }
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    68
        print_LocalVariableEntry(&table[i]);
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    69
        char sig = table[i].signature[0];
55117
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
    70
        int slot = table[i].slot;
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    71
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    72
        if (sig == 'Z' || sig == 'B' || sig == 'C' || sig == 'S') {
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    73
            sig = 'I'; // covered by GetLocalInt
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    74
        }
55117
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
    75
        err = jvmti->GetLocalInt(thr, 0, slot, &intVal);
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    76
        printf(" GetLocalInt:     %s (%d)\n", TranslateError(err), err);
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    77
        if (err != JVMTI_ERROR_NONE && sig == 'I') {
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    78
            printf("FAIL: GetLocalInt failed to get value of int\n");
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    79
            result = STATUS_FAILED;
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    80
        } else if (err != JVMTI_ERROR_TYPE_MISMATCH && sig != 'I') {
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    81
            printf("FAIL: GetLocalInt did not return JVMTI_ERROR_TYPE_MISMATCH for non-int\n");
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    82
            result = STATUS_FAILED;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    83
        }
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    84
55117
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
    85
        err = jvmti->GetLocalLong(thr, 0, slot, &longVal);
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    86
        printf(" GetLocalLong:    %s (%d)\n", TranslateError(err), err);
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    87
        if (err != JVMTI_ERROR_NONE && sig == 'J') {
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    88
            printf("FAIL: GetLocalLong failed to get value of long\n");
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    89
            result = STATUS_FAILED;
55117
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
    90
        } else if (err != JVMTI_ERROR_INVALID_SLOT &&
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
    91
                   err != JVMTI_ERROR_TYPE_MISMATCH &&
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
    92
                   sig != 'J') {
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
    93
            printf("FAIL: GetLocalLong did not return JVMTI_ERROR_INVALID_SLOT"
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
    94
                   " nor JVMTI_ERROR_TYPE_MISMATCH for non-long\n");
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
    95
            result = STATUS_FAILED;
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    96
        }
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    97
55117
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
    98
        err = jvmti->GetLocalFloat(thr, 0, slot, &floatVal);
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
    99
        printf(" GetLocalFloat:   %s (%d)\n", TranslateError(err), err);
55117
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
   100
        if (err != JVMTI_ERROR_NONE && sig == 'F') {
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   101
            printf("FAIL: GetLocalFloat failed to get value of float\n");
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   102
            result = STATUS_FAILED;
55117
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
   103
        } else if (err != JVMTI_ERROR_TYPE_MISMATCH && sig != 'F') {
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   104
            printf("FAIL: GetLocalFloat did not return JVMTI_ERROR_TYPE_MISMATCH for non-float\n");
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   105
            result = STATUS_FAILED;
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   106
        }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   107
55117
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
   108
        err = jvmti->GetLocalDouble(thr, 0, slot, &doubleVal);
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   109
        printf(" GetLocalDouble:  %s (%d)\n", TranslateError(err), err);
55117
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
   110
        if (err != JVMTI_ERROR_NONE && sig == 'D') {
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   111
            printf("FAIL: GetLocalDouble failed to get value of double\n");
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   112
            result = STATUS_FAILED;
55117
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
   113
        } else if (err != JVMTI_ERROR_INVALID_SLOT &&
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
   114
                   err != JVMTI_ERROR_TYPE_MISMATCH &&
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
   115
                   sig != 'D') {
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
   116
            printf("FAIL: GetLocalDouble did not return JVMTI_ERROR_INVALID_SLOT"
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
   117
                   " nor JVMTI_ERROR_TYPE_MISMATCH for non-double\n");
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   118
            result = STATUS_FAILED;
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   119
        }
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   120
55117
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
   121
        err = jvmti->GetLocalObject(thr, 0, slot, &obj);
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   122
        printf(" GetLocalObject:  %s (%d)\n", TranslateError(err), err);
55117
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
   123
        if (err != JVMTI_ERROR_NONE && sig == 'L') {
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   124
            printf("FAIL: GetLocalObject failed to get value of object\n");
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   125
            result = STATUS_FAILED;
55117
b6418e5aad70 8223718: Checks in check_slot_type_no_lvt() should be always executed
sspitsyn
parents: 52445
diff changeset
   126
        } else if (err != JVMTI_ERROR_TYPE_MISMATCH && sig != 'L') {
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   127
            printf("FAIL: GetLocalObject did not return JVMTI_ERROR_TYPE_MISMATCH for non-object\n");
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   128
            result = STATUS_FAILED;
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   129
        }
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   130
    }
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   131
}
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   132
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   133
static void JNICALL
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   134
MethodExit(jvmtiEnv *jvmti_env,
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   135
           JNIEnv *env,
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   136
           jthread thr,
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   137
           jmethodID method,
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   138
           jboolean was_poped_by_exception,
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   139
           jvalue return_value) {
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   140
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   141
    jvmtiError err;
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   142
    jlocation location;
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   143
    jmethodID frame_method = NULL;
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   144
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   145
    if (mid != method) {
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   146
        return;
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   147
    }
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   148
    err = jvmti->GetFrameLocation(thr, 0, &frame_method, &location);
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   149
    if (err != JVMTI_ERROR_NONE) {
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   150
        printf("\t failure: %s (%d)\n", TranslateError(err), err);
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   151
        result = STATUS_FAILED;
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   152
        return;
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   153
    }
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   154
    if (frame_method != method) {
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   155
        printf("\t failure: GetFrameLocation returned wrong jmethodID\n");
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   156
        result = STATUS_FAILED;
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   157
        return;
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   158
    }
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   159
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   160
    printf("\n MethodExit: BEGIN %d\n",  ++methodExitCnt);
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   161
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   162
    test_locals(jvmti, thr, location);
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   163
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   164
    printf("\n MethodExit: END %d\n\n", methodExitCnt);
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   165
    fflush(stdout);
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   166
}
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   167
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   168
#ifdef STATIC_BUILD
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   169
JNIEXPORT jint JNICALL Agent_OnLoad_getlocal003(JavaVM *jvm, char *options, void *reserved) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   170
    return Agent_Initialize(jvm, options, reserved);
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   171
}
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   172
JNIEXPORT jint JNICALL Agent_OnAttach_getlocal003(JavaVM *jvm, char *options, void *reserved) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   173
    return Agent_Initialize(jvm, options, reserved);
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   174
}
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   175
JNIEXPORT jint JNI_OnLoad_getlocal003(JavaVM *jvm, char *options, void *reserved) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   176
    return JNI_VERSION_1_8;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   177
}
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   178
#endif
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   179
jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   180
    jint res;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   181
    jvmtiError err;
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   182
    static jvmtiCapabilities caps;
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   183
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   184
    if (options != NULL && strcmp(options, "printdump") == 0) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   185
        printdump = JNI_TRUE;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   186
    }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   187
51775
dfed97156841 8210700: Clean up JNI_ENV_ARG and factorize the macros for vmTestbase/jvmti/unit tests
jcbeyler
parents: 51551
diff changeset
   188
    res = jvm->GetEnv((void **) &jvmti, JVMTI_VERSION_1_1);
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   189
    if (res != JNI_OK || jvmti == NULL) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   190
        printf("Wrong result of a valid call to GetEnv!\n");
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   191
        return JNI_ERR;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   192
    }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   193
51551
e409244ce72e 8209611: use C++ compiler for hotspot tests
iignatyev
parents: 50260
diff changeset
   194
    err = jvmti->GetPotentialCapabilities(&caps);
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   195
    if (err != JVMTI_ERROR_NONE) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   196
        printf("(GetPotentialCapabilities) unexpected error: %s (%d)\n",
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   197
               TranslateError(err), err);
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   198
        return JNI_ERR;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   199
    }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   200
51551
e409244ce72e 8209611: use C++ compiler for hotspot tests
iignatyev
parents: 50260
diff changeset
   201
    err = jvmti->AddCapabilities(&caps);
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   202
    if (err != JVMTI_ERROR_NONE) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   203
        printf("(AddCapabilities) unexpected error: %s (%d)\n",
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   204
               TranslateError(err), err);
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   205
        return JNI_ERR;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   206
    }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   207
51551
e409244ce72e 8209611: use C++ compiler for hotspot tests
iignatyev
parents: 50260
diff changeset
   208
    err = jvmti->GetCapabilities(&caps);
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   209
    if (err != JVMTI_ERROR_NONE) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   210
        printf("(GetCapabilities) unexpected error: %s (%d)\n",
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   211
               TranslateError(err), err);
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   212
        return JNI_ERR;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   213
    }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   214
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   215
    if (!caps.can_access_local_variables) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   216
        printf("Warning: Access to local variables is not implemented\n");
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   217
        return JNI_ERR;
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   218
    }
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   219
    if (!caps.can_generate_method_exit_events) {
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   220
        printf("Warning: MethodExit event is not implemented\n");
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   221
        return JNI_ERR;
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   222
    }
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   223
    callbacks.MethodExit = &MethodExit;
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   224
    err = jvmti->SetEventCallbacks(&callbacks, sizeof(callbacks));
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   225
    if (err != JVMTI_ERROR_NONE) {
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   226
        printf("(SetEventCallbacks) unexpected error: %s (%d)\n",
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   227
               TranslateError(err), err);
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   228
        return JNI_ERR;
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   229
    }
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   230
    return JNI_OK;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   231
}
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   232
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   233
JNIEXPORT void JNICALL
59223
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   234
Java_nsk_jvmti_unit_GetLocalVariable_getlocal003_instMeth(JNIEnv *env, jobject inst) {
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   235
    jvmtiError err;
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   236
    jobject obj = NULL;
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   237
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   238
    printf("\n Native instMeth: started\n");
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   239
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   240
    // Test GetLocalInstance with native instance method instMeth() frame
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   241
    err = jvmti->GetLocalInstance(NULL, 0, &obj);
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   242
    printf(" Native instMeth: GetLocalInstance: %s (%d)\n", TranslateError(err), err);
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   243
    if (err != JVMTI_ERROR_NONE) {
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   244
        printf("FAIL: GetLocalInstance failed to get instance for native instance method frame\n");
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   245
        result = STATUS_FAILED;
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   246
    }
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   247
    if (env->IsSameObject(inst, obj) == JNI_FALSE) {
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   248
        printf("FAIL: GetLocalInstance returned unexpected instance for native instance method frame\n");
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   249
        result = STATUS_FAILED;
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   250
    }
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   251
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   252
    // Test GetLocalInstance with java instance method meth01() frame
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   253
    err = jvmti->GetLocalInstance(NULL, 1, &obj);
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   254
    printf(" Native instMeth: GetLocalInstance: %s (%d)\n", TranslateError(err), err);
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   255
    if (err != JVMTI_ERROR_NONE) {
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   256
        printf("FAIL: GetLocalInstance failed to get instance for java instance method frame\n");
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   257
        result = STATUS_FAILED;
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   258
    }
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   259
    if (env->IsSameObject(inst, obj) == JNI_FALSE) {
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   260
        printf("FAIL: GetLocalInstance returned unexpected instance for java instance method frame\n");
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   261
        result = STATUS_FAILED;
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   262
    }
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   263
    printf(" Native instMeth: finished\n\n");
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   264
}
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   265
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   266
JNIEXPORT void JNICALL
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   267
Java_nsk_jvmti_unit_GetLocalVariable_getlocal003_getMeth(JNIEnv *env, jclass cls) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   268
    jvmtiError err;
59223
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   269
    jobject obj = NULL;
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   270
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   271
    printf("\n Native getMeth: started\n");
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   272
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   273
    if (jvmti == NULL) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   274
        printf("JVMTI client was not properly loaded!\n");
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   275
        result = STATUS_FAILED;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   276
        return;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   277
    }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   278
51775
dfed97156841 8210700: Clean up JNI_ENV_ARG and factorize the macros for vmTestbase/jvmti/unit tests
jcbeyler
parents: 51551
diff changeset
   279
    mid = env->GetStaticMethodID(cls, "staticMeth", "(I)I");
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   280
    if (mid == NULL) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   281
        printf("Cannot find Method ID for staticMeth\n");
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   282
        result = STATUS_FAILED;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   283
        return;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   284
    }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   285
51551
e409244ce72e 8209611: use C++ compiler for hotspot tests
iignatyev
parents: 50260
diff changeset
   286
    err = jvmti->GetLocalVariableTable(mid, &entryCount, &table);
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   287
    if (err != JVMTI_ERROR_NONE) {
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   288
        printf("(GetLocalVariableTable) unexpected error: %s (%d)\n",
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   289
               TranslateError(err), err);
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   290
        result = STATUS_FAILED;
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   291
        return;
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   292
    }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   293
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   294
    err = jvmti->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_METHOD_EXIT, NULL);
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   295
    if (err != JVMTI_ERROR_NONE) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   296
        printf("Failed to enable metod exit event: %s (%d)\n",
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   297
               TranslateError(err), err);
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   298
        result = STATUS_FAILED;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   299
    }
59223
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   300
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   301
    // Test GetLocalInstance with native static method getMeth() frame
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   302
    err = jvmti->GetLocalInstance(NULL, 0, &obj);
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   303
    printf(" Native getMeth: GetLocalInstance: %s (%d)\n", TranslateError(err), err);
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   304
    if (err != JVMTI_ERROR_INVALID_SLOT) {
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   305
        printf("FAIL: GetLocalInstance failed to return JVMTI_ERROR_INVALID_SLOT for native static method frame\n");
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   306
        result = STATUS_FAILED;
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   307
    }
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   308
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   309
    // Test GetLocalInstance with java static method run() frame
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   310
    err = jvmti->GetLocalInstance(NULL, 1, &obj);
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   311
    printf(" Native getMeth: GetLocalInstance: %s (%d)\n", TranslateError(err), err);
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   312
    if (err != JVMTI_ERROR_INVALID_SLOT) {
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   313
        printf("FAIL: GetLocalInstance failed to return JVMTI_ERROR_INVALID_SLOT for java static method frame\n");
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   314
        result = STATUS_FAILED;
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   315
    }
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   316
f16e4154dd7b 8169467: GetLocalInstance returns JVMTI_ERROR_TYPE_MISMATCH (rather than JVMTI_ERROR_INVALID_SLOT) on static method
sspitsyn
parents: 55117
diff changeset
   317
    printf(" Native getMeth: finished\n\n");
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   318
    fflush(stdout);
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   319
}
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   320
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   321
JNIEXPORT void JNICALL
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   322
Java_nsk_jvmti_unit_GetLocalVariable_getlocal003_checkLoc(JNIEnv *env,
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   323
        jclass cls, jthread thr) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   324
    jvmtiError err;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   325
    jvmtiLocalVariableEntry *table;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   326
    jint entryCount;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   327
    jmethodID mid;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   328
    jint locVar;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   329
    jint i, j;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   330
    int  overlap = 0;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   331
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   332
    if (jvmti == NULL) {
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   333
        printf("JVMTI client was not properly loaded!\n");
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   334
        result = STATUS_FAILED;
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   335
        return;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   336
    }
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   337
    printf("\n checkLoc: START\n");
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   338
51775
dfed97156841 8210700: Clean up JNI_ENV_ARG and factorize the macros for vmTestbase/jvmti/unit tests
jcbeyler
parents: 51551
diff changeset
   339
    mid = env->GetStaticMethodID(cls, "staticMeth", "(I)I");
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   340
    if (mid == NULL) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   341
        printf("Cannot find Method ID for staticMeth\n");
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   342
        result = STATUS_FAILED;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   343
        return;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   344
    }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   345
51551
e409244ce72e 8209611: use C++ compiler for hotspot tests
iignatyev
parents: 50260
diff changeset
   346
    err = jvmti->GetLocalVariableTable(mid, &entryCount, &table);
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   347
    if (err != JVMTI_ERROR_NONE) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   348
        printf("(GetLocalVariableTable) unexpected error: %s (%d)\n",
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   349
               TranslateError(err), err);
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   350
        result = STATUS_FAILED;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   351
        return;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   352
    }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   353
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   354
    for (i = 0; i < entryCount; i++) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   355
        print_LocalVariableEntry(&table[i]);
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   356
51551
e409244ce72e 8209611: use C++ compiler for hotspot tests
iignatyev
parents: 50260
diff changeset
   357
        err = jvmti->GetLocalInt(thr, 1, table[i].slot, &locVar);
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   358
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   359
        if (strcmp(table[i].name, "intArg") == 0) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   360
            if (err != JVMTI_ERROR_NONE) {
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   361
                printf(" GetLocalInt: %s (%d)\n", TranslateError(err), err);
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   362
                printf(" failure: JVMTI_ERROR_NONE is expected\n");
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   363
                result = STATUS_FAILED;
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   364
            }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   365
        }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   366
        else if (strcmp(table[i].name, "pi") == 0) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   367
            if (err != JVMTI_ERROR_TYPE_MISMATCH) {
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   368
                printf(" GetLocalInt: %s (%d)\n", TranslateError(err), err);
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   369
                printf(" failure: JVMTI_ERROR_TYPE_MISMATCH is expected\n");
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   370
                result = STATUS_FAILED;
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   371
            }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   372
        } else {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   373
            if (err != JVMTI_ERROR_INVALID_SLOT) {
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   374
                printf(" GetLocalInt: %s (%d)\n", TranslateError(err), err);
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   375
                printf(" failure: JVMTI_ERROR_INVALID_SLOT is expected\n");
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   376
                result = STATUS_FAILED;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   377
            }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   378
        }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   379
        if (table[i].slot != 2) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   380
           continue;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   381
        }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   382
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   383
        for (j = 0; j < entryCount; j++) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   384
           /* We do cross checks between all variables having slot #2.
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   385
            * No overlapping between location ranges are allowed.
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   386
            */
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   387
           if (table[j].slot != 2 || i == j) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   388
              continue;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   389
           }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   390
           if (table[i].start_location > table[j].start_location + table[j].length ||
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   391
               table[j].start_location > table[i].start_location + table[i].length
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   392
           ) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   393
               continue; /* Everything is Ok */
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   394
           }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   395
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   396
           printf(" failure: locations of vars with slot #2 are overlapped:\n");
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   397
           print_LocalVariableEntry(&table[i]);
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   398
           print_LocalVariableEntry(&table[j]);
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   399
           overlap++;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   400
           result = STATUS_FAILED;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   401
        }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   402
    }
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   403
    if (!overlap) {
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   404
        printf("\n Success: locations of vars with slot #2 are NOT overlapped\n");
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   405
    }
52445
a1eb4f1b94c1 8080406: VM_GetOrSetLocal doesn't check local slot type against requested type
sspitsyn
parents: 51775
diff changeset
   406
    printf("\n checkLoc: END\n\n");
50260
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   407
    fflush(stdout);
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   408
}
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   409
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   410
JNIEXPORT jint JNICALL
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   411
Java_nsk_jvmti_unit_GetLocalVariable_getlocal003_getRes(JNIEnv *env, jclass cls) {
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   412
    return result;
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   413
}
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   414
46c67f5e27c2 8199383: [TESTBUG] Open source VM testbase JVMTI tests
iignatyev
parents:
diff changeset
   415
}