< prev index next >

src/hotspot/share/classfile/stackMapTable.cpp

Print this page
*** 185,11 ***
          (!_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));
    }
    if (tag == ITEM_UninitializedThis) {
      if (flags != NULL) {
        *flags |= FLAG_THIS_UNINIT;
      }
--- 185,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();
      }
!     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::inline_type(fund_name);
+     } else {
+       return VerificationType::reference_type(klass_name);
+     }
    }
    if (tag == ITEM_UninitializedThis) {
      if (flags != NULL) {
        *flags |= FLAG_THIS_UNINIT;
      }
< prev index next >