RFR: 8286562: GCC 12 reports some compiler warnings [v8]
Kim Barrett
kbarrett at openjdk.java.net
Wed May 25 01:54:55 UTC 2022
On Sun, 22 May 2022 08:40:28 GMT, Yasumasa Suenaga <ysuenaga at openjdk.org> wrote:
>> I saw some compiler warnings when I tried to build OpenJDK with GCC 12.0.1 on Fedora 36.
>> As you can see, the warnings spreads several areas. Let me know if I should separate them by area.
>>
>> * -Wstringop-overflow
>> * src/hotspot/share/oops/array.hpp
>> * src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceIdBits.inline.hpp
>>
>> In member function 'void Array<T>::at_put(int, const T&) [with T = unsigned char]',
>> inlined from 'void ConstantPool::tag_at_put(int, jbyte)' at /home/ysuenaga/github-forked/jdk/src/hotspot/share/oops/constantPool.hpp:126:64,
>> inlined from 'void ConstantPool::method_at_put(int, int, int)' at /home/ysuenaga/github-forked/jdk/src/hotspot/share/oops/constantPool.hpp:380:15,
>> inlined from 'ConstantPool* BytecodeConstantPool::create_constant_pool(JavaThread*) const' at /home/ysuenaga/github-forked/jdk/src/hotspot/share/classfile/bytecodeAssembler.cpp:85:26:
>
> Yasumasa Suenaga has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 11 commits:
>
> - Merge remote-tracking branch 'upstream/master' into gcc12-warnings
> - Use getter function to access "_data"
> - Revert changes for bytecodeAssembler.cpp, classFileParser.cpp, symbolTable.cpp
> - revert changes for memnode.cpp and type.cpp
> - Add assert to check the range of BasicType
> - Merge remote-tracking branch 'upstream/master' into HEAD
> - Revert change for java.c , parse_manifest.c , LinuxPackage.c
> - Calculate char offset before realloc()
> - Use return value from JLI_Snprintf
> - Avoid pragma error in before GCC 12
> - ... and 1 more: https://git.openjdk.java.net/jdk/compare/c156bcc5...042c1c70
Changes requested by kbarrett (Reviewer).
src/hotspot/share/oops/array.hpp line 102:
> 100: // standard operations
> 101: int length() const { return _length; }
> 102: T* data() const { return reinterpret_cast<T*>(reinterpret_cast<uintptr_t>(this) + base_offset_in_bytes()); }
Adding the const-qualifier to the `data()` function and then implicitly
casting it away (by casting through intptr_t) is wrong. Either don't
const-qualify (and leave it to some future use that needs such to address
appropriately), or have two functions. Also, the line length is excessive.
So this:
T* data() {
return reinterpret_cast<T*>(
reinterpret_cast<char*>(this) + base_offset_in_bytes());
}
and optionally add this:
const T* data() const {
return reinterpret_cast<const T*>(
reinterpret_cast<const char*>(this) + base_offset_in_bytes());
}
-------------
PR: https://git.openjdk.java.net/jdk/pull/8646
More information about the build-dev
mailing list