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 ();

Reply via email to