1032 sweep_dependent_methods(dyno_data);
1033 return false;
1034 }
1035
1036 if (dyno_klass == NULL) {
1037 // (appendix) at build-time, none now
1038 sweep_dependent_methods(holder_data);
1039 sweep_dependent_methods(dyno_data);
1040 return false;
1041 }
1042
1043 // TODO: support array appendix object
1044 if (!dyno_klass->is_instance_klass()) {
1045 sweep_dependent_methods(holder_data);
1046 sweep_dependent_methods(dyno_data);
1047 return false;
1048 }
1049
1050 InstanceKlass* dyno = InstanceKlass::cast(dyno_klass);
1051
1052 if (!dyno->is_unsafe_anonymous()) {
1053 if (_klasses_got[dyno_data->_got_index] != dyno) {
1054 // compile-time class different from runtime class, fail and deoptimize
1055 sweep_dependent_methods(holder_data);
1056 sweep_dependent_methods(dyno_data);
1057 return false;
1058 }
1059
1060 if (dyno->is_initialized()) {
1061 _klasses_got[dyno_data->_got_index - 1] = dyno;
1062 }
1063 return true;
1064 }
1065
1066 // TODO: support anonymous supers
1067 if (!dyno->supers_have_passed_fingerprint_checks() || dyno->get_stored_fingerprint() != dyno_data->_fingerprint) {
1068 NOT_PRODUCT( aot_klasses_fp_miss++; )
1069 log_trace(aot, class, fingerprint)("class %s%s has bad fingerprint in %s tid=" INTPTR_FORMAT,
1070 dyno->internal_name(), dyno->is_shared() ? " (shared)" : "",
1071 _lib->name(), p2i(thread));
1072 sweep_dependent_methods(holder_data);
|
1032 sweep_dependent_methods(dyno_data);
1033 return false;
1034 }
1035
1036 if (dyno_klass == NULL) {
1037 // (appendix) at build-time, none now
1038 sweep_dependent_methods(holder_data);
1039 sweep_dependent_methods(dyno_data);
1040 return false;
1041 }
1042
1043 // TODO: support array appendix object
1044 if (!dyno_klass->is_instance_klass()) {
1045 sweep_dependent_methods(holder_data);
1046 sweep_dependent_methods(dyno_data);
1047 return false;
1048 }
1049
1050 InstanceKlass* dyno = InstanceKlass::cast(dyno_klass);
1051
1052 if (!dyno->is_hidden() && !dyno->is_unsafe_anonymous()) {
1053 if (_klasses_got[dyno_data->_got_index] != dyno) {
1054 // compile-time class different from runtime class, fail and deoptimize
1055 sweep_dependent_methods(holder_data);
1056 sweep_dependent_methods(dyno_data);
1057 return false;
1058 }
1059
1060 if (dyno->is_initialized()) {
1061 _klasses_got[dyno_data->_got_index - 1] = dyno;
1062 }
1063 return true;
1064 }
1065
1066 // TODO: support anonymous supers
1067 if (!dyno->supers_have_passed_fingerprint_checks() || dyno->get_stored_fingerprint() != dyno_data->_fingerprint) {
1068 NOT_PRODUCT( aot_klasses_fp_miss++; )
1069 log_trace(aot, class, fingerprint)("class %s%s has bad fingerprint in %s tid=" INTPTR_FORMAT,
1070 dyno->internal_name(), dyno->is_shared() ? " (shared)" : "",
1071 _lib->name(), p2i(thread));
1072 sweep_dependent_methods(holder_data);
|