957 bool arg_is_arraycopy_dest = src_has_oops && is_arraycopy &&
958 arg_has_oops && (i > TypeFunc::Parms);
959 #ifdef ASSERT
960 if (!(is_arraycopy ||
961 (call->as_CallLeaf()->_name != NULL &&
962 (strcmp(call->as_CallLeaf()->_name, "g1_wb_pre") == 0 ||
963 strcmp(call->as_CallLeaf()->_name, "g1_wb_post") == 0 ||
964 strcmp(call->as_CallLeaf()->_name, "updateBytesCRC32") == 0 ||
965 strcmp(call->as_CallLeaf()->_name, "aescrypt_encryptBlock") == 0 ||
966 strcmp(call->as_CallLeaf()->_name, "aescrypt_decryptBlock") == 0 ||
967 strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_encryptAESCrypt") == 0 ||
968 strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_decryptAESCrypt") == 0 ||
969 strcmp(call->as_CallLeaf()->_name, "sha1_implCompress") == 0 ||
970 strcmp(call->as_CallLeaf()->_name, "sha1_implCompressMB") == 0 ||
971 strcmp(call->as_CallLeaf()->_name, "sha256_implCompress") == 0 ||
972 strcmp(call->as_CallLeaf()->_name, "sha256_implCompressMB") == 0 ||
973 strcmp(call->as_CallLeaf()->_name, "sha512_implCompress") == 0 ||
974 strcmp(call->as_CallLeaf()->_name, "sha512_implCompressMB") == 0 ||
975 strcmp(call->as_CallLeaf()->_name, "multiplyToLen") == 0 ||
976 strcmp(call->as_CallLeaf()->_name, "squareToLen") == 0 ||
977 strcmp(call->as_CallLeaf()->_name, "mulAdd") == 0)
978 ))) {
979 call->dump();
980 fatal(err_msg_res("EA unexpected CallLeaf %s", call->as_CallLeaf()->_name));
981 }
982 #endif
983 // Always process arraycopy's destination object since
984 // we need to add all possible edges to references in
985 // source object.
986 if (arg_esc >= PointsToNode::ArgEscape &&
987 !arg_is_arraycopy_dest) {
988 continue;
989 }
990 PointsToNode::EscapeState es = PointsToNode::ArgEscape;
991 if (call->is_ArrayCopy()) {
992 ArrayCopyNode* ac = call->as_ArrayCopy();
993 if (ac->is_clonebasic() ||
994 ac->is_arraycopy_validated() ||
995 ac->is_copyof_validated() ||
996 ac->is_copyofrange_validated()) {
997 es = PointsToNode::NoEscape;
|
957 bool arg_is_arraycopy_dest = src_has_oops && is_arraycopy &&
958 arg_has_oops && (i > TypeFunc::Parms);
959 #ifdef ASSERT
960 if (!(is_arraycopy ||
961 (call->as_CallLeaf()->_name != NULL &&
962 (strcmp(call->as_CallLeaf()->_name, "g1_wb_pre") == 0 ||
963 strcmp(call->as_CallLeaf()->_name, "g1_wb_post") == 0 ||
964 strcmp(call->as_CallLeaf()->_name, "updateBytesCRC32") == 0 ||
965 strcmp(call->as_CallLeaf()->_name, "aescrypt_encryptBlock") == 0 ||
966 strcmp(call->as_CallLeaf()->_name, "aescrypt_decryptBlock") == 0 ||
967 strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_encryptAESCrypt") == 0 ||
968 strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_decryptAESCrypt") == 0 ||
969 strcmp(call->as_CallLeaf()->_name, "sha1_implCompress") == 0 ||
970 strcmp(call->as_CallLeaf()->_name, "sha1_implCompressMB") == 0 ||
971 strcmp(call->as_CallLeaf()->_name, "sha256_implCompress") == 0 ||
972 strcmp(call->as_CallLeaf()->_name, "sha256_implCompressMB") == 0 ||
973 strcmp(call->as_CallLeaf()->_name, "sha512_implCompress") == 0 ||
974 strcmp(call->as_CallLeaf()->_name, "sha512_implCompressMB") == 0 ||
975 strcmp(call->as_CallLeaf()->_name, "multiplyToLen") == 0 ||
976 strcmp(call->as_CallLeaf()->_name, "squareToLen") == 0 ||
977 strcmp(call->as_CallLeaf()->_name, "mulAdd") == 0 ||
978 strcmp(call->as_CallLeaf()->_name, "montgomery_multiply") == 0)
979 ))) {
980 call->dump();
981 fatal(err_msg_res("EA unexpected CallLeaf %s", call->as_CallLeaf()->_name));
982 }
983 #endif
984 // Always process arraycopy's destination object since
985 // we need to add all possible edges to references in
986 // source object.
987 if (arg_esc >= PointsToNode::ArgEscape &&
988 !arg_is_arraycopy_dest) {
989 continue;
990 }
991 PointsToNode::EscapeState es = PointsToNode::ArgEscape;
992 if (call->is_ArrayCopy()) {
993 ArrayCopyNode* ac = call->as_ArrayCopy();
994 if (ac->is_clonebasic() ||
995 ac->is_arraycopy_validated() ||
996 ac->is_copyof_validated() ||
997 ac->is_copyofrange_validated()) {
998 es = PointsToNode::NoEscape;
|