< prev index next >

src/hotspot/share/classfile/stackMapTable.cpp

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, 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
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -186,11 +186,21 @@
         (!_cp->tag_at(class_index).is_klass() &&
          !_cp->tag_at(class_index).is_unresolved_klass())) {
       _stream->stackmap_format_error("bad class index", THREAD);
       return VerificationType::bogus_type();
     }
-    return VerificationType::reference_type(_cp->klass_name_at(class_index));
+    Symbol* klass_name = _cp->klass_name_at(class_index);
+    if (klass_name->is_Q_signature()) {
+      Symbol* fund_name = klass_name->fundamental_name(THREAD);
+      if (fund_name == NULL) {
+        _stream->stackmap_format_error("TBD something bad happened", THREAD);
+        return VerificationType::bogus_type();
+      }
+      return VerificationType::valuetype_type(fund_name);
+    } else {
+      return VerificationType::reference_type(klass_name);
+    }
   }
   if (tag == ITEM_UninitializedThis) {
     if (flags != NULL) {
       *flags |= FLAG_THIS_UNINIT;
     }
< prev index next >