2525#include " precompiled.hpp"
2626#include " ci/ciField.hpp"
2727#include " ci/ciInstanceKlass.hpp"
28+ #include " ci/ciSymbols.hpp"
2829#include " ci/ciUtilities.inline.hpp"
2930#include " classfile/javaClasses.hpp"
3031#include " classfile/systemDictionary.hpp"
@@ -218,7 +219,7 @@ ciField::ciField(fieldDescriptor *fd) :
218219static bool trust_final_non_static_fields (ciInstanceKlass* holder) {
219220 if (holder == NULL )
220221 return false ;
221- if (holder->name () == ciSymbol ::java_lang_System ())
222+ if (holder->name () == ciSymbols ::java_lang_System ())
222223 // Never trust strangely unstable finals: System.out, etc.
223224 return false ;
224225 // Even if general trusting is disabled, trust system-built closures in these packages.
@@ -239,14 +240,14 @@ static bool trust_final_non_static_fields(ciInstanceKlass* holder) {
239240 if (holder->is_record ())
240241 return true ;
241242 // Trust final fields in String
242- if (holder->name () == ciSymbol ::java_lang_String ())
243+ if (holder->name () == ciSymbols ::java_lang_String ())
243244 return true ;
244245 // Trust Atomic*FieldUpdaters: they are very important for performance, and make up one
245246 // more reason not to use Unsafe, if their final fields are trusted. See more in JDK-8140483.
246- if (holder->name () == ciSymbol ::java_util_concurrent_atomic_AtomicIntegerFieldUpdater_Impl () ||
247- holder->name () == ciSymbol ::java_util_concurrent_atomic_AtomicLongFieldUpdater_CASUpdater () ||
248- holder->name () == ciSymbol ::java_util_concurrent_atomic_AtomicLongFieldUpdater_LockedUpdater () ||
249- holder->name () == ciSymbol ::java_util_concurrent_atomic_AtomicReferenceFieldUpdater_Impl ()) {
247+ if (holder->name () == ciSymbols ::java_util_concurrent_atomic_AtomicIntegerFieldUpdater_Impl () ||
248+ holder->name () == ciSymbols ::java_util_concurrent_atomic_AtomicLongFieldUpdater_CASUpdater () ||
249+ holder->name () == ciSymbols ::java_util_concurrent_atomic_AtomicLongFieldUpdater_LockedUpdater () ||
250+ holder->name () == ciSymbols ::java_util_concurrent_atomic_AtomicReferenceFieldUpdater_Impl ()) {
250251 return true ;
251252 }
252253 return TrustFinalNonStaticFields;
@@ -417,6 +418,24 @@ bool ciField::will_link(ciMethod* accessing_method,
417418 return true ;
418419}
419420
421+ bool ciField::is_call_site_target () {
422+ ciInstanceKlass* callsite_klass = CURRENT_ENV->CallSite_klass ();
423+ if (callsite_klass == NULL )
424+ return false ;
425+ return (holder ()->is_subclass_of (callsite_klass) && (name () == ciSymbols::target_name ()));
426+ }
427+
428+ bool ciField::is_autobox_cache () {
429+ ciSymbol* klass_name = holder ()->name ();
430+ return (name () == ciSymbols::cache_field_name () &&
431+ holder ()->uses_default_loader () &&
432+ (klass_name == ciSymbols::java_lang_Character_CharacterCache () ||
433+ klass_name == ciSymbols::java_lang_Byte_ByteCache () ||
434+ klass_name == ciSymbols::java_lang_Short_ShortCache () ||
435+ klass_name == ciSymbols::java_lang_Integer_IntegerCache () ||
436+ klass_name == ciSymbols::java_lang_Long_LongCache ()));
437+ }
438+
420439// ------------------------------------------------------------------
421440// ciField::print
422441void ciField::print () {
0 commit comments