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

Reply via email to