< prev index next >

src/hotspot/share/aot/aotCodeHeap.cpp

Print this page
rev 58565 : 8238358: Implementation of JEP 371: Hidden Classes
Reviewed-by: duke
Contributed-by: mandy.chung@oracle.com, lois.foltan@oracle.com, david.holmes@oracle.com, harold.seigel@oracle.com, serguei.spitsyn@oracle.com, alex.buckley@oracle.com, jamsheed.c.m@oracle.com


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);


< prev index next >