--- old/src/hotspot/share/ci/ciField.hpp 2019-03-11 14:25:20.946355780 +0100 +++ new/src/hotspot/share/ci/ciField.hpp 2019-03-11 14:25:20.734355783 +0100 @@ -49,6 +49,8 @@ ciType* _type; int _offset; bool _is_constant; + bool _is_flattened; + bool _is_flattenable; ciMethod* _known_to_link_with_put; ciInstanceKlass* _known_to_link_with_get; ciConstant _constant_value; @@ -58,6 +60,7 @@ ciField(ciInstanceKlass* klass, int index); ciField(fieldDescriptor* fd); + ciField(ciField* field, ciInstanceKlass* holder, int offset, bool is_final); // shared constructor code void initialize_from(fieldDescriptor* fd); @@ -102,7 +105,7 @@ ciType* type() { return (_type == NULL) ? compute_type() : _type; } // How is this field actually stored in memory? - BasicType layout_type() { return type2field[(_type == NULL) ? T_OBJECT : _type->basic_type()]; } + BasicType layout_type() { return type2field[type()->basic_type()]; } // How big is this field in memory? int size_in_bytes() { return type2aelembytes(layout_type()); } @@ -174,6 +177,9 @@ bool is_stable () const { return flags().is_stable(); } bool is_volatile () const { return flags().is_volatile(); } bool is_transient () const { return flags().is_transient(); } + bool is_flattened () const { return _is_flattened; } + bool is_flattenable () const { return _is_flattenable; } + // The field is modified outside of instance initializer methods // (or class/initializer methods if the field is static). bool has_initialized_final_update() const { return flags().has_initialized_final_update(); }