Hi,

as described in the PR 69881 it happens quite often that cstddef is
called with __need_size_t because we still support gmp-4.3.2 which
is installed by contrib/download_prerequisites.  This causes a kind
of undefined behavior.  It is just by chance that this does not cause
the gcc-6 boot-strap to fail, but it causes gcc-4.9 bootstrap to fail
when the gcc-6 version of cstddef is around.  So it looks like a
regression, because the new cstddef is more fragile than before.

As it looks like, neither c/* nor c_std/* headers will compile without
major bug-fixing first, and they are likely not in use by anybody.
Therefore I think it is best not to touch these at all, because it is
hard to test anything there.

So I propose to undefine all problematic __need_* that may cause
cstddef or cstdarg fail to compile.

Boot-strapped and reg-tested on x86_64-pc-linux-gnu
OK for trunk?


Thanks
Bernd.
2016-02-23  Bernd Edlinger  <bernd.edlin...@hotmail.de>

	PR libstdc++/69881
	* include/c_global/cstdarg: Undefine __need___va_list.
	* include/c_global/cstddef: Undefine all kinds of __need_*.

Index: libstdc++-v3/include/c_global/cstdarg
===================================================================
--- libstdc++-v3/include/c_global/cstdarg	(revision 233604)
+++ libstdc++-v3/include/c_global/cstdarg	(working copy)
@@ -38,6 +38,7 @@
 
 #pragma GCC system_header
 
+#undef __need___va_list
 #include <bits/c++config.h>
 #include <stdarg.h>
 
Index: libstdc++-v3/include/c_global/cstddef
===================================================================
--- libstdc++-v3/include/c_global/cstddef	(revision 233604)
+++ libstdc++-v3/include/c_global/cstddef	(working copy)
@@ -41,6 +41,11 @@
 
 #pragma GCC system_header
 
+#undef __need_wchar_t
+#undef __need_ptrdiff_t
+#undef __need_size_t
+#undef __need_NULL
+#undef __need_wint_t
 #include <bits/c++config.h>
 #include <stddef.h>
 

Reply via email to