Print this page


Split Close
Expand all
Collapse all
          --- old/src/share/vm/opto/parse3.cpp
          +++ new/src/share/vm/opto/parse3.cpp
↓ open down ↓ 92 lines elided ↑ open up ↑
  93   93  
  94   94    if (!is_field && !field_holder->is_initialized()) {
  95   95      if (!static_field_ok_in_clinit(field, method())) {
  96   96        uncommon_trap(Deoptimization::Reason_uninitialized,
  97   97                      Deoptimization::Action_reinterpret,
  98   98                      NULL, "!static_field_ok_in_clinit");
  99   99        return;
 100  100      }
 101  101    }
 102  102  
      103 +  // Deoptimize on putfield writes to CallSite.target
      104 +  if (!is_get && field->is_call_site_target()) {
      105 +    uncommon_trap(Deoptimization::Reason_unhandled,
      106 +                  Deoptimization::Action_reinterpret,
      107 +                  NULL, "put to CallSite.target field");
      108 +    return;
      109 +  }
      110 +
 103  111    assert(field->will_link(method()->holder(), bc()), "getfield: typeflow responsibility");
 104  112  
 105  113    // Note:  We do not check for an unloaded field type here any more.
 106  114  
 107  115    // Generate code for the object pointer.
 108  116    Node* obj;
 109  117    if (is_field) {
 110  118      int obj_depth = is_get ? 0 : field->type()->size();
 111  119      obj = do_null_check(peek(obj_depth), T_OBJECT);
 112  120      // Compile-time detect of null-exception?
↓ open down ↓ 411 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX