RFR: 8313554: Fix -Wconversion warnings for ResolvedFieldEntry

Coleen Phillimore coleenp at openjdk.org
Thu Aug 3 11:53:31 UTC 2023


On Thu, 3 Aug 2023 09:05:12 GMT, Dean Long <dlong at openjdk.org> wrote:

>> The recent change in [JDK-8301996](https://bugs.openjdk.org/browse/JDK-8301996) added more -Wconversion warnings that are addressed in this patch. The aforementioned change has overlooked inconsistencies with the types used by `ResolvedFieldEntry` and the method `fill_in()`. Verified with tier 1-4 tests.
>
> src/hotspot/share/interpreter/rewriter.cpp line 192:
> 
>> 190:     int field_entry_index = Bytes::get_native_u2(p);
>> 191:     int pool_index = _initialized_field_entries.at(field_entry_index).constant_pool_index();
>> 192:     Bytes::put_Java_u2(p, (u2)pool_index);
> 
> I guess this isn't using checked_cast because similar code elsewhere in this file uses this style, but it means we can silently do the wrong thing.  Is there a separate RFE to remove as many of these unchecked casts as possible?

We could rewrite _initialized_field_entries to be an array of u2 and not need the cast, but that changed felt out of scope for this fix.

> src/hotspot/share/oops/resolvedFieldEntry.hpp line 106:
> 
>> 104:   void set_flags(bool is_final, bool is_volatile) {
>> 105:     int new_flags = (is_final << is_final_shift) | static_cast<int>(is_volatile);
>> 106:     _flags = (u1)new_flags;
> 
> Why isn't this using checked_cast?

I still don't see the point of using checked_cast if we know that this is only two bits.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/15126#discussion_r1283090793
PR Review Comment: https://git.openjdk.org/jdk/pull/15126#discussion_r1283084054



More information about the build-dev mailing list