RFR(M): 8073315: Enable gcc -Wtype-limits and fix upcoming issues.
Lindenmaier, Goetz
goetz.lindenmaier at sap.com
Thu Mar 5 10:38:26 UTC 2015
Hi Volker,
thanks for looking at this.
> - fix Copyright date in: ...
Done.
> src/share/vm/gc_implementation/g1/ptrQueue.cpp ...
Removed.
> Wouldn't it be better to do the check ... right before the definition of ''cur_chunk_index'
Yes, this would cover both cases. In general, I tried not to do changes affecting
the scope of an assertion, but here it's quite obvious as the value is used the
same way.
I moved the test up there.
> src/share/vm/memory/blockOffsetTable.cpp
Simplified.
New webrev:
http://cr.openjdk.java.net/~goetz/webrevs/8073315-wUnsign/webrev.06/
Best regards,
Goetz.
-----Original Message-----
From: Volker Simonis [mailto:volker.simonis at gmail.com]
Sent: Mittwoch, 4. März 2015 17:20
To: Lindenmaier, Goetz
Cc: Kim Barrett; hotspot-dev Source Developers
Subject: Re: RFR(M): 8073315: Enable gcc -Wtype-limits and fix upcoming issues.
Hi Goetz, Kim,
thanks a lot for working this out so far.
I've looked at the change myself now and I thinks it is in a good state.
I just found some minor issues:
- fix Copyright date in:
src/share/vm/gc_implementation/g1/concurrentMark.hpp
src/share/vm/memory/blockOffsetTable.cpp
- not sure why we need the following in:
src/share/vm/gc_implementation/g1/ptrQueue.cpp
196 _index = _sz;
197 assert(_index <= _sz, "Invariant.");
..until we are really, really paranoid that the assignment "_index =
_sz" can fail :)
- in:
src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp
we do the check:
245 assert(start_chunk_index >=
lowest_non_clean_base_chunk_index && // Check underflow.
only in one branch of the following if/else, but in the other branch
we use 'cur_chunk_index' without check:
264 assert(lowest_non_clean[cur_chunk_index] == NULL, "Write once
: value should be stable hereafter");
265 jbyte* first_card_of_cur_chunk = byte_for(chunk_mr.start());
266 lowest_non_clean[cur_chunk_index] = first_card_of_cur_chunk;
Wouldn't it be better to do the check for 'start_chunk_index >=
lowest_non_clean_base_chunk_index' right before the definition of
'cur_chunk_index' like so:
198 uintptr_t start_chunk_index = addr_to_chunk_index(chunk_mr.start());
assert(start_chunk_index >= lowest_non_clean_base_chunk_index,
"Bounds error."); // Check underflow.
199 uintptr_t cur_chunk_index = start_chunk_index -
lowest_non_clean_base_chunk_index;
- the change in:
src/share/vm/memory/blockOffsetTable.cpp
795 size_t next = _next_offset_index;
796 return next == 0 ? 0 : next - 1;
could be simplified into just one line:
796 return _next_offset_index == 0 ? 0 : _next_offset_index - 1;
Thanks,
Volker
On Wed, Mar 4, 2015 at 9:10 AM, Lindenmaier, Goetz
<goetz.lindenmaier at sap.com> wrote:
> Thanks a lot for looking into this!
>
> Best regards,
> Goetz.
>
> -----Original Message-----
> From: Kim Barrett [mailto:kim.barrett at oracle.com]
> Sent: Dienstag, 3. März 2015 22:30
> To: Lindenmaier, Goetz
> Cc: hotspot-dev Source Developers
> Subject: Re: RFR(M): 8073315: Enable gcc -Wtype-limits and fix upcoming issues.
>
> On Mar 3, 2015, at 9:46 AM, Lindenmaier, Goetz <goetz.lindenmaier at sap.com> wrote:
>>
>> Hi Kim,
>>
>> as I understand the code, > 0 should hold for both tests.
>> But I think what is really meant by the check, protecting against underflow,
>> should be checked in decrement():
>>
>> --- //bas2/sapjvm/dev/6/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.hpp 2015-03-03 09:00:44.000000000 0100
>> +++ /sapmnt/home/d045726/src3/sapjvm/dev/6/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.hpp 2015-03-03 09:00:44.000000000 0100
>> @@ -67,6 +67,9 @@
>> }
>>
>> void decrement(const uint length_to_remove, const size_t capacity_to_remove) {
>> +#ifdef HEAP_REGION_SET_FORCE_VERIFY
>> + guarantee(length_to_remove <= _length && capacity_to_remove <= _capacity, "underflow");
>> +#endif
>> _length -= length_to_remove;
>> _capacity -= capacity_to_remove;
>> }
>>
>> Or by casting _length and _capacity to singed types in the guarantee in verify(), which is
>> quite ugly. But I think it would work fine by the values one can expect here.
>>
>> I changed verify() to check for '>', but didn't add above guarantee, I think that again
>> is out of the scope of this change.
>> http://cr.openjdk.java.net/~goetz/webrevs/8073315-wUnsign/webrev.05/
>>
>> I ran a row of tests with the adapted assertion, and will push it into our nightbuild.
>
> I think you are right that the check is really for underflow, and that should be in decrement()
> as you suggest. And I'm fine with the way you've left it. Anything further can be a later cleanup
> if desired.
>
> So I'm done reviewing. Looks good to me.
>
More information about the hotspot-dev
mailing list