RFR: 8341178: TypeRawPtr::add_offset may be "miscompiled" due to UB

Vladimir Kozlov kvn at openjdk.org
Thu Oct 3 17:12:44 UTC 2024


On Thu, 3 Oct 2024 12:50:55 GMT, Kim Barrett <kbarrett at openjdk.org> wrote:

> Please review this change to TypeRawPtr::add_offset to prevent a compiler from
> inferring things based on prior pointer arithmetic not invoking UB.  As noted in
> the bug report, clang is actually doing this.
> 
> To accomplish this, changed to integral arithmetic.  Also added over/underflow
> checks.
> 
> Also made a couple of minor touchups.  Replaced an implicit conversion to bool
> with an explicit compare to nullptr (per style guide).  Removed a no longer
> needed dummy return after a (now) noreturn function.
> 
> Testing: mach5 tier1-7
> That testing was with calls to "fatal" for the over/underflow cases and the
> sum==0 case.  There were no hits.  I'm not sure how to construct a test that
> would hit those.

Looks reasonable. Just one nit comment.

src/hotspot/share/opto/type.cpp line 3136:

> 3134: 
> 3135: const TypeRawPtr *TypeRawPtr::make( address bits ) {
> 3136:   assert( bits != nullptr, "Use TypePtr for null" );

Please, remove spaces after open and before close `()`.

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

PR Review: https://git.openjdk.org/jdk/pull/21324#pullrequestreview-2346113508
PR Review Comment: https://git.openjdk.org/jdk/pull/21324#discussion_r1786529286


More information about the hotspot-compiler-dev mailing list