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