src/share/vm/runtime/fieldDescriptor.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8161987 Sdiff src/share/vm/runtime

src/share/vm/runtime/fieldDescriptor.hpp

Print this page
rev 8156 : 8157181: Compilers accept modification of final fields outside initializer methods
Summary: Track initialized final field updates; disable constant folding if an update is detected.
Reviewed-by: vlivanov, dnsimon, forax, never, kvn, coleenp


  89 
  90   // Field signature type
  91   BasicType field_type()          const    { return FieldType::basic_type(signature()); }
  92 
  93   // Access flags
  94   bool is_public()                const    { return access_flags().is_public(); }
  95   bool is_private()               const    { return access_flags().is_private(); }
  96   bool is_protected()             const    { return access_flags().is_protected(); }
  97   bool is_package_private()       const    { return !is_public() && !is_private() && !is_protected(); }
  98 
  99   bool is_static()                const    { return access_flags().is_static(); }
 100   bool is_final()                 const    { return access_flags().is_final(); }
 101   bool is_volatile()              const    { return access_flags().is_volatile(); }
 102   bool is_transient()             const    { return access_flags().is_transient(); }
 103 
 104   bool is_synthetic()             const    { return access_flags().is_synthetic(); }
 105 
 106   bool is_field_access_watched()  const    { return access_flags().is_field_access_watched(); }
 107   bool is_field_modification_watched() const
 108                                            { return access_flags().is_field_modification_watched(); }

 109   bool has_generic_signature()    const    { return access_flags().field_has_generic_signature(); }
 110 
 111   void set_is_field_access_watched(const bool value) {
 112     _access_flags.set_is_field_access_watched(value);
 113     update_klass_field_access_flag();
 114   }
 115 
 116   void set_is_field_modification_watched(const bool value) {
 117     _access_flags.set_is_field_modification_watched(value);





 118     update_klass_field_access_flag();
 119   }
 120 
 121   // Initialization
 122   void reinitialize(InstanceKlass* ik, int index);
 123 
 124   // Print
 125   void print() { print_on(tty); }
 126   void print_on(outputStream* st) const         PRODUCT_RETURN;
 127   void print_on_for(outputStream* st, oop obj)  PRODUCT_RETURN;
 128   void verify() const                           PRODUCT_RETURN;
 129 };
 130 
 131 #endif // SHARE_VM_RUNTIME_FIELDDESCRIPTOR_HPP


  89 
  90   // Field signature type
  91   BasicType field_type()          const    { return FieldType::basic_type(signature()); }
  92 
  93   // Access flags
  94   bool is_public()                const    { return access_flags().is_public(); }
  95   bool is_private()               const    { return access_flags().is_private(); }
  96   bool is_protected()             const    { return access_flags().is_protected(); }
  97   bool is_package_private()       const    { return !is_public() && !is_private() && !is_protected(); }
  98 
  99   bool is_static()                const    { return access_flags().is_static(); }
 100   bool is_final()                 const    { return access_flags().is_final(); }
 101   bool is_volatile()              const    { return access_flags().is_volatile(); }
 102   bool is_transient()             const    { return access_flags().is_transient(); }
 103 
 104   bool is_synthetic()             const    { return access_flags().is_synthetic(); }
 105 
 106   bool is_field_access_watched()  const    { return access_flags().is_field_access_watched(); }
 107   bool is_field_modification_watched() const
 108                                            { return access_flags().is_field_modification_watched(); }
 109   bool has_initialized_final_update() const { return access_flags().has_field_initialized_final_update(); }
 110   bool has_generic_signature()    const    { return access_flags().field_has_generic_signature(); }
 111 
 112   void set_is_field_access_watched(const bool value) {
 113     _access_flags.set_is_field_access_watched(value);
 114     update_klass_field_access_flag();
 115   }
 116 
 117   void set_is_field_modification_watched(const bool value) {
 118     _access_flags.set_is_field_modification_watched(value);
 119     update_klass_field_access_flag();
 120   }
 121 
 122   void set_has_initialized_final_update(const bool value) {
 123     _access_flags.set_has_field_initialized_final_update(value);
 124     update_klass_field_access_flag();
 125   }
 126 
 127   // Initialization
 128   void reinitialize(InstanceKlass* ik, int index);
 129 
 130   // Print
 131   void print() { print_on(tty); }
 132   void print_on(outputStream* st) const         PRODUCT_RETURN;
 133   void print_on_for(outputStream* st, oop obj)  PRODUCT_RETURN;
 134   void verify() const                           PRODUCT_RETURN;
 135 };
 136 
 137 #endif // SHARE_VM_RUNTIME_FIELDDESCRIPTOR_HPP
src/share/vm/runtime/fieldDescriptor.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File