8297556: Parse::check_interpreter_type fails with assert "must constrain OSR typestate"

Reviewed-by: thartmann, vlivanov
This commit is contained in:
Roland Westrelin 2022-11-25 08:06:14 +00:00
parent 74d3baccb3
commit cfe5a3716e
2 changed files with 48 additions and 4 deletions

View File

@ -2314,16 +2314,14 @@ bool TypeAry::ary_must_be_exact() const {
toop = _elem->isa_oopptr(); toop = _elem->isa_oopptr();
} }
if (!toop) return true; // a primitive type, like int if (!toop) return true; // a primitive type, like int
ciKlass* tklass = toop->klass(); if (!toop->is_loaded()) return false; // unloaded class
if (tklass == NULL) return false; // unloaded class
if (!tklass->is_loaded()) return false; // unloaded class
const TypeInstPtr* tinst; const TypeInstPtr* tinst;
if (_elem->isa_narrowoop()) if (_elem->isa_narrowoop())
tinst = _elem->make_ptr()->isa_instptr(); tinst = _elem->make_ptr()->isa_instptr();
else else
tinst = _elem->isa_instptr(); tinst = _elem->isa_instptr();
if (tinst) if (tinst)
return tklass->as_instance_klass()->is_final(); return tinst->instance_klass()->is_final();
const TypeAryPtr* tap; const TypeAryPtr* tap;
if (_elem->isa_narrowoop()) if (_elem->isa_narrowoop())
tap = _elem->make_ptr()->isa_aryptr(); tap = _elem->make_ptr()->isa_aryptr();

View File

@ -0,0 +1,46 @@
/*
* Copyright (c) 2022, Red Hat, Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8297556
* @summary Parse::check_interpreter_type fails with assert "must constrain OSR typestate"
*
* @run main/othervm -Xbatch -XX:-TieredCompilation -XX:CompileOnly=TestExactArrayOfBasicType::test TestExactArrayOfBasicType
*
*/
public class TestExactArrayOfBasicType {
public static void test() {
int[][][][][] array = new int[1][2][3][4][5];
for (int i = 0; i < 50_000; ++i) {
array[0] = new int[0][1][2][3];
}
}
public static void main(String args[]) {
test();
}
}