RFR(S): 8008242: VerifyOops fails on SPARC

Christian Thalinger christian.thalinger at oracle.com
Tue Oct 8 10:30:29 PDT 2013


We don't need this check (which is wrong btw.):

+  if (type == T_OBJECT) {
+    __ verify_oop(dest->as_register());
+  }

LIR_Assembler::load methods already do that:

  if (type == T_ARRAY || type == T_OBJECT) {
    __ verify_oop(to_reg->as_register());
  }

Once more, why did you remove this one?

1390   if (addr->base()->type() == T_OBJECT) {
1391     __ verify_oop(src);
1392   }

On Oct 8, 2013, at 6:34 AM, Morris Meyer <morris.meyer at oracle.com> wrote:

> Thanks for the bringing that up Roland and Christian.  I fixed this issue and re-ran the change through JPRT.
> 
> Here's the patch.
> 
>        --morris
> 
> WEBREV - http://cr.openjdk.java.net/8008242.02
> 
> On 10/7/13, 1:55 PM, Christian Thalinger wrote:
>> On Oct 7, 2013, at 9:11 AM, Roland Westrelin <roland.westrelin at oracle.com> wrote:
>> 
>>> Hi Morris,
>>> 
>>>> Could I get a review of this P2 issue on SPARC?  I had to fix some branch relocation issues first, before relaxing the oop verify in c1_LIRAssembler_sparc::type_profile_helper() and mem2reg().
>>> Why did you change:
>>> 
>>> 1391     __ verify_oop(src);
>>> 
>>> in c1_LIRAssembler_sparc.cpp?
>> I concur.  Did you hit a problem here?  The check is guarded by:
>> 
>>    if (addr->base()->type() == T_OBJECT) {
>> -    __ verify_oop(src);
>> +    __ verify_klass_ptr(src);
>>    }
>> 
>> so this should trigger.  If it does then we are propagating the wrong type somewhere.
>> 
>>> It appears verify_klass_ptr() doesn't do anything currently so that nothing fails with this changed doesn't really prove it's correct.
>> Correct; these methods are currently empty.  When the runtime team removed perm-gen they added these methods but never implemented them.  Not our issue.  But the second change is definitely correct; the receiver is a Klass*.
>> 
>>> Roland.
>>> 
> 



More information about the hotspot-compiler-dev mailing list