RFR: 8276453: Undefined behavior in C1 LIR_OprDesc causes SEGV in fastdebug build [v6]

Dean Long dlong at openjdk.java.net
Thu Nov 11 04:47:44 UTC 2021


On Thu, 11 Nov 2021 01:57:58 GMT, Man Cao <manc at openjdk.org> wrote:

>> Hi all,
>> 
>> Could anyone provide some feedback on this bug fix and refactoring change? See https://bugs.openjdk.java.net/browse/JDK-8276453 for more details.
>> If the direction of this change looks good, we can proceed removing the "UGLY HACK" in c1_LIR.hpp and refactor occurrences of "opr->fn()" to "opr.fn()".
>
> Man Cao has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - Use nullOpr() or {} instead of LIR_Opr()
>  - Revert the renaming from LIR_OprDesc to LIR_Opr to minimize patch size

Correction.  The existing NULL value had me confused, thinking it would cause a crash if we ever tried to use it.
I see now that

    LIR_Opr() : _value(0) {}

just preserves the existing behavior, and we will never get a crash because we never dereference the pointer.
But it does allow strange things like pointer() to return invalid memory, so again, I think it's best not to allow that.
Do you agree, @caoman and @vnkozlov?

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

PR: https://git.openjdk.java.net/jdk/pull/6221


More information about the hotspot-compiler-dev mailing list