8171155: Scanning method file for initialized final field updates can fail for non-existent fields

Mon, 19 Dec 2016 08:31:01 +0100

author
zmajo
date
Mon, 19 Dec 2016 08:31:01 +0100
changeset 8666
d3c2e95157e2
parent 8665
8cc2e2729cce
child 8667
dd67662d80a6

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                }

mercurial