mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-19 06:20:27 +08:00
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
This commit is contained in:
parent
7518398dce
commit
ff9fccdcb5
@ -1,3 +1,9 @@
|
||||
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.
|
||||
|
19
gcc/vec.h
19
gcc/vec.h
@ -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. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user