8046233: VerifyError on backward branch
Summary: Remove check that causes the VerifyError
Reviewed-by: dholmes, coleenp, acorn
--- a/hotspot/src/share/vm/classfile/stackMapFrame.cpp Sat Aug 02 16:28:59 2014 -0400
+++ b/hotspot/src/share/vm/classfile/stackMapFrame.cpp Tue Aug 05 09:11:35 2014 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. 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
@@ -54,21 +54,6 @@
return frame;
}
-bool StackMapFrame::has_new_object() const {
- int32_t i;
- for (i = 0; i < _max_locals; i++) {
- if (_locals[i].is_uninitialized()) {
- return true;
- }
- }
- for (i = 0; i < _stack_size; i++) {
- if (_stack[i].is_uninitialized()) {
- return true;
- }
- }
- return false;
-}
-
void StackMapFrame::initialize_object(
VerificationType old_object, VerificationType new_object) {
int32_t i;
--- a/hotspot/src/share/vm/classfile/stackMapFrame.hpp Sat Aug 02 16:28:59 2014 -0400
+++ b/hotspot/src/share/vm/classfile/stackMapFrame.hpp Tue Aug 05 09:11:35 2014 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. 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
@@ -155,10 +155,6 @@
const methodHandle m, VerificationType thisKlass, TRAPS);
// Search local variable type array and stack type array.
- // Return true if an uninitialized object is found.
- bool has_new_object() const;
-
- // Search local variable type array and stack type array.
// Set every element with type of old_object to new_object.
void initialize_object(
VerificationType old_object, VerificationType new_object);
--- a/hotspot/src/share/vm/classfile/stackMapTable.cpp Sat Aug 02 16:28:59 2014 -0400
+++ b/hotspot/src/share/vm/classfile/stackMapTable.cpp Tue Aug 05 09:11:35 2014 -0400
@@ -130,19 +130,6 @@
if (!match || (target < 0 || target >= _code_length)) {
frame->verifier()->verify_error(ctx,
"Inconsistent stackmap frames at branch target %d", target);
- return;
- }
- // check if uninitialized objects exist on backward branches
- check_new_object(frame, target, CHECK_VERIFY(frame->verifier()));
-}
-
-void StackMapTable::check_new_object(
- const StackMapFrame* frame, int32_t target, TRAPS) const {
- if (frame->offset() > target && frame->has_new_object()) {
- frame->verifier()->verify_error(
- ErrorContext::bad_code(frame->offset()),
- "Uninitialized object exists on backward branch %d", target);
- return;
}
}
--- a/hotspot/src/share/vm/classfile/stackMapTable.hpp Sat Aug 02 16:28:59 2014 -0400
+++ b/hotspot/src/share/vm/classfile/stackMapTable.hpp Tue Aug 05 09:11:35 2014 -0400
@@ -76,10 +76,6 @@
// Returns the frame array index where the frame with offset is stored.
int get_index_from_offset(int32_t offset) const;
- // Make sure that there's no uninitialized object exist on backward branch.
- void check_new_object(
- const StackMapFrame* frame, int32_t target, TRAPS) const;
-
void print_on(outputStream* str) const;
};
--- a/hotspot/test/runtime/7116786/Test7116786.java Sat Aug 02 16:28:59 2014 -0400
+++ b/hotspot/test/runtime/7116786/Test7116786.java Tue Aug 05 09:11:35 2014 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. 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
@@ -147,7 +147,8 @@
"no stackmap frame at jump location or bad jump",
"Inconsistent stackmap frames at branch target "),
- new Case("case15", "stackMapTable.cpp", true, "check_new_object",
+ /* Backward jump with uninit is allowed starting with JDK 8 */
+ new Case("case15", "stackMapTable.cpp", false, "check_new_object",
"backward jump with uninit",
"Uninitialized object exists on backward branch "),