RFR(M): 8073315: Enable gcc -Wtype-limits and fix upcoming issues.
Lindenmaier, Goetz
goetz.lindenmaier at sap.com
Fri Mar 13 10:03:02 UTC 2015
Hi Kim, Jesper,
thanks for dealing with this.
I made a new webrev, rebased and including your patch, Kim:
http://cr.openjdk.java.net/~goetz/webrevs/8073315-wUnsign/webrev.07/
Jesper, I don't care whether you push this webrev or one you assembled
yourself - whatever is less trouble for you.
Best regards,
Goetz.
-----Original Message-----
From: Kim Barrett [mailto:kim.barrett at oracle.com]
Sent: Thursday, March 12, 2015 11:27 PM
To: Lindenmaier, Goetz
Cc: Jesper Wilhelmsson; hotspot-dev Source Developers
Subject: Re: RFR(M): 8073315: Enable gcc -Wtype-limits and fix upcoming issues.
On Mar 6, 2015, at 4:36 AM, Lindenmaier, Goetz <goetz.lindenmaier at sap.com> wrote:
>
> Hi Jesper,
>
> You offered to sponsor this change. I think it's ok to be pushed.
> Kim and Volker are ok with it, too, and I ran it through our nightly tests.
> These cover quite a range of compilers and platforms.
>
> This is the final webrev:
> http://cr.openjdk.java.net/~goetz/webrevs/8073315-wUnsign/webrev.06/
>
> I would appreciate a lot if you could sponsor this!
During JPRT testing we discovered a change like the following is
needed in order to build on 32bit x86 platforms:
diff -r 47e882f3a6bc src/share/vm/runtime/virtualspace.cpp
--- a/src/share/vm/runtime/virtualspace.cpp Fri Mar 06 13:16:32 2015 -0500
+++ b/src/share/vm/runtime/virtualspace.cpp Thu Mar 12 18:13:52 2015 -0400
@@ -519,12 +519,13 @@
// Calc address range within we try to attach (range of possible start addresses).
char *const highest_start = (char *)align_ptr_down(zerobased_max - size, attach_point_alignment);
- // SS10 and SS12u1 cannot compile "(char *)UnscaledOopHeapMax - size" on solaris sparc 32-bit:
- // "Cannot use int to initialize char*." Introduce aux variable.
- char *unscaled_end = (char *)UnscaledOopHeapMax;
- unscaled_end -= size;
- char *lowest_start = (size < UnscaledOopHeapMax) ?
- MAX2(unscaled_end, aligned_heap_base_min_address) : aligned_heap_base_min_address;
+ // Need to be careful about size being guaranteed to be less
+ // than UnscaledOopHeapMax due to type constraints.
+ char *lowest_start = aligned_heap_base_min_address;
+ uint64_t unscaled_end = UnscaledOopHeapMax - size;
+ if (unscaled_end < UnscaledOopHeapMax) { // unscaled_end wrapped if size is large
+ lowest_start = MAX2(lowest_start, (char*)unscaled_end);
+ }
lowest_start = (char *)align_ptr_up(lowest_start, attach_point_alignment);
try_reserve_range(highest_start, lowest_start, attach_point_alignment,
aligned_heap_base_min_address, zerobased_max, size, alignment, large);
The problem is that UnscaledOopHeapMax is a uint64_t with a value of
2^32. On a 32bit platform, with size_t being of the same size as
uint32_t, all possible values for "size" are < UnscaledOopHeapMax.
And that triggers the newly enabled warning.
There are many possible ways to deal with this. I could pretty easily
be convinced to use something else.
Can we get the requisite reviewers for this additional change? And
have it added to the patch / webrev / whatever that will be handed off
to Jesper for pushing?
Also, the webrev.06 doesn't apply entirely cleanly to the current tip
of hs-comp.
More information about the hotspot-dev
mailing list