Mon, 19 Dec 2016 08:31:01 +0100
8171155: Scanning method file for initialized final field updates can fail for non-existent fields
Summary: Check if field exists before possibly marking it as having initialized final updates.
Reviewed-by: stsmirno, vlivanov, coleenp
src/share/vm/interpreter/rewriter.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/share/vm/interpreter/rewriter.cpp Wed Jun 29 20:16:05 2016 -0400 1.2 +++ b/src/share/vm/interpreter/rewriter.cpp Mon Dec 19 08:31:01 2016 +0100 1.3 @@ -416,15 +416,16 @@ 1.4 Symbol* field_sig = cp->signature_ref_at(bc_index); 1.5 1.6 fieldDescriptor fd; 1.7 - klass->find_field(field_name, field_sig, &fd); 1.8 - if (fd.access_flags().is_final()) { 1.9 - if (fd.access_flags().is_static()) { 1.10 - if (!method->is_static_initializer()) { 1.11 - fd.set_has_initialized_final_update(true); 1.12 - } 1.13 - } else { 1.14 - if (!method->is_object_initializer()) { 1.15 - fd.set_has_initialized_final_update(true); 1.16 + if (klass->find_field(field_name, field_sig, &fd) != NULL) { 1.17 + if (fd.access_flags().is_final()) { 1.18 + if (fd.access_flags().is_static()) { 1.19 + if (!method->is_static_initializer()) { 1.20 + fd.set_has_initialized_final_update(true); 1.21 + } 1.22 + } else { 1.23 + if (!method->is_object_initializer()) { 1.24 + fd.set_has_initialized_final_update(true); 1.25 + } 1.26 } 1.27 } 1.28 }