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