https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109109

--- Comment #13 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Martin Liška from comment #12)
> So the problem happens here:
> 
> static
> uint32_t
> trx_undo_free_page(
> 
>  trx_rseg_t* rseg,
>  bool in_history,
> 
>  uint32_t hdr_page_no,
>  uint32_t page_no,
> 
>  mtr_t* mtr,
> 
> 
>  dberr_t* err)
> {
>  do { if (__builtin_expect(!(ulint) (hdr_page_no != page_no), (0))) {
> ut_dbg_assertion_failed("hdr_page_no != page_no",
> "/home/abuild/rpmbuild/BUILD/mariadb-10.11.2/storage/innobase/trx/trx0undo.
> cc", 744); } } while (0);
> 
>  buf_block_t* undo_block = buf_page_get_gen(page_id_t(rseg->space->id,
>             page_no),
>          0, RW_X_LATCH, nullptr,
>          10, mtr, err);
>  if (__builtin_expect(!undo_block, (0))) {
>   return 0xFFFFFFFFU;
>  }
>  buf_block_t* header_block = buf_page_get_gen(page_id_t(rseg->space->id,
>               hdr_page_no), <---- HERE
>            0, RW_X_LATCH, nullptr,
>            10, mtr, err);
>  if (__builtin_expect(!header_block, (0))) {
>   return 0xFFFFFFFFU;
>  }
> ...
> 
> the function arguments are:
> #1  0x570e8874 in trx_undo_free_page (rseg=0x57a56c40 <trx_sys+16768>,
> in_history=false, hdr_page_no=807, page_no=817, mtr=0xef4ac434,
> err=0xef4ac3dc) at /tmp/trxundo.ii:181925
> 
> and the construction of:
> page_id_t(rseg->space->id, hdr_page_no)
> ends in callee (buf_page_get_gen) with the argument:
> 
> (gdb) p page_id
> $5 = {m_id = 0}
> 
> while in good run it should be {m_id = 807} !

Ok, can you please print *rseg , rseg->space[0], *mtr and *err at the start of
the function, so that I can try to construct a self-contained testcase?
I assume both buf_page_get_gen return something non-NULL and it doesn't really
matter otherwise what for the reproducer, since e.g. all the further calls can
be noipa handled as completely dummy or even exit (0).

Reply via email to