https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104288
--- Comment #15 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #14) > (In reply to Christian Prochaska from comment #13) > > I found the "Register non-null side effects properly." commit with git > > bisect while debugging a page fault in the Genode OS framework built with > > GCC 12.2.0. It turned out that a null pointer check which was present before > > this commit is now not present anymore. The C++ code with the null pointer > > check can be found on GitHub: > > > > https://github.com/genodelabs/genode/blob/ > > a84af9a9606450471b8038a35f9b55057efa0850/repos/base-nova/src/lib/base/ipc. > > cc#L71 > > > > This is the implementation of the 'Thread::myself()' function which returns > > a null pointer in some conditions: > > > > https://github.com/genodelabs/genode/blob/ > > a84af9a9606450471b8038a35f9b55057efa0850/repos/base/src/lib/base/ > > thread_myself.cc#L22 > > > > I compared the disassembled code from objdump and this part is missing when > > the commit is applied: > > > > Genode::ipc_call(Genode::Native_capability, Genode::Msgbuf_base&, > > Genode::Msgbuf_base&, unsigned long): > > /.../repos/base-nova/src/lib/base/ipc.cc:71 > > addr_t const manual_rcv_sel = myself ? > > myself->native_thread().client_rcv_sel > > 85f78: 48 83 bd 50 ff ff ff cmpq $0x0,-0xb0(%rbp) > > 85f7f: 00 > > 85f80: 48 c7 c3 ff ff ff ff mov $0xffffffffffffffff,%rbx > > 85f87: 74 1d je 85fa6 > > <Genode::ipc_call(Genode::Native_capability, Genode::Msgbuf_base&, > > Genode::Msgbuf_base&, unsigned long) > > /.../repos/base-nova/src/lib/base/ipc.cc:71 (discriminator 1) > > > > Now I'm not sure if the problem is in the Genode code or in GCC. Any ideas? > > There was a deferencing of myself before: > Nova::Utcb &utcb = *(Nova::Utcb *)myself->utcb(); Line 59 so it is definitely not a bug in gcc.