On Fri, Feb 16, 2018 at 09:25:30PM +0100, Richard Biener wrote:
> But the broken compilers will overwrite the memset data with possibly 
> uninitialized fields of a TARGET_EXPR. 

Perhaps for hash-table.h we could use:
#ifndef BROKEN_VALUE_INITIALIZATION
      for ( ; size; ++entries, --size)
        *entries = value_type ();
#else
      union U { char c[sizeof (value_type)]; value_type v; } u;
      memset (u.c, '\0', sizeof (u.c));
      value_type *p = ::new (static_cast<void*>(u.c)) value_type ();
      for ( ; size; ++entries, --size)
        *entries = *p;
      p->~value_type ();
#endif
or so, if it is valid C++, which could turn the hash-table.h case into
the vec.h case.

        Jakub

Reply via email to