RFR: 8286562: GCC 12 reports some compiler warnings [v5]
Yasumasa Suenaga
ysuenaga at openjdk.java.net
Sun May 22 08:40:28 UTC 2022
On Sun, 22 May 2022 03:15:20 GMT, Kim Barrett <kbarrett at openjdk.org> wrote:
>> Like the others, it is caused by `Array::at_put()`.
>>
>>
>> In file included from /home/ysuenaga/github-forked/jdk/src/hotspot/share/oops/annotations.hpp:28,
>> from /home/ysuenaga/github-forked/jdk/src/hotspot/share/oops/instanceKlass.hpp:29,
>> from /home/ysuenaga/github-forked/jdk/src/hotspot/share/classfile/javaClasses.hpp:30,
>> from /home/ysuenaga/github-forked/jdk/src/hotspot/share/precompiled/precompiled.hpp:35:
>> 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::symbol_at_put(int, Symbol*)' at /home/ysuenaga/github-forked/jdk/src/hotspot/share/oops/constantPool.hpp:362:15,
>> inlined from 'void ClassFileParser::mangle_hidden_class_name(InstanceKlass*)' at /home/ysuenaga/github-forked/jdk/src/hotspot/share/classfile/classFileParser.cpp:5966:21:
>
> `Array<T>::_data` is a pseudo flexible array member. "Pseudo" because C++
> doesn't have flexible array members. The compiler is completely justified in
> complaining about the apparently out-of-bounds accesses.
>
> There is a "well-known" (though moderately ugly) approach to doing flexible
> array members in C++. Something like this:
>
>
> T* data() {
> return reinterpret_cast<T*>(
> reinterpret_cast<char*>(this) + data_offset());
> }
>
>
> where `data_offset()` is new and private:
>
>
> static size_t data_offset() {
> return offset_of(Array, _data);
> }
>
>
> Use `data()` everywhere instead of using `_data` directly.
>
> There are other places in HotSpot that use this kind of approach.
Thanks @kimbarrett for your advice! Warnings from array.hpp have gone with your suggestion.
-------------
PR: https://git.openjdk.java.net/jdk/pull/8646
More information about the build-dev
mailing list