< prev index next >

src/hotspot/share/aot/aotCodeHeap.cpp

Print this page




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




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


< prev index next >