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

PR bootstrap/84405
	* system.h (BROKEN_VALUE_INITIALIZATION): Define for GCC < 4.3.
	* vec.h (vec_default_construct): Use memset instead of placement new
	if BROKEN_VALUE_INITIALIZATION is defined.
	* hash-table.h (hash_table<Descriptor, Allocator>::empty_slow): Use
	memset instead of value initialization if BROKEN_VALUE_INITIALIZATION
	is defined.

From-SVN: r257726
This commit is contained in:
Jakub Jelinek 2018-02-16 10:05:35 +01:00 committed by Jakub Jelinek
parent 33006d53fd
commit ab67039ccd
4 changed files with 22 additions and 0 deletions

View File

@ -1,5 +1,13 @@
2018-02-16 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/84405
* system.h (BROKEN_VALUE_INITIALIZATION): Define for GCC < 4.3.
* vec.h (vec_default_construct): Use memset instead of placement new
if BROKEN_VALUE_INITIALIZATION is defined.
* hash-table.h (hash_table<Descriptor, Allocator>::empty_slow): Use
memset instead of value initialization if BROKEN_VALUE_INITIALIZATION
is defined.
PR rtl-optimization/83723
* lra-int.h (lra_substitute_pseudo): Add DEBUG_P argument.
* lra.c (lra_substitute_pseudo): Likewise. If true, use

View File

@ -804,8 +804,12 @@ hash_table<Descriptor, Allocator>::empty_slow ()
}
else
{
#ifndef BROKEN_VALUE_INITIALIZATION
for ( ; size; ++entries, --size)
*entries = value_type ();
#else
memset (entries, 0, size * sizeof (value_type));
#endif
}
m_n_deleted = 0;
m_n_elements = 0;

View File

@ -824,6 +824,12 @@ extern void fancy_abort (const char *, int, const char *)
/* Some compilers do not allow the use of unsigned char in bitfields. */
#define BOOL_BITFIELD unsigned int
/* GCC older than 4.4 have broken C++ value initialization handling, see
PR11309, PR30111, PR33916, PR82939 and PR84405 for more details. */
#if GCC_VERSION > 0 && GCC_VERSION < 4004 && !defined(__clang__)
# define BROKEN_VALUE_INITIALIZATION
#endif
/* As the last action in this file, we poison the identifiers that
shouldn't be used. Note, luckily gcc-3.0's token-based integrated
preprocessor won't trip on poisoned identifiers that arrive from

View File

@ -490,8 +490,12 @@ 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
memset (dst, '\0', sizeof (T) * n);
#endif
}
/* Copy-construct N elements in DST from *SRC. */