--- old/src/share/vm/opto/memnode.cpp 2016-02-26 15:20:27.000000000 +0300 +++ new/src/share/vm/opto/memnode.cpp 2016-02-26 15:20:27.000000000 +0300 @@ -1582,14 +1582,22 @@ return NULL; } +#ifdef ASSERT static bool is_mismatched_access(ciConstant con, BasicType loadbt) { BasicType conbt = con.basic_type(); assert(conbt != T_NARROWOOP, "sanity"); if (loadbt == T_NARROWOOP || loadbt == T_ARRAY) { loadbt = T_OBJECT; } + if (loadbt == T_BOOLEAN) { + loadbt = T_BYTE; + } + if (conbt == T_BOOLEAN) { + conbt = T_BYTE; + } return (conbt != loadbt); } +#endif // ASSERT // Try to constant-fold a stable array element. static const Type* fold_stable_ary_elem(const TypeAryPtr* ary, int off, BasicType loadbt) { @@ -1599,7 +1607,9 @@ // Decode the results of GraphKit::array_element_address. ciArray* aobj = ary->const_oop()->as_array(); ciConstant con = aobj->element_value_by_offset(off); - if (con.basic_type() != T_ILLEGAL && !is_mismatched_access(con, loadbt) && !con.is_null_or_zero()) { + if (con.basic_type() != T_ILLEGAL && !con.is_null_or_zero()) { + assert(!is_mismatched_access(con, loadbt), + "conbt=%s; loadbt=%s", type2name(con.basic_type()), type2name(loadbt)); const Type* con_type = Type::make_from_constant(con); if (con_type != NULL) { if (con_type->isa_aryptr()) {