8046233: VerifyError on backward branch
authorhseigel
Tue, 05 Aug 2014 09:11:35 -0400
changeset 25900 a41d63a62923
parent 25899 337ed0e9c13c
child 25902 7e9ffb1fe1df
8046233: VerifyError on backward branch Summary: Remove check that causes the VerifyError Reviewed-by: dholmes, coleenp, acorn
hotspot/src/share/vm/classfile/stackMapFrame.cpp
hotspot/src/share/vm/classfile/stackMapFrame.hpp
hotspot/src/share/vm/classfile/stackMapTable.cpp
hotspot/src/share/vm/classfile/stackMapTable.hpp
hotspot/test/runtime/7116786/Test7116786.java
--- 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 "),