Commit ff9fccdc by Jakub Jelinek Committed by Jakub Jelinek

re PR bootstrap/84405 (Fails to bootstrap with GCC 4.1.2, GCC 4.2.4)

	PR bootstrap/84405
	* vec.h (vec_default_construct): For BROKEN_VALUE_INITIALIZATION use
	memset and value initialization afterwards.

From-SVN: r257989
parent 7518398d
2018-02-26 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/84405
* vec.h (vec_default_construct): For BROKEN_VALUE_INITIALIZATION use
memset and value initialization afterwards.
2018-02-26 Christophe Lyon <christophe.lyon@linaro.org>
* Makefile.in (lto-wrapper): Use ALL_LINKERFLAGS.
......
......@@ -490,12 +490,23 @@ template <typename T>
inline void
vec_default_construct (T *dst, unsigned n)
{
#ifndef BROKEN_VALUE_INITIALIZATION
for ( ; n; ++dst, --n)
::new (static_cast<void*>(dst)) T ();
#else
#ifdef BROKEN_VALUE_INITIALIZATION
/* Versions of GCC before 4.4 sometimes leave certain objects
uninitialized when value initialized, though if the type has
user defined default ctor, that ctor is invoked. As a workaround
perform clearing first and then the value initialization, which
fixes the case when value initialization doesn't initialize due to
the bugs and should initialize to all zeros, but still allows
vectors for types with user defined default ctor that initializes
some or all elements to non-zero. If T has no user defined
default ctor and some non-static data members have user defined
default ctors that initialize to non-zero the workaround will
still not work properly; in that case we just need to provide
user defined default ctor. */
memset (dst, '\0', sizeof (T) * n);
#endif
for ( ; n; ++dst, --n)
::new (static_cast<void*>(dst)) T ();
}
/* Copy-construct N elements in DST from *SRC. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment