RFR: JDK-8294902: Undefined Behavior in C2 regalloc with null references [v13]

Kim Barrett kbarrett at openjdk.org
Mon Dec 12 18:27:33 UTC 2022


On Mon, 12 Dec 2022 18:10:02 GMT, Andrew Haley <aph at openjdk.org> wrote:

>> This patch fixes the remaining null pointer dereference bugs that I know of.
>> 
>> For the main bug, C2 was using a null reference to indicate an uninitialized `Node_List`. I replaced the null reference with a static sentinel.
>> 
>> I also turned on `-fsanitize=null` and found and fixed a bunch of other null pointer dereferences. With this,I have run a full bootstrap and tier1 tests with `-fsanitize=null` enabled.
>> 
>> I have checked that the code generated by GCC is not worse in any significant way, so I don't expect to see any performance regressions.
>> 
>> I'd like to enable `-fsanitize=null` in debug builds to prevent regressions in this area. What do you think?
>
> Andrew Haley has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - Merge branch 'JDK-8294902' of https://github.com/theRealAph/jdk into JDK-8294902
>  - Reviewer feedback

src/hotspot/share/utilities/globalDefinitions_gcc.hpp line 178:

> 176: // Converts any type T to a reference type.
> 177: template<typename T>
> 178: std::add_rvalue_reference_t<T> declval() noexcept;

Why is this in the gcc-specific file?  How can this even work? The use in vmStructs.cpp is in shared code.

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

PR: https://git.openjdk.org/jdk/pull/10920


More information about the hotspot-dev mailing list