https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101574
--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> --- Well. { &nowarn_map, 1, sizeof (nowarn_map), >_ggc_mx_hash_map_xint_hash_t_nowarn_spec_t_, >_pch_nx_hash_map_xint_hash_t_nowarn_spec_t_ }, void gt_ggc_mx_hash_map_xint_hash_t_nowarn_spec_t_ (void *x_p) { hash_map<xint_hash_t,nowarn_spec_t> * const x = (hash_map<xint_hash_t,nowarn_spec_t> *)x_p; if (ggc_test_and_set_mark (x)) { gt_ggc_mx (x); } } So that's supposed to pick up the hash_map and hash_table overloads of gt_ggc_mx. In particular int_hash lacks ggc_* method overloads I think, see how the various ggc_* hash traits work. given the layout of the nowarn_spec hash-map I think all data should be in-line, and thus only the hashtable memory itself needs to be marked and thus you should see all of the table poisoned? Breaking at the above toplevel marker and following what it does might reveal the error.