Commit Graph

137 Commits

Author SHA1 Message Date
Jakub Jelinek
348e46fa8c fixincludes: Deal also with the _Float128x cases [PR107059]
On Wed, Sep 28, 2022 at 08:19:43PM +0200, Jakub Jelinek via Gcc-patches wrote:
> Another case are the following 3 snippets:
> #  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
> #   error "_Float128X supported but no constant suffix"
> #  else
> #   define __f128x(x) x##f128x
> #  endif
> ...
> #  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
> #   error "_Float128X supported but no complex type"
> #  else
> #   define __CFLOAT128X _Complex _Float128x
> #  endif
> ...
> #  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
> #   error "_Float128x supported but no type"
> #  endif
> but as no target has _Float128x right now and don't see it
> coming soon, it isn't a big deal (on the glibc side it is of
> course ok to adjust those).

This incremental patch deals handles the above 3 cases, so we
fixinclude what glibc itself changed too.

2022-10-07  Jakub Jelinek  <jakub@redhat.com>

	PR bootstrap/107059
	* inclhack.def (glibc_cxx_floatn_5): New.
	* fixincl.x: Regenerated.
	* tests/base/bits/floatn.h: Regenerated.
2022-10-07 09:00:00 +02:00
Jakub Jelinek
62ec780ac0 fixincludes: Fix up powerpc floatn.h tweaks [PR107059]
On Wed, Sep 28, 2022 at 12:23:31AM +0000, Joseph Myers wrote:
> In general the changes match those made by fixincludes, though I think
> the ones in sysdeps/powerpc/bits/floatn.h, where the header tests
> __LDBL_MANT_DIG__ == 113 or uses #elif, wouldn't match the existing
> fixincludes patterns.

You're right, missed that.
The header has:
 /* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1.  */
 # if __HAVE_FLOAT128
 #  if __LDBL_MANT_DIG__ == 113 && defined __cplusplus
 typedef long double _Float128;
 #   define __CFLOAT128 _Complex long double
 #  elif !__GNUC_PREREQ (7, 0) || defined __cplusplus
 /* The type _Float128 exist for powerpc only since GCC 7.0.  */
 typedef __float128 _Float128;
 /* Add a typedef for older GCC and C++ compilers which don't natively support
    _Complex _Float128.  */
 typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__KC__)));
 #   define __CFLOAT128 __cfloat128
 #  else
 #   define __CFLOAT128 _Complex _Float128
 #  endif
 # endif
and my current rules don't do anything about that.

The following patch fixes that.
I've run additionally
MACRO_LIST=`pwd`/../gcc/macro_list TARGET_MACHINE=x86_64-pc-linux-gnu \
  ../fixincludes/fixinc.sh /tmp/include-fixed \
    `echo /usr/src/libc | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`
in the builddir/fixincludes directory where /usr/src/libc is latest glibc
trunk checkout and seems the remaining defined __cplusplus cases in the floatn.h
and floatn-common.h headers are ok or acceptable.
The remaining cases are:
 #if __GNUC_PREREQ (7, 0) && !defined __cplusplus
 # define __HAVE_FLOATN_NOT_TYPEDEF 1
 #else
 # define __HAVE_FLOATN_NOT_TYPEDEF 0
 #endif
which is IMHO ok because this is only used in tgmath.h or tgmath-like math.h
stuff which is C only, as C++ doesn't have _Generic.
Another case are the following 3 snippets:
 #  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
 #   error "_Float128X supported but no constant suffix"
 #  else
 #   define __f128x(x) x##f128x
 #  endif
...
 #  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
 #   error "_Float128X supported but no complex type"
 #  else
 #   define __CFLOAT128X _Complex _Float128x
 #  endif
...
 #  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
 #   error "_Float128x supported but no type"
 #  endif
but as no target has _Float128x right now and don't see it
coming soon, it isn't a big deal (on the glibc side it is of
course ok to adjust those).
OT, besides floatn.h and floatn-common.h headers, the only
one remaining in /tmp/include-fixed is sysdeps/arm/unwind.h, perhaps
-#if defined(linux) || defined(__NetBSD__)
+#if defined(__linux__) || defined(__NetBSD__)
should be done in that header (and libgcc/config/arm/unwind-arm.h
too).

2022-10-07  Jakub Jelinek  <jakub@redhat.com>

	PR bootstrap/107059
	* inclhack.def (glibc_cxx_floatn_2): Handle #elif the same as #if.
	(glibc_cxx_floatn_4): New.
	* fixincl.x: Regenerated.
	* tests/base/bits/floatn.h: Regenerated.
2022-10-07 09:00:00 +02:00
Jakub Jelinek
b04208895f c++: Implement P1467R9 - Extended floating-point types and standard names compiler part except for bfloat16 [PR106652]
The following patch implements the compiler part of C++23
P1467R9 - Extended floating-point types and standard names compiler part
by introducing _Float{16,32,64,128} as keywords and builtin types
like they are implemented for C already since GCC 7, with DF{16,32,64,128}_
mangling.
It also introduces _Float{32,64,128}x for C++ with the
https://github.com/itanium-cxx-abi/cxx-abi/pull/147
proposed mangling of DF{32,64,128}x.
The patch doesn't add anything for bfloat16_t support, as right now
__bf16 type refuses all conversions and arithmetic operations.
The patch wants to keep backwards compatibility with how __float128 has
been handled in C++ before, both for mangling and behavior in binary
operations, overload resolution etc.  So, there are some backend changes
where for C __float128 and _Float128 are the same type (float128_type_node
and float128t_type_node are the same pointer), but for C++ they are distinct
types which mangle differently and _Float128 is treated as extended
floating-point type while __float128 is treated as non-standard floating
point type.  The various C++23 changes about how floating-point types
are changed are actually implemented as written in the spec only if at least
one of the types involved is _Float{16,32,64,128,32x,64x,128x} (_FloatNx are
also treated as extended floating-point types) and kept previous behavior
otherwise.  For float/double/long double the rules are actually written that
they behave the same as before.
There is some backwards incompatibility at least on x86 regarding _Float16,
because that type was already used by that name and with the DF16_ mangling
(but only since GCC 12 and I think it isn't that widely used in the wild
yet).  E.g. config/i386/avx512fp16intrin.h shows the issues, where
in C or in GCC 12 in C++ one could pass 0.0f to a builtin taking _Float16
argument, but with the changes that is not possible anymore, one needs
to either use 0.0f16 or (_Float16) 0.0f.
We have also a problem with glibc headers, where since glibc 2.27
math.h and complex.h aren't compilable with these changes.  One gets
errors like:
In file included from /usr/include/math.h:43,
                 from abc.c:1:
/usr/include/bits/floatn.h:86:9: error: multiple types in one declaration
   86 | typedef __float128 _Float128;
      |         ^~~~~~~~~~
/usr/include/bits/floatn.h:86:20: error: declaration does not declare anything [-fpermissive]
   86 | typedef __float128 _Float128;
      |                    ^~~~~~~~~
In file included from /usr/include/bits/floatn.h:119:
/usr/include/bits/floatn-common.h:214:9: error: multiple types in one declaration
  214 | typedef float _Float32;
      |         ^~~~~
/usr/include/bits/floatn-common.h:214:15: error: declaration does not declare anything [-fpermissive]
  214 | typedef float _Float32;
      |               ^~~~~~~~
/usr/include/bits/floatn-common.h:251:9: error: multiple types in one declaration
  251 | typedef double _Float64;
      |         ^~~~~~
/usr/include/bits/floatn-common.h:251:16: error: declaration does not declare anything [-fpermissive]
  251 | typedef double _Float64;
      |                ^~~~~~~~
This is from snippets like:
 /* The remaining of this file provides support for older compilers.  */
 # if __HAVE_FLOAT128

 /* The type _Float128 exists only since GCC 7.0.  */
 #  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
 typedef __float128 _Float128;
 #  endif
where it hardcodes that C++ doesn't have _Float{16,32,64,128,32x,64x,128x} support nor
{f,F}{16,32,64,128}{,x} literal suffixes nor _Complex _Float{16,32,64,128,32x,64x,128x}.
The patch fixincludes this for now and hopefully if this is committed, then
glibc can change those.  The patch changes those
 #  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
conditions to
 #  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
Another thing is mangling, as said above, Itanium C++ ABI specifies
DF <number> _ as _Float{16,32,64,128} mangling, but GCC was implementing
a mangling incompatible with that starting with DF for fixed point types.
Fixed point was never supported in C++ though, I believe the reason why
the mangling has been added was that due to a bug it would leak into the
C++ FE through decltype (0.0r) etc.  But that has been shortly after the
mangling was added fixed (I think in the same GCC release cycle), so we
now reject 0.0r etc. in C++.  If we ever need the fixed point mangling,
I think it can be readded but better with a different prefix so that it
doesn't conflict with the published standard manglings.  So, this patch
also kills the fixed point mangling and implements the DF <number> _
demangling.
The patch predefines __STDCPP_FLOAT{16,32,64,128}_T__ macros when
those types are available, but only for C++23, while the underlying types
are available in C++98 and later including the {f,F}{16,32,64,128} literal
suffixes (but those with a pedwarn for C++20 and earlier).  My understanding
is that it needs to be predefined by the compiler, on the other side
predefining even for older modes when <stdfloat> is a new C++23 header
would be weird.  One can find out if _Float{16,32,64,128,32x,64x,128x} is
supported in C++ by
__GNUC__ >= 13 && defined(__FLT{16,32,64,128,32X,64X,128X}_MANT_DIG__)
(but that doesn't work well with older G++ 13 snapshots).

As for std::bfloat16_t, three targets (aarch64, arm and x86) apparently
"support" __bf16 type which has the bfloat16 format, but isn't really
usable, e.g. {aarch64,arm,ix86}_invalid_conversion disallow any conversions
from or to type with BFmode, {aarch64,arm,ix86}_invalid_unary_op disallows
any unary operations on those except for ADDR_EXPR and
{aarch64,arm,ix86}_invalid_binary_op disallows any binary operation on
those.  So, I think we satisfy:
"If the implementation supports an extended floating-point type with the
properties, as specified by ISO/IEC/IEEE 60559, of radix (b) of 2, storage
width in bits (k) of 16, precision in bits (p) of 8, maximum exponent (emax)
of 127, and exponent field width in bits (w) of 8, then the typedef-name
std::bfloat16_t is defined in the header <stdfloat> and names such a type,
the macro __STDCPP_BFLOAT16_T__ is defined, and the floating-point literal
suffixes bf16 and BF16 are supported."
because we don't really support those right now.

2022-09-27  Jakub Jelinek  <jakub@redhat.com>

	PR c++/106652
	PR c++/85518
gcc/
	* tree-core.h (enum tree_index): Add TI_FLOAT128T_TYPE
	enumerator.
	* tree.h (float128t_type_node): Define.
	* tree.cc (build_common_tree_nodes): Initialize float128t_type_node.
	* builtins.def (DEF_FLOATN_BUILTIN): Adjust comment now that
	_Float<N> is supported in C++ too.
	* config/i386/i386.cc (ix86_mangle_type): Only mangle as "g"
	float128t_type_node.
	* config/i386/i386-builtins.cc (ix86_init_builtin_types): Use
	float128t_type_node for __float128 instead of float128_type_node
	and create it if NULL.
	* config/i386/avx512fp16intrin.h (_mm_setzero_ph, _mm256_setzero_ph,
	_mm512_setzero_ph, _mm_set_sh, _mm_load_sh): Use 0.0f16 instead of
	0.0f.
	* config/ia64/ia64.cc (ia64_init_builtins): Use
	float128t_type_node for __float128 instead of float128_type_node
	and create it if NULL.
	* config/rs6000/rs6000-c.cc (is_float128_p): Also return true
	for float128t_type_node if non-NULL.
	* config/rs6000/rs6000.cc (rs6000_mangle_type): Don't mangle
	float128_type_node as "u9__ieee128".
	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Use
	float128t_type_node for __float128 instead of float128_type_node
	and create it if NULL.
gcc/c-family/
	* c-common.cc (c_common_reswords): Change _Float{16,32,64,128} and
	_Float{32,64,128}x flags from D_CONLY to 0.
	(shorten_binary_op): Punt if common_type returns error_mark_node.
	(shorten_compare): Likewise.
	(c_common_nodes_and_builtins): For C++ record _Float{16,32,64,128}
	and _Float{32,64,128}x builtin types if available.  For C++
	clear float128t_type_node.
	* c-cppbuiltin.cc (c_cpp_builtins): Predefine
	__STDCPP_FLOAT{16,32,64,128}_T__ for C++23 if supported.
	* c-lex.cc (interpret_float): For q/Q suffixes prefer
	float128t_type_node over float128_type_node.  Allow
	{f,F}{16,32,64,128} suffixes for C++ if supported with pedwarn
	for C++20 and older.  Allow {f,F}{32,64,128}x suffixes for C++
	with pedwarn.  Don't call excess_precision_type for C++.
gcc/cp/
	* cp-tree.h (cp_compare_floating_point_conversion_ranks): Implement
	P1467R9 - Extended floating-point types and standard names except
	for std::bfloat16_t for now.  Declare.
	(extended_float_type_p): New inline function.
	* mangle.cc (write_builtin_type): Mangle float{16,32,64,128}_type_node
	as DF{16,32,64,128}_.  Mangle float{32,64,128}x_type_node as
	DF{32,64,128}x.  Remove FIXED_POINT_TYPE mangling that conflicts
	with that.
	* typeck2.cc (check_narrowing): If one of ftype or type is extended
	floating-point type, compare floating-point conversion ranks.
	* parser.cc (cp_keyword_starts_decl_specifier_p): Handle
	CASE_RID_FLOATN_NX.
	(cp_parser_simple_type_specifier): Likewise and diagnose missing
	_Float<N> or _Float<N>x support if not supported by target.
	* typeck.cc (cp_compare_floating_point_conversion_ranks): New function.
	(cp_common_type): If both types are REAL_TYPE and one or both are
	extended floating-point types, select common type based on comparison
	of floating-point conversion ranks and subranks.
	(cp_build_binary_op): Diagnose operation with floating point arguments
	with unordered conversion ranks.
	* call.cc (standard_conversion): For floating-point conversion, if
	either from or to are extended floating-point types, set conv->bad_p
	for implicit conversion from larger to smaller conversion rank or
	with unordered conversion ranks.
	(convert_like_internal): Emit a pedwarn on such conversions.
	(build_conditional_expr): Diagnose operation with floating point
	arguments with unordered conversion ranks.
	(convert_arg_to_ellipsis): Don't promote extended floating-point types
	narrower than double to double.
	(compare_ics): Implement P1467R9 [over.ics.rank]/4 changes.
gcc/testsuite/
	* g++.dg/cpp23/ext-floating1.C: New test.
	* g++.dg/cpp23/ext-floating2.C: New test.
	* g++.dg/cpp23/ext-floating3.C: New test.
	* g++.dg/cpp23/ext-floating4.C: New test.
	* g++.dg/cpp23/ext-floating5.C: New test.
	* g++.dg/cpp23/ext-floating6.C: New test.
	* g++.dg/cpp23/ext-floating7.C: New test.
	* g++.dg/cpp23/ext-floating8.C: New test.
	* g++.dg/cpp23/ext-floating9.C: New test.
	* g++.dg/cpp23/ext-floating10.C: New test.
	* g++.dg/cpp23/ext-floating.h: New file.
	* g++.target/i386/float16-1.C: Adjust expected diagnostics.
libcpp/
	* expr.cc (interpret_float_suffix): Allow {f,F}{16,32,64,128} and
	{f,F}{32,64,128}x suffixes for C++.
include/
	* demangle.h (enum demangle_component_type): Add
	DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE.
	(struct demangle_component): Add u.s_extended_builtin member.
libiberty/
	* cp-demangle.c (d_dump): Handle
	DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE.  Don't handle
	DEMANGLE_COMPONENT_FIXED_TYPE.
	(d_make_extended_builtin_type): New function.
	(cplus_demangle_builtin_types): Add _Float entry.
	(cplus_demangle_type): For DF demangle it as _Float<N> or
	_Float<N>x rather than fixed point which conflicts with it.
	(d_count_templates_scopes): Handle
	DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE.  Just break; for
	DEMANGLE_COMPONENT_FIXED_TYPE.
	(d_find_pack): Handle DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE.
	Don't handle DEMANGLE_COMPONENT_FIXED_TYPE.
	(d_print_comp_inner): Likewise.
	* cp-demangle.h (D_BUILTIN_TYPE_COUNT): Bump.
	* testsuite/demangle-expected: Replace _Z3xxxDFyuVb test
	with _Z3xxxDF16_DF32_DF64_DF128_CDF16_Vb.  Add
	_Z3xxxDF32xDF64xDF128xCDF32xVb test.
fixincludes/
	* inclhack.def (glibc_cxx_floatn_1, glibc_cxx_floatn_2,
	glibc_cxx_floatn_3): New fixes.
	* tests/base/bits/floatn.h: New file.
	* fixincl.x: Regenerated.
2022-09-27 08:18:00 +02:00
John David Anglin
d1574a9b82 Fix declarations of _DINFINITY, _SINFINITY and _SQNAN
The declarations of _DINFINITY, _SINFINITY and _SQNAN need to be constant
expressions.

2022-02-27  John David Anglin  <danglin@gcc.gnu.org>

fixincludes/ChangeLog:
	* inclhack.def (hpux_math_constexpr): New hack.
	* fixincl.x: Regenerate.
	* tests/base/math.h: Update.
2022-02-27 19:47:25 +00:00
Olivier Hainque
9d7e19255c Add VxWorks fixincludes hack, open posix API for C++
When system headers expose a strict "open" prototype with
3 args, arrange to expose a C++ overload with only two.

2021-01-10  Olivier Hainque  <hainque@adacore.com>

	* inclhack.def (vxworks_math_h_fp_c99): New hack.
	* tests/base/fcntl.h: Update.
	* fixincl.x: Regenerate.
2022-01-16 09:22:14 +00:00
Olivier Hainque
943fad6702 Add VxWorks fixincludes hack, #include sysLib.h in time.h
Make sure there is a visible prototype of sysClkRateGet() when
CLOCKS_PER_SEC is #defined to that in time.h for VxWorks.  This
would typically be provided by sysLib.h.

2021-01-10  Olivier Hainque  <hainque@adacore.com>

	* inclhack.def (vxworks_time_h_syslib): New hack.
	* tests/base/time.h: Update.
	* fixincl.x: Regenerate.
2022-01-16 09:22:14 +00:00
Olivier Hainque
00cc412660 Add VxWorks fixincludes hack, C99 FP classification
Arrange to provide missing defs for C99 FP classification functions
and constants queried by libstdc++ configure checks (C99 support for C++98)

2021-01-10  Olivier Hainque  <hainque@adacore.com>

	* inclhack.def (vxworks_math_h_fp_c99): New hack.
	* tests/base/math.h: Update.
	* fixincl.x: Regenerate.
2022-01-16 09:22:14 +00:00
Olivier Hainque
75b8a72617 Add VxWworks fixincludes hack, don't expect yvals.h from gcc
yvals.h on VxWorks expects the toolchain to provide its own
version of the header, which we don't do. Arrange to fallback
on the common system definitions instead.

2021-12-16  Olivier Hainque  <hainque@adacore.com>

fixincludes/
	* inclhack.def (vxworks_next_yvals): New hack.
	* tests/base/yvals.h: New expected test result.
	* fixincl.x: Regenerate.
2022-01-06 12:04:13 +00:00
Olivier Hainque
a54d11749f Adjust VxWorks fixincludes hack for mkdir to work for C++
For VxWorks, replace an attempt at providing a posix API for
mkdir via macro by a varargs prototype, which works better for
C++ references like std::mkdir(arg1, arg2).

2021-12-16  Olivier Hainque  <hainque@adacore.com>

fixincludes/
	* inclhack.def (vxworks_posix_mkdir): Refine to expose a
	varargs interface.
	* tests/base/sys/stat.h: Update expected results.
	* fixincl.x: Regenerate.
2022-01-04 10:27:11 +00:00
Francois-Xavier Coudert
4f3b1a09d3 Fixincludes: Handle __FLT_EVAL_METHOD__ == 16 on darwin
The darwin system headers error out on __FLT_EVAL_METHOD__ == 16, which
occurs when the compiler is called with -mavx512fp16 on i386. Allow this
value to proceed past the check (nothing else depends on it in the
system headers).

fixincludes/ChangeLog:

	* inclhack.def: Add new fix on darwin.
	* fixincl.x: Regenerate.
	* tests/base/math.h: Regenerate.
2022-01-01 13:00:41 +01:00
John David Anglin
a6fe949d57 Fix libgfortran build on hppa*-hp-hpux[01]*
Add include hack to define PRIdPTR, PRIiPTR, PRIoPTR, PRIuPTR, PRIxPTR
and PRIXPTR in inttypes.h.

2021-08-30  John David Anglin  <danglin@gcc.gnu.org>

fixincludes/ChangeLog:
	* inclhack.def (hpux_c99_inttypes5): New hack to define PRIdPTR, etc.
	* fixincl.x: Regenerate.
	* tests/base/inttypes.h: Update.
2021-08-30 19:31:40 +00:00
Clément Chigot
03b634c8e0 fixincludes: AIX socket.h.
Add more context to aix_externcpp1 selection to ensure
that the fix is correctly applied even in future AIX versions.

fixincludes/Changelog:
2021-07-01  Clément Chigot  <clement.chigot@atos.net>

	* inclhack.def (aix_externcpp1): Improve select regexp.
	* fixincl.x: Regenerate.
	* tests/base/sys/socket.h: Update.
2021-07-06 15:30:52 -04:00
Xi Ruoyao
6bf383c37e
fixinc: don't "fix" machine names in __has_include(...) [PR91085]
fixincludes/

	PR other/91085
	* fixfixes.c (check_has_inc): New static function.
	  (machine_name_fix): Don't replace header names in
	  __has_include(...).
	* inclhack.def (machine_name): Adjust test.
	* tests/base/testing.h: Update.
2021-06-30 10:43:20 +08:00
Ilya Leoshkevich
057dc81f82 aix: Fixinclude updates [PR98208]
After 92648faa1c ("aix: Fixinclude") make check-fixincludes began to
fail (at least on gcc121 machine).  Fix by updating fixincludes/tests
and rerunning genfixes.

Co-developed-by: Nathan Sidwell <nathan@acm.org>

fixincludes/ChangeLog:

2020-12-11  Ilya Leoshkevich  <iii@linux.ibm.com>

	* fixincl.x: Rerun genfixes.
	* inclhack.def(aix_physadr_t): Change test_text to something
	that needs to be replaced.
	* tests/base/sys/types.h(aix_physadr_t): Add expectation.
2020-12-14 21:57:32 +01:00
Clément Chigot
5af2a2d30d aix: apply aix_malloc more narrowly.
In recent Technology Levels of AIX 7.2, new "#ifdef __cplusplus" have been
added. Thus, the aix_malloc fix was applied in wrong locations. This patch
increases the context to avoid this.

fixincludes/ChangeLog:

2020-10-03  Clément Chigot  <clement.chigot@atos.net>

	* inclhack.def (aix_malloc): Add more context to select.
	* fixincl.x: Regenerate.
	* tests/base/malloc.h: Update expected results.
2020-10-03 23:48:40 +00:00
David Edelsohn
081b3517b4 aix: Fix _STDC_FORMAT_MACROS in inttypes.h [PR97044]
AIX protects the STDC Format Macros in a manner that can prevent the
definition of the macros depending on the order of header inclusion.

The protection of the macros was referenced in C99, removed in C11, and
never specified in any C++ standard. Also, the macros are in the namespace
reserved to the implementation (compiler) so the compiler is permitted to
choose to inject those names.

fixincludes/ChangeLog:

2020-09-17  David Edelsohn  <dje.gcc@gmail.com>

	PR target/97044
	* inclhack.def (aix_inttypes): New fix.
	* fixincl.x: Regenerate.
	* tests/base/sys/inttypes.h: New file.
2020-09-26 15:59:24 +00:00
David Edelsohn
21fdebc519 aix: apply socket.h extern "C++" more narrowly.
Recent Technology Levels of AIX 7.2 have made sys/socket.h more C++-aware,
which causes the fix to be applied in too many locations.  This patch adds
more context for the selection to apply the fix more narrowly.

fixincludes/ChangeLog:

2020-09-17  David Edelsohn  <dje.gcc@gmail.com>

	* inclhack.def (aix_externcpp1): Add more context to select.
	(aix_externcpp2): Same.
	* fixincl.x: Regenerate.
	* tests/base/sys/socket.h: Update expected results.
2020-09-17 14:18:32 +00:00
John David Anglin
10be08aa27 Fix missing SCNuMAX defines in inttypes.h on hpux11.[01]*
2020-01-25  John David Anglin  <danglin@gcc.gnu.org>

	* inclhack.def (hpux_c99_inttypes4): New, add missing SCNuMAX defines.
	* fixincl.x: Regenerate.
	* tests/base/inttypes.h: Update for above fix.
2020-01-25 12:20:24 -05:00
John David Anglin
5ee5eddb26 re PR libgomp/93066 (libgomp/target.c:525:46: error: expected expression before ')' token)
PR libgomp/93066
	* inclhack.def (hpux_c99_inttypes3): Fix defines for INTPTR_MAX
	and UINTPTR_MAX, and missing define for SIZE_MAX.
	* fixincl.x: Regenerate.
	* tests/base/inttypes.h: Update for above fix.

From-SVN: r279773
2019-12-30 20:33:17 +00:00
C.G. Dogan
5c439f4d67 [Darwin, fixincludes] Fix PR83531
There is no reasonable chance that the SDKs in question will be re-
issued, so the only viable solution is a fixincludes.

2019-08-18  C.G. Dogan <gcc+cgdogan.00@gmail.com>
	    Iain Sandoe  <iain@sandoe.co.uk>

	PR target/83531
	* inclhack.def (darwin_api_availability): New, strip leading
	underscores from API_XXXX defines.
	* fixincl.x: Regenerate.
	* tests/base/os/availability.h: New file.


Co-Authored-By: Iain Sandoe <iain@sandoe.co.uk>

From-SVN: r274624
2019-08-18 18:54:13 +00:00
Iain Sandoe
5a50aed32a [Darwin, fixincludes] Fix Darwin9/10 math.h issues.
Darwin has had long long functions for some considerable time and these are
exposed in Darwin8 and Darwin11+ headers.  However, for some reason it was
elected to hide them behind __STRICT_ANSI__ and __STDC_VERSION__ on Darwin9
and Darwin10.  This is a problem for G++/libstdc++ that expects the functions
to be available for strict ansi (-std=c++14, for example) and without
defining __STDC_VERSION__.  The fix here follows the pattern used in
Darwin11+ headers where the functions may be explicitly hidden by defining
__DARWIN_NO_LONG_LONG.

This fixes the tr1 testsuite fails seen on Darwin9 and 10.

2019-06-21  Iain Sandoe  <iain@sandoe.co.uk>

	* inclhack.def: Replace the complex test using __STRICT_ANSI__ and
	__STDC_VERSION__ with a test using __DARWIN_NO_LONG_LONG.
	Ensure that the top level math.h uses <> to wrap included headers
	rather than "".
	* fixincl.x: Regenerated.
	* tests/base/architecture/ppc/math.h: Update test to include the
	__DARWIN_NO_LONG_LONG case.

From-SVN: r272563
2019-06-21 19:18:18 +00:00
Iain Sandoe
59a0b1db75 [Darwin, fixincludes] Fix Darwin14 header issues.
There are two issues with the Darwin14 (SDK) headers in which unguarded
advanced syntax elements causes any code including these headers to fail.

2019-06-21  Iain Sandoe  <iain@sandoe.co.uk>

	* inclhack.def: Guard __has_attribute and __has_extension in
	os/base.h.
	Guard Apple blocks syntax in dispatch/object.h.
	* fixincl.x: Regenerate.
	* tests/base/dispatch/object.h: New file.
	* tests/base/os/base.h: New file.

From-SVN: r272561
2019-06-21 19:03:45 +00:00
David Edelsohn
5b3d96f24f inclhack.def (aix_unistd): New.
* inclhack.def (aix_unistd): New.
* fixincl.x: Regenerate.
* tests/base/unistd.h [AIX_UNISTD_CHECK]: New test.

From-SVN: r262936
2018-07-23 16:51:50 -04:00
Rasmus Villemoes
0e97b84bfc fixincludes: Add missing hunk to tests/base/ioLib.h
When adding the vxworks_iolib_include_unistd hack I failed to add the
appropriate hunk to the tests/base/ioLib.h file, causing "make
check-fixincludes" to fail.

From-SVN: r262177
2018-06-27 07:59:23 +00:00
David Edelsohn
58730d1899 inclhack.def (aix_stdlib_vec_malloc): New.
* inclhack.def (aix_stdlib_vec_malloc): New.
(aix_stdlib_vec_calloc): New.
* fixincl.x: Regenerate.
* tests/base/stdlib.h [AIX_STDLIB_VEC_MALLOC]: New test.
[AIX_STDLIB_VEC_CALLOC]: New test.

From-SVN: r257902
2018-02-22 11:12:26 -05:00
John David Anglin
888339e648 re PR target/68739 (FAIL: 30_threads/call_once/constexpr.cc (test for excess errors))
PR target/68739
	* inclhack.def (hpux11_pthread_pointer): New fix.
	(hpux11_pthread_const): Adjust to remove void * cast from define.
	* fixincl.x: Regenerate.

From-SVN: r245740
2017-02-25 20:29:39 +00:00
John David Anglin
7d3235372a alloca.h: New file.
* tests/base/alloca.h: New file.
	* inclhack.def (hppa_hpux11_alloca): New fix.
	* fixincl.x: Regenerate.

From-SVN: r245364
2017-02-11 21:11:44 +00:00
Rainer Orth
2252a8025d Only declare gets for C++ < 2014 on Solaris (PR libstdc++/78979)
PR libstdc++/78979
	* inclhack.def (solaris_gets_c11, solaris_gets_cxx14)
	(solaris_std_gets_cxx14, solaris_stdlib_noreturn): New fixes.
	* fixincl.x: Regenerate.
	* tests/base/iso/stdio_iso.h [SOLARIS_GETS_C11_CHECK,
	SOLARIS_GETS_CXX14_CHECK, SOLARIS_STD_GETS_CXX14_CHECK,
	SOLARIS_STDLIB_NORETURN_CHECK]: New tests.

From-SVN: r244428
2017-01-13 12:09:13 +00:00
Rainer Orth
3115f94f7f Don't define libstdc++-internal macros in Solaris 10+ <math.h>
libstdc++-v3:
	* acinclude.m4 (GLIBCXX_CHECK_MATH11_PROTO): Update comments.
	(__CORRECT_ISO_CPP11_MATH_H_PROTO): Rename to ...
	(__CORRECT_ISO_CPP11_MATH_H_PROTO_FP): ... this.
	Add test for C++11 <math.h> integral overloads.
	* configure: Regenerate.
	* config.h.in: Regenerate.

	* include/c_global/cmath [__cplusplus >= 201103L]: Reflect
	__CORRECT_ISO_CPP11_MATH_H_PROTO to
	__CORRECT_ISO_CPP11_MATH_H_PROTO_FP rename.
	* include/c_global/cmath [_GLIBCXX_USE_C99_MATH &&
	!_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC && __cplusplus >= 201103L]
	(std::fpclassify): Wrap in !__CORRECT_ISO_CPP11_MATH_H_PROTO_INT.
	(std::isfinite): Likewise.
	(std::isinf): Likewise.
	(std::isnan): Likewise.
	(std::isnormal): Likewise.
	(std::signbit): Likewise.
	(std::isgreater): Likewise.
	(std::isgreaterequal): Likewise.
	(std::isless): Likewise.
	(std::islessequal): Likewise.
	(std::islessgreater): Likewise.
	(std::isunordered): Likewise.
	[__cplusplus >= 201103L && _GLIBCXX_USE_C99_MATH_TR1]
	(std::acosh): Likewise.
	(std::asinh): Likewise.
	(std::atanh): Likewise.
	(std::cbrt): Likewise.
	(std::copysign): Likewise.
	(std::erf): Likewise.
	(std::erfc): Likewise.
	(std::exp2): Likewise.
	(std::expm1): Likewise.
	(std::fdim): Likewise.
	(std::fma): Likewise.
	(std::fmax): Likewise.
	(std::fmin): Likewise.
	(std::hypot): Likewise.
	(std::ilogb): Likewise.
	(std::lgamma): Likewise.
	(std::llrint): Likewise.
	(std::llround): Likewise.
	(std::log1p): Likewise.
	(std::log2): Likewise.
	(std::logb): Likewise.
	(std::lrint): Likewise.
	(std::lround): Likewise.
	(std::nearbyint): Likewise.
	(std::nextafter): Likewise.
	(std::nexttoward): Likewise.
	(std::remainder): Likewise.
	(std::remquo): Likewise.
	(std::rint): Likewise.
	(std::round): Likewise.
	(std::scalbln): Likewise.
	(std::scalbn): Likewise.
	(std::tgamma): Likewise.
	(std::trunc): Likewise.
	* include/tr1/cmath [_GLIBCXX_USE_C99_MATH_TR1 && __cplusplus >=
	201103L]: Reflect __CORRECT_ISO_CPP11_MATH_H_PROTO to
	__CORRECT_ISO_CPP11_MATH_H_PROTO_FP rename.

	fixincludes:
	* inclhack.def (solaris_math_12): New fix.
	(hpux11_fabsf): Replace bypass by *-hp-hpux11* mach selector.
	* fixincl.x: Regenerate.
	* tests/base/math.h [SOLARIS_MATH_12_CHECK]: New test.

From-SVN: r242671
2016-11-21 16:09:47 +00:00
Rainer Orth
97448adf21 Fix libsanitizer build on OS X 10.1[01], macOS 10.12 (PR sanitizer/78267)
fixincludes:
	PR sanitizer/78267
	* inclhack.def (darwin_availabilityinternal, darwin_os_trace_1)
	(darwin_os_trace_2, darwin_os_trace_3): New fixes.
	(hpux_stdint_least_fast): Remove spurious _EOFix_.
	* fixincl.x: Regenerate.
	* tests/bases/AvailabilityInternal.h: New file.
	* tests/bases/os/trace.h: New file.

2016-11-20  Jack Howarth  <howarth.at.gcc@gmail.com>

	libsanitizer:
	PR sanitizer/78267
	* sanitizer_common/sanitizer_mac.cc: Include <os/trace.h> only if
	compiler supports blocks extension.

From-SVN: r242633
2016-11-20 10:49:47 +00:00
John David Anglin
dffe3cc511 inclhack.def (hpux_longjmp): New fix.
* inclhack.def (hpux_longjmp): New fix.
	* fixincl.x: Regenerate.
	* tests/base/setjmp.h: New test file.

From-SVN: r239446
2016-08-13 18:08:15 +00:00
Bernd Edlinger
ef19a444b3 re PR bootstrap/72833 (error in fortran/parse.c (unexpected_eof) on Mac OS X 10.7)
2016-08-09  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR bootstrap/72833
        * fixincl.tpl (version-compare): Fix generation with autogen 5.18.
        * inclhack.def (darwin_longjmp_noreturn): New fix.
        * fixincl.x: Regenerated.
        * tests/base/i386/setjmp.h [DARWIN_LONGJMP_NORETURN_CHECK]: new test.

From-SVN: r239301
2016-08-09 17:58:00 +00:00
David Edelsohn
d4f076c9b8 inclhack.def (aix_stdlib_malloc): New fix.
* inclhack.def (aix_stdlib_malloc): New fix.
(aix_stdlib_realloc): New fix.
(aix_stdlib_calloc): New fix.
(aix_stdlib_valloc): New fix.
* fixincl.x: Regenerate.
* test/base/stdlib.h [AIX_STDLIB_MALLOC]: New test.
[AIX_STDLIB_REALLOC]: New test.
[AIX_STDLIB_CALLOC]: New test.
[AIX_STDLIB_VALLOC]: New test.

From-SVN: r237394
2016-06-13 14:59:43 -04:00
John David Anglin
f67cb8fe7b re PR target/68741 (FAIL: tr1/8_c_compatibility/cstdio/functions.cc (test for excess errors))
PR target/68741
	* inclhack.def (hpux_vsscanf): New fix.
	* fixincl.x: Regenerated.
	* tests/base/stdio.h [HPUX_VSSCANF_CHECK]: New test.

From-SVN: r233029
2016-02-01 00:54:22 +00:00
David Edelsohn
d8082c18c8 inclhack.def (aix_stdio_inline): New fix.
* inclhack.def (aix_stdio_inline): New fix.
        (aix_strtof_const): Limit to *-*-aix*.
        (aix_sysmachine): Same.
        (aix_syswait_2): Same.
        (aix_volatile):	Same.
        * fixincl.x: Regenerated.
        * test/base/stdio.h [AIX_STDIO_INLINE]: New test.

From-SVN: r226891
2015-08-14 07:17:29 -04:00
David Edelsohn
9846edffa4 inclhack.def (aix_externc): New fix.
* inclhack.def (aix_externc): New fix.
	(aix_externcpp[12]): New fix.
	* fixincl.x: Regenerate.
	* test/base/ctype.h [AIX_EXTERNC_CHECK]: New test.
	* test/base/sys/socket.h [AIX_EXTERNCPP[12]_CHECK]: New test.
	* test/base/fcntl.h: New file.

From-SVN: r223497
2015-05-21 13:25:00 -04:00
John David Anglin
f5ffa61d75 re PR libstdc++/65500 (FAIL: 17_intro/headers/c++2014/all_attributes.cc (test for excess errors))
PR libstdc++/65500
	* inclhack.def (hpux11_lwp_rwlock_valid): New fix.
	* fixincl.x: Regenerate.
	* tests/base/sys/pthread.h [HPUX11_LWP_RWLOCK_VALID_CHECK]: New test.

From-SVN: r221757
2015-03-28 17:27:22 +00:00
Daniel Richard G.
ba5b5e2431 Change stdlib.h base, not inttypes.h
From-SVN: r220761
2015-02-17 09:45:48 -05:00
Rainer Orth
9e27153139 Fix <iso/math_c99.h> signbit on Solaris
fixincludes:
	* inclhack.def (solaris_math_11): New fix.
	* fixincl.x: Regenerate.
	* tests/base/iso/math_c99.h [SOLARIS_MATH_11_CHECK]: New test.

	gcc/testsuite:
	* gcc.dg/signbit-sa.c: New test.

From-SVN: r220577
2015-02-10 10:09:49 +00:00
Alexander Ivchenko
5435176b31 inclhack.def (complier_h_tradcpp): Remove.
fixincludes/
	* inclhack.def (complier_h_tradcpp): Remove.
	* fixincl.x: Regenerate.
	* tests/base/linux/compiler.h: Remove.

From-SVN: r213853
2014-08-12 11:05:24 +00:00
Rainer Orth
d9f069ab4f Remove obsolete Solaris 9 support
libstdc++-v3:
	* configure.host: Remove solaris2.9 handling.
	Change os_include_dir to os/solaris/solaris2.10.
	* acinclude.m4 (ac_has_gthreads): Remove solaris2.9* handling.
	* crossconfig.m4: Remove *-solaris2.9 handling, simplify.
	* configure: Regenerate.
	* config/abi/post/solaris2.9: Remove.
	* config/os/solaris/solaris2.9: Rename to ...
	* config/os/solaris/solaris2.10: ... this.
	* config/os/solaris/solaris2.10/os_defines.h (CLOCK_MONOTONIC):
	Remove.

	* doc/xml/manual/configure.xml (--enable-libstdcxx-threads):
	Remove Solaris 9 reference.
	* doc/html/manual/configure.html: Regenerate.

	* testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc:
	Remove *-*-solaris2.9 xfail.
	* testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc:
	Likewise.

	* testsuite/ext/enc_filebuf/char/13598.cc: Remove *-*-solaris2.9
	xfail.

	libjava:
	* configure.ac (THREADLIBS, THREADSPEC): Remove *-*-solaris2.9
	handling.
	* configure: Regenerate.

	libgfortran:
	* config/fpu-387.h [__sun__ && __svr4__]: Remove SSE execution
	check.

	libgcc:
	* config/i386/crtfastmath.c (set_fast_math): Remove SSE execution
	check.
	* config/i386/sol2-unwind.h (x86_fallback_frame_state): Remove
	Solaris 9 single-threaded support.
	* config/sparc/sol2-unwind.h (sparc64_is_sighandler): Remove
	Solaris 9 single-threaded support.  Add call_user_handler code
	sequences.
	(sparc_is_sighandler): Likewise.

	libcpp:
	* lex.c: Remove Solaris 9 reference.

	gcc/testsuite:
	* gcc.c-torture/compile/pr28865.c: Remove dg-xfail-if.

	* gcc.dg/c99-stdint-6.c: Remove dg-options for *-*-solaris2.9.
	* gcc.dg/lto/20090210_0.c: Remove dg-extra-ld-options for
	*-*-solaris2.9.
	* gcc.dg/torture/pr47917.c: Remove dg-options for *-*-solaris2.9.
	* gcc.target/i386/pr22076.c: Remove i?86-*-solaris2.9 handling
	from dg-options.
	* gcc.target/i386/pr22152.c: Remove i?86-*-solaris2.9 handling
	from dg-additional-options.
	* gcc.target/i386/vect8-ret.c: Remove i?86-*-solaris2.9 handling
	from dg-options.

	* gcc.dg/vect/tree-vect.h (check_vect): Remove Solaris 9 SSE2
	execution check.
	* gcc.target/i386/sse-os-support.h [__sun__ && __svr4__]
	(sigill_hdlr): Remove.
	(sse_os_support) [__sun__ && __svr4__]: Remove SSE execution
	check.

	* gfortran.dg/erf_3.F90: Remove sparc*-*-solaris2.9* handling.
	* gfortran.dg/fmt_en.f90: Remove i?86-*-solaris2.9* handling.
	* gfortran.dg/round_4.f90: Remove *-*-solaris2.9* handling.

	* lib/target-supports.exp (add_options_for_tls): Remove
	*-*-solaris2.9* handling.

	gcc:
	* config.gcc (enable_obsolete): Remove *-*-solaris2.9*.
	(*-*-solaris2.[0-9] | *-*-solaris2.[0-9].*): Mark unsupported.
	(*-*-solaris2*): Simplify.
	(i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]*): Likewise.
	(i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]*): Remove
	*-*-solaris2.9* handling.

	* configure.ac (gcc_cv_as_hidden): Remove test for Solaris 9/x86
	as bug.
	(gcc_cv_ld_hidden): Remove *-*-solaris2.9* handling.
	(ld_tls_support): Remove i?86-*-solaris2.9, sparc*-*-solaris2.9
	handling, simplify.
	(gcc_cv_as_gstabs_flag): Remove workaround for Solaris 9/x86 as bug.
	* configure: Regenerate.

	* config/i386/sol2-9.h: Remove.

	* doc/install.texi (Specific, i?86-*-solaris2.9): Remove.
	(Specific, *-*-solaris2*): Mention Solaris 9 support removal.
	Remove Solaris 9 references.

	fixincludes:
	* inclhack.def (math_exception): Bypass on *-*-solaris2.1[0-9]*.
	(solaris_int_types): Remove.
	(solaris_longjmp_noreturn): Remove.
	(solaris_mutex_init_2): Remove.
	(solaris_once_init_2): Remove.
	(solaris_sys_va_list): Remove.
	* fixincl.x: Regenerate.
	* tests/base/iso/setjmp_iso.h: Remove.
	* tests/base/pthread.h [SOLARIS_MUTEX_INIT_2_CHECK]: Remove.
	[SOLARIS_ONCE_INIT_1_CHECK]: Remove wrapping done by
	solaris_once_init_2.
	[SOLARIS_ONCE_INIT_2_CHECK]: Remove.
	* tests/base/sys/int_types.h: Remove.
	* tests/base/sys/va_list.h: Remove.

	contrib:
	* config-list.mk (LIST): Remove sparc-sun-solaris2.9, i686-solaris2.9.

From-SVN: r209621
2014-04-22 12:30:59 +00:00
Bruce Korb
e1775b33f5 fenv.h on Ubuntu
plus fix the ordering of the patches:

* inclhack.def: many of the headers found under "bits/" are
  often stashed under architecture directories.  Apply fixes
  to those, too.  Also, re-ordered misordered fixes.
* tests/base/linux/vt.h: 80 columns in .def file limitation
* tests/base/iso/math_c99.h: adjust ordering
* tests/base/rtldef/string.h: likewise
* tests/base/bits/fenv.h: likewise
* tests/base/pthread.h: likewise

From-SVN: r205793
2013-12-08 21:55:46 +00:00
Richard Biener
3fc92e702e inclhack.def (suse_linux_vt_cxx): New fix for linux/vt.h being not compatible with C++.
2013-12-06  Richard Biener  <rguenther@suse.de>

	* inclhack.def (suse_linux_vt_cxx): New fix for linux/vt.h
	being not compatible with C++.
	* tests/base/linux/vt.h: New test.

From-SVN: r205729
2013-12-06 08:28:35 +00:00
David Edelsohn
a4f710a657 inclhack.def (aix_assert): New fix.
* inclhack.def (aix_assert): New fix.
        * fixincl.x: Regenerate.
	* tests/base/assert.h [AIX_ASSERT_CHECK]: New check.

From-SVN: r202192
2013-09-02 19:01:49 -04:00
Bruce Korb
cf3cfecd98 Remove sample result for CDEF_CPLUSPLUS hack
From-SVN: r200743
2013-07-07 13:57:21 +00:00
Kirill Yukhin
cf9eb1c0ce Added missed file from previous fixincludes commit.
fixincludes/tests/base/linux/compiler.h: New.

From-SVN: r200603
2013-07-02 12:52:34 +00:00
Rainer Orth
0a91f65deb solaris_pow_int_overload should use __cplusplus
* inclhack.def (solaris_pow_int_overload): Update comment.
	Change guard to match <cmath>.
	* fixincl.x: Regenerate.
	* tests/base/iso/math_iso.h [SOLARIS_POW_INT_OVERLOAD_CHECK]:
	Matching change.

From-SVN: r199003
2013-05-17 08:39:37 +00:00
David Edelsohn
0654e6be95 inclhack.def (aix_null): New.
* inclhack.def (aix_null): New.
        (void_null): Update replacement definition of NULL.
        * fixincl.x: Regenerate.
        * tests/base/curses.h: Update for new fix.

From-SVN: r198596
2013-05-04 10:49:59 -04:00
Alexandre Oliva
c851c76cdf inclhack.def (feraiseexcept_nosse_invalid): New.
* inclhack.def (feraiseexcept_nosse_invalid): New.
(feraiseexcept_nosse_divbyzero): Likewise.
* fixincl.x: Rebuilt.
* tests/base/bits/fenv.h: New.

From-SVN: r195226
2013-01-16 04:07:20 +00:00
Bruce Korb
7e41654136 Omit testing wrap and replacement fixes during testing.
This exposes a missing result and tests a test that got hidden before.

From-SVN: r192952
2012-10-29 16:44:34 +00:00