RFR: 8205677: [8u] casts and type change for 8u to enable later Windows compilers

Kevin Walls kevin.walls at oracle.com
Fri Jul 6 12:27:40 UTC 2018


Hi,

I'd like to update my review request:

Item #3, was solved by 8150426 so no change required.

Item #5, changing the return type of the method is not necessary.  The 
error was in src/share/vm/runtime/memprofiler.cpp and can be solved with 
a cast on the offending line.  The result of a long divided by a size_t 
can be cast to a long, and that minimal change is  accepted in all the 
builds:

-          OopMapCache::memory_usage() / K);
+          (long) (OopMapCache::memory_usage() / K));

Additionally, I've uncovered one more required cast, so item #6 is  
src/share/vm/classfile/classFileParser.cpp changing an (int) cast to a (u2).

New webrev at http://cr.openjdk.java.net/~kevinw/8205677/webrev.01/

Progress report: with these changes, 8206454 which I just put out for 
review, and one other change re: vnsprintf, the open jdk8u builds with 
VS2017.

Many thanks!
Kevin





On 05/07/2018 09:46, Kevin Walls wrote:
> Hi,
>
> I'd like to get a review of:
>
> 8205677: [8u] casts and type change for 8u to enable later Windows 
> compilers
> https://bugs.openjdk.java.net/browse/JDK-8205677
>
> This is a collection of new small changes aiming to permit 8u to build 
> with later Windows compilers (and also with the current VS2010).
>
> The changes are:
>
> 8u webrev: http://cr.openjdk.java.net/~kevinw/8205677/webrev.00/
>
> Notes:
>
> 1
> hotspot\src\share\vm\classfile\altHashing.cpp(227): warning C4838: 
> conversion from 'unsigned int' to 'const jint' requires a narrowing 
> conversion
>
> (jint) casts are present in the later JDK 
> test/hotspot/gtest/classfile/test_AltHashing.cpp and look like they 
> were in JDK9 from the start.
>
> 2
> hotspot\src\share\vm\gc_implementation\parallelScavenge\gcTaskManager.cpp(1038): 
> warning C4312: 'type cast': conversion from 'unsigned int' to 'Monitor 
> *' of greater size
>
> -  _monitor = (Monitor*) 0xDEAD000F;
> +  _monitor = (Monitor*) (uintptr_t) 0xDEAD000F;
>
> 3
> ..\hotspot\src\share\vm\oops/typeArrayOop.hpp(132): error C2440: '=': 
> cannot convert from 'jlong' to 'jlong *'
> ..\hotspot\src\share\vm\oops/typeArrayOop.hpp(132): note: Conversion 
> from integral type to pointer type requires reinterpret_cast, C-style 
> cast or function-style cast
>
> -    *long_at_addr(which) = (long)contents;
> +    *long_at_addr(which) = (jlong)contents;
>
>
> 4
> ...\hotspot\src\share\vm\gc_implementation\concurrentMarkSweep\concurrentMarkSweepGeneration.cpp(6833): 
> warning C4334: '<<': result of 32-bit shift implicitly converted to 64 
> bits (was 64-bit shift intended?)
>
> Like in 8197864 where we cast a 1 to an intptr_t before the shift.
>
>    assert(mr.end() == (HeapWord*)round_to((intptr_t)mr.end(),
> -                        (1 << (_shifter+LogHeapWordSize))),
> +                        ((intptr_t) 1 << (_shifter+LogHeapWordSize))),
>
>
> 5
> hotspot\src\share\vm\runtime\memprofiler.cpp(129): warning C4477: 
> 'fprintf' : format string '%6ld' requires an argument of type 'long', 
> but variadic argument 3 has type '::size_t'
>
> OopMapCache::memory_size() is only used in one place, and only when 
> NOTPRODUCT.  Here in 8u, we can make it return a size_t and compile 
> without error.
>
> In jdk10 onwards, after 8186042, this line in memprofiler.cpp 
> hard-codes a 0L instead of OopMapCache::memory_size(), as the tracking 
> of _total_memory_size was removed, but the print was kept to the same 
> format.  I don't think we would remove that statistic in an update
>
>
> Thanks
> Kevin
>
>
>
>
>
>
>



More information about the hotspot-dev mailing list