assembler_x86.cpp:11128:38: error: 'this' pointer is null

Aleksey Shipilev shade at redhat.com
Mon Jun 20 08:55:27 UTC 2022


On 6/17/22 09:36, Andrew Haley wrote:
> On 6/16/22 19:00, Browser wrote:
>   > That one I'll chalk up to not-yet-resolved issue with GCC 12. Mainline does not seem to fail GCC 12
>   > the same way, but it does fail too.
> 
>   > shade at redhat.com:
> 
>   >> Pleasing the newer compiler version is always something in
>   >> progress. Meanwhile, as usual, configuring with
>   >> --disable-warnings-as-errors helps to demote these warnings to just
>   >> warnings.
> 
> This is the Undefined Behaviour bug that I fixed for AArch64 in
> 8276563, Undefined Behaviour in class Assembler. Compilers get
> smarter, and IMO this is an evil hack from decades ago that we should
> fix.
> 
> The problem is that all instances of type Register exhibit UB in the
> form of wild pointer (including null pointer) dereferences. It isn't
> very hard to fix: we should make Registers pointers to something
> rather than aliases of small integers.
> 
> I'd like to apply the same fix to x86, so we never hear of this bug
> again. What do you think?

Yes, please. I think I am seeing this now in mainline JDK with GCC 11:

* For target hotspot_variant-server_libjvm_objs_sharedRuntime_x86_32.o:
/home/buildbot/worker/build-jdkX-debian12/build/src/hotspot/cpu/x86/sharedRuntime_x86_32.cpp: In 
static member function 'static OopMap* RegisterSaver::save_live_registers(MacroAssembler*, int, 
int*, bool, bool)':
/home/buildbot/worker/build-jdkX-debian12/build/src/hotspot/cpu/x86/sharedRuntime_x86_32.cpp:260:48: 
error: 'this' pointer is null [-Werror=nonnull]
   260 |   map->set_callee_saved(STACK_OFFSET(rax_off), rax->as_VMReg());
       |                                                ^~~
In file included from 
/home/buildbot/worker/build-jdkX-debian12/build/src/hotspot/share/code/vmreg.inline.hpp:31,
                  from 
/home/buildbot/worker/build-jdkX-debian12/build/src/hotspot/cpu/x86/macroAssembler_x86.hpp:30,
                  from 
/home/buildbot/worker/build-jdkX-debian12/build/src/hotspot/share/asm/macroAssembler.hpp:31,
                  from 
/home/buildbot/worker/build-jdkX-debian12/build/src/hotspot/cpu/x86/sharedRuntime_x86_32.cpp:26:


-- 
Thanks,
-Aleksey




More information about the build-dev mailing list