In BIPART_LEFT_BLOCKS and RIGHT_BLOCKS, t bipart.cc:616 on my machine, here is a line which looks like:
ADDR_OBJ(x)[1] = blocks_new_obj(bipart_get_cpp(x)->left_blocks());
That's illegal, as the left hand side gets evaluated first, then the right hand side can cause GC.
Found using the new memory canary in ( gap-system/gap#2293 ), just for information.