https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92762
--- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> --- It looks to me like the whole else block with the BROKEN_VALUE_INITIALIZATION guard is incorrect. The following test case aborts: typedef int_hash<int, INT_MIN, INT_MAX> IntHash; hash_map<int, int, simple_hashmap_traits<IntHash, int> > x; static void test_hash_table () { for (int i = 1; i != 32; ++i) x.put (i, i); x.empty (); gcc_assert (!x.get (0)); << abort here } internal compiler error: in test_hash_table, at cp/parser.c:43483 0xaea59d test_hash_table /src/gcc/61339/gcc/cp/parser.c:43483 0xaea5a9 c_parse_file() /src/gcc/61339/gcc/cp/parser.c:43491 0xcd3987 c_common_parse_file() /src/gcc/61339/gcc/c-family/c-opts.c:1185 Please submit a full bug report, Changing the assert to gcc_assert (!x.get (1)); leads to an infinite loop in hash_table::find_with_hash().