https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109109
--- Comment #14 from Martin Liška <marxin at gcc dot gnu.org> ---
Btw. the problematic instruction that assembly the page_id_t:
# /tmp/trxundo.ii:181919: if (__builtin_expect(!undo_block, (0))) {
addl $48, %esp #,
# /tmp/trxundo.ii:181915: buf_block_t* undo_block =
buf_page_get_gen(page_id_t(rseg->space->id,
movl %eax, -56(%ebp) # _39, %sfp
# /tmp/trxundo.ii:181919: if (__builtin_expect(!undo_block, (0))) {
testl %eax, %eax # _39
je .L636 #,
# /tmp/trxundo.ii:181923: saved = page_id_t(rseg->space->id, hdr_page_no);
movl (%esi), %eax # rseg_35(D)->space, rseg_35(D)->space
# /tmp/trxundo.ii:181923: saved = page_id_t(rseg->space->id, hdr_page_no);
movl -44(%ebp), %ebx # %sfp, tmp82
# /tmp/trxundo.ii:58816: m_id(uint64_t{space} << 32 | page_no) {}
movl 44(%eax), %edx # _9->id, _69
# /tmp/trxundo.ii:181923: saved = page_id_t(rseg->space->id, hdr_page_no);
movl saved@GOT(%ebx), %ecx #, tmp164
movl %edx, (%ecx) # _69, saved.m_id
movl %edx, 4(%ecx) # _69, saved.m_id
# /tmp/trxundo.ii:181924: if (saved.raw() == 0)
movl %edx, %ecx # _69, tmp213
orl %edx, %ecx # tmp214, tmp215
je .L662 #,
for my adjusted code:
saved = page_id_t(rseg->space->id, hdr_page_no);
if (saved.raw() == 0)
__builtin_abort ();