gcc/fixincludes/inclhack.def

5704 lines
169 KiB
Modula-2
Raw Normal View History

/* -*- Mode: C -*- */
autogen definitions fixincl;
/* Define all the fixes we know about for repairing damaged headers.
Please see the README before adding or changing entries in this file.
This is the sort command:
2002-10-27 17:02:29 +00:00
blocksort output=inclhack.sorted \
pattern='^/\*$' \
trailer='^/\*EOF\*[/]' \
input=inclhack.def \
key=$'hackname[ \t]*=[ \t]*(.*);'
Set up a debug test so we can make the templates emit special
code while debugging these fixes: */
#ifdef DEBUG
FIXINC_DEBUG = yes;
#endif
/* On AIX when _LARGE_FILES is defined stdio.h defines fopen to
* fopen64 etc. and this causes problems when building with g++
* because cstdio udefs everything from stdio.h, leaving us with
* ::fopen has not been declared errors. This fixes stdio.h to
* undef those defines and use __asm__ to alias the symbols if
* building with g++ and -D_LARGE_FILES
*/
fix = {
2008-06-07 22:19:45 +00:00
hackname = AAB_aix_stdio;
files = stdio.h;
select = "define fopen fopen64";
mach = "*-*-aix*";
test-text = ''; /* no way to test */
c_fix = wrap;
c_fix_arg = "";
c_fix_arg = <<- _EOArg_
#if defined __GNUG__ && defined _LARGE_FILES && defined __cplusplus
#define __need__aix_stdio_h_fix
#ifdef __need__aix_stdio_h_fix
#undef fseeko
#undef ftello
#undef fgetpos
#undef fsetpos
#undef fopen
#undef freopen
/* Alias the symbols using asm */
extern "C" {
extern int fgetpos(FILE *, fpos64_t *) __asm__("fgetpos64");
extern FILE *fopen(const char *, const char *) __asm__("fopen64");
extern FILE *freopen(const char *, const char *, FILE *) __asm__("freopen64");
extern int fseeko(FILE *, off64_t, int) __asm__("fseeko64");
extern int fsetpos(FILE *, const fpos64_t *) __asm__("fsetpos64");
extern off64_t ftello(FILE *) __asm__("ftello64");
}
#endif
#endif
_EOArg_;
};
/* On AIX when _LARGE_FILES is defined fcntl.h defines open to
* open64 and creat to creat64. This fixes fcntl.h to
* undef those defines and use __asm__ to alias the symbols if
* building with g++ and -D_LARGE_FILES
*/
fix = {
hackname = AAB_aix_fcntl;
files = fcntl.h;
select = "define open[ \t]open64";
mach = "*-*-aix*";
test-text = ''; /* no way to test */
c_fix = wrap;
c_fix_arg = "";
c_fix_arg = <<- _EOArg_
#if defined __GNUG__ && defined _LARGE_FILES && defined __cplusplus
#define __need__aix_fcntl_h_fix
#ifdef __need__aix_fcntl_h_fix
#undef open
#undef creat
#undef openat
/* Alias the symbols using asm */
extern "C" {
extern int open(const char *, int, ...) __asm__("open64");
extern int creat(const char *, mode_t) __asm__("creat64");
#if (_XOPEN_SOURCE >= 700)
extern int openat(int, const char *, int, ...) __asm__("open64at");
#endif
}
#endif
2008-06-07 22:19:45 +00:00
#endif
_EOArg_;
};
/*
* On Mac OS 10.3.9, the 'long double' functions are available in
* libSystem, but are not prototyped in math.h.
*/
fix = {
hackname = AAB_darwin7_9_long_double_funcs;
mach = "*-*-darwin7.9*";
files = architecture/ppc/math.h;
bypass = "powl";
replace = <<- _EndOfHeader_
/* This file prototypes the long double functions available on Mac OS
10.3.9. */
#ifndef __MATH__
# undef __APPLE_CC__
# define __APPLE_CC__ 1345
# include_next <architecture/ppc/math.h>
# undef __APPLE_CC__
# define __APPLE_CC__ 1
# ifndef __LIBMLDBL_COMPAT
# ifdef __LONG_DOUBLE_128__
# define __LIBMLDBL_COMPAT(sym) __asm("_" #sym "$LDBL128")
# else
# define __LIBMLDBL_COMPAT(sym)
# endif /* __LONG_DOUBLE_128__ */
# endif /* __LIBMLDBL_COMPAT */
# ifdef __cplusplus
extern "C" {
# endif
extern long double acosl( long double ) __LIBMLDBL_COMPAT(acosl);
extern long double asinl( long double ) __LIBMLDBL_COMPAT(asinl);
extern long double atanl( long double ) __LIBMLDBL_COMPAT(atanl);
extern long double atan2l( long double, long double ) __LIBMLDBL_COMPAT(atan2l);
extern long double cosl( long double ) __LIBMLDBL_COMPAT(cosl);
extern long double sinl( long double ) __LIBMLDBL_COMPAT(sinl);
extern long double tanl( long double ) __LIBMLDBL_COMPAT(tanl);
extern long double acoshl( long double ) __LIBMLDBL_COMPAT(acoshl);
extern long double asinhl( long double ) __LIBMLDBL_COMPAT(asinhl);
extern long double atanhl( long double ) __LIBMLDBL_COMPAT(atanhl);
extern long double coshl( long double ) __LIBMLDBL_COMPAT(coshl);
extern long double sinhl( long double ) __LIBMLDBL_COMPAT(sinhl);
extern long double tanhl( long double ) __LIBMLDBL_COMPAT(tanhl);
extern long double expl( long double ) __LIBMLDBL_COMPAT(expl);
extern long double exp2l( long double ) __LIBMLDBL_COMPAT(exp2l);
extern long double expm1l( long double ) __LIBMLDBL_COMPAT(expm1l);
extern long double logl( long double ) __LIBMLDBL_COMPAT(logl);
extern long double log10l( long double ) __LIBMLDBL_COMPAT(log10l);
extern long double log2l( long double ) __LIBMLDBL_COMPAT(log2l);
extern long double log1pl( long double ) __LIBMLDBL_COMPAT(log1pl);
extern long double logbl( long double ) __LIBMLDBL_COMPAT(logbl);
extern long double modfl( long double, long double * ) __LIBMLDBL_COMPAT(modfl);
extern long double ldexpl( long double, int ) __LIBMLDBL_COMPAT(ldexpl);
extern long double frexpl( long double, int * ) __LIBMLDBL_COMPAT(frexpl);
extern int ilogbl( long double ) __LIBMLDBL_COMPAT(ilogbl);
extern long double scalbnl( long double, int ) __LIBMLDBL_COMPAT(scalbnl);
extern long double scalblnl( long double, long int ) __LIBMLDBL_COMPAT(scalblnl);
extern long double fabsl( long double ) __LIBMLDBL_COMPAT(fabsl);
extern long double cbrtl( long double ) __LIBMLDBL_COMPAT(cbrtl);
extern long double hypotl( long double, long double ) __LIBMLDBL_COMPAT(hypotl);
extern long double powl( long double, long double ) __LIBMLDBL_COMPAT(powl);
extern long double sqrtl( long double ) __LIBMLDBL_COMPAT(sqrtl);
extern long double erfl( long double ) __LIBMLDBL_COMPAT(erfl);
extern long double erfcl( long double ) __LIBMLDBL_COMPAT(erfcl);
extern long double lgammal( long double ) __LIBMLDBL_COMPAT(lgammal);
extern long double tgammal( long double ) __LIBMLDBL_COMPAT(tgammal);
extern long double ceill( long double ) __LIBMLDBL_COMPAT(ceill);
extern long double floorl( long double ) __LIBMLDBL_COMPAT(floorl);
extern long double nearbyintl( long double ) __LIBMLDBL_COMPAT(nearbyintl);
extern long double rintl( long double ) __LIBMLDBL_COMPAT(rintl);
extern long int lrintl( long double ) __LIBMLDBL_COMPAT(lrintl);
extern long long int llrintl( long double ) __LIBMLDBL_COMPAT(llrintl);
extern long double roundl( long double ) __LIBMLDBL_COMPAT(roundl);
extern long int lroundl( long double ) __LIBMLDBL_COMPAT(lroundl);
extern long long int llroundl( long double ) __LIBMLDBL_COMPAT(llroundl);
extern long double truncl( long double ) __LIBMLDBL_COMPAT(truncl);
extern long double fmodl( long double, long double) __LIBMLDBL_COMPAT(fmodl);
extern long double remainderl( long double, long double ) __LIBMLDBL_COMPAT(remainderl);
extern long double remquol( long double, long double, int * ) __LIBMLDBL_COMPAT(remquol);
extern long double copysignl( long double, long double ) __LIBMLDBL_COMPAT(copysignl);
extern long double nanl( const char * ) __LIBMLDBL_COMPAT(nanl);
extern long double nextafterl( long double, long double ) __LIBMLDBL_COMPAT(nextafterl);
extern long double nexttowardl( long double, long double ) __LIBMLDBL_COMPAT(nexttowardl);
extern long double fdiml( long double, long double ) __LIBMLDBL_COMPAT(fdiml);
extern long double fmaxl( long double, long double ) __LIBMLDBL_COMPAT(fmaxl);
extern long double fminl( long double, long double ) __LIBMLDBL_COMPAT(fminl);
extern long double fmal( long double, long double, long double ) __LIBMLDBL_COMPAT(fmal);
# ifdef __cplusplus
}
# endif
#endif /* __MATH__ */
_EndOfHeader_;
};
/*
* SDKs for 10.13 and 10.14 omit the definitions for API_AVAILABLE where
* __attribute__((availability)) is not supported.
*/
fix = {
hackname = darwin_api_availability;
mach = "*-*-darwin*";
files = os/availability.h;
bypass = "__IPHONE_OS_VERSION_MIN_REQUIRED";
select =
" *#define __API_AVAILABLE.*\n"
" *#define __API_DEPRECATED.*\n"
" *#define __API_DEPRECATED_WITH_REPLACEMENT.*\n"
" *#define __API_UNAVAILABLE.*\n";
c_fix = format;
c_fix_arg =
" #define API_AVAILABLE(...)\n"
" #define API_DEPRECATED(...)\n"
" #define API_DEPRECATED_WITH_REPLACEMENT(...)\n"
" #define API_UNAVAILABLE(...)\n";
test_text =
"#define __API_AVAILABLE(...)\n"
"#define __API_DEPRECATED(...)\n"
"#define __API_DEPRECATED_WITH_REPLACEMENT(...)\n"
"#define __API_UNAVAILABLE(...)\n";
};
/*
fixtests.c (is_cxx_header): New fn, split out of double_slash_test. 1999-12-17 13:21 -0800 Zack Weinberg <zack@rabi.columbia.edu> * fixtests.c (is_cxx_header): New fn, split out of double_slash_test. (else_endif_label): Allow "#endif // comment" in C++ headers, as determined by is_cxx_header. * fixfixes.c (else_endif_label_fix): Update comment. * fixincl.c: Don't output VERB_PROGRESS lines if stdout is not a tty. * genfixes: Correct double thinko in commandline parsing. * hackshell.tpl: Generate correct sh syntax for bypass entries. * inclhack.def (all): Whenever an inserted preprocessor conditional is split over multiple lines, use double backslashes in this file so the fixed header will be readable. (AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h and add bypass entry for correct version of this header. (AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h. (AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h. (hpux8_bogus_inlines): New fix, split from... (ultrix_atof_param) ... here. (math_expression): Add bypass entry keyed to glibc comment indicating the problem has been dealt with; disable unnecessary sed operations; update commentary. (math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max, add select and bypass entries, simplify shell operation. (math_huge_val_ifndef): Split from math_gcc_ifndefs. (ip_missing_semi, rs6000_param, tinfo_cplusplus, ultrix_atof_param): Add select entry. (stdio_va_list, sunos_mather_decl): Add bypass entry. (systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the comments with the fixes they describe. * fixincl.x, fixincl.sh, inclhack.sh: Regen. From-SVN: r30999
1999-12-17 21:49:30 +00:00
* This fixes __FD_ZERO bug for linux 2.x.y (x <= 2 && y <= some n)
*/
fix = {
fixtests.c (is_cxx_header): New fn, split out of double_slash_test. 1999-12-17 13:21 -0800 Zack Weinberg <zack@rabi.columbia.edu> * fixtests.c (is_cxx_header): New fn, split out of double_slash_test. (else_endif_label): Allow "#endif // comment" in C++ headers, as determined by is_cxx_header. * fixfixes.c (else_endif_label_fix): Update comment. * fixincl.c: Don't output VERB_PROGRESS lines if stdout is not a tty. * genfixes: Correct double thinko in commandline parsing. * hackshell.tpl: Generate correct sh syntax for bypass entries. * inclhack.def (all): Whenever an inserted preprocessor conditional is split over multiple lines, use double backslashes in this file so the fixed header will be readable. (AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h and add bypass entry for correct version of this header. (AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h. (AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h. (hpux8_bogus_inlines): New fix, split from... (ultrix_atof_param) ... here. (math_expression): Add bypass entry keyed to glibc comment indicating the problem has been dealt with; disable unnecessary sed operations; update commentary. (math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max, add select and bypass entries, simplify shell operation. (math_huge_val_ifndef): Split from math_gcc_ifndefs. (ip_missing_semi, rs6000_param, tinfo_cplusplus, ultrix_atof_param): Add select entry. (stdio_va_list, sunos_mather_decl): Add bypass entry. (systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the comments with the fixes they describe. * fixincl.x, fixincl.sh, inclhack.sh: Regen. From-SVN: r30999
1999-12-17 21:49:30 +00:00
hackname = AAB_fd_zero_asm_posix_types_h;
files = asm/posix_types.h;
mach = 'i[34567]86-*-linux*';
fixtests.c (is_cxx_header): New fn, split out of double_slash_test. 1999-12-17 13:21 -0800 Zack Weinberg <zack@rabi.columbia.edu> * fixtests.c (is_cxx_header): New fn, split out of double_slash_test. (else_endif_label): Allow "#endif // comment" in C++ headers, as determined by is_cxx_header. * fixfixes.c (else_endif_label_fix): Update comment. * fixincl.c: Don't output VERB_PROGRESS lines if stdout is not a tty. * genfixes: Correct double thinko in commandline parsing. * hackshell.tpl: Generate correct sh syntax for bypass entries. * inclhack.def (all): Whenever an inserted preprocessor conditional is split over multiple lines, use double backslashes in this file so the fixed header will be readable. (AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h and add bypass entry for correct version of this header. (AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h. (AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h. (hpux8_bogus_inlines): New fix, split from... (ultrix_atof_param) ... here. (math_expression): Add bypass entry keyed to glibc comment indicating the problem has been dealt with; disable unnecessary sed operations; update commentary. (math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max, add select and bypass entries, simplify shell operation. (math_huge_val_ifndef): Split from math_gcc_ifndefs. (ip_missing_semi, rs6000_param, tinfo_cplusplus, ultrix_atof_param): Add select entry. (stdio_va_list, sunos_mather_decl): Add bypass entry. (systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the comments with the fixes they describe. * fixincl.x, fixincl.sh, inclhack.sh: Regen. From-SVN: r30999
1999-12-17 21:49:30 +00:00
bypass = '} while';
bypass = 'x86_64';
bypass = 'posix_types_64';
/*
* Define _POSIX_TYPES_H_WRAPPER at the end of the wrapper, not
* the start, so that if #include_next gets another instance of
* the wrapper, this will follow the #include_next chain until
* we arrive at the real <asm/posix_types.h>.
*/
2003-01-04 18:44:04 +00:00
replace = <<- _EndOfHeader_
/* This file fixes a bug in the __FD_ZERO macro
for older versions of the Linux kernel. */
#ifndef _POSIX_TYPES_H_WRAPPER
#include <features.h>
#include_next <asm/posix_types.h>
#if defined(__FD_ZERO) && !defined(__GLIBC__)
#undef __FD_ZERO
#define __FD_ZERO(fdsetp) \
do { \
int __d0, __d1; \
2008-06-07 22:19:45 +00:00
__asm__ __volatile__("cld ; rep ; stosl" \
: "=&c" (__d0), "=&D" (__d1) \
: "a" (0), "0" (__FDSET_LONGS), \
"1" ((__kernel_fd_set *) (fdsetp)) :"memory"); \
} while (0)
#endif
#define _POSIX_TYPES_H_WRAPPER
#endif /* _POSIX_TYPES_H_WRAPPER */
2003-01-04 18:44:04 +00:00
_EndOfHeader_;
};
/*
* This fixes __FD_ZERO bug for glibc-1.x
*/
fix = {
fixtests.c (is_cxx_header): New fn, split out of double_slash_test. 1999-12-17 13:21 -0800 Zack Weinberg <zack@rabi.columbia.edu> * fixtests.c (is_cxx_header): New fn, split out of double_slash_test. (else_endif_label): Allow "#endif // comment" in C++ headers, as determined by is_cxx_header. * fixfixes.c (else_endif_label_fix): Update comment. * fixincl.c: Don't output VERB_PROGRESS lines if stdout is not a tty. * genfixes: Correct double thinko in commandline parsing. * hackshell.tpl: Generate correct sh syntax for bypass entries. * inclhack.def (all): Whenever an inserted preprocessor conditional is split over multiple lines, use double backslashes in this file so the fixed header will be readable. (AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h and add bypass entry for correct version of this header. (AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h. (AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h. (hpux8_bogus_inlines): New fix, split from... (ultrix_atof_param) ... here. (math_expression): Add bypass entry keyed to glibc comment indicating the problem has been dealt with; disable unnecessary sed operations; update commentary. (math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max, add select and bypass entries, simplify shell operation. (math_huge_val_ifndef): Split from math_gcc_ifndefs. (ip_missing_semi, rs6000_param, tinfo_cplusplus, ultrix_atof_param): Add select entry. (stdio_va_list, sunos_mather_decl): Add bypass entry. (systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the comments with the fixes they describe. * fixincl.x, fixincl.sh, inclhack.sh: Regen. From-SVN: r30999
1999-12-17 21:49:30 +00:00
hackname = AAB_fd_zero_gnu_types_h;
files = gnu/types.h;
mach = 'i[34567]86-*-linux*';
/*
* Define _TYPES_H_WRAPPER at the end of the wrapper, not
* the start, so that if #include_next gets another instance of
* the wrapper, this will follow the #include_next chain until
* we arrive at the real <gnu/types.h>.
*/
2003-01-04 18:44:04 +00:00
replace = <<- _EndOfHeader_
/* This file fixes a bug in the __FD_ZERO macro present in glibc 1.x. */
#ifndef _TYPES_H_WRAPPER
#include <features.h>
#include_next <gnu/types.h>
#if defined(__FD_ZERO) && !defined(__GLIBC__)
#undef __FD_ZERO
# define __FD_ZERO(fdsetp) \
do { \
int __d0, __d1; \
__asm__ __volatile__("cld ; rep ; stosl" \
: "=&c" (__d0), "=&D" (__d1) \
: "a" (0), "0" (__FDSET_LONGS), \
"1" ((__fd_set *) (fdsetp)) :"memory"); \
2003-01-04 18:44:04 +00:00
} while (0)
#endif
2003-01-04 18:44:04 +00:00
#define _TYPES_H_WRAPPER
#endif /* _TYPES_H_WRAPPER */
_EndOfHeader_;
};
/*
* This fixes __FD_ZERO bug for glibc-2.0.x
*/
fix = {
fixtests.c (is_cxx_header): New fn, split out of double_slash_test. 1999-12-17 13:21 -0800 Zack Weinberg <zack@rabi.columbia.edu> * fixtests.c (is_cxx_header): New fn, split out of double_slash_test. (else_endif_label): Allow "#endif // comment" in C++ headers, as determined by is_cxx_header. * fixfixes.c (else_endif_label_fix): Update comment. * fixincl.c: Don't output VERB_PROGRESS lines if stdout is not a tty. * genfixes: Correct double thinko in commandline parsing. * hackshell.tpl: Generate correct sh syntax for bypass entries. * inclhack.def (all): Whenever an inserted preprocessor conditional is split over multiple lines, use double backslashes in this file so the fixed header will be readable. (AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h and add bypass entry for correct version of this header. (AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h. (AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h. (hpux8_bogus_inlines): New fix, split from... (ultrix_atof_param) ... here. (math_expression): Add bypass entry keyed to glibc comment indicating the problem has been dealt with; disable unnecessary sed operations; update commentary. (math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max, add select and bypass entries, simplify shell operation. (math_huge_val_ifndef): Split from math_gcc_ifndefs. (ip_missing_semi, rs6000_param, tinfo_cplusplus, ultrix_atof_param): Add select entry. (stdio_va_list, sunos_mather_decl): Add bypass entry. (systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the comments with the fixes they describe. * fixincl.x, fixincl.sh, inclhack.sh: Regen. From-SVN: r30999
1999-12-17 21:49:30 +00:00
hackname = AAB_fd_zero_selectbits_h;
files = selectbits.h;
mach = 'i[34567]86-*-linux*';
/*
* Define _SELECTBITS_H_WRAPPER at the end of the wrapper, not
* the start, so that if #include_next gets another instance of
* the wrapper, this will follow the #include_next chain until
* we arrive at the real <selectbits.h>.
*/
2003-01-04 18:44:04 +00:00
replace = <<- _EndOfHeader_
/* This file fixes a bug in the __FD_ZERO macro present in glibc 2.0.x. */
#ifndef _SELECTBITS_H_WRAPPER
#include <features.h>
#include_next <selectbits.h>
#if defined(__FD_ZERO) && defined(__GLIBC__) \\
&& defined(__GLIBC_MINOR__) && __GLIBC__ == 2 \\
&& __GLIBC_MINOR__ == 0
#undef __FD_ZERO
#define __FD_ZERO(fdsetp) \\
do { \\
int __d0, __d1; \\
__asm__ __volatile__ ("cld; rep; stosl" \\
fixtests.c (is_cxx_header): New fn, split out of double_slash_test. 1999-12-17 13:21 -0800 Zack Weinberg <zack@rabi.columbia.edu> * fixtests.c (is_cxx_header): New fn, split out of double_slash_test. (else_endif_label): Allow "#endif // comment" in C++ headers, as determined by is_cxx_header. * fixfixes.c (else_endif_label_fix): Update comment. * fixincl.c: Don't output VERB_PROGRESS lines if stdout is not a tty. * genfixes: Correct double thinko in commandline parsing. * hackshell.tpl: Generate correct sh syntax for bypass entries. * inclhack.def (all): Whenever an inserted preprocessor conditional is split over multiple lines, use double backslashes in this file so the fixed header will be readable. (AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h and add bypass entry for correct version of this header. (AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h. (AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h. (hpux8_bogus_inlines): New fix, split from... (ultrix_atof_param) ... here. (math_expression): Add bypass entry keyed to glibc comment indicating the problem has been dealt with; disable unnecessary sed operations; update commentary. (math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max, add select and bypass entries, simplify shell operation. (math_huge_val_ifndef): Split from math_gcc_ifndefs. (ip_missing_semi, rs6000_param, tinfo_cplusplus, ultrix_atof_param): Add select entry. (stdio_va_list, sunos_mather_decl): Add bypass entry. (systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the comments with the fixes they describe. * fixincl.x, fixincl.sh, inclhack.sh: Regen. From-SVN: r30999
1999-12-17 21:49:30 +00:00
: "=&c" (__d0), "=&D" (__d1) \\
: "a" (0), "0" (sizeof (__fd_set) \\
/ sizeof (__fd_mask)), \\
"1" ((__fd_mask *) (fdsetp)) \\
: "memory"); \\
2003-01-04 18:44:04 +00:00
} while (0)
#endif
2003-01-04 18:44:04 +00:00
#define _SELECTBITS_H_WRAPPER
#endif /* _SELECTBITS_H_WRAPPER */
_EndOfHeader_;
};
/*
* Solaris <sys/varargs.h> is a DDK (aka kernel-land) header providing
* the same interface as <stdarg.h>. No idea why they couldn't have just
* used the standard header.
*/
fix = {
hackname = AAB_solaris_sys_varargs_h;
files = "sys/varargs.h";
mach = '*-*-solaris*';
2003-01-04 18:44:04 +00:00
replace = <<- _EndOfHeader_
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
_EndOfHeader_;
};
/*
* Fix non-ANSI memcpy declaration that conflicts with gcc's builtin
* declaration on Sun OS 4.x. We must only fix this on Sun OS 4.x, because
* many other systems have similar text but correct versions of the file.
* To ensure only Sun's is fixed, we grep for a likely unique string.
* Fix also on sysV68 R3V7.1 (head/memory.h\t50.1\t )
*/
fix = {
hackname = AAB_sun_memcpy;
files = memory.h;
2003-01-04 18:44:04 +00:00
select = "/\\*\t@\\(#\\)"
"(head/memory.h\t50.1\t "
"|memory\\.h 1\\.[2-4] 8./../.. SMI; from S5R2 1\\.2\t)\\*/";
2003-01-04 18:44:04 +00:00
replace = <<- _EndOfHeader_
/* This file was generated by fixincludes */
#ifndef __memory_h__
#define __memory_h__
2003-01-04 18:44:04 +00:00
#ifdef __STDC__
extern void *memccpy();
extern void *memchr();
extern void *memcpy();
extern void *memset();
#else
extern char *memccpy();
extern char *memchr();
extern char *memcpy();
extern char *memset();
#endif /* __STDC__ */
2003-01-04 18:44:04 +00:00
extern int memcmp();
2003-01-04 18:44:04 +00:00
#endif /* __memory_h__ */
2008-06-07 22:19:45 +00:00
_EndOfHeader_;
};
2012-10-28 21:42:48 +00:00
/*
* Fix assert.h on VxWorks:
*/
fix = {
hackname = AAB_vxworks_assert;
files = assert.h;
mach = "*-*-vxworks*";
replace = <<- _EndOfHeader_
#ifdef _ASSERT_H
#undef _ASSERT_H
#undef assert
#endif
2012-10-28 21:42:48 +00:00
#define _ASSERT_H
#ifdef __cplusplus
extern "C" {
2012-10-28 21:42:48 +00:00
#endif
#if defined(__STDC__) || defined(__cplusplus)
extern void __assert (const char*);
#else
extern void __assert ();
#endif
#ifdef NDEBUG
#define assert(ign) ((void)0)
#else
#define ASSERT_STRINGIFY(str) ASSERT_STRINGIFY_HELPER(str)
#define ASSERT_STRINGIFY_HELPER(str) #str
#define assert(test) ((void) \
((test) ? ((void)0) : \
__assert("Assertion failed: " #test ", file " \
2012-10-28 21:42:48 +00:00
__FILE__ ", line " ASSERT_STRINGIFY(__LINE__) "\n")))
#endif
#ifdef __cplusplus
}
2012-10-28 21:42:48 +00:00
#endif
_EndOfHeader_;
};
/*
* Add needed include to regs.h (NOT the gcc header) on VxWorks
*/
fix = {
hackname = AAB_vxworks_regs_vxtypes;
files = regs.h;
mach = "*-*-vxworks*";
replace = <<- _EndOfHeader_
#ifndef _REGS_H
#define _REGS_H
/* regs.h depends on CPU_FAMILY being properly defined, which
is done by vxCpu.h. */
#include <types/vxCpu.h>
/* regs.h includes a CPU_FAMILY-specific header that requires
vxTypesOld.h to already have been included. Those headers
contain proper _ASMLANGUAGE guards around their typedefs,
but vxTypesOld.h itself does not. So we avoid including
vxTypesOld.h from assembly. */
#ifndef _ASMLANGUAGE
2012-10-28 21:42:48 +00:00
#include <types/vxTypesOld.h>
#endif
2012-10-28 21:42:48 +00:00
#include_next <arch/../regs.h>
#endif
_EndOfHeader_;
};
/*
* This hack makes makes unistd.h more POSIX-compliant on VxWorks
*/
fix = {
hackname = AAB_vxworks_unistd;
files = unistd.h;
mach = "*-*-vxworks*";
replace = <<- _EndOfHeader_
#ifndef _UNISTD_H
#define _UNISTD_H
#include_next <unistd.h>
#include <ioLib.h>
#ifndef STDIN_FILENO
#define STDIN_FILENO 0
#endif
#ifndef STDOUT_FILENO
#define STDOUT_FILENO 1
#endif
#ifndef STDERR_FILENO
#define STDERR_FILENO 2
#endif
#endif /* _UNISTD_H */
_EndOfHeader_;
};
/*
* assert.h on AIX 7 redefines static_assert as _Static_assert without
* protecting C++.
*/
fix = {
hackname = aix_assert;
mach = "*-*-aix*";
files = assert.h;
select = "#define[ \t]static_assert[ \t]_Static_assert";
c_fix = format;
c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
test_text = "#define static_assert _Static_assert";
};
/*
* complex.h on AIX 5 and AIX 6 define _Complex_I and I in terms of __I,
* which only is provided by AIX xlc C99.
*/
fix = {
hackname = aix_complex;
mach = "*-*-aix*";
files = complex.h;
select = "#define[ \t]_Complex_I[ \t]__I";
c_fix = format;
c_fix_arg = "#define _Complex_I (__extension__ 1.0iF)";
test_text = "#define _Complex_I __I\n";
};
/*
* On AIX some headers are not properly guarded by 'extern "C"'.
*/
fix = {
hackname = aix_externc;
mach = "*-*-aix*";
files = ctype.h;
files = fcntl.h;
files = langinfo.h;
files = ldfcn.h;
files = sys/localedef.h;
files = sys/times.h;
bypass = "extern \"C\"";
c_fix = wrap;
c_fix_arg = "#ifdef __cplusplus\n"
"extern \"C\" {\n"
"#endif\n";
c_fix_arg = "#ifdef __cplusplus\n"
"}\n"
"#endif\n";
test_text = "extern int __n_pthreads;\n";
};
/*
* On AIX sys/socket.h assumes C++.
*/
fix = {
hackname = aix_externcpp1;
mach = "*-*-aix*";
files = "sys/socket.h";
select = "#ifndef _KERNEL\n"
"#ifdef __cplusplus\n"
"extern \"C\" int naccept\\(int, struct sockaddr \\*, socklen_t \\*\\);";
c_fix = format;
c_fix_arg = "#ifndef _KERNEL\n"
"#ifdef __cplusplus\n"
"extern \"C++\" {\n"
"extern \"C\" int naccept(int, struct sockaddr *, socklen_t *);";
test_text = "#ifndef _KERNEL\n"
"#ifdef __cplusplus\n"
"extern \"C\" int naccept(int, struct sockaddr *, socklen_t *);";
};
fix = {
hackname = aix_externcpp2;
mach = "*-*-aix*";
files = "sys/socket.h";
select = "#endif /\\* COMPAT_43 \\*/\n"
"#else /\\* __cplusplus \\*/";
c_fix = format;
c_fix_arg = "#endif /* COMPAT_43 */\n"
"} /* extern \"C++\" */\n"
"#else /* __cplusplus */";
test_text = "#endif /* COMPAT_43 */\n"
"#else /* __cplusplus */";
};
/*
* inttypes.h STDC_FORMAT_MACROS
*/
fix = {
hackname = aix_inttypes;
mach = "*-*-aix*";
files = "sys/inttypes.h";
select = "#if !defined\\(__cplusplus\\) \\|\\| defined\\(__STDC_FORMAT_MACROS\\)";
c_fix = format;
c_fix_arg = "#if 1";
test_text = "#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)";
};
/*
* malloc.h on AIX6 uses XLC++ specific builtin syntax
*/
fix = {
hackname = aix_malloc;
mach = "*-*-aix*";
files = "malloc.h";
select = "#ifdef __cplusplus\n"
"extern \"C\" \\{\n"
"[ \t]extern \"builtin\" char \\*__alloca \\(size_t\\);";
c_fix = format;
c_fix_arg = "#if (defined(__cplusplus) && defined(__IBMCPP__))\n"
"extern \"C\" {\n"
"\textern \"builtin\" char *__alloca (size_t);";
test_text = "#ifdef __cplusplus\n"
"extern \"C\" {\n"
"\textern \"builtin\" char *__alloca (size_t);";
};
/*
* net/if_arp.h defines a variable fc_softc instead of adding a
* typedef for the struct on AIX 5.2, 5.3, 6.1 and 7.1
*/
fix = {
hackname = aix_net_if_arp;
mach = "*-*-aix*";
files = "net/if_arp.h";
select = "^struct fc_softc \\{";
c_fix = format;
c_fix_arg = "typedef struct _fc_softc {";
test_text = "struct fc_softc {\n int a;\n};";
};
/*
* Fix AIX definition of NULL for G++.
*/
fix = {
hackname = aix_null;
mach = "*-*-aix*";
files = curses.h, dbm.h, locale.h, stdio.h, stdlib.h, string.h,
time.h, unistd.h, wchar.h, sys/dir.h, sys/param.h, sys/types.h;
bypass = __null;
select = "#define[ \t]+NULL[ \t]+\\(*0L*\\)*";
c_fix = format;
c_fix_arg = <<- _EOFix_
#ifndef NULL
#ifdef __cplusplus
#ifdef __GNUG__
#define NULL __null
#else /* ! __GNUG__ */
#define NULL 0L
#endif /* __GNUG__ */
#else /* ! __cplusplus */
#define NULL ((void *)0)
#endif /* __cplusplus */
#endif /* !NULL */
_EOFix_;
test_text = "# define\tNULL \t(0L) /* typed NULL */";
};
/*
* pthread.h on AIX defines PTHREAD_ONCE_INIT, PTHREAD_MUTEX_INITIALIZER,
* PTHREAD_COND_INITIALIZER and PTHREAD_RWLOCK_INITIALIZER without enough
* braces.
*/
fix = {
hackname = aix_once_init_1;
mach = "*-*-aix*";
files = "pthread.h";
select = "#define[ \t]PTHREAD_ONCE_INIT \\\\\n"
"\\{ \\\\\n";
c_fix = format;
c_fix_arg = "#define PTHREAD_ONCE_INIT \\\n"
"{{ \\\n";
test_text = "#define PTHREAD_ONCE_INIT \\\\\n"
"{ \\\\\n";
};
fix = {
hackname = aix_once_init_2;
mach = "*-*-aix*";
files = "pthread.h";
select = "[ \t]0 \\\\\n"
"\\}\n";
c_fix = format;
c_fix_arg = " 0 \\\n"
"}}\n";
test_text = " 0 \\\\\n"
"}\n";
};
fix = {
hackname = aix_mutex_initializer_1;
mach = "*-*-aix*";
files = "pthread.h";
select = "#define[ \t]PTHREAD_MUTEX_INITIALIZER \\\\\n"
"\\{ \\\\\n";
c_fix = format;
c_fix_arg = "#define PTHREAD_MUTEX_INITIALIZER \\\n"
"{{ \\\n";
test_text = "#define PTHREAD_MUTEX_INITIALIZER \\\\\n"
"{ \\\\\n";
};
fix = {
hackname = aix_cond_initializer_1;
mach = "*-*-aix*";
files = "pthread.h";
select = "#define[ \t]PTHREAD_COND_INITIALIZER \\\\\n"
"\\{ \\\\\n";
c_fix = format;
c_fix_arg = "#define PTHREAD_COND_INITIALIZER \\\n"
"{{ \\\n";
test_text = "#define PTHREAD_COND_INITIALIZER \\\\\n"
"{ \\\\\n";
};
fix = {
hackname = aix_rwlock_initializer_1;
mach = "*-*-aix*";
files = "pthread.h";
select = "#define[ \t]PTHREAD_RWLOCK_INITIALIZER \\\\\n"
"\\{ \\\\\n";
c_fix = format;
c_fix_arg = "#define PTHREAD_RWLOCK_INITIALIZER \\\n"
"{{ \\\n";
test_text = "#define PTHREAD_RWLOCK_INITIALIZER \\\\\n"
"{ \\\\\n";
};
/* On AIX 'typedef struct {<stuff>} * physadr_t;' needs to give the struct a
name for linkage purposes. Fortunately it is on exactly one
line. */
fix = {
hackname = aix_physadr_t;
mach = "*-*-aix*";
files = sys/types.h;
select = "typedef[ \t]*struct[ \t]*([{][^}]*[}][ \t]*\\*[ \t]*physadr_t;)";
c_fix = format;
c_fix_arg = "typedef struct __physadr_s %1";
test_text = "typedef struct { random stuff } * physadr_t;";
};
/*
* pthread.h on AIX 4.3.3 tries to define a macro without whitspace
* which violates a requirement of ISO C.
*/
fix = {
hackname = aix_pthread;
files = "pthread.h";
select = "(#define[\t ][A-Za-z_0-9]+)(\\\\\n[^A-Za-z_0-9 \t\n(])";
c_fix = format;
c_fix_arg = "%1 %2";
test_text = "#define PTHREAD_MUTEX_INITIALIZER\\\\\n"
"{...init stuff...}";
};
/*
* AIX stdint.h fixes.
*/
fix = {
hackname = aix_stdint_1;
mach = "*-*-aix*";
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-aix.h, stdint.h;
select = "#define[ \t]UINT8_MAX[ \t]\\(255U\\)\n"
"#define[ \t]UINT16_MAX[ \t]\\(65535U\\)";
c_fix = format;
c_fix_arg = "#define UINT8_MAX (255)\n"
"#define UINT16_MAX (65535)";
test_text = "#define UINT8_MAX (255U)\n"
"#define UINT16_MAX (65535U)";
};
/*
* aix_stdint_2
*/
fix = {
hackname = aix_stdint_2;
mach = "*-*-aix*";
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-aix.h, stdint.h;
select = "#define[ \t]INTPTR_MIN[ \t]INT64_MIN\n"
"#define[ \t]INTPTR_MAX[ \t]INT64_MAX\n"
"#define[ \t]UINTPTR_MAX[ \t]UINT64_MAX\n"
"#else\n"
"#define[ \t]INTPTR_MIN[ \t]INT32_MIN\n"
"#define[ \t]INTPTR_MAX[ \t]INT32_MAX\n"
"#define[ \t]UINTPTR_MAX[ \t]UINT32_MAX";
c_fix = format;
c_fix_arg = "#define INTPTR_MIN (-INTPTR_MAX-1)\n"
"#define INTPTR_MAX 9223372036854775807L\n"
"#define UINTPTR_MAX 18446744073709551615UL\n"
"#else\n"
"#define INTPTR_MIN (-INTPTR_MAX-1)\n"
"#define INTPTR_MAX 2147483647L\n"
"#define UINTPTR_MAX 4294967295UL";
test_text = "#define INTPTR_MIN INT64_MIN\n"
"#define INTPTR_MAX INT64_MAX\n"
"#define UINTPTR_MAX UINT64_MAX\n"
"#else\n"
"#define INTPTR_MIN INT32_MIN\n"
"#define INTPTR_MAX INT32_MAX\n"
"#define UINTPTR_MAX UINT32_MAX";
};
/*
* aix_stdint_3
*/
fix = {
hackname = aix_stdint_3;
mach = "*-*-aix*";
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-aix.h, stdint.h;
select = "#define[ \t]PTRDIFF_MIN[ \t]INT64_MIN\n"
"#define[ \t]PTRDIFF_MAX[ \t]INT64_MAX\n"
"#else\n"
"#define[ \t]PTRDIFF_MIN[ \t]*INT32_MIN\n"
"#define[ \t]PTRDIFF_MAX[ \t]*INT32_MAX";
c_fix = format;
c_fix_arg = "#define PTRDIFF_MIN (-9223372036854775807L - 1)\n"
"#define PTRDIFF_MAX 9223372036854775807L\n"
"#else\n"
"#define PTRDIFF_MIN (-2147483647L - 1)\n"
"#define PTRDIFF_MAX 2147483647L";
test_text = "#define PTRDIFF_MIN INT64_MIN\n"
"#define PTRDIFF_MAX INT64_MAX\n"
"#else\n"
"#define PTRDIFF_MIN INT32_MIN\n"
"#define PTRDIFF_MAX INT32_MAX";
};
/*
* aix_stdint_4
*/
fix = {
hackname = aix_stdint_4;
mach = "*-*-aix*";
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-aix.h, stdint.h;
select = "#define[ \t]SIZE_MAX[ \t]UINT64_MAX\n"
"#else\n"
"#define[ \t]SIZE_MAX[ \t]*UINT32_MAX";
c_fix = format;
c_fix_arg = "#define SIZE_MAX 18446744073709551615UL\n"
"#else\n"
"#define SIZE_MAX 4294967295UL";
test_text = "#define SIZE_MAX UINT64_MAX\n"
"#else\n"
"#define SIZE_MAX UINT32_MAX";
};
/*
* aix_stdint_5
*/
fix = {
hackname = aix_stdint_5;
mach = "*-*-aix*";
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-aix.h, stdint.h;
select = "#define[ \t]UINT8_C\\(c\\)[ \t]__CONCAT__\\(c,U\\)\n"
"#define[ \t]UINT16_C\\(c\\)[ \t]__CONCAT__\\(c,U\\)";
c_fix = format;
c_fix_arg = "#define UINT8_C(c) c\n"
"#define UINT16_C(c) c";
test_text = "#define UINT8_C(c) __CONCAT__(c,U)\n"
"#define UINT16_C(c) __CONCAT__(c,U)";
};
/*
* stdio.h on AIX defines ferror, clearerr and feof as C++ inline, which
produces wrong code with G++.
*/
fix = {
hackname = aix_stdio_inline;
mach = "*-*-aix*";
files = stdio.h;
select = "#ifdef __cplusplus\\\n"
"}\\\n\\\n"
"#ifdef ferror\\\n";
c_fix = format;
c_fix_arg = "#ifdef __cplusplus\n"
"}\n"
"#endif\n\n"
"#if (defined(__cplusplus) && defined(__IBMCPP__))\n"
"#ifdef ferror\n";
test_text = "#ifdef __cplusplus\n}\n\n#ifdef ferror";
};
/*
* stdlib.h on AIX uses #define on malloc and friends.
*/
fix = {
hackname = aix_stdlib_malloc;
mach = "*-*-aix*";
files = stdlib.h;
select = "#define[ \t]+malloc[ \t]+__linux_malloc";
c_fix = format;
c_fix_arg = "extern void *malloc(size_t) __asm__(\"__linux_malloc\");";
test_text = "#define malloc __linux_malloc";
};
fix = {
hackname = aix_stdlib_realloc;
mach = "*-*-aix*";
files = stdlib.h;
select = "#define[ \t]+realloc[ \t]+__linux_realloc";
c_fix = format;
c_fix_arg = "extern void *realloc(void *, size_t) __asm__(\"__linux_realloc\");";
test_text = "#define realloc __linux_realloc";
};
fix = {
hackname = aix_stdlib_calloc;
mach = "*-*-aix*";
files = stdlib.h;
select = "#define[ \t]+calloc[ \t]+__linux_calloc";
c_fix = format;
c_fix_arg = "extern void *calloc(size_t, size_t) __asm__(\"__linux_calloc\");";
test_text = "#define calloc __linux_calloc";
};
fix = {
hackname = aix_stdlib_valloc;
mach = "*-*-aix*";
files = stdlib.h;
select = "#define[ \t]+valloc[ \t]+__linux_valloc";
c_fix = format;
c_fix_arg = "extern void *valloc(size_t) __asm__(\"__linux_valloc\");";
test_text = "#define valloc __linux_valloc";
};
fix = {
hackname = aix_stdlib_vec_malloc;
mach = "*-*-aix*";
files = stdlib.h;
select = "#define[ \t]+malloc[ \t]+vec_malloc";
c_fix = format;
c_fix_arg = "extern void *malloc(size_t) __asm__(\"vec_malloc\");";
test_text = "#define malloc vec_malloc";
};
fix = {
hackname = aix_stdlib_vec_calloc;
mach = "*-*-aix*";
files = stdlib.h;
select = "#define[ \t]+calloc[ \t]+vec_calloc";
c_fix = format;
c_fix_arg = "extern void *calloc(size_t, size_t) __asm__(\"vec_calloc\");";
test_text = "#define calloc vec_calloc";
};
/*
* stdlib.h on AIX 4.3 declares strtof() with a non-const first argument.
*/
fix = {
hackname = aix_strtof_const;
mach = "*-*-aix*";
files = stdlib.h;
select = "((extern[ \t]+)?float[ \t]+strtof)\\(char \\*, char \\*\\*\\);";
c_fix = format;
c_fix_arg = "%1(const char *, char **);";
test_text = "extern float strtof(char *, char **);";
};
/*
* sys/machine.h on AIX 4.3.3 puts whitespace between a \ and a newline
* in an otherwise harmless (and #ifed out) macro definition
*/
fix = {
hackname = aix_sysmachine;
mach = "*-*-aix*";
files = sys/machine.h;
select = "\\\\ +\n";
c_fix = format;
c_fix_arg = "\\\n";
test_text = "#define FOO \\\n"
" bar \\ \n baz \\ \n bat";
};
/*
* sys/wait.h on AIX 5.2 defines macros that have both signed and
* unsigned types in conditional expressions.
*/
fix = {
hackname = aix_syswait_2;
mach = "*-*-aix*";
files = sys/wait.h;
select = '\? (\(\(\(\(unsigned[^)]*\)[^)]*\) >> [^)]*\) \& 0xff\) : -1)';
c_fix = format;
c_fix_arg = "? (int)%1";
test_text = "#define WSTOPSIG(__x) "
"(int)(WIFSTOPPED(__x) ? ((((unsigned int)__x) >> 8) & 0xff) : -1)";
};
/*
* sys/signal.h on some versions of AIX uses volatile in the typedef of
* sig_atomic_t, which causes gcc to generate a warning about duplicate
* volatile when a sig_atomic_t variable is declared volatile, as
* required by ANSI C.
*/
fix = {
hackname = aix_volatile;
mach = "*-*-aix*";
files = sys/signal.h;
select = "typedef volatile int sig_atomic_t";
c_fix = format;
c_fix_arg = "typedef int sig_atomic_t";
test_text = "typedef volatile int sig_atomic_t;";
};
/*
* AIX unistd.h defines a static function with an empty parameter list.
*/
fix = {
hackname = aix_unistd;
mach = "*-*-aix*";
files = unistd.h;
select = "[ \t]+static[ \t]+int[ \t]+getdtablesize\\(\\)";
c_fix = format;
c_fix_arg = "\tstatic int\t\tgetdtablesize(void)";
test_text = " static int getdtablesize()";
};
/*
* Fix __assert declaration in assert.h on Alpha OSF/1.
*/
fix = {
hackname = alpha___assert;
files = "assert.h";
select = '__assert\(char \*, char \*, int\)';
c_fix = format;
c_fix_arg = "__assert(const char *, const char *, int)";
test_text = 'extern void __assert(char *, char *, int);';
};
/*
* Fix assert macro in assert.h on Alpha OSF/1.
* The superfluous int cast breaks C++.
*/
fix = {
hackname = alpha_assert;
files = "assert.h";
select = "(#[ \t]*" 'define assert\(EX\).*)\(\(int\) \(EX\)\)';
c_fix = format;
c_fix_arg = "%1(EX)";
test_text = '#define assert(EX) (((int) (EX)) ? (void)0 '
': __assert(#EX, __FILE__, __LINE__))';
};
/*
* Fix getopt declarations in stdio.h and stdlib.h on Alpha OSF/1 and AIX.
*/
fix = {
hackname = alpha_getopt;
files = "stdio.h";
files = "stdlib.h";
select = 'getopt\(int, char \*\[\], *char \*\)';
c_fix = format;
c_fix_arg = "getopt(int, char *const[], const char *)";
test_text = 'extern int getopt(int, char *[], char *);';
};
/*
* Fix missing semicolon on Alpha OSF/4 in <net/if.h>
*/
fix = {
hackname = alpha_if_semicolon;
files = net/if.h;
select = "struct[ \t]+sockaddr[ \t]+vmif_paddr[ \t]+/\\*";
c_fix = format;
c_fix_arg = "struct sockaddr vmif_paddr;\t/*";
test_text = ' struct sockaddr vmif_paddr /* protocol address */';
};
/*
* Remove erroneous parentheses in sym.h on Alpha OSF/1.
*/
fix = {
hackname = alpha_parens;
files = sym.h;
select = '#ifndef\(__mips64\)';
c_fix = format;
c_fix_arg = "#ifndef __mips64";
test_text = "#ifndef(__mips64) /* bogus */\nextern int foo;\n#endif";
};
/*
* Fix return value of sbrk in unistd.h on Alpha OSF/1 V2.0
* And OpenBSD.
*/
fix = {
hackname = alpha_sbrk;
files = unistd.h;
select = "char[ \t]*\\*[\t ]*sbrk[ \t]*\\(";
c_fix = format;
c_fix_arg = "void *sbrk(";
test_text = "extern char* sbrk(ptrdiff_t increment);";
};
/*
* For C++, avoid any typedef or macro definition of bool,
* and use the built in type instead.
* HP/UX 10.20 also has it in curses_colr/curses.h.
*/
fix = {
hackname = avoid_bool_define;
files = curses.h;
files = curses_colr/curses.h;
files = term.h;
files = tinfo.h;
select = "#[ \t]*define[ \t]+bool[ \t]";
bypass = "__cplusplus";
c_fix = format;
c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
c_fix_arg = "^[ \t]*#[ \t]*define[ \t]+bool[ \t].*";
test_text = "# define bool\t char \n";
};
/*
* avoid_bool_type
*/
fix = {
hackname = avoid_bool_type;
files = curses.h;
files = curses_colr/curses.h;
files = term.h;
files = tinfo.h;
select = "^[ \t]*typedef[ \t].*[ \t]bool[ \t]*;";
bypass = "__cplusplus";
c_fix = format;
c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
test_text = "typedef unsigned int\tbool \t; /* bool\n type */";
};
/*
* For C++, avoid any typedef definition of wchar_t,
* and use the built in type instead.
* Don't do this for headers that are smart enough to do the right
* thing (recent [n]curses.h and Xlib.h).
* Don't do it for <linux/nls.h> which is never used from C++ anyway,
* and will be broken by the edit.
*/
fix = {
hackname = avoid_wchar_t_type;
select = "^[ \t]*typedef[ \t].*[ \t]wchar_t[ \t]*;";
bypass = "__cplusplus";
bypass = "_LINUX_NLS_H";
bypass = "XFree86: xc/lib/X11/Xlib\\.h";
c_fix = format;
c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
test_text = "typedef unsigned short\twchar_t \t; /* wchar_t\n type */";
};
/*
* Fix `typedef struct term;' on hppa1.1-hp-hpux9.
*/
fix = {
hackname = bad_struct_term;
files = curses.h;
select = "^[ \t]*typedef[ \t]+struct[ \t]+term[ \t]*;";
c_fix = format;
c_fix_arg = "struct term;";
test_text = 'typedef struct term;';
};
/*
* Fix one other error in this file:
* a mismatched quote not inside a C comment.
*/
fix = {
hackname = badquote;
files = sundev/vuid_event.h;
select = "doesn't";
c_fix = format;
c_fix_arg = "does not";
test_text = "/* doesn't have matched single quotes */";
};
/*
* check for broken assert.h that needs stdio.h
*/
fix = {
hackname = broken_assert_stdio;
files = assert.h;
select = stderr;
bypass = "include.*stdio\\.h";
c_fix = wrap;
c_fix_arg = "#include <stdio.h>\n";
test_text = "extern FILE* stderr;";
};
/*
* check for broken assert.h that needs stdlib.h
*/
fix = {
hackname = broken_assert_stdlib;
files = assert.h;
select = 'exit *\(|abort *\(';
bypass = "include.*stdlib\\.h";
c_fix = wrap;
c_fix_arg = "#ifdef __cplusplus\n"
"#include <stdlib.h>\n"
"#endif\n";
test_text = "extern void exit ( int );";
};
/*
* Remove `extern double cabs' declarations from math.h.
* This conflicts with C99. Discovered on AIX.
* Darwin hides its broken cabs in architecture-specific subdirs.
*/
fix = {
hackname = broken_cabs;
files = math.h, "architecture/*/math.h";
select = "^extern[ \t]+double[ \t]+cabs";
sed = "s/^extern[ \t]*double[ \t]*cabs[ \t]*\([^\\\)]*\);//";
sed = "s/^extern[ \t]*long[ \t]*double[ \t]*cabsl[ \t]*\([^\\\)]*\);//";
test_text = "#ifdef __STDC__\n"
"extern double cabs(struct dbl_hypot);\n"
"#else\n"
"extern double cabs();\n"
"#endif\n"
Remove obsolete IRIX 6.5 support libstdc++-v3: * configure.host (irix6.5*): Remove. * config/os/irix: Remove. * config/io/basic_file_stdio.cc (__basic_file<char>::showmanyc()) [_GLIBCXX_FIONREAD_TAKES_OFF_T]: Remove. * doc/xml/faq.xml: Remove IRIX reference. * doc/xml/manual/using.xml (Finding Dynamic or Shared Libraries): Remove IRIX example. * testsuite/20_util/shared_ptr/thread/default_weaktoshared.cc: Remove mips-sgi-irix6* handling. * testsuite/20_util/shared_ptr/thread/mutex_weaktoshared.cc: Likewise. * testsuite/21_strings/basic_string/pthread18185.cc: Likewise. * testsuite/21_strings/basic_string/pthread4.cc: Likewise. * testsuite/22_locale/locale/cons/12658_thread-1.cc: Likewise. * testsuite/22_locale/locale/cons/12658_thread-2.cc: Likewise. * testsuite/23_containers/list/pthread1.cc: Likewise. * testsuite/23_containers/list/pthread5.cc: Likewise. * testsuite/23_containers/map/pthread6.cc: Likewise. * testsuite/23_containers/vector/debug/multithreaded_swap.cc: Likewise. * testsuite/27_io/basic_ofstream/pthread2.cc: Likewise. * testsuite/27_io/basic_ostringstream/pthread3.cc: Likewise. * testsuite/30_threads/async/42819.cc: Likewise. * testsuite/30_threads/async/49668.cc: Likewise. * testsuite/30_threads/async/any.cc: Likewise. * testsuite/30_threads/async/async.cc: Likewise. * testsuite/30_threads/async/launch.cc: Likewise. * testsuite/30_threads/async/sync.cc: Likewise. * testsuite/30_threads/call_once/39909.cc: Likewise. * testsuite/30_threads/call_once/49668.cc: Likewise. * testsuite/30_threads/call_once/call_once1.cc: Likewise. * testsuite/30_threads/condition_variable/cons/1.cc: Likewise. * testsuite/30_threads/condition_variable/members/1.cc: Likewise. * testsuite/30_threads/condition_variable/members/2.cc: Likewise. * testsuite/30_threads/condition_variable/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/condition_variable_any/50862.cc: Likewise. * testsuite/30_threads/condition_variable_any/cons/1.cc: Likewise. * testsuite/30_threads/condition_variable_any/members/1.cc: Likewise. * testsuite/30_threads/condition_variable_any/members/2.cc: Likewise. * testsuite/30_threads/future/cons/move.cc: Likewise. * testsuite/30_threads/future/members/45133.cc: Likewise. * testsuite/30_threads/future/members/get.cc: Likewise. * testsuite/30_threads/future/members/get2.cc: Likewise. * testsuite/30_threads/future/members/share.cc: Likewise. * testsuite/30_threads/future/members/valid.cc: Likewise. * testsuite/30_threads/future/members/wait.cc: Likewise. * testsuite/30_threads/future/members/wait_for.cc: Likewise. * testsuite/30_threads/future/members/wait_until.cc: Likewise. * testsuite/30_threads/lock/1.cc: Likewise. * testsuite/30_threads/lock/2.cc: Likewise. * testsuite/30_threads/lock/3.cc: Likewise. * testsuite/30_threads/lock/4.cc: Likewise. * testsuite/30_threads/lock_guard/cons/1.cc: Likewise. * testsuite/30_threads/mutex/cons/1.cc: Likewise. * testsuite/30_threads/mutex/dest/destructor_locked.cc: Likewise. * testsuite/30_threads/mutex/lock/1.cc: Likewise. * testsuite/30_threads/mutex/native_handle/1.cc: Likewise. * testsuite/30_threads/mutex/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/mutex/try_lock/1.cc: Likewise. * testsuite/30_threads/mutex/try_lock/2.cc: Likewise. * testsuite/30_threads/mutex/unlock/1.cc: Likewise. * testsuite/30_threads/packaged_task/49668.cc: Likewise. * testsuite/30_threads/packaged_task/cons/1.cc: Likewise. * testsuite/30_threads/packaged_task/cons/2.cc: Likewise. * testsuite/30_threads/packaged_task/cons/3.cc: Likewise. * testsuite/30_threads/packaged_task/cons/alloc.cc: Likewise. * testsuite/30_threads/packaged_task/cons/move.cc: Likewise. * testsuite/30_threads/packaged_task/cons/move_assign.cc: Likewise. * testsuite/30_threads/packaged_task/members/get_future.cc: Likewise. * testsuite/30_threads/packaged_task/members/get_future2.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke2.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke3.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke4.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke5.cc: Likewise. * testsuite/30_threads/packaged_task/members/reset.cc: Likewise. * testsuite/30_threads/packaged_task/members/reset2.cc: Likewise. * testsuite/30_threads/packaged_task/members/swap.cc: Likewise. * testsuite/30_threads/packaged_task/members/valid.cc: Likewise. * testsuite/30_threads/promise/cons/1.cc: Likewise. * testsuite/30_threads/promise/cons/alloc.cc: Likewise. * testsuite/30_threads/promise/cons/move.cc: Likewise. * testsuite/30_threads/promise/cons/move_assign.cc: Likewise. * testsuite/30_threads/promise/members/get_future.cc: Likewise. * testsuite/30_threads/promise/members/get_future2.cc: Likewise. * testsuite/30_threads/promise/members/set_exception.cc: Likewise. * testsuite/30_threads/promise/members/set_exception2.cc: Likewise. * testsuite/30_threads/promise/members/set_value.cc: Likewise. * testsuite/30_threads/promise/members/set_value2.cc: Likewise. * testsuite/30_threads/promise/members/set_value3.cc: Likewise. * testsuite/30_threads/promise/members/swap.cc: Likewise. * testsuite/30_threads/recursive_mutex/cons/1.cc: Likewise. * testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc: Likewise. * testsuite/30_threads/recursive_mutex/lock/1.cc: Likewise. * testsuite/30_threads/recursive_mutex/native_handle/1.cc: Likewise. * testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/recursive_mutex/try_lock/1.cc: Likewise. * testsuite/30_threads/recursive_mutex/try_lock/2.cc: Likewise. * testsuite/30_threads/recursive_mutex/unlock/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/cons/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/lock/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/lock/2.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/unlock/1.cc: Likewise. * testsuite/30_threads/shared_future/cons/move.cc: Likewise. * testsuite/30_threads/shared_future/members/45133.cc: Likewise. * testsuite/30_threads/shared_future/members/get.cc: Likewise. * testsuite/30_threads/shared_future/members/get2.cc: Likewise. * testsuite/30_threads/shared_future/members/valid.cc: Likewise. * testsuite/30_threads/shared_future/members/wait.cc: Likewise. * testsuite/30_threads/shared_future/members/wait_for.cc: Likewise. * testsuite/30_threads/shared_future/members/wait_until.cc: Likewise. * testsuite/30_threads/this_thread/1.cc: Likewise. * testsuite/30_threads/this_thread/2.cc: Likewise. * testsuite/30_threads/this_thread/3.cc: Likewise. * testsuite/30_threads/this_thread/4.cc: Likewise. * testsuite/30_threads/thread/cons/1.cc: Likewise. * testsuite/30_threads/thread/cons/2.cc: Likewise. * testsuite/30_threads/thread/cons/3.cc: Likewise. * testsuite/30_threads/thread/cons/4.cc: Likewise. * testsuite/30_threads/thread/cons/49668.cc: Likewise. * testsuite/30_threads/thread/cons/5.cc: Likewise. * testsuite/30_threads/thread/cons/6.cc: Likewise. * testsuite/30_threads/thread/cons/7.cc: Likewise. * testsuite/30_threads/thread/cons/8.cc: Likewise. * testsuite/30_threads/thread/cons/9.cc: Likewise. * testsuite/30_threads/thread/cons/moveable.cc: Likewise. * testsuite/30_threads/thread/members/1.cc: Likewise. * testsuite/30_threads/thread/members/2.cc: Likewise. * testsuite/30_threads/thread/members/3.cc: Likewise. * testsuite/30_threads/thread/members/4.cc: Likewise. * testsuite/30_threads/thread/members/5.cc: Likewise. * testsuite/30_threads/thread/members/hardware_concurrency.cc: Likewise. * testsuite/30_threads/thread/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/thread/swap/1.cc: Likewise. * testsuite/30_threads/timed_mutex/cons/1.cc: Likewise. * testsuite/30_threads/timed_mutex/dest/destructor_locked.cc: Likewise. * testsuite/30_threads/timed_mutex/lock/1.cc: Likewise. * testsuite/30_threads/timed_mutex/native_handle/1.cc: Likewise. * testsuite/30_threads/timed_mutex/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock/1.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock/2.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_for/1.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_for/2.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_for/3.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_until/1.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_until/2.cc: Likewise. * testsuite/30_threads/timed_mutex/unlock/1.cc: Likewise. * testsuite/30_threads/try_lock/1.cc: Likewise. * testsuite/30_threads/try_lock/2.cc: Likewise. * testsuite/30_threads/try_lock/3.cc: Likewise. * testsuite/30_threads/try_lock/4.cc: Likewise. * testsuite/30_threads/unique_lock/cons/1.cc: Likewise. * testsuite/30_threads/unique_lock/cons/2.cc: Likewise. * testsuite/30_threads/unique_lock/cons/3.cc: Likewise. * testsuite/30_threads/unique_lock/cons/4.cc: Likewise. * testsuite/30_threads/unique_lock/cons/5.cc: Likewise. * testsuite/30_threads/unique_lock/cons/6.cc: Likewise. * testsuite/30_threads/unique_lock/locking/1.cc: Likewise. * testsuite/30_threads/unique_lock/locking/2.cc: Likewise. * testsuite/30_threads/unique_lock/locking/3.cc: Likewise. * testsuite/30_threads/unique_lock/locking/4.cc: Likewise. * testsuite/30_threads/unique_lock/modifiers/1.cc: Likewise. * testsuite/30_threads/unique_lock/modifiers/2.cc: Likewise. * testsuite/ext/rope/pthread7-rope.cc: Likewise. * testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc: Likewise. * testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc: Likewise. * testsuite/23_containers/vector/capacity/resize/1.cc: Remove dg-options for mips*-*-irix6*. * testsuite/27_io/ios_base/storage/1.cc: Likewise. * testsuite/27_io/ios_base/storage/2.cc: Likewise. * testsuite/27_io/ios_base/storage/3.cc: Likewise. * testsuite/lib/libstdc++.exp (v3-build_support): Remove IRIX 6 workaround. libjava: * configure.ac (libgcj_cv_exidx): Remove IRIX 6 ld workaround. (mips-sgi-irix6*): Remove. (mips-sgi-irix*): Remove. (AC_CHECK_HEADERS): Remove bstring.h. * configure: Regenerate. * include/config.h.in: Regenerate. * configure.host (mips-sgi-irix6*): Remove. * include/posix-signal.h [__sgi__]: Remove. * gnu/java/net/natPlainDatagramSocketImplPosix.cc [HAVE_BSTRING_H]: Remove. * gnu/java/net/natPlainDatagramSocketImplWin32.cc: Likewise. * gnu/java/net/natPlainSocketImplPosix.cc: Likewise. libitm: * configure.tgt (*-*-irix6*): Remove. libgomp: * configure.tgt (mips-sgi-irix6*): Remove. libgfortran: * intrinsics/c99_functions.c [__sgi__ && !HAVE_COMPLEX_H]: Remove. libgcc: * config.host (mips-sgi-irix6.5*): Remove. * config/mips/irix-crti.S: Remove. * config/mips/irix-crtn.S: Remove. * config/mips/irix6-unwind.h: Remove. * config/mips/t-irix6: Remove. * config/mips/t-slibgcc-irix: Remove. gnattools: * configure.ac (mips-sgi-irix*): Remove. * configure: Regenerate. gcc/testsuite: * g++.dg/other/anon5.C: Don't skip on mips-sgi-irix*. * g++.dg/tree-prof/partition1.C: Likewise. * g++.dg/tree-prof/partition2.C: Likewise. * g++.old-deja/g++.other/init19.C: Remove mips-sgi-irix* handling. * gcc.c-torture/compile/labels-3.c: Remove dg-options. * gcc.c-torture/execute/20010724-1.c: Remove. * gcc.c-torture/execute/20010724-1.x: Remove. * gcc.c-torture/execute/20040208-2.c: Remove. * gcc.c-torture/execute/20040208-2.x: Remove. * gcc.c-torture/execute/ieee/20000320-1.c [__mips__ && __sgi__]: Remove. (main) [__mips__ && __sgi__]: Remove. * gcc.c-torture/execute/ieee/copysign1.c: Remove IRIX reference. * gcc.c-torture/execute/ieee/copysign2.c: Likewise. * gcc.c-torture/execute/ieee/mul-subnormal-single-1.x: Remove mips-sgi-irix6* handling. * gcc.dg/cpp/assert4.c [__mips__]: Remove __sgi__, sgi. * gcc.dg/torture/20090618-1.c: Don't skip on mips-sgi-irix*. * gcc.dg/torture/builtin-frexp-1.c: Remove mips*-*-irix6* handling. * gcc.dg/torture/builtin-logb-1.c: Likewise. * gcc.dg/torture/pr47917.c: Remove mips-sgi-irix6.5 handling. * gcc.dg/tree-ssa/ssa-store-ccp-3.c: Don't skip on mips*-*-irix*. * gcc.misc-tests/linkage.exp: Remove mips-sgi-irix6* handling. * gcc.target/mips/args-1.c [!__sgi__]: Remove. * gcc.target/mips/interrupt_handler-2.c: Don't skip on mips-sgi-irix6*. * gcc.target/mips/interrupt_handler-3.c: Likewise. * gcc.target/mips/save-restore-1.c: Don't skip on mips-sgi-irix6*. * gcc.target/mips/save-restore-3.c: Likewise. * gcc.target/mips/save-restore-4.c: Likewise. * gcc.target/mips/save-restore-5.c: Likewise. * gfortran.dg/g77/cabs.f: Don't xfail on mips-sgi-irix6*. * lib/prune.exp (prune_gcc_output): Remove pruning of IRIX 6 ld messages. * lib/target-libpath.exp (set_ld_library_path_env_vars): Remove IRIX 6 handling. (restore_ld_library_path_env_vars): Likewise. * lib/target-supports.exp (check_profiling_available): Remove mips*-*-irix* handling. (check_ascii_locale_available): Remove mips-sgi-irix* handling. (add_options_for_c99_runtime): Remove mips-sgi-irix6.5* handling. * objc.dg/stabs-1.m: Don't xfail on mips-sgi-irix6.5. gcc/ada: * gcc-interface/Makefile.in (mips-sgi-irix6*): Remove. * a-intnam-irix.ads, mlib-tgt-specific-irix.adb, s-intman-irix.adb, s-mastop-irix.adb, s-osinte-irix.adb, s-osinte-irix.ads, s-proinf-irix-athread.adb, s-proinf-irix-athread.ads, s-taprop-irix.adb, s-tasinf-irix.ads, system-irix-n32.ads, system-irix-n64.ads, system-irix-o32.ads: Remove. * adaint.c [__mips && __sgi]: Remove. (__gnat_number_of_cpus) [__mips && __sgi]: Remove. [IS_CROSS && !(__mips && __sgi)]: Remove. * adaint.h [sgi && _LFAPI]: Remove. * cstreams.c (__gnat_full_name) [sgi]: Remove. * env.c (__gnat_unsetenv) [__mips && __sgi]: Remove. (__gnat_clearenv) [__mips && __sgi]: Remove. * errno.c (_SGI_MP_SOURCE): Remove. * gsocket.h [sgi]: Remove. * init.c: Remove IRIX reference. [sgi]: Remove. * link.c [sgi]: Remove. * s-oscons-tmplt.c [__mips && __sgi] (IOV_MAX): Don't define. (main) [__mips && __sgi] (MAX_tv_sec): Don't define. (CLOCK_SGI_FAST, CLOCK_SGI_CYCLE): Remove. * sysdep.c [sgi]: Remove. (getc_immediate_common) [sgi]: Remove. (__gnat_localtime_tzoff) [sgi]: Remove. * terminals.c [__mips && __sgi] (IRIX): Don't define. [IRIX] (USE_GETPTY): Don't define. (allocate_pty_desc) [USE_GETPTY]: Remove. * g-traceb.ads: Remove IRIX reference. * g-trasym.ads: Likewise. * memtrack.adb: Likewise. * s-interr-sigaction.adb: Likewise. * gnat_rm.texi (Implementation Advice): Remove SGI info. (Implementation Defined Characteristics): Likewise. * gnat_ugn.texi (Summary of Run-Time Configurations, mips-irix): Remove. (Irix-Specific Considerations): Remove. gcc/cp: * Make-lang.in (doc/g++.1): Remove IRIX 6.5 reference. gcc: * config.gcc (enable_obsolete): Remove mips-sgi-irix6.5. (mips-sgi-irix6.5*): Remove. * config.host (mips-sgi-irix*): Remove. * configure.ac (enable_fixed_point): Remove mips*-sgi-irix*. (set_have_as_tls): Remove *-*-irix6*. (gcc_cv_ld_static_dynamic): Remove mips-sgi-irix6*. * configure: Regenerate. * config/mips/iris6.h: Remove. * config/mips/iris6.opt: Remove. * config/mips/t-irix6: Remove. * config/mips/mips.h (TARGET_GPWORD): Remove IRIX 6 N64 handling. (TARGET_IRIX6): Remove. (TARGET_CPU_CPP_BUILTINS): Remove IRIX 6 handling. Don't define LANGUAGE_C, _LANGUAGE_C for Objective-C. * config/mips/mips.c (mips_build_builtin_va_list): Remove IRIX 6 handling. (mips_file_start): Likewise. * config/mips/mips-protos.h (irix_asm_output_align): Remove. * config/mips/driver-native.c [__sgi__]: Remove. (host_detect_local_cpu) [__sgi__]: Remove. * config/mips/gnu-user.h: Remove iris5.h reference. * config/mips/mips-modes.def: Remove IRIX 6 reference. * config/mips/gnu-user64.h (MIPS_TFMODE_FORMAT): Remove. * config/mips/mips.c (mips_option_override) [MIPS_TFMODE_FORMAT]: Remove. * gcc.c (main): Move asm_debug initialization ... (asm_debug): ... here. * ginclude/stddef.h (__STDDEF_H__): Don't define. * defaults.h (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): Remove. * system.h (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): Poison. * collect2.c [LINK_ELIMINATE_DUPLICATE_LDIRECTORIES]: Remove. (main) [LINK_ELIMINATE_DUPLICATE_LDIRECTORIES]: Remove. [LINK_ELIMINATE_DUPLICATE_LDIRECTORIES] (is_in_args): Remove. * doc/tm.texi.in (Driver, LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): Remove. * doc/tm.texi: Regenerate. * doc/invoke.texi (Debugging Options, -gdwarf-<version>): Remove IRIX 6 reference. (MIPS Options, -march): Remove IRIX reference. * doc/install.texi (Binaries, SGI IRIX): Remove. (Specific, mips-sgi-irix6): Document IRIX 6.5 removal, remove rest of section. * doc/trouble.texi (Interoperation): Remove -lgl_s handling. fixincludes: * inclhack.def (broken_cabs): Remove IRIX and SunOS 4 support. (irix___restrict): Remove. (irix___generic1): Remove. (irix___generic2): Remove. (irix_asm_apostrophe): Remove. (irix_complex): Remove. (irix_pthread_init): Remove. (irix_socklen_t): Remove. (irix_stdint_c99_mode): Remove. (irix_stdint_c99_types): Remove. (irix_stdint_c99_macros): Remove. (irix_stdio_va_list): Remove IRIX 6.5 support. (irix_wcsftime): Remove. (stdio_va_list): Remove IRIX 6.5 support. (svr4_profil): Remove IRIX bypass. * fixincl.x: Regenerate. * tests/base/complex.h [IRIX_COMPLEX_CHECK]: Remove. * tests/base/internal/math_core.h: Remove. * tests/base/internal/sgimacros.h: Remove. * tests/base/internal/wchar_core.h: Remove. * tests/base/math.h [BROKEN_CABS_CHECK]: Remove IRIX and SunOS 4 support. * tests/base/pthread.h [IRIX_PTHREAD_INIT_CHECK]: Remove. * tests/base/stdint-irix65.h: Remove. * tests/base/stdint.h [IRIX_STDINT_C99_MODE_CHECK]: Remove. * tests/base/sys/asm.h: Remove. * tests/base/sys/socket.h [IRIX_SOCKLEN_T_CHECK]: Remove. contrib: * config-list.mk (LIST): Remove mips-sgi-irix6.5. toplevel: * MAINTAINERS (OS Port Maintainers): Remove irix. * configure.ac (enable_libgomp): Remove *-*-irix6*. (unsupported_languages): Remove mips-sgi-irix6.*. (noconfigdirs): Don't add ${libgcj} for mips*-*-irix6*. (with_stabs): Remove. * configure: Regenerate. From-SVN: r185390
2012-03-14 16:33:37 +00:00
"extern double cabs ( _Complex z );";
};
/*
* Fixup Darwin's broken check for __builtin_nanf.
*/
fix = {
hackname = broken_nan;
/*
* It is tempting to omit the first "files" entry. Do not.
* The testing machinery will take the first "files" entry as the name
* of a test file to play with. It would be a nuisance to have a directory
* with the name "*".
*/
files = "architecture/ppc/math.h";
files = "architecture/*/math.h";
select = '#if defined\(__APPLE_CC__\) && \(__APPLE_CC__ >= 1345\)';
bypass = "powl";
c_fix = format;
c_fix_arg = "#if 1";
test_text = "#if defined(__APPLE_CC__) && (__APPLE_CC__ >= 1345)";
};
/*
* Various systems derived from BSD4.4 contain a macro definition
* for vfscanf that interacts badly with requirements of builtin-attrs.def.
* Known to be fixed in FreeBSD 5 system headers.
*/
fix = {
hackname = bsd_stdio_attrs_conflict;
mach = "*-*-*bsd*";
mach = "*-*-*darwin*";
files = stdio.h;
select = "^#define[ \t]*vfscanf[ \t]*__svfscanf[ \t]*$";
c_fix = format;
c_fix_arg = '#define _BSD_STRING(_BSD_X) _BSD_STRINGX(_BSD_X)' "\n"
'#define _BSD_STRINGX(_BSD_X) #_BSD_X' "\n"
'int vfscanf(FILE *, const char *, __builtin_va_list) '
'__asm__ (_BSD_STRING(__USER_LABEL_PREFIX__) "__svfscanf");';
test_text = '#define vfscanf __svfscanf';
};
fix = {
hackname = apple_local_stdio_fn_deprecation;
mach = "*-*-*darwin2*";
files = stdio.h;
select = "__deprecated_msg([^\n]*)$";
c_fix = format;
c_fix_arg = "#if defined(__APPLE_LOCAL_DEPRECATIONS)\n"
"%0\n"
"#endif";
test_text = '__deprecated_msg("This function is provided for compat...")';
};
/*
* Fix various macros used to define ioctl numbers.
* The traditional syntax was:
*
* #define _CTRL(n, x) (('n'<<8)+x)
* #define TCTRLCFOO _CTRL(T, 1)
*
* but this does not work with the C standard, which disallows macro
* expansion inside strings. We have to rewrite it thus:
*
* #define _CTRL(n, x) ((n<<8)+x)
* #define TCTRLCFOO _CTRL('T', 1)
*
* The select expressions match too much, but the c_fix code is cautious.
*
* CTRL might be: CTRL _CTRL ISCTRL BSD43_CTRL ...
*/
fix = {
hackname = ctrl_quotes_def;
select = "define[ \t]+[A-Z0-9_]+CTRL\\([a-zA-Z][,)]";
c_fix = char_macro_def;
c_fix_arg = "CTRL";
/*
* This is two tests in order to ensure that the "CTRL(c)" can
* be selected in isolation from the multi-arg format
*/
test_text = "#define BSD43_CTRL(n, x) (('n'<<8)+x)\n";
test_text = "#define _CTRL(c) ('c'&037)";
};
/*
* Fix various macros used to define ioctl numbers.
*/
fix = {
hackname = ctrl_quotes_use;
select = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+CTRL[ \t]*\\( *[^,']";
c_fix = char_macro_use;
c_fix_arg = "CTRL";
test_text = "#define TCTRLFOO BSD43_CTRL(T, 1)";
};
/*
* sys/mman.h on HP/UX is not C++ ready,
* even though NO_IMPLICIT_EXTERN_C is defined on HP/UX.
*
* rpc/types.h on OSF1/2.0 is not C++ ready,
* even though NO_IMPLICIT_EXTERN_C is defined for the alpha.
*
* The problem is the declaration of malloc.
*/
fix = {
hackname = cxx_unready;
files = sys/mman.h;
files = rpc/types.h;
select = '[^#]+malloc.*;'; /* Catch any form of declaration
not within a macro. */
bypass = '"C"|__BEGIN_DECLS';
c_fix = wrap;
c_fix_arg = "#ifdef __cplusplus\n"
"extern \"C\" {\n"
"#endif\n";
c_fix_arg = "#ifdef __cplusplus\n"
"}\n"
"#endif\n";
test_text = "extern void* malloc( size_t );";
};
/*
* macOS 10.12 <AvailabilityInternal.h> uses __attribute__((availability))
* unconditionally.
*/
fix = {
hackname = darwin_availabilityinternal;
mach = "*-*-darwin*";
files = AvailabilityInternal.h;
select = "#define[ \t]+(__API_[ADU]\\([^)]*\\)).*";
c_fix = format;
c_fix_arg = <<- _EOFix_
#if defined(__has_attribute)
#if __has_attribute(availability)
%0
#else
#define %1
#endif
#else
#define %1
#endif
_EOFix_;
test_text = "#define __API_A(x) __attribute__((availability(__API_AVAILABLE_PLATFORM_##x)))\n"
"#define __API_D(msg,x) __attribute__((availability(__API_DEPRECATED_PLATFORM_##x,message=msg)))";
};
/*
* For the AAB_darwin7_9_long_double_funcs fix (and later fixes for long long)
* to be useful, the main math.h must use <> and not "" includes.
*/
fix = {
hackname = darwin_9_long_double_funcs_2;
mach = "*-*-darwin*";
files = math.h;
select = '#include[ \t]+\"';
c_fix = format;
c_fix_arg = "%1<%2.h>";
c_fix_arg = '([ \t]*#[ \t]*include[ \t]+)"([a-z0-9/]+)\.h"';
test_text = '#include <architecture/ppc/math.h>';
};
/*
* On darwin8 and earlier, mach-o/swap.h isn't properly guarded
* by 'extern "C"'. On darwin7 some mach/ headers aren't properly guarded.
*/
fix = {
hackname = darwin_externc;
mach = "*-*-darwin*";
files = mach-o/swap.h;
files = mach/mach_time.h;
files = mach/mach_traps.h;
files = mach/message.h;
files = mach/mig.h;
files = mach/semaphore.h;
bypass = "extern \"C\"";
bypass = "__BEGIN_DECLS";
c_fix = wrap;
c_fix_arg = "#ifdef __cplusplus\n"
"extern \"C\" {\n"
"#endif\n";
c_fix_arg = "#ifdef __cplusplus\n"
"}\n"
"#endif\n";
test_text = "extern void swap_fat_header();\n";
};
/*
* AvailabilityMacros.h on Darwin breaks with GCC 4.0, because of
* bad __GNUC__ tests.
*/
fix = {
hackname = darwin_gcc4_breakage;
mach = "*-*-darwin*";
files = AvailabilityMacros.h;
select = "\\(__GNUC__ >= 3\\) && \\(__GNUC_MINOR__ >= 1\\)";
c_fix = format;
c_fix_arg = "((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))";
test_text = "#if defined(__GNUC__) && (__GNUC__ >= 3) && "
"(__GNUC_MINOR__ >= 1)\n";
};
/*
* math.h hides the long long functions that are available on the system for
* 10.5 and 10.6 SDKs, we expect to use them in G++ without specifying a value
* for __STDC_VERSION__, or switching __STRICT_ANSI__ off.
*/
fix = {
hackname = darwin_ll_funcs_avail;
mach = "*-*-darwin*";
files = architecture/ppc/math.h, architecture/i386/math.h;
select = "#if[^_]*__STDC_VERSION__[^_]*__STDC_VERSION__[^1]*199901L[^_]*"
"__STRICT_ANSI__[^_]*__GNUC__[^\)]*";
sed = "s/#if[^_]*__STDC_VERSION__[^_]*__STDC_VERSION__[^_]*199901L[^_]*"
"__STRICT_ANSI__[^_]*__GNUC__[^\\)]*\)/#if\ !\(__DARWIN_NO_LONG_LONG\)/";
test_text = "#if\ !(__DARWIN_NO_LONG_LONG)";
};
/*
* Before Mac OS X 10.8 <i386/setjmp.h> doesn't mark longjump noreturn.
*/
fix = {
hackname = darwin_longjmp_noreturn;
mach = "*-*-darwin*";
files = "i386/setjmp.h";
bypass = "__dead2";
select = "(.*longjmp\\(.*jmp_buf.*[^)]+\\));";
c_fix = format;
c_fix_arg = "%1 __attribute__ ((__noreturn__));";
test_text = "void siglongjmp(sigjmp_buf, int);";
};
/*
* Mac OS X 10.11 <os/trace.h> uses attribute on function definition.
*/
fix = {
hackname = darwin_os_trace_1;
mach = "*-*-darwin*";
files = os/trace.h;
select = "^(_os_trace_verify_printf.*) (__attribute__.*)";
c_fix = format;
c_fix_arg = "%1";
test_text = "_os_trace_verify_printf(const char *msg, ...) __attribute__((format(printf, 1, 2)))";
};
/*
* Mac OS X 10.1[012] <os/trace.h> os_trace_payload_t typedef uses Blocks
* extension without guard.
*/
fix = {
hackname = darwin_os_trace_2;
mach = "*-*-darwin*";
files = os/trace.h;
select = "typedef.*\\^os_trace_payload_t.*";
c_fix = format;
c_fix_arg = "#if __BLOCKS__\n%0\n#endif";
test_text = "typedef void (^os_trace_payload_t)(xpc_object_t xdict);";
};
/*
* macOSX 13.0 SDK objc/runtime.h uses Apple Blocks extension without a guard.
*/
fix = {
hackname = darwin_objc_runtime_1;
mach = "*-*-darwin2*";
files = objc/runtime.h;
select = <<- _EOSelect_
OBJC_EXPORT void.*
objc_enumerateClasses.*
.*
.*
.*
.*void \(\^ _Nonnull block.*
.*
.*
.*OBJC_REFINED_FOR_SWIFT.*
_EOSelect_;
c_fix = format;
c_fix_arg = "#if __BLOCKS__\n%0\n#endif";
test_text = <<- _OBJC_RUNTIME_1
OBJC_EXPORT void
objc_enumerateClasses(const void * _Nullable image,
const char * _Nullable namePrefix,
Protocol * _Nullable conformingTo,
Class _Nullable subclassing,
void (^ _Nonnull block)(Class _Nonnull aClass, BOOL * _Nonnull stop)
OBJC_NOESCAPE)
OBJC_AVAILABLE(13.0, 16.0, 16.0, 9.0, 7.0)
OBJC_REFINED_FOR_SWIFT;
_OBJC_RUNTIME_1;
};
/*
* In Mac OS X 10.1[012] <os/trace.h>, need to guard users of
* os_trace_payload_t typedef, too.
*/
fix = {
hackname = darwin_os_trace_3;
mach = "*-*-darwin*";
files = os/trace.h;
select = <<- _EOSelect_
__(API|OSX)_.*
OS_EXPORT.*
.*
_os_trace.*os_trace_payload_t payload);
_EOSelect_;
c_fix = format;
c_fix_arg = "#if __BLOCKS__\n%0\n#endif";
test_text = <<- _EOText_
__API_AVAILABLE(macosx(10.10), ios(8.0), watchos(2.0), tvos(8.0))
OS_EXPORT OS_NOTHROW OS_NOT_TAIL_CALLED
void
_os_trace_with_buffer(void *dso, const char *message, uint8_t type, const void *buffer, size_t buffer_size, os_trace_payload_t payload);
__OSX_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0)
OS_EXPORT OS_NOTHROW
void
_os_trace_internal(void *dso, uint8_t type, const char *format, const uint8_t *buf, size_t buf_size, os_trace_payload_t payload);
_EOText_;
};
/*
* In macOS 10.10 <os/base.h>, doesn't have __has_extension guarded.
*/
fix = {
hackname = darwin_os_base_1;
mach = "*-*-darwin*";
files = os/base.h;
select = <<- OS_BASE_1_SEL
#define __has_attribute.*
#endif
OS_BASE_1_SEL;
c_fix = format;
c_fix_arg = <<- OS_BASE_1_FIX
%0
#ifndef __has_extension
#define __has_extension(x) 0
#endif
OS_BASE_1_FIX;
test_text = <<- OS_BASE_1_TEST
#define __has_attribute(x) 0
#endif
#if __GNUC__
OS_BASE_1_TEST;
};
/*
* In macOS 10.10 <dispatch/object.h>, has unguarded block syntax.
*/
fix = {
hackname = darwin_dispatch_object_1;
mach = "*-*-darwin*";
files = dispatch/object.h;
select = "typedef void.*\\^dispatch_block_t.*";
c_fix = format;
c_fix_arg = "#if __BLOCKS__\n%0\n#endif";
test_text = <<- DISPATCH_OBJECT_1_TEST
typedef void (^dispatch_block_t)(void);
__BEGIN_DECLS
DISPATCH_OBJECT_1_TEST;
};
/*
* __private_extern__ doesn't exist in FSF GCC. Even if it did,
* why would you ever put it in a system header file?
*/
fix = {
hackname = darwin_private_extern;
mach = "*-*-darwin*";
files = mach-o/dyld.h;
select = "__private_extern__ [a-z_]+ _dyld_";
c_fix = format;
c_fix_arg = "extern";
c_fix_arg = "__private_extern__";
test_text = "__private_extern__ int _dyld_func_lookup(\n"
"const char *dyld_func_name,\n"
"unsigned long *address);\n";
};
/*
* Darwin headers have a stdint.h that defines UINT8_C and UINT16_C to
* unsigned constants.
*/
fix = {
hackname = darwin_stdint_1;
mach = "*-*-darwin*";
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-darwin.h, stdint.h;
c_fix = format;
c_fix_arg = "#define UINT8_C(v)\tv\n#define UINT16_C(v)\tv";
select = "#define UINT8_C\\(v\\)[ \t]+\\(v ## U\\)\n"
"#define UINT16_C\\(v\\)[ \t]+\\(v ## U\\)";
test_text = "#define UINT8_C(v) (v ## U)\n"
"#define UINT16_C(v) (v ## U)";
};
/*
* Darwin headers have a stdint.h that defines INTPTR_MIN and INTPTR_MAX
* with wrong types.
*/
fix = {
hackname = darwin_stdint_2;
mach = "*-*-darwin*";
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-darwin.h, stdint.h;
c_fix = format;
c_fix_arg = "#if __WORDSIZE == 64\n"
"#define INTPTR_MAX 9223372036854775807L\n"
"#define INTPTR_MIN (-INTPTR_MAX-1)\n"
"#else\n"
"#define INTPTR_MAX 2147483647L\n"
"#define INTPTR_MIN (-INTPTR_MAX-1)\n"
"#endif";
select = "#if __WORDSIZE == 64\n"
"#define INTPTR_MIN[ \t]+INT64_MIN\n"
"#define INTPTR_MAX[ \t]+INT64_MAX\n"
"#else\n"
"#define INTPTR_MIN[ \t]+INT32_MIN\n"
"#define INTPTR_MAX[ \t]+INT32_MAX\n"
"#endif";
test_text = "#if __WORDSIZE == 64\n"
"#define INTPTR_MIN INT64_MIN\n"
"#define INTPTR_MAX INT64_MAX\n"
"#else\n"
"#define INTPTR_MIN INT32_MIN\n"
"#define INTPTR_MAX INT32_MAX\n"
"#endif";
};
/*
* Darwin headers have a stdint.h that defines UINTPTR_MAX with a wrong type.
*/
fix = {
hackname = darwin_stdint_3;
mach = "*-*-darwin*";
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-darwin.h, stdint.h;
c_fix = format;
c_fix_arg = "#if __WORDSIZE == 64\n"
"#define UINTPTR_MAX 18446744073709551615UL\n"
"#else\n"
"#define UINTPTR_MAX 4294967295UL\n"
"#endif";
select = "#if __WORDSIZE == 64\n"
"#define UINTPTR_MAX[ \t]+UINT64_MAX\n"
"#else\n"
"#define UINTPTR_MAX[ \t]+UINT32_MAX\n"
"#endif";
test_text = "#if __WORDSIZE == 64\n"
"#define UINTPTR_MAX UINT64_MAX\n"
"#else\n"
"#define UINTPTR_MAX UINT32_MAX\n"
"#endif";
};
/*
* Darwin headers have a stdint.h that defines SIZE_MAX with a wrong type.
*/
fix = {
hackname = darwin_stdint_4;
mach = "*-*-darwin*";
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-darwin.h, stdint.h;
c_fix = format;
c_fix_arg = "#if __WORDSIZE == 64\n"
"#define SIZE_MAX 18446744073709551615UL\n"
"#else\n"
"#define SIZE_MAX 4294967295UL\n"
"#endif";
select = "#if __WORDSIZE == 64\n"
"#define SIZE_MAX[ \t]+UINT64_MAX\n"
"#else\n"
"#define SIZE_MAX[ \t]+UINT32_MAX\n"
"#endif";
test_text = "#if __WORDSIZE == 64\n"
"#define SIZE_MAX UINT64_MAX\n"
"#else\n"
"#define SIZE_MAX UINT32_MAX\n"
"#endif";
};
/*
* Darwin headers have a stdint.h that defines {U,}INTMAX_{MIN,MAX}
* with a wrong type.
*/
fix = {
hackname = darwin_stdint_5;
mach = "*-*-darwin*";
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-darwin.h, stdint.h;
c_fix = format;
c_fix_arg = "#if __WORDSIZE == 64\n"
"#define INTMAX_MIN (-9223372036854775807L - 1)\n"
"#define INTMAX_MAX 9223372036854775807L\n"
"#define UINTMAX_MAX 18446744073709551615UL\n"
"#else\n"
"#define INTMAX_MIN (-9223372036854775807LL - 1)\n"
"#define INTMAX_MAX 9223372036854775807LL\n"
"#define UINTMAX_MAX 18446744073709551615ULL\n"
"#endif";
select = "#define INTMAX_MIN[ \t]+INT64_MIN\n"
"#define INTMAX_MAX[ \t]+INT64_MAX\n"
"\n"
"#define UINTMAX_MAX[ \t]+UINT64_MAX";
test_text = "#define INTMAX_MIN INT64_MIN\n"
"#define INTMAX_MAX INT64_MAX\n"
"\n"
"#define UINTMAX_MAX UINT64_MAX";
};
/*
* Darwin headers have a stdint.h that defines {U,}INTMAX_C
* with a wrong type.
*/
fix = {
hackname = darwin_stdint_6;
mach = "*-*-darwin*";
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-darwin.h, stdint.h;
c_fix = format;
c_fix_arg = "#if __WORDSIZE == 64\n"
"#define PTRDIFF_MIN (-9223372036854775807L - 1)\n"
"#define PTRDIFF_MAX 9223372036854775807L\n"
"#else\n"
"#define PTRDIFF_MIN (-2147483647 - 1)\n"
"#define PTRDIFF_MAX 2147483647\n"
"#endif";
select = "#if __WORDSIZE == 64\n"
"#define PTRDIFF_MIN[ \t]+INT64_MIN\n"
"#define PTRDIFF_MAX[ \t]+INT64_MAX\n"
"#else\n"
"#define PTRDIFF_MIN[ \t]+INT32_MIN\n"
"#define PTRDIFF_MAX[ \t]+INT32_MAX\n"
"#endif";
test_text = "#if __WORDSIZE == 64\n"
"#define PTRDIFF_MIN INT64_MIN\n"
"#define PTRDIFF_MAX INT64_MAX\n"
"#else\n"
"#define PTRDIFF_MIN INT32_MIN\n"
"#define PTRDIFF_MAX INT32_MAX\n"
"#endif";
};
/*
* Darwin headers have a stdint.h that defines {U,}INTMAX_C
* with a wrong type.
*/
fix = {
hackname = darwin_stdint_7;
mach = "*-*-darwin*";
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-darwin.h, stdint.h;
c_fix = format;
c_fix_arg = "#if __WORDSIZE == 64\n"
"#define INTMAX_C(v) (v ## L)\n"
"#define UINTMAX_C(v) (v ## UL)\n"
"#else\n"
"#define INTMAX_C(v) (v ## LL)\n"
"#define UINTMAX_C(v) (v ## ULL)\n"
"#endif";
select = "#define INTMAX_C\\(v\\)[ \t]+\\(v ## LL\\)\n"
"#define UINTMAX_C\\(v\\)[ \t]+\\(v ## ULL\\)";
test_text = "#define INTMAX_C(v) (v ## LL)\n"
"#define UINTMAX_C(v) (v ## ULL)";
};
/* The SDK included with XCode 10.2 has the file <sys/ucred.h> that uses the
C11 _Atomic keyword (exposing it to C++ code). The work-around here follows
the header in declaring the entity volatile when _Atomic is not available.
*/
fix = {
hackname = darwin_ucred__Atomic;
mach = "*-*-darwin*";
files = sys/ucred.h;
select = "_Atomic";
c_fix = wrap;
c_fix_arg = "#if (__STDC_VERSION__ < 201112L) || defined(__cplusplus)\n"
"# define _Atomic volatile\n"
"#endif\n";
c_fix_arg = "#if (__STDC_VERSION__ < 201112L) || defined(__cplusplus)\n"
"# undef _Atomic\n"
"#endif\n";
test_text = ""; /* Don't provide this for wrap fixes. */
};
/* The darwin headers don't accept __FLT_EVAL_METHOD__ == 16. */
fix = {
hackname = darwin_flt_eval_method;
mach = "*-*-darwin*";
files = math.h;
select = "^#if __FLT_EVAL_METHOD__ == 0( \\|\\| __FLT_EVAL_METHOD__ == -1)?$";
c_fix = format;
c_fix_arg = "%0 || __FLT_EVAL_METHOD__ == 16";
test_text = "#if __FLT_EVAL_METHOD__ == 0\n"
"#if __FLT_EVAL_METHOD__ == 0 || __FLT_EVAL_METHOD__ == -1";
};
/*
* Fix <c_asm.h> on Digital UNIX V4.0:
* It contains a prototype for a DEC C internal asm() function,
* clashing with gcc's asm keyword. So protect this with __DECC.
*/
fix = {
hackname = dec_intern_asm;
files = c_asm.h;
sed = "/^[ \t]*float[ \t]*fasm/i\\\n#ifdef __DECC\n";
sed = "/^[ \t]*#[ \t]*pragma[ \t]*intrinsic([ \t]*dasm/a\\\n"
"#endif\n";
test_text =
"float fasm {\n"
" ... asm stuff ...\n"
"};\n#pragma intrinsic( dasm )\n/* END ASM TEST*/";
};
/*
* Fix typo in <wchar.h> on DJGPP 2.03.
*/
fix = {
hackname = djgpp_wchar_h;
file = wchar.h;
select = "__DJ_wint_t";
bypass = "sys/djtypes.h";
c_fix = format;
c_fix_arg = "%0\n#include <sys/djtypes.h>";
c_fix_arg = "#include <stddef.h>";
test_text = "#include <stddef.h>\n"
"extern __DJ_wint_t x;\n";
};
/*
* Fix these Sun OS files to avoid an invalid identifier in an #ifdef.
*/
fix = {
hackname = ecd_cursor;
files = "sunwindow/win_lock.h";
files = "sunwindow/win_cursor.h";
select = 'ecd\.cursor';
c_fix = format;
c_fix_arg = 'ecd_cursor';
test_text = "#ifdef ecd.cursor\n#error bogus\n#endif /* ecd+cursor */";
};
/*
* Incorrect feraiseexcept extern inline in bits/fenv.h on x86_64
* that fails when compiling for SSE-less 32-bit x86.
*/
fix = {
hackname = feraiseexcept_nosse_divbyzero;
mach = 'i[34567]86-*-linux*', 'x86*-linux*', 'amd64-*-linux*';
files = bits/fenv.h, '*/bits/fenv.h';
select = "^([\t ]*)__asm__ __volatile__ \\(\"divss %1, %0 *\" : "
": \"x\" \\(__f\\), \"x\" \\(__g\\)\\);$";
bypass = "\"fdivp .*; fwait\"";
c_fix = format;
c_fix_arg = <<- _EOText_
# ifdef __SSE_MATH__
%0
# else
%1__asm__ __volatile__ ("fdivp %%%%st, %%%%st(1); fwait"
%1 : "=t" (__f) : "0" (__f), "u" (__g) : "st(1)");
# endif
_EOText_;
test_text = <<- _EOText_
__asm__ __volatile__ ("divss %1, %0" : : "x" (__f), "x" (__g));
_EOText_;
};
/*
* Incorrect feraiseexcept extern inline in bits/fenv.h on x86_64
* that fails when compiling for SSE-less 32-bit x86.
*/
fix = {
hackname = feraiseexcept_nosse_invalid;
mach = 'i[34567]86-*-linux*', 'x86*-linux*', 'amd64-*-linux*';
files = bits/fenv.h, '*/bits/fenv.h';
select = "^([\t ]*)__asm__ __volatile__ \\(\"divss %0, %0 *\" : "
": \"x\" \\(__f\\)\\);$";
bypass = "\"fdiv .*; fwait\"";
c_fix = format;
c_fix_arg = <<- _EOText_
# ifdef __SSE_MATH__
%0
# else
%1__asm__ __volatile__ ("fdiv %%%%st, %%%%st(0); fwait"
%1 : "=t" (__f) : "0" (__f));
# endif
_EOText_;
test_text = <<- _EOText_
__asm__ __volatile__ ("divss %0, %0" : : "x" (__f));
_EOText_;
};
/*
* Between 8/24/1998 and 2/17/2001, FreeBSD system headers presume
* neither the existence of GCC 3 nor its exact feature set yet break
* (by design?) when __GNUC__ is set beyond 2.
*/
fix = {
hackname = freebsd_gcc3_breakage;
mach = "*-*-freebsd*";
files = sys/cdefs.h;
select = '^#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7$';
bypass = '__GNUC__[ \t]*([>=]=[ \t]*[3-9]|>[ \t]*2)';
c_fix = format;
c_fix_arg = '%0 || __GNUC__ >= 3';
test_text = '#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7';
};
/*
* Some releases of FreeBSD 4 and FreeBSD 5.0 and 5.1 system headers presume
* neither the existence of GCC 4 nor its exact feature set yet break
* (by design?) when __GNUC__ is set beyond 3.
*/
fix = {
hackname = freebsd_gcc4_breakage;
mach = "*-*-freebsd*";
files = sys/cdefs.h;
select = '^#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 \|\| __GNUC__ == 3$';
c_fix = format;
c_fix_arg = '#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ >= 3';
test_text = '#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ == 3';
};
/*
* Some versions of glibc don't expect the C99 inline semantics.
*/
fix = {
hackname = glibc_c99_inline_1;
files = features.h, '*/features.h';
select = "^ *&& !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__$";
c_fix = format;
c_fix_arg = "%0 && (defined __extern_inline || defined __GNUC_GNU_INLINE__)";
test_text = <<-EOT
2008-06-07 22:19:45 +00:00
#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ \
&& !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__
# define __USE_EXTERN_INLINES 1
#endif
EOT;
};
/*
* Similar, but a version that didn't have __NO_INLINE__
*/
fix = {
hackname = glibc_c99_inline_1a;
files = features.h, '*/features.h';
select = "(\\) && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__)\n"
"(#[ \t]*define[ \t]*__USE_EXTERN_INLINES[ \t]*1)";
c_fix = format;
c_fix_arg = "%1 && (defined __extern_inline || defined __GNUC_GNU_INLINE__)\n%2";
test_text = <<-EOT
2008-06-07 22:19:45 +00:00
#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__
# define __USE_EXTERN_INLINES 1
#endif
EOT;
};
/*
* The glibc_c99_inline_1 fix should have fixed everything. Unfortunately
* there are many glibc headers which do not respect __USE_EXTERN_INLINES.
* The remaining glibc_c99_inline_* fixes deal with some of those headers.
*/
fix = {
hackname = glibc_c99_inline_2;
files = sys/stat.h, '*/sys/stat.h';
select = "extern __inline__ int";
sed = "s/extern int \\(stat\\)/"
"#ifdef __GNUC_GNU_INLINE__\\\nextern\\\n#endif\\\n"
"__inline__ int \\1/";
sed = "s/extern int \\([lf]stat\\)/"
"#ifdef __GNUC_GNU_INLINE__\\\nextern\\\n#endif\\\n"
"__inline__ int \\1/";
sed = "s/extern int \\(mknod\\)/"
"#ifdef __GNUC_GNU_INLINE__\\\nextern\\\n#endif\\\n"
"__inline__ int \\1/";
sed = "s/extern int __REDIRECT\\(_NTH\\)\\{0,1\\} (\\(stat\\)/"
"#ifdef __GNUC_GNU_INLINE__\\\nextern\\\n#endif\\\n"
"__inline__ int __REDIRECT\\1 (\\2/";
sed = "s/extern int __REDIRECT\\(_NTH\\)\\{0,1\\} (\\([lf]stat\\)/"
"#ifdef __GNUC_GNU_INLINE__\\\nextern\\\n#endif\\\n"
"__inline__ int __REDIRECT\\1 (\\2/";
sed = "s/^extern __inline__ int/"
"#ifdef __GNUC_GNU_INLINE__\\\nextern\\\n#endif\\\n"
"__inline__ int/";
test_text = <<-EOT
extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
extern __inline__ int
__NTH (fstat64 (int __fd, struct stat64 *__statbuf))
{}
EOT;
};
/*
* glibc_c99_inline_3
*/
fix = {
hackname = glibc_c99_inline_3;
files = bits/string2.h, '*/bits/string2.h';
select = "extern __inline";
bypass = "__extern_inline|__GNU_STDC_INLINE__";
c_fix = format;
c_fix_arg = "# if defined(__cplusplus) || defined(__GNUC_STDC_INLINE__)";
c_fix_arg = "^# ifdef __cplusplus$";
test_text = <<-EOT
# ifdef __cplusplus
# define __STRING_INLINE inline
# else
# define __STRING_INLINE extern __inline
# endif
EOT;
};
/*
* glibc_c99_inline_4
*/
fix = {
hackname = glibc_c99_inline_4;
files = sys/sysmacros.h, '*/sys/sysmacros.h', wchar.h, '*/wchar.h',
pthread.h, '*/pthread.h';
bypass = "__extern_inline|__gnu_inline__";
select = "(^| )extern __inline";
c_fix = format;
c_fix_arg = "%0 __attribute__ ((__gnu_inline__))";
test_text = <<-EOT
__extension__ extern __inline unsigned int
extern __inline unsigned int
EOT;
};
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:04:06 +02:00
/* glibc-2.27 to 2.36 assume GCC 7 or later supports some or all
* of _Float{16,32,64,128} and _Float{32,64,128}x keywords for C,
* but doesn't for C++.
*/
fix = {
hackname = glibc_cxx_floatn_1;
files = bits/floatn.h, bits/floatn-common.h, "*/bits/floatn.h", "*/bits/floatn-common.h";
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:04:06 +02:00
select = "^([ \t]*#[ \t]*if !__GNUC_PREREQ \\(7, 0\\) \\|\\| )defined __cplusplus\n"
"(([ \t]*/\\*[^\n]*\\*/\n)?"
"([ \t]*#[ \t]*if[^\n]*\n)?"
"[ \t]*#[ \t]*define __f(16|32|64|128)x?\\()";
c_fix = format;
c_fix_arg = "%1(defined __cplusplus && !__GNUC_PREREQ (13, 0))\n%2";
test_text = <<-EOT
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
/* The literal suffix f128 exists only since GCC 7.0. */
# define __f128(x) x##l
# else
# define __f128(x) x##f128
# endif
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
/* The literal suffix (f128) exist for powerpc only since GCC 7.0. */
# if __LDBL_MANT_DIG__ == 113
# define __f128(x) x##l
# else
# define __f128(x) x##q
# endif
# else
# define __f128(x) x##f128
# endif
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
# ifdef __NO_LONG_DOUBLE_MATH
# define __f64(x) x##l
# else
# define __f64(x) x
# endif
# else
# define __f64(x) x##f64
# endif
EOT;
};
fix = {
hackname = glibc_cxx_floatn_2;
files = bits/floatn.h, bits/floatn-common.h, "*/bits/floatn.h", "*/bits/floatn-common.h";
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 08:56:04 +02:00
select = "^([ \t]*#[ \t]*(el)?if !__GNUC_PREREQ \\(7, 0\\) \\|\\| )defined __cplusplus\n"
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:04:06 +02:00
"(([ \t]*/\\*[^\n]*\\*/\n)?"
"[ \t]*typedef[ \t]+[^\n]*[ \t]+_Float(16|32|64|128)x?([ \t]+__attribute__ \\(\\(__mode__ \\(__HF__\\)\\)\\))?;)";
c_fix = format;
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 08:56:04 +02:00
c_fix_arg = "%1(defined __cplusplus && !__GNUC_PREREQ (13, 0))\n%3";
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:04:06 +02:00
test_text = <<-EOT
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
typedef float _Float16 __attribute__ ((__mode__ (__HF__)));
# endif
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
typedef __float128 _Float128;
# endif
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 08:56:04 +02:00
# if 0
# elif !__GNUC_PREREQ (7, 0) || defined __cplusplus
typedef __float128 _Float128;
# endif
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:04:06 +02:00
EOT;
};
fix = {
hackname = glibc_cxx_floatn_3;
files = bits/floatn.h, bits/floatn-common.h, "*/bits/floatn.h", "*/bits/floatn-common.h";
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:04:06 +02:00
select = "^([ \t]*#[ \t]*if !__GNUC_PREREQ \\(7, 0\\) \\|\\| )defined __cplusplus\n"
"(([ \t]*/\\*[^\n]*\n?[^\n]*\\*/\n)?"
"([ \t]*#[ \t]*if[^\n]*\n)?"
"([ \t]*typedef[ \t]+[^\n]*;\n)?"
"[ \t]*#[ \t]*define __CFLOAT(16|32|64|128)X?[ \t]+)";
c_fix = format;
c_fix_arg = "%1(defined __cplusplus && !__GNUC_PREREQ (13, 0))\n%2";
test_text = <<-EOT
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
# define __CFLOAT128 _Complex long double
# else
# define __CFLOAT128 _Complex _Float128
# endif
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
/* Add a typedef for older GCC compilers which don't natively support
_Complex _Float128. */
typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__)));
# define __CFLOAT128 __cfloat128
# else
# define __CFLOAT128 _Complex _Float128
# endif
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
# ifdef __NO_LONG_DOUBLE_MATH
# define __CFLOAT64 _Complex long double
# else
# define __CFLOAT64 _Complex double
# endif
# else
# define __CFLOAT64 _Complex _Float64
# endif
EOT;
};
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 08:56:04 +02:00
fix = {
hackname = glibc_cxx_floatn_4;
files = bits/floatn.h, "*/bits/floatn.h";
select = "^([ \t]*#[ \t]*if __LDBL_MANT_DIG__ == 113 && )defined __cplusplus\n"
"(([ \t]*/\\*[^\n]*\\*/\n)?"
"[ \t]*typedef[ \t]+[^\n]*[ \t]+_Float128;)";
c_fix = format;
c_fix_arg = "%1defined __cplusplus && !__GNUC_PREREQ (13, 0)\n%2";
test_text = <<-EOT
# if __LDBL_MANT_DIG__ == 113 && defined __cplusplus
typedef long double _Float128;
# define __CFLOAT128 _Complex long double
# endif
EOT;
};
fix = {
hackname = glibc_cxx_floatn_5;
files = bits/floatn.h, bits/floatn-common.h, "*/bits/floatn.h", "*/bits/floatn-common.h";
select = "^([ \t]*#[ \t]*if !__GNUC_PREREQ \\(7, 0\\) \\|\\| )defined __cplusplus\n"
"([ \t]*#[ \t]+error \"_Float128[xX] supported but no )";
c_fix = format;
c_fix_arg = "%1(defined __cplusplus && !__GNUC_PREREQ (13, 0))\n%2";
test_text = <<-EOT
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
# error "_Float128X supported but no constant suffix"
# endif
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
# error "_Float128x supported but no type"
# endif
EOT;
};
/* glibc-2.3.5 defines pthread mutex initializers incorrectly,
* so we replace them with versions that correspond to the
* definition.
*/
fix = {
hackname = glibc_mutex_init;
files = pthread.h;
select = '\{ *\{ *0, *\} *\}';
sed = "/define[ \t]\\{1,\\}PTHREAD_MUTEX_INITIALIZER[ \t]*\\\\/{\n"
"N\ns/{ { 0, } }/{ { 0, 0, 0, 0, 0, 0 } }/\n}";
sed = "s/{ \\(0, 0, 0, 0, PTHREAD_MUTEX_"
"\\(RECURSIVE\\)_NP\\) }/{ \\1, 0 }/";
sed = "s/{ \\(0, 0, 0, 0, PTHREAD_MUTEX_"
"\\(ERRORCHECK\\)_NP\\) }/{ \\1, 0 }/";
sed = "s/{ \\(0, 0, 0, 0, PTHREAD_MUTEX_"
"\\(ADAPTIVE\\)_NP\\) }/{ \\1, 0 }/";
sed = "s/{ \\(0, 0, 0, PTHREAD_MUTEX_"
"\\(RECURSIVE\\)_NP\\) }/{ \\1, 0, 0 }/";
sed = "s/{ \\(0, 0, 0, PTHREAD_MUTEX_"
"\\(ERRORCHECK\\)_NP\\) }/{ \\1, 0, 0 }/";
sed = "s/{ \\(0, 0, 0, PTHREAD_MUTEX_"
"\\(ADAPTIVE\\)_NP\\) }/{ \\1, 0, 0 }/";
sed = "/define[ \t]\\{1,\\}PTHREAD_RWLOCK_INITIALIZER[ \t]*\\\\/"
"N;s/^[ \t]*#[ \t]*"
"\\(define[ \t]\\{1,\\}PTHREAD_RWLOCK_INITIALIZER[ \t]*\\\\\\)\\n"
"[ \t]*{ { 0, } }/# if __WORDSIZE == 64\\\n"
"# \\1\\\n"
" { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }\\\n"
"# else\\\n"
"# \\1\\\n"
" { { 0, 0, 0, 0, 0, 0, 0, 0 } }\\\n"
"# endif/";
sed = "s/{ \\(0, 0, 0, 0, 0, 0, "
"PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP\\) }/{ \\1, 0 }/";
sed = "/define[ \t]\\{1,\\}PTHREAD_COND_INITIALIZER/"
"s/{ { 0, } }/{ { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } }/";
test_text = <<- _EOText_
2008-06-07 22:19:45 +00:00
#define PTHREAD_MUTEX_INITIALIZER \\
{ { 0, } }
#ifdef __USE_GNU
# if __WORDSIZE == 64
# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \\
{ { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP } }
# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \\
{ { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP } }
# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \\
{ { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP } }
# else
# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \\
{ { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP } }
# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \\
{ { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP } }
# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \\
{ { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP } }
# endif
#endif
# define PTHREAD_RWLOCK_INITIALIZER \\
{ { 0, } }
# ifdef __USE_GNU
# if __WORDSIZE == 64
# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \\
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \\
PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
# else
# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \\
{ { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
# endif
# endif
#define PTHREAD_COND_INITIALIZER { { 0, } }
_EOText_;
};
/* glibc versions before 2.5 have a version of stdint.h that defines
UINT8_C and UINT16_C to produce unsigned constants, as do uClibc
versions with stdint.h based on those glibc versions. */
fix = {
hackname = glibc_stdint;
files = stdint.h;
select = "GNU C Library";
c_fix = format;
c_fix_arg = "# define UINT8_C(c)\tc\n# define UINT16_C(c)\tc";
c_fix_arg = "# define UINT8_C\\(c\\)\tc ## U\n# define UINT16_C\\(c\\)\tc ## U";
test_text = "/* This file is part of the GNU C Library. */\n"
"# define UINT8_C(c)\tc ## U\n"
"# define UINT16_C(c)\tc ## U";
};
/* Some versions of glibc have a version of bits/string2.h that
produces "value computed is not used" warnings from strncpy; fix
this definition by using __builtin_strncpy instead as in newer
versions. */
fix = {
hackname = glibc_strncpy;
files = bits/string2.h, '*/bits/string2.h';
bypass = "__builtin_strncpy";
c_fix = format;
c_fix_arg = "# define strncpy(dest, src, n) __builtin_strncpy (dest, src, n)";
c_fix_arg = "# define strncpy([^\n]*\\\\\n)*[^\n]*";
test_text = <<-EOT
# define strncpy(dest, src, n) \
(__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n) \\
? (strlen (src) + 1 >= ((size_t) (n)) \\
? (char *) memcpy (dest, src, n) \\
: strncpy (dest, src, n)) \\
: strncpy (dest, src, n)))
EOT;
};
re PR c/456 (constant expressions constraints (gcc.dg/c90-const-expr-1)) PR c/456 PR c/5675 PR c/19976 PR c/29116 PR c/31871 PR c/35198 fixincludes: * inclhack.def (glibc_tgmath): New fix. * fixincl.x: Regenerate. * tests/base/tgmath.h: New. gcc: * builtins.c (fold_builtin_sincos): Build COMPOUND_EXPR in void_type_node. (fold_call_expr): Return a NOP_EXPR from folding rather than the contained expression. * c-common.c (c_fully_fold, c_fully_fold_internal, c_save_expr): New. (c_common_truthvalue_conversion): Use c_save_expr. Do not fold conditional expressions for C. (decl_constant_value_for_optimization): Move from decl_constant_value_for_broken_optimization in c-typeck.c. Check whether optimizing and that the expression is a VAR_DECL not of array type instead of doing such checks in the caller. Do not check pedantic. Call gcc_unreachable for C++. * c-common.def (C_MAYBE_CONST_EXPR): New. * c-common.h (c_fully_fold, c_save_expr, decl_constant_value_for_optimization): New prototypes. (C_MAYBE_CONST_EXPR_PRE, C_MAYBE_CONST_EXPR_EXPR, C_MAYBE_CONST_EXPR_INT_OPERANDS, C_MAYBE_CONST_EXPR_NON_CONST, EXPR_INT_CONST_OPERANDS): Define. * c-convert.c (convert): Strip nops from expression. * c-decl.c (groktypename): Take extra parameters expr and expr_const_operands. Update call to grokdeclarator. (start_decl): Update call to grokdeclarator. Add statement for expressions used in type of decl. (grokparm): Update call to grokdeclarator. (push_parm_decl): Update call to grokdeclarator. (build_compound_literal): Add parameter non_const and build a C_MAYBE_COSNT_EXPR if applicable. (grokdeclarator): Take extra parameters expr and expr_const_operands. Track expressions used in declaration specifiers and declarators. Fold array sizes and track whether they are constant expressions and whether they are integer constant expressions. (parser_xref_tag): Set expr and expr_const_operands fields in return value. (grokfield): Update call to grokdeclarator. (start_function): Update call to grokdeclarator. (build_null_declspecs): Set expr and expr_const_operands fields in return value. (declspecs_add_type): Handle expressions in typeof specifiers. * c-parser.c (c_parser_declspecs): Set expr and expr_const_operands fields for declaration specifiers. (c_parser_enum_specifier): Likewise. (c_parser_struct_or_union_specifier): Likewise. (c_parser_typeof_specifier): Likewise. Update call to groktypename. Fold expression as needed. Return expressions with type instead of adding statements. (c_parser_attributes): Update calls to c_parser_expr_list. (c_parser_statement_after_labels): Fold expression before passing to objc_build_throw_stmt. (c_parser_condition): Fold expression. (c_parser_asm_operands): Fold expression. (c_parser_conditional_expression): Use c_save_expr. Update call to build_conditional_expr. (c_parser_alignof_expression): Update call to groktypename. (c_parser_postfix_expression): Preserve C_MAYBE_CONST_EXPR as original_code. Fold expression argument of va_arg. Create C_MAYBE_CONST_EXPR to preserve side effects of expressions in type argument to va_arg. Update calls to groktypename. Fold array index for offsetof. Verify that first argument to __builtin_choose_expr has integer type. (c_parser_postfix_expression_after_paren_type): Update calls to groktypename and build_compound_literal. Handle expressions with side effects in type name. (c_parser_postfix_expression_after_primary): Update call to c_parser_expr_list. Set original_code for calls to __builtin_constant_p. (c_parser_expr_list): Take extra parameter fold_p. Fold expressions if requested. (c_parser_objc_type_name): Update call to groktypename. (c_parser_objc_synchronized_statement): Fold expression. (c_parser_objc_receiver): Fold expression. (c_parser_objc_keywordexpr): Update call to c_parser_expr_list. (c_parser_omp_clause_num_threads, c_parser_omp_clause_schedule, c_parser_omp_atomic, c_parser_omp_for_loop): Fold expressions. * c-tree.h (CONSTRUCTOR_NON_CONST): Define. (struct c_typespec): Add elements expr and expr_const_operands. (struct c_declspecs): Add elements expr and expr_const_operands. (groktypename, build_conditional_expr, build_compound_literal): Update prototypes. (in_late_binary_op): Declare. * c-typeck.c (note_integer_operands): New function. (in_late_binary_op): New variable. (decl_constant_value_for_broken_optimization): Move to c-common.c and rename to decl_constant_value_for_optimization. (default_function_array_conversion): Do not strip nops. (default_conversion): Do not call decl_constant_value_for_broken_optimization. (build_array_ref): Do not fold result. (c_expr_sizeof_expr): Fold operand. Use C_MAYBE_CONST_EXPR for result when operand is a VLA. (c_expr_sizeof_type): Update call to groktypename. Handle expressions included in type name. Use C_MAYBE_CONST_EXPR for result when operand names a VLA type. (build_function_call): Update call to build_compound_literal. Only fold result for calls to __builtin_* functions. Strip NOP_EXPR from INTEGER_CST returned from such functions. Fold the function designator. (convert_arguments): Fold arguments. Update call to convert_for_assignment. (build_unary_op): Handle increment and decrement of C_MAYBE_CONST_EXPR. Move lvalue checks for increment and decrement earlier. Fold operand of increment and decrement. Handle address of C_MAYBE_CONST_EXPR. Only fold expression being built for integer operand. Wrap returns that are INTEGER_CSTs without being integer constant expressions or that have integer constant operands without being INTEGER_CSTs. (lvalue_p): Handle C_MAYBE_CONST_EXPR. (build_conditional_expr): Add operand ifexp_bcp. Track whether result is an integer constant expression or can be used in unevaluated parts of one and avoid folding and wrap as appropriate. Fold operands before possibly doing -Wsign-compare warnings. (build_compound_expr): Wrap result for C99 if operands can be used in integer constant expressions. (build_c_cast): Update call to digest_init. Do not ignore overflow from casting floating-point constants to integers. Wrap results that could be confused with integer constant expressions, null pointer constants or floating-point constants. (c_cast_expr): Update call to groktypename. Handle expressions included in type name. (build_modify_expr): Handle modifying a C_MAYBE_CONST_EXPR. Fold lhs inside possible SAVE_EXPR. Fold RHS before assignment. Update calls to convert_for_assignment. (convert_for_assignment): Take new parameter null_pointer_constant. Do not strip nops or call decl_constant_value_for_broken_optimization. Set in_late_binary_op for conversions to boolean. (store_init_value): Update call to digest_init. (digest_init): Take new parameter null_pointer_constant. Do not call decl_constant_value_for_broken_optimization. pedwarn for initializers not constant expressions. Update calls to convert_for_assignment. (constructor_nonconst): New. (struct constructor_stack): Add nonconst element. (really_start_incremental_init, push_init_level, pop_init_level): Handle constructor_nonconst and nonconst element. (set_init_index): Call constant_expression_warning for array designators. (output_init_element): Fold value. Set constructor_nonconst as applicable. pedwarn for initializers not constant expressions. Update call to digest_init. Call constant_expression_warning where constant initializers are required. (process_init_element): Use c_save_expr. (c_finish_goto_ptr): Fold expression. (c_finish_return): Fold return value. Update call to convert_for_assignment. (c_start_case): Fold switch expression. (c_process_expr_stmt): Fold expression. (c_finish_stmt_expr): Create C_MAYBE_CONST_EXPR as needed to ensure statement expression is not evaluated in constant expression. (build_binary_op): Track whether results are integer constant expressions or may occur in such, disable folding and wrap results as applicable. Fold operands for -Wsign-compare warnings unless in_late_binary_op. (c_objc_common_truthvalue_conversion): Handle results folded to integer constants that are not integer constant expressions. * doc/extend.texi: Document when typeof operands are evaluated, that condition of __builtin_choose_expr is an integer constant expression, and more about use of __builtin_constant_p in initializers. gcc/objc: * objc-act.c (objc_finish_try_stmt): Set in_late_binary_op. gcc/testsuite: * gcc.c-torture/compile/20081108-1.c, gcc.c-torture/compile/20081108-2.c, gcc.c-torture/compile/20081108-3.c, gcc.dg/bconstp-2.c, gcc.dg/bconstp-3.c, gcc.dg/bconstp-4.c, gcc.dg/c90-const-expr-6.c, gcc.dg/c90-const-expr-7.c, gcc.dg/c90-const-expr-8.c, gcc.dg/c90-const-expr-9.c, gcc.dg/c90-const-expr-10.c, gcc.dg/c90-const-expr-11.c, gcc.dg/c99-const-expr-6.c, gcc.dg/c99-const-expr-7.c, gcc.dg/c99-const-expr-8.c, gcc.dg/c99-const-expr-9.c, gcc.dg/c99-const-expr-10.c, gcc.dg/c99-const-expr-11.c, gcc.dg/c99-const-expr-12.c, gcc.dg/c99-const-expr-13.c, gcc.dg/compare10.c, gcc.dg/gnu89-const-expr-1.c, gcc.dg/gnu89-const-expr-2.c, gcc.dg/gnu99-const-expr-1.c, gcc.dg/gnu99-const-expr-2.c, gcc.dg/gnu99-const-expr-3.c, gcc.dg/vla-12.c, gcc.dg/vla-13.c, gcc.dg/vla-14.c, gcc.dg/vla-15.c, gcc.dg/vla-16.c: New tests. * gcc.dg/c90-const-expr-1.c, gcc.dg/c90-const-expr-2.c, gcc.dg/c90-const-expr-3.c, gcc.dg/c99-const-expr-2.c, gcc.dg/c99-const-expr-3.c, gcc.dg/c99-static-1.c: Remove XFAILs. * gcc.dg/c90-const-expr-2.c: Use ZERO in place of 0 in another case. * gcc.dg/overflow-warn-1.c, gcc.dg/overflow-warn-2.c, gcc.dg/overflow-warn-3.c, gcc.dg/overflow-warn-4.c: Remove XFAILs. Update expected messages. * gcc.dg/pr14649-1.c, gcc.dg/pr19984.c, gcc.dg/pr25682.c: Update expected messages. * gcc.dg/real-const-1.c: Replace with test from original PR. * gcc.dg/vect/pr32230.c: Use intermediate cast to __PTRDIFF_TYPE__ when casting from non-constant integer to pointer. From-SVN: r145254
2009-03-29 19:13:43 +01:00
/* glibc's tgmath.h relies on an expression that is not an integer
constant expression being treated as it was by GCC 4.4 and
earlier. */
fix = {
hackname = glibc_tgmath;
files = tgmath.h;
select = '\(\(\(type\) 0.25\) && \(\(type\) 0.25 - 1\)\)';
bypass = "__floating_type\\(type\\) \\\\\n.*__builtin_classify_type";
re PR c/456 (constant expressions constraints (gcc.dg/c90-const-expr-1)) PR c/456 PR c/5675 PR c/19976 PR c/29116 PR c/31871 PR c/35198 fixincludes: * inclhack.def (glibc_tgmath): New fix. * fixincl.x: Regenerate. * tests/base/tgmath.h: New. gcc: * builtins.c (fold_builtin_sincos): Build COMPOUND_EXPR in void_type_node. (fold_call_expr): Return a NOP_EXPR from folding rather than the contained expression. * c-common.c (c_fully_fold, c_fully_fold_internal, c_save_expr): New. (c_common_truthvalue_conversion): Use c_save_expr. Do not fold conditional expressions for C. (decl_constant_value_for_optimization): Move from decl_constant_value_for_broken_optimization in c-typeck.c. Check whether optimizing and that the expression is a VAR_DECL not of array type instead of doing such checks in the caller. Do not check pedantic. Call gcc_unreachable for C++. * c-common.def (C_MAYBE_CONST_EXPR): New. * c-common.h (c_fully_fold, c_save_expr, decl_constant_value_for_optimization): New prototypes. (C_MAYBE_CONST_EXPR_PRE, C_MAYBE_CONST_EXPR_EXPR, C_MAYBE_CONST_EXPR_INT_OPERANDS, C_MAYBE_CONST_EXPR_NON_CONST, EXPR_INT_CONST_OPERANDS): Define. * c-convert.c (convert): Strip nops from expression. * c-decl.c (groktypename): Take extra parameters expr and expr_const_operands. Update call to grokdeclarator. (start_decl): Update call to grokdeclarator. Add statement for expressions used in type of decl. (grokparm): Update call to grokdeclarator. (push_parm_decl): Update call to grokdeclarator. (build_compound_literal): Add parameter non_const and build a C_MAYBE_COSNT_EXPR if applicable. (grokdeclarator): Take extra parameters expr and expr_const_operands. Track expressions used in declaration specifiers and declarators. Fold array sizes and track whether they are constant expressions and whether they are integer constant expressions. (parser_xref_tag): Set expr and expr_const_operands fields in return value. (grokfield): Update call to grokdeclarator. (start_function): Update call to grokdeclarator. (build_null_declspecs): Set expr and expr_const_operands fields in return value. (declspecs_add_type): Handle expressions in typeof specifiers. * c-parser.c (c_parser_declspecs): Set expr and expr_const_operands fields for declaration specifiers. (c_parser_enum_specifier): Likewise. (c_parser_struct_or_union_specifier): Likewise. (c_parser_typeof_specifier): Likewise. Update call to groktypename. Fold expression as needed. Return expressions with type instead of adding statements. (c_parser_attributes): Update calls to c_parser_expr_list. (c_parser_statement_after_labels): Fold expression before passing to objc_build_throw_stmt. (c_parser_condition): Fold expression. (c_parser_asm_operands): Fold expression. (c_parser_conditional_expression): Use c_save_expr. Update call to build_conditional_expr. (c_parser_alignof_expression): Update call to groktypename. (c_parser_postfix_expression): Preserve C_MAYBE_CONST_EXPR as original_code. Fold expression argument of va_arg. Create C_MAYBE_CONST_EXPR to preserve side effects of expressions in type argument to va_arg. Update calls to groktypename. Fold array index for offsetof. Verify that first argument to __builtin_choose_expr has integer type. (c_parser_postfix_expression_after_paren_type): Update calls to groktypename and build_compound_literal. Handle expressions with side effects in type name. (c_parser_postfix_expression_after_primary): Update call to c_parser_expr_list. Set original_code for calls to __builtin_constant_p. (c_parser_expr_list): Take extra parameter fold_p. Fold expressions if requested. (c_parser_objc_type_name): Update call to groktypename. (c_parser_objc_synchronized_statement): Fold expression. (c_parser_objc_receiver): Fold expression. (c_parser_objc_keywordexpr): Update call to c_parser_expr_list. (c_parser_omp_clause_num_threads, c_parser_omp_clause_schedule, c_parser_omp_atomic, c_parser_omp_for_loop): Fold expressions. * c-tree.h (CONSTRUCTOR_NON_CONST): Define. (struct c_typespec): Add elements expr and expr_const_operands. (struct c_declspecs): Add elements expr and expr_const_operands. (groktypename, build_conditional_expr, build_compound_literal): Update prototypes. (in_late_binary_op): Declare. * c-typeck.c (note_integer_operands): New function. (in_late_binary_op): New variable. (decl_constant_value_for_broken_optimization): Move to c-common.c and rename to decl_constant_value_for_optimization. (default_function_array_conversion): Do not strip nops. (default_conversion): Do not call decl_constant_value_for_broken_optimization. (build_array_ref): Do not fold result. (c_expr_sizeof_expr): Fold operand. Use C_MAYBE_CONST_EXPR for result when operand is a VLA. (c_expr_sizeof_type): Update call to groktypename. Handle expressions included in type name. Use C_MAYBE_CONST_EXPR for result when operand names a VLA type. (build_function_call): Update call to build_compound_literal. Only fold result for calls to __builtin_* functions. Strip NOP_EXPR from INTEGER_CST returned from such functions. Fold the function designator. (convert_arguments): Fold arguments. Update call to convert_for_assignment. (build_unary_op): Handle increment and decrement of C_MAYBE_CONST_EXPR. Move lvalue checks for increment and decrement earlier. Fold operand of increment and decrement. Handle address of C_MAYBE_CONST_EXPR. Only fold expression being built for integer operand. Wrap returns that are INTEGER_CSTs without being integer constant expressions or that have integer constant operands without being INTEGER_CSTs. (lvalue_p): Handle C_MAYBE_CONST_EXPR. (build_conditional_expr): Add operand ifexp_bcp. Track whether result is an integer constant expression or can be used in unevaluated parts of one and avoid folding and wrap as appropriate. Fold operands before possibly doing -Wsign-compare warnings. (build_compound_expr): Wrap result for C99 if operands can be used in integer constant expressions. (build_c_cast): Update call to digest_init. Do not ignore overflow from casting floating-point constants to integers. Wrap results that could be confused with integer constant expressions, null pointer constants or floating-point constants. (c_cast_expr): Update call to groktypename. Handle expressions included in type name. (build_modify_expr): Handle modifying a C_MAYBE_CONST_EXPR. Fold lhs inside possible SAVE_EXPR. Fold RHS before assignment. Update calls to convert_for_assignment. (convert_for_assignment): Take new parameter null_pointer_constant. Do not strip nops or call decl_constant_value_for_broken_optimization. Set in_late_binary_op for conversions to boolean. (store_init_value): Update call to digest_init. (digest_init): Take new parameter null_pointer_constant. Do not call decl_constant_value_for_broken_optimization. pedwarn for initializers not constant expressions. Update calls to convert_for_assignment. (constructor_nonconst): New. (struct constructor_stack): Add nonconst element. (really_start_incremental_init, push_init_level, pop_init_level): Handle constructor_nonconst and nonconst element. (set_init_index): Call constant_expression_warning for array designators. (output_init_element): Fold value. Set constructor_nonconst as applicable. pedwarn for initializers not constant expressions. Update call to digest_init. Call constant_expression_warning where constant initializers are required. (process_init_element): Use c_save_expr. (c_finish_goto_ptr): Fold expression. (c_finish_return): Fold return value. Update call to convert_for_assignment. (c_start_case): Fold switch expression. (c_process_expr_stmt): Fold expression. (c_finish_stmt_expr): Create C_MAYBE_CONST_EXPR as needed to ensure statement expression is not evaluated in constant expression. (build_binary_op): Track whether results are integer constant expressions or may occur in such, disable folding and wrap results as applicable. Fold operands for -Wsign-compare warnings unless in_late_binary_op. (c_objc_common_truthvalue_conversion): Handle results folded to integer constants that are not integer constant expressions. * doc/extend.texi: Document when typeof operands are evaluated, that condition of __builtin_choose_expr is an integer constant expression, and more about use of __builtin_constant_p in initializers. gcc/objc: * objc-act.c (objc_finish_try_stmt): Set in_late_binary_op. gcc/testsuite: * gcc.c-torture/compile/20081108-1.c, gcc.c-torture/compile/20081108-2.c, gcc.c-torture/compile/20081108-3.c, gcc.dg/bconstp-2.c, gcc.dg/bconstp-3.c, gcc.dg/bconstp-4.c, gcc.dg/c90-const-expr-6.c, gcc.dg/c90-const-expr-7.c, gcc.dg/c90-const-expr-8.c, gcc.dg/c90-const-expr-9.c, gcc.dg/c90-const-expr-10.c, gcc.dg/c90-const-expr-11.c, gcc.dg/c99-const-expr-6.c, gcc.dg/c99-const-expr-7.c, gcc.dg/c99-const-expr-8.c, gcc.dg/c99-const-expr-9.c, gcc.dg/c99-const-expr-10.c, gcc.dg/c99-const-expr-11.c, gcc.dg/c99-const-expr-12.c, gcc.dg/c99-const-expr-13.c, gcc.dg/compare10.c, gcc.dg/gnu89-const-expr-1.c, gcc.dg/gnu89-const-expr-2.c, gcc.dg/gnu99-const-expr-1.c, gcc.dg/gnu99-const-expr-2.c, gcc.dg/gnu99-const-expr-3.c, gcc.dg/vla-12.c, gcc.dg/vla-13.c, gcc.dg/vla-14.c, gcc.dg/vla-15.c, gcc.dg/vla-16.c: New tests. * gcc.dg/c90-const-expr-1.c, gcc.dg/c90-const-expr-2.c, gcc.dg/c90-const-expr-3.c, gcc.dg/c99-const-expr-2.c, gcc.dg/c99-const-expr-3.c, gcc.dg/c99-static-1.c: Remove XFAILs. * gcc.dg/c90-const-expr-2.c: Use ZERO in place of 0 in another case. * gcc.dg/overflow-warn-1.c, gcc.dg/overflow-warn-2.c, gcc.dg/overflow-warn-3.c, gcc.dg/overflow-warn-4.c: Remove XFAILs. Update expected messages. * gcc.dg/pr14649-1.c, gcc.dg/pr19984.c, gcc.dg/pr25682.c: Update expected messages. * gcc.dg/real-const-1.c: Replace with test from original PR. * gcc.dg/vect/pr32230.c: Use intermediate cast to __PTRDIFF_TYPE__ when casting from non-constant integer to pointer. From-SVN: r145254
2009-03-29 19:13:43 +01:00
c_fix = format;
c_fix_arg = "(__builtin_classify_type ((type) 0) == 8 || "
"(__builtin_classify_type ((type) 0) == 9 && "
"__builtin_classify_type (__real__ ((type) 0)) == 8))";
re PR c/456 (constant expressions constraints (gcc.dg/c90-const-expr-1)) PR c/456 PR c/5675 PR c/19976 PR c/29116 PR c/31871 PR c/35198 fixincludes: * inclhack.def (glibc_tgmath): New fix. * fixincl.x: Regenerate. * tests/base/tgmath.h: New. gcc: * builtins.c (fold_builtin_sincos): Build COMPOUND_EXPR in void_type_node. (fold_call_expr): Return a NOP_EXPR from folding rather than the contained expression. * c-common.c (c_fully_fold, c_fully_fold_internal, c_save_expr): New. (c_common_truthvalue_conversion): Use c_save_expr. Do not fold conditional expressions for C. (decl_constant_value_for_optimization): Move from decl_constant_value_for_broken_optimization in c-typeck.c. Check whether optimizing and that the expression is a VAR_DECL not of array type instead of doing such checks in the caller. Do not check pedantic. Call gcc_unreachable for C++. * c-common.def (C_MAYBE_CONST_EXPR): New. * c-common.h (c_fully_fold, c_save_expr, decl_constant_value_for_optimization): New prototypes. (C_MAYBE_CONST_EXPR_PRE, C_MAYBE_CONST_EXPR_EXPR, C_MAYBE_CONST_EXPR_INT_OPERANDS, C_MAYBE_CONST_EXPR_NON_CONST, EXPR_INT_CONST_OPERANDS): Define. * c-convert.c (convert): Strip nops from expression. * c-decl.c (groktypename): Take extra parameters expr and expr_const_operands. Update call to grokdeclarator. (start_decl): Update call to grokdeclarator. Add statement for expressions used in type of decl. (grokparm): Update call to grokdeclarator. (push_parm_decl): Update call to grokdeclarator. (build_compound_literal): Add parameter non_const and build a C_MAYBE_COSNT_EXPR if applicable. (grokdeclarator): Take extra parameters expr and expr_const_operands. Track expressions used in declaration specifiers and declarators. Fold array sizes and track whether they are constant expressions and whether they are integer constant expressions. (parser_xref_tag): Set expr and expr_const_operands fields in return value. (grokfield): Update call to grokdeclarator. (start_function): Update call to grokdeclarator. (build_null_declspecs): Set expr and expr_const_operands fields in return value. (declspecs_add_type): Handle expressions in typeof specifiers. * c-parser.c (c_parser_declspecs): Set expr and expr_const_operands fields for declaration specifiers. (c_parser_enum_specifier): Likewise. (c_parser_struct_or_union_specifier): Likewise. (c_parser_typeof_specifier): Likewise. Update call to groktypename. Fold expression as needed. Return expressions with type instead of adding statements. (c_parser_attributes): Update calls to c_parser_expr_list. (c_parser_statement_after_labels): Fold expression before passing to objc_build_throw_stmt. (c_parser_condition): Fold expression. (c_parser_asm_operands): Fold expression. (c_parser_conditional_expression): Use c_save_expr. Update call to build_conditional_expr. (c_parser_alignof_expression): Update call to groktypename. (c_parser_postfix_expression): Preserve C_MAYBE_CONST_EXPR as original_code. Fold expression argument of va_arg. Create C_MAYBE_CONST_EXPR to preserve side effects of expressions in type argument to va_arg. Update calls to groktypename. Fold array index for offsetof. Verify that first argument to __builtin_choose_expr has integer type. (c_parser_postfix_expression_after_paren_type): Update calls to groktypename and build_compound_literal. Handle expressions with side effects in type name. (c_parser_postfix_expression_after_primary): Update call to c_parser_expr_list. Set original_code for calls to __builtin_constant_p. (c_parser_expr_list): Take extra parameter fold_p. Fold expressions if requested. (c_parser_objc_type_name): Update call to groktypename. (c_parser_objc_synchronized_statement): Fold expression. (c_parser_objc_receiver): Fold expression. (c_parser_objc_keywordexpr): Update call to c_parser_expr_list. (c_parser_omp_clause_num_threads, c_parser_omp_clause_schedule, c_parser_omp_atomic, c_parser_omp_for_loop): Fold expressions. * c-tree.h (CONSTRUCTOR_NON_CONST): Define. (struct c_typespec): Add elements expr and expr_const_operands. (struct c_declspecs): Add elements expr and expr_const_operands. (groktypename, build_conditional_expr, build_compound_literal): Update prototypes. (in_late_binary_op): Declare. * c-typeck.c (note_integer_operands): New function. (in_late_binary_op): New variable. (decl_constant_value_for_broken_optimization): Move to c-common.c and rename to decl_constant_value_for_optimization. (default_function_array_conversion): Do not strip nops. (default_conversion): Do not call decl_constant_value_for_broken_optimization. (build_array_ref): Do not fold result. (c_expr_sizeof_expr): Fold operand. Use C_MAYBE_CONST_EXPR for result when operand is a VLA. (c_expr_sizeof_type): Update call to groktypename. Handle expressions included in type name. Use C_MAYBE_CONST_EXPR for result when operand names a VLA type. (build_function_call): Update call to build_compound_literal. Only fold result for calls to __builtin_* functions. Strip NOP_EXPR from INTEGER_CST returned from such functions. Fold the function designator. (convert_arguments): Fold arguments. Update call to convert_for_assignment. (build_unary_op): Handle increment and decrement of C_MAYBE_CONST_EXPR. Move lvalue checks for increment and decrement earlier. Fold operand of increment and decrement. Handle address of C_MAYBE_CONST_EXPR. Only fold expression being built for integer operand. Wrap returns that are INTEGER_CSTs without being integer constant expressions or that have integer constant operands without being INTEGER_CSTs. (lvalue_p): Handle C_MAYBE_CONST_EXPR. (build_conditional_expr): Add operand ifexp_bcp. Track whether result is an integer constant expression or can be used in unevaluated parts of one and avoid folding and wrap as appropriate. Fold operands before possibly doing -Wsign-compare warnings. (build_compound_expr): Wrap result for C99 if operands can be used in integer constant expressions. (build_c_cast): Update call to digest_init. Do not ignore overflow from casting floating-point constants to integers. Wrap results that could be confused with integer constant expressions, null pointer constants or floating-point constants. (c_cast_expr): Update call to groktypename. Handle expressions included in type name. (build_modify_expr): Handle modifying a C_MAYBE_CONST_EXPR. Fold lhs inside possible SAVE_EXPR. Fold RHS before assignment. Update calls to convert_for_assignment. (convert_for_assignment): Take new parameter null_pointer_constant. Do not strip nops or call decl_constant_value_for_broken_optimization. Set in_late_binary_op for conversions to boolean. (store_init_value): Update call to digest_init. (digest_init): Take new parameter null_pointer_constant. Do not call decl_constant_value_for_broken_optimization. pedwarn for initializers not constant expressions. Update calls to convert_for_assignment. (constructor_nonconst): New. (struct constructor_stack): Add nonconst element. (really_start_incremental_init, push_init_level, pop_init_level): Handle constructor_nonconst and nonconst element. (set_init_index): Call constant_expression_warning for array designators. (output_init_element): Fold value. Set constructor_nonconst as applicable. pedwarn for initializers not constant expressions. Update call to digest_init. Call constant_expression_warning where constant initializers are required. (process_init_element): Use c_save_expr. (c_finish_goto_ptr): Fold expression. (c_finish_return): Fold return value. Update call to convert_for_assignment. (c_start_case): Fold switch expression. (c_process_expr_stmt): Fold expression. (c_finish_stmt_expr): Create C_MAYBE_CONST_EXPR as needed to ensure statement expression is not evaluated in constant expression. (build_binary_op): Track whether results are integer constant expressions or may occur in such, disable folding and wrap results as applicable. Fold operands for -Wsign-compare warnings unless in_late_binary_op. (c_objc_common_truthvalue_conversion): Handle results folded to integer constants that are not integer constant expressions. * doc/extend.texi: Document when typeof operands are evaluated, that condition of __builtin_choose_expr is an integer constant expression, and more about use of __builtin_constant_p in initializers. gcc/objc: * objc-act.c (objc_finish_try_stmt): Set in_late_binary_op. gcc/testsuite: * gcc.c-torture/compile/20081108-1.c, gcc.c-torture/compile/20081108-2.c, gcc.c-torture/compile/20081108-3.c, gcc.dg/bconstp-2.c, gcc.dg/bconstp-3.c, gcc.dg/bconstp-4.c, gcc.dg/c90-const-expr-6.c, gcc.dg/c90-const-expr-7.c, gcc.dg/c90-const-expr-8.c, gcc.dg/c90-const-expr-9.c, gcc.dg/c90-const-expr-10.c, gcc.dg/c90-const-expr-11.c, gcc.dg/c99-const-expr-6.c, gcc.dg/c99-const-expr-7.c, gcc.dg/c99-const-expr-8.c, gcc.dg/c99-const-expr-9.c, gcc.dg/c99-const-expr-10.c, gcc.dg/c99-const-expr-11.c, gcc.dg/c99-const-expr-12.c, gcc.dg/c99-const-expr-13.c, gcc.dg/compare10.c, gcc.dg/gnu89-const-expr-1.c, gcc.dg/gnu89-const-expr-2.c, gcc.dg/gnu99-const-expr-1.c, gcc.dg/gnu99-const-expr-2.c, gcc.dg/gnu99-const-expr-3.c, gcc.dg/vla-12.c, gcc.dg/vla-13.c, gcc.dg/vla-14.c, gcc.dg/vla-15.c, gcc.dg/vla-16.c: New tests. * gcc.dg/c90-const-expr-1.c, gcc.dg/c90-const-expr-2.c, gcc.dg/c90-const-expr-3.c, gcc.dg/c99-const-expr-2.c, gcc.dg/c99-const-expr-3.c, gcc.dg/c99-static-1.c: Remove XFAILs. * gcc.dg/c90-const-expr-2.c: Use ZERO in place of 0 in another case. * gcc.dg/overflow-warn-1.c, gcc.dg/overflow-warn-2.c, gcc.dg/overflow-warn-3.c, gcc.dg/overflow-warn-4.c: Remove XFAILs. Update expected messages. * gcc.dg/pr14649-1.c, gcc.dg/pr19984.c, gcc.dg/pr25682.c: Update expected messages. * gcc.dg/real-const-1.c: Replace with test from original PR. * gcc.dg/vect/pr32230.c: Use intermediate cast to __PTRDIFF_TYPE__ when casting from non-constant integer to pointer. From-SVN: r145254
2009-03-29 19:13:43 +01:00
test_text = "# define __floating_type(type) (((type) 0.25) && ((type) 0.25 - 1))";
};
/*
* Fix these files to use the types we think they should for
* ptrdiff_t, size_t, and wchar_t.
*
* This defines the types in terms of macros predefined by our 'cpp'.
* This is supposedly necessary for glibc's handling of these types.
* It's probably not necessary for anyone else, but it doesn't hurt.
*/
fix = {
hackname = gnu_types;
files = "sys/types.h";
files = "stdlib.h";
files = "sys/stdtypes.h";
files = "stddef.h";
files = "memory.h";
files = "unistd.h";
bypass = '_GCC_(PTRDIFF|SIZE|WCHAR)_T';
select = "^[ \t]*typedef[ \t]+.*[ \t](ptrdiff|size|wchar)_t;";
c_fix = gnu_type;
/* The Solaris 10 headers already define these types correctly. */
mach = '*-*-solaris2.1[0-9]*';
not_machine = true;
test_text = "typedef long int ptrdiff_t; /* long int */\n"
"typedef uint_t size_t; /* uint_t */\n"
"typedef ushort_t wchar_t; /* ushort_t */";
};
/*
* Fix HP & Sony's use of "../machine/xxx.h"
* to refer to: <machine/xxx.h>
*/
fix = {
hackname = hp_inline;
files = sys/spinlock.h;
files = machine/machparam.h;
select = "[ \t]*#[ \t]*include[ \t]+" '"\.\./machine/';
c_fix = format;
c_fix_arg = "%1<machine/%2.h>";
c_fix_arg = "([ \t]*#[ \t]*include[ \t]+)" '"\.\./machine/'
'([a-z]+)\.h"';
test_text = ' # include "../machine/mumble.h"';
};
/*
* Check for (...) in C++ code in HP/UX sys/file.h.
*/
fix = {
hackname = hp_sysfile;
files = sys/file.h;
select = "HPUX_SOURCE";
c_fix = format;
c_fix_arg = "(struct file *, ...)";
c_fix_arg = '\(\.\.\.\)';
test_text = "extern void foo(...); /* HPUX_SOURCE - bad varargs */";
};
/*
* Un-Hide a series of five FP defines from post-1999 compliance GCC:
* FP_NORMAL, FP_ZERO, FP_INFINITE, FP_SUBNORMAL and FP_NAN
*/
fix = {
hackname = hppa_hpux_fp_macros;
mach = "hppa*-hp-hpux11*";
files = math.h;
select = "#[ \t]*define[ \t]*FP_NORMAL.*\n"
"#[ \t]*define[ \t]*FP_ZERO.*\n"
"#[ \t]*define[ \t]*FP_INFINITE.*\n"
"#[ \t]*define[ \t]*FP_SUBNORMAL.*\n"
"#[ \t]*define[ \t]*FP_NAN.*\n";
c_fix = format;
c_fix_arg = <<- _EOFix_
#endif /* _INCLUDE_HPUX_SOURCE */
#if defined(_INCLUDE_HPUX_SOURCE) || \
(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
%0#endif
#ifdef _INCLUDE_HPUX_SOURCE
_EOFix_;
test_text =
"# define FP_NORMAL 0\n"
"# define FP_ZERO 1\n"
"# define FP_INFINITE 2\n"
"# define FP_SUBNORMAL 3\n"
"# define FP_NAN 4\n";
};
/*
* Delete C++ double pow (double, int) inline function from HP-UX 10 & 11
* math.h to prevent clash with define in c_std/bits/std_cmath.h.
*/
fix = {
hackname = hpux10_cpp_pow_inline;
files = fixinc-test-limits.h, math.h;
select = <<- END_POW_INLINE
^# +ifdef +__cplusplus
+\}
+inline +double +pow\(double +__d,int +__expon\) +\{
[ ]+return +pow\(__d,\(double\)__expon\);
+\}
+extern +"C" +\{
#else
# +endif
END_POW_INLINE;
c_fix = format;
c_fix_arg = "";
test_text =
"# ifdef __cplusplus\n"
" }\n"
" inline double pow(double __d,int __expon) {\n"
"\t return pow(__d,(double)__expon);\n"
" }\n"
' extern "C"' " {\n"
"#else\n"
"# endif";
};
fix = {
hackname = hpux11_cpp_pow_inline;
files = math.h;
select = " +inline double pow\\(double d,int expon\\) \\{\n"
" +return pow\\(d, \\(double\\)expon\\);\n"
" +\\}\n";
c_fix = format;
c_fix_arg = "";
test_text =
" inline double pow(double d,int expon) {\n"
" return pow(d, (double)expon);\n"
" }\n";
};
/*
* This hack fixes the declarations of _DINFINITY, _SINFINITY and _SQNAN.
*/
fix = {
hackname = hpux_math_constexpr;
mach = "*-hp-hpux11*";
files = math.h;
sed = "s@^[ \t]*extern[ \t]*const[ \t]*double[ \t]*_DINFINITY;"
"[ \t]*$@# define _DINFINITY (__builtin_inf ())@";
sed = "s@^[ \t]*extern[ \t]*const[ \t]*float[ \t]*_SINFINITY;"
"[ \t]*$@# define _SINFINITY (__builtin_inff ())@";
sed = "s@^[ \t]*extern[ \t]*const[ \t]*float[ \t]*_SQNAN;"
"[ \t]*$@# define _SQNAN (__builtin_nanf (\\\"\\\"))@";
test_text = " extern const double _DINFINITY;\n"
" extern const float _SINFINITY;\n"
" extern const float _SQNAN;";
};
/*
* Fix hpux 10.X missing ctype declarations 1
*/
fix = {
hackname = hpux10_ctype_declarations1;
files = ctype.h;
select = "^#[ \t]*define _toupper\\(__c\\)[ \t]*__toupper\\(__c\\)";
bypass = "^[ \t]*extern[ \t]*int[ \t]*__tolower[ \t]*\\(";
c_fix = format;
c_fix_arg = "#ifdef _PROTOTYPES\n"
"extern int __tolower(int);\n"
"extern int __toupper(int);\n"
"#else /* NOT _PROTOTYPES */\n"
"extern int __tolower();\n"
"extern int __toupper();\n"
"#endif /* _PROTOTYPES */\n\n"
"%0\n";
test_text = "# define _toupper(__c) __toupper(__c)\n";
};
/*
* Fix hpux 10.X missing ctype declarations 2
*/
fix = {
hackname = hpux10_ctype_declarations2;
files = ctype.h;
select = "^# if defined\\(_SB_CTYPE_MACROS\\) && \\!defined\\(__lint\\)";
bypass = "^[ \t]*extern[ \t]*int[ \t]*_isalnum[ \t]*\\(";
c_fix = format;
c_fix_arg = "%0\n\n"
"#ifdef _PROTOTYPES\n"
" extern int _isalnum(int);\n"
" extern int _isalpha(int);\n"
" extern int _iscntrl(int);\n"
" extern int _isdigit(int);\n"
" extern int _isgraph(int);\n"
" extern int _islower(int);\n"
" extern int _isprint(int);\n"
" extern int _ispunct(int);\n"
" extern int _isspace(int);\n"
" extern int _isupper(int);\n"
" extern int _isxdigit(int);\n"
"# else /* not _PROTOTYPES */\n"
" extern int _isalnum();\n"
" extern int _isalpha();\n"
" extern int _iscntrl();\n"
" extern int _isdigit();\n"
" extern int _isgraph();\n"
" extern int _islower();\n"
" extern int _isprint();\n"
" extern int _ispunct();\n"
" extern int _isspace();\n"
" extern int _isupper();\n"
" extern int _isxdigit();\n"
"#endif /* _PROTOTYPES */\n";
test_text = "# if defined(_SB_CTYPE_MACROS) && !defined(__lint)\n"
" extern unsigned int *__SB_masks;\n";
};
/*
* Fix hpux 10.X missing stdio declarations
*/
fix = {
hackname = hpux10_stdio_declarations;
files = stdio.h;
select = "^#[ \t]*define _iob[ \t]*__iob";
bypass = "^[ \t]*extern[ \t]*int[ \t]*vsnprintf[ \t]*\\(";
c_fix = format;
c_fix_arg = "%0\n\n"
"# if defined(__STDC__) || defined(__cplusplus)\n"
" extern int snprintf(char *, size_t, const char *, ...);\n"
" extern int vsnprintf(char *, size_t, const char *, __va_list);\n"
"# else /* not __STDC__) || __cplusplus */\n"
" extern int snprintf();\n"
" extern int vsnprintf();\n"
"# endif /* __STDC__) || __cplusplus */\n";
test_text = "# define _iob __iob\n";
};
/*
* The HP-UX stddef.h is replaced by gcc's. It doesn't include sys/stdsyms.h.
* As a result, we need to include sys/stdsyms.h in alloca.h.
*/
fix = {
hackname = hppa_hpux11_alloca;
mach = "hppa*-*-hpux11*";
files = alloca.h;
select = "#ifndef _STDDEF_INCLUDED";
c_fix = format;
c_fix_arg = "#ifndef _SYS_STDSYMS_INCLUDED\n"
"# include <sys/stdsyms.h>\n"
"#endif /* _SYS_STDSYMS_INCLUDED */\n\n"
"%0";
test_text = "#ifndef _STDDEF_INCLUDED";
};
2002-10-27 17:02:29 +00:00
/*
* Make sure hpux defines abs in header.
*/
fix = {
hackname = hpux11_abs;
mach = "*-hp-hpux11*";
2002-10-27 17:02:29 +00:00
files = stdlib.h;
select = "ifndef _MATH_INCLUDED";
c_fix = format;
c_fix_arg = "if !defined(_MATH_INCLUDED) || defined(__GNUG__)";
test_text = "#ifndef _MATH_INCLUDED";
};
/*
* Fix hpux11 __LWP_RWLOCK_VALID define
*/
fix = {
hackname = hpux11_lwp_rwlock_valid;
mach = "*-hp-hpux11*";
files = sys/pthread.h;
select = "#define __LWP_RWLOCK_VALID[ \t]*0x8c91";
c_fix = format;
c_fix_arg = "#define __LWP_RWLOCK_VALID -29551";
test_text = "#define __LWP_RWLOCK_VALID 0x8c91";
};
/*
* hpux sendfile()
*/
fix = {
hackname = hpux11_extern_sendfile;
mach = "*-hp-hpux11.[12]*";
files = sys/socket.h;
select = "^[ \t]*extern sbsize_t sendfile.*\n.*, int\\)\\);\n";
c_fix = format;
c_fix_arg = "#ifndef _APP32_64BIT_OFF_T\n%0#endif\n";
test_text = " extern sbsize_t sendfile __((int, int, off_t, bsize_t,\n"
" const struct iovec *, int));\n";
};
/*
* hpux sendpath()
*/
fix = {
hackname = hpux11_extern_sendpath;
mach = "*-hp-hpux11.[12]*";
files = sys/socket.h;
select = "^[ \t]*extern sbsize_t sendpath.*\n.*, int\\)\\);\n";
c_fix = format;
c_fix_arg = "#ifndef _APP32_64BIT_OFF_T\n%0#endif\n";
test_text = " extern sbsize_t sendpath __((int, int, off_t, bsize_t,\n"
" const struct iovec *, int));\n";
};
/*
* Keep HP-UX 11 from stomping on C++ math namespace
* with defines for fabsf.
*/
fix = {
hackname = hpux11_fabsf;
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
mach = "*-hp-hpux11*";
files = math.h;
select = "^[ \t]*#[ \t]*define[ \t]+fabsf\\(.*";
c_fix = format;
c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
test_text =
"#ifdef _PA_RISC\n"
"# define fabsf(x) ((float)fabs((double)(float)(x)))\n"
"#endif";
};
/*
* The definitions for PTHREAD_MUTEX_INITIALIZER and similar initializers
* in pthread.h need to be constant expressions to be standard complient.
* As a result, we need to remove the void * casts in the initializers
* (see hpux11_pthread_const) and to change the __(M|C|RW)POINTER defines
* to use the long type.
*/
fix = {
hackname = hpux11_pthread_pointer;
mach = "*-hp-hpux11.[0-3]*";
files = sys/pthread.h;
select = "(void[ \t]*\\*)(m|c|rw)(_ptr)";
c_fix = format;
c_fix_arg = "long\t%2%3";
test_text = "#define __MPOINTER\t\tvoid\t *m_ptr";
};
/*
* Remove void pointer cast and fix C99 constant in __POINTER_SET defines.
*/
fix = {
hackname = hpux11_pthread_const;
mach = "*-hp-hpux11.[0-3]*";
files = sys/pthread.h;
select = "^(#define[ \t]+__POINTER_SET[ \t0,]*)(.*\\))";
c_fix = format;
c_fix_arg = "%11";
test_text = "#define __POINTER_SET\t\t((void *) 1LL)";
};
/*
* Prevent HP-UX 11 from defining __size_t and preventing size_t from
* being defined by having it define _hpux_size_t instead.
*/
fix = {
hackname = hpux11_size_t;
mach = "*-hp-hpux11*";
select = "__size_t";
c_fix = format;
c_fix_arg = "_hpux_size_t";
test_text =
"#define __size_t size_t\n"
" extern int getpwuid_r( char *, __size_t, struct passwd **);\n";
};
/*
* Fix hpux 11.00 broken snprintf declaration
* (third argument is char *, needs to be const char * to prevent
* spurious warnings with -Wwrite-strings or in C++).
*/
fix = {
hackname = hpux11_snprintf;
files = stdio.h;
select = '(extern int snprintf *\(char *\*, *(|__|_hpux_)size_t,)'
' *(char *\*, *\.\.\.\);)';
c_fix = format;
c_fix_arg = '%1 const %3';
test_text = "extern int snprintf(char *, size_t, char *, ...);\n"
"extern int snprintf(char *, __size_t, char *, ...);\n"
"extern int snprintf(char *, _hpux_size_t, char *, ...);";
};
/*
* Fix hpux 11.00 broken vsnprintf declaration
*/
fix = {
hackname = hpux11_vsnprintf;
files = stdio.h;
select = '(extern int vsnprintf\(char \*, _[hpux]*_size_t, '
'const char \*,) __va__list\);';
c_fix = format;
c_fix_arg = "%1 __va_list);";
test_text = 'extern int vsnprintf(char *, _hpux_size_t, const char *,'
' __va__list);';
};
/*
* Fix missing const in hpux vsscanf declaration
*/
fix = {
hackname = hpux_vsscanf;
mach = "*-*-hpux*";
files = stdio.h;
select = '(extern int vsscanf\()char';
c_fix = format;
c_fix_arg = "%1const char";
test_text = 'extern int vsscanf(char *, const char *, __va_list);';
};
/*
* get rid of bogus inline definitions in HP-UX 8.0
*/
fix = {
hackname = hpux8_bogus_inlines;
files = math.h;
select = inline;
bypass = "__GNUG__";
sed = "s@inline int abs(int [a-z][a-z]*) {.*}"
"@extern \"C\" int abs(int);@";
sed = "s@inline double abs(double [a-z][a-z]*) {.*}@@";
sed = "s@inline int sqr(int [a-z][a-z]*) {.*}@@";
sed = "s@inline double sqr(double [a-z][a-z]*) {.*}@@";
test_text = "inline int abs(int v) { return (v>=0)?v:-v; }\n"
"inline double sqr(double v) { return v**0.5; }";
};
/*
* hpux intptr
*/
fix = {
hackname = hpux_c99_intptr;
mach = "*-hp-hpux11.3*";
files = stdint-hpux11.h, stdint.h;
sed = "s@^[ \t]*#[ \t]*define[ \t]*PTRDIFF_MAX[ \t]*"
"INT32_MAX[ \t]*$@#define PTRDIFF_MAX (2147483647l)@";
sed = "s@^[ \t]*#[ \t]*define[ \t]*PTRDIFF_MIN[ \t]*"
"INT32_MIN[ \t]*$@#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)@";
sed = "s@^[ \t]*#[ \t]*define[ \t]*INTPTR_MAX[ \t]*"
"INT32_MAX[ \t]*$@#define INTPTR_MAX (2147483647l)@";
sed = "s@^[ \t]*#[ \t]*define[ \t]*INTPTR_MIN[ \t]*"
"INT32_MIN[ \t]*$@#define INTPTR_MIN (-INTPTR_MAX - 1)@";
sed = "s@^[ \t]*#[ \t]*define[ \t]*UINTPTR_MAX[ \t]*"
"UINT32_MAX[ \t]*$@#define UINTPTR_MAX (4294967295ul)@";
sed = "s@^[ \t]*#[ \t]*define[ \t]*SIZE_MAX[ \t]*"
"UINT32_MAX[ \t]*$@#define SIZE_MAX (4294967295ul)@";
test_text = "#define PTRDIFF_MAX INT32_MAX\n"
"#define PTRDIFF_MIN INT32_MIN\n"
"#define INTPTR_MAX INT32_MAX\n"
"#define INTPTR_MIN INT32_MIN\n"
"#define UINTPTR_MAX UINT32_MAX\n"
"#define SIZE_MAX UINT32_MAX\n";
};
/*
* These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31.
*/
fix = {
hackname = hpux_c99_inttypes;
mach = "*-hp-hpux11.[23]*";
files = inttypes.h;
files = stdint-hpux11.h, stdint.h;
sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT8_C(__c)[ \t]*"
"__CONCAT_U__(__c)[ \t]*$@#define UINT8_C(__c) (__c)@";
sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT16_C(__c)[ \t]*"
"__CONCAT_U__(__c)[ \t]*$@#define UINT16_C(__c) (__c)@";
sed = "s@^[ \t]*#[ \t]*define[ \t]*INT32_C(__c)[ \t]*"
"__CONCAT__(__c,l)[ \t]*$@#define INT32_C(__c) (__c)@";
sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT32_C(__c)[ \t].*$@"
"#define UINT32_C(__c) __CONCAT__(__c,u)@";
test_text = "#define UINT8_C(__c) __CONCAT_U__(__c)\n"
"#define UINT16_C(__c) __CONCAT_U__(__c)\n"
"#define INT32_C(__c) __CONCAT__(__c,l)\n"
"#define UINT32_C(__c) __CONCAT__(__c,ul)\n";
};
/*
* These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31.
*/
fix = {
hackname = hpux_c99_inttypes2;
mach = "*-hp-hpux11.2*";
files = stdint-hpux11.h, stdint.h;
sed = "s@^[ \t]*#[ \t]*define[ \t]*INT8_C(__c)[ \t]*"
"((signed char)(__c))[ \t]*$@#define INT8_C(__c) (__c)@";
sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT8_C(__c)[ \t]*"
"((unsigned char)(__c))[ \t]*$@#define UINT8_C(__c) (__c)@";
sed = "s@^[ \t]*#[ \t]*define[ \t]*INT16_C(__c)[ \t]*"
"((short)(__c))[ \t]*$@#define INT16_C(__c) (__c)@";
sed = "s@^[ \t]*#[ \t]*define[ \t]*UINT16_C(__c)[ \t]*"
"((unsigned short)(__c))[ \t]*$@#define UINT16_C(__c) (__c)@";
test_text = "# define INT8_C(__c) ((signed char)(__c))\n"
"# define UINT8_C(__c) ((unsigned char)(__c))\n"
"# define INT16_C(__c) ((short)(__c))\n"
"# define UINT16_C(__c) ((unsigned short)(__c))\n";
};
/*
* Fix broken and missing defines in inttypes.h
*/
fix = {
hackname = hpux_c99_inttypes3;
mach = "hppa*-hp-hpux11*";
files = inttypes.h;
select = "#define[ \t]INTPTR_MAX[ \t]*\n"
"#define[ \t]UINTPTR_MAX[ \t]*\n";
c_fix = format;
c_fix_arg = "#undef SIZE_MAX\n"
"#define SIZE_MAX __SIZE_MAX__\n"
"#ifdef __INTPTR_MAX__\n"
"# undef INTPTR_MAX\n"
"# define INTPTR_MAX __INTPTR_MAX__\n"
"# undef INTPTR_MIN\n"
"# define INTPTR_MIN (-INTPTR_MAX - 1)\n"
"#endif\n"
"#ifdef __UINTPTR_MAX__\n"
"# undef UINTPTR_MAX\n"
"# define UINTPTR_MAX __UINTPTR_MAX__\n"
"#endif\n";
test_text = "#define INTPTR_MAX\n"
"#define UINTPTR_MAX\n";
};
/*
* Fix missing SCNuMAX defines in inttypes.h
*/
fix = {
hackname = hpux_c99_inttypes4;
mach = "hppa*-hp-hpux11.[01]*";
files = inttypes.h;
sed = "/^[ \t]*#[ \t]*define[ \t]*SCNxMAX[ \t]*SCNx64/a\\\n"
"#define SCNuMAX \t SCNu64\n";
sed = "/^[ \t]*#[ \t]*define[ \t]*SCNxMAX[ \t]*SCNx32/a\\\n"
"#define SCNuMAX \t SCNu32\n";
test_text = "#define SCNxMAX SCNx64\n"
"#define SCNxMAX SCNx32\n";
};
/*
* Fix missing PRIdPTR defines in inttypes.h
*/
fix = {
hackname = hpux_c99_inttypes5;
mach = "hppa*-hp-hpux11.[01]*";
files = inttypes.h;
select = "#ifndef[ \t]_KERNEL[ \t]*\n";
c_fix = format;
c_fix_arg = "#ifndef __LP64__\n"
"#define PRIdPTR\t\tPRId32\n"
"#define PRIiPTR\t\tPRIi32\n"
"#define PRIoPTR\t\tPRIo32\n"
"#define PRIuPTR\t\tPRIu32\n"
"#define PRIxPTR\t\tPRIx32\n"
"#define PRIXPTR\t\tPRIX32\n"
"#else\n"
"#define PRIdPTR\t\tPRId64\n"
"#define PRIiPTR\t\tPRIi64\n"
"#define PRIoPTR\t\tPRIo64\n"
"#define PRIuPTR\t\tPRIu64\n"
"#define PRIxPTR\t\tPRIx64\n"
"#define PRIXPTR\t\tPRIX64\n"
"#endif\n\n"
"#ifndef _KERNEL\n";
test_text = "#ifndef _KERNEL\n";
};
/*
* Fix hpux broken ctype macros
*/
fix = {
hackname = hpux_ctype_macros;
files = ctype.h;
select = '((: |\()__SB_masks \? )'
'(__SB_masks\[__(alnum|c)\] & _IS)';
c_fix = format;
c_fix_arg = "%1(int)%3";
test_text = ": __SB_masks ? __SB_masks[__alnum] & _ISCNTRL\n"
"# define isalpha(__c) (__SB_masks ? __SB_masks[__c] & _IS\n";
};
/*
* hpux errno()
*/
fix = {
hackname = hpux_extern_errno;
mach = "*-hp-hpux10.*";
mach = "*-hp-hpux11.[0-2]*";
files = errno.h;
select = "^[ \t]*extern int errno;$";
c_fix = format;
c_fix_arg = "#ifdef __cplusplus\n"
"extern \"C\" {\n"
"#endif\n"
"%0\n"
"#ifdef __cplusplus\n"
"}\n"
"#endif";
test_text = " extern int errno;\n";
};
/*
* Fix hpux broken #ifndef _XOPEN_SOURCE_EXTENDED conditional on htonl etc.
*/
fix = {
hackname = hpux_htonl;
files = netinet/in.h;
select = "#ifndef _XOPEN_SOURCE_EXTENDED[ \t]*\n"
"(/\\*\n"
" \\* Macros for number representation conversion\\.\n"
" \\*/\n"
"#ifndef ntohl)";
c_fix = format;
c_fix_arg = "#if 1\n%1";
test_text = "#ifndef _XOPEN_SOURCE_EXTENDED\n"
"/*\n"
" * Macros for number representation conversion.\n"
" */\n"
"#ifndef ntohl\n"
"#define ntohl(x) (x)\n"
"#define ntohs(x) (x)\n"
"#define htonl(x) (x)\n"
"#define htons(x) (x)\n"
"#endif\n"
"#endif /* ! _XOPEN_SOURCE_EXTENDED */";
};
/*
* These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31.
*/
fix = {
hackname = hpux_imaginary_i;
mach = "ia64-hp-hpux11.*";
files = complex.h;
select = "^[ \t]*#[ \t]*define[ \t]*_Complex_I.*";
c_fix = format;
c_fix_arg = "#define _Complex_I (__extension__ 1.0iF)";
test_text = "#define _Complex_I (0.f+_Imaginary_I)\n";
};
/*
* These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31.
*/
fix = {
hackname = hpux_inttype_int8_t;
mach = "*-hp-hpux1[01].*";
files = sys/_inttypes.h;
select = "^[ \t]*typedef[ \t]*char[ \t]*int(_least){0,1}8_t.*";
c_fix = format;
c_fix_arg = "typedef signed char int%18_t;";
test_text = "typedef char int_least8_t;\n"
"typedef char int8_t;\n";
};
/*
* HP-UX long_double
*/
fix = {
hackname = hpux_long_double;
mach = "*-*-hpux10*";
mach = "*-*-hpux11.[012]*";
files = stdlib.h;
select = "extern[ \t]long_double[ \t]strtold";
bypass = "long_double_t";
sed = "/^#[ \t]*ifndef _LONG_DOUBLE/,/\\/\\* _LONG_DOUBLE \\*\\//D";
sed = "s/long_double/long double/g";
test_text = "# ifndef _LONG_DOUBLE\n"
"# define _LONG_DOUBLE\n"
" typedef struct {\n"
" unsigned int word1, word2, word3, word4;\n"
" } long_double;\n"
"# endif /* _LONG_DOUBLE */\n"
"extern long_double strtold(const char *, char **);\n";
};
/*
* We cannot use the above rule on 11.31 because it removes the strtold
* definition. ia64 is OK with no hack, PA needs some help.
*/
fix = {
hackname = hpux_long_double_2;
mach = "hppa*-*-hpux11.3*";
files = stdlib.h;
select = "#[ \t]*if[ \t]*!defined\\(__ia64\\) \\|\\| "
"defined\\(_PROTOTYPES\\) \\|\\| "
"defined\\(_LONG_DOUBLE_STRUCT\\)";
c_fix = format;
c_fix_arg = "# if !defined(_PROTOTYPES) || defined(_LONG_DOUBLE_STRUCT)";
test_text = "# if !defined(__ia64) || "
"!defined(_PROTOTYPES) || "
"defined(_LONG_DOUBLE_STRUCT)\n";
};
/*
* Add missing braces to pthread initializer defines.
*/
fix = {
hackname = hpux_pthread_initializers;
mach = "*-hp-hpux11.[0-3]*";
files = sys/pthread.h;
sed = "s@^[ \t]*1, 1, 1, 1,[ \t]*\\\\"
"@\t{ 1, 1, 1, 1 },\t\t\t\t\t\t\t\\\\@";
sed = "s@^[ \t]*1,[ \t]*\\\\"
"@\t{ 1, 0 }@";
sed = "/^[ \t]*0$/d";
sed = "s@__PTHREAD_MUTEX_VALID, 0"
"@{ __PTHREAD_MUTEX_VALID, 0 }@";
sed = "s@^[ \t]*0, 0, -1, 0,[ \t]*\\\\"
"@\t{ 0, 0, -1, 0 },\t\t\t\t\t\t\\\\@";
sed = "s@0, __LWP_MTX_VALID, 0, 1, 1, 1, 1,[ \t]*\\\\"
"@{ 0, __LWP_MTX_VALID }, { 0, 1, 1, 1, 1 },\t\t\t\\\\@";
sed = "s@^[ \t]*__LWP_MTX_VALID, 0, 1, 1, 1, 1,[ \t]*\\\\"
"@\t{ 0, __LWP_MTX_VALID }, { 0, 1, 1, 1, 1 },\t\t\t\\\\@";
sed = "s@^[ \t]*0, 0[ \t]*\\\\"
"@\t{ 0, 0 }\t\t\t\t\t\t\t\\\\@";
sed = "s@__PTHREAD_COND_VALID, 0"
"@{ __PTHREAD_COND_VALID, 0 }@";
sed = "s@__LWP_COND_VALID, 0,[ \t]*\\\\"
"@{ __LWP_COND_VALID, 0 },\t\t\t\t\t\\\\@";
sed = "s@__PTHREAD_RWLOCK_VALID, 0"
"@{ __PTHREAD_RWLOCK_VALID, 0 }@";
sed = "s@__LWP_RWLOCK_VALID, 0,[ \t]*\\\\"
"@{ __LWP_RWLOCK_VALID, 0 },\t\t\t\t\t\\\\@";
sed = "s@^[ \t]*0, 0, 0, 0, 0, 0, 0[ \t]*\\\\"
"@\t{ 0, 0, 0, 0, 0 }, { 0, 0}\t\t\t\t\t\\\\@";
test_text = "#define PTHREAD_MUTEX_INITIALIZER {\t\t\t\t\t\\\\\n"
"\t__PTHREAD_MUTEX_VALID, 0,\t\t\t\t\t\\\\\n"
"\t(PTHREAD_MUTEX_DEFAULT | PTHREAD_PROCESS_PRIVATE),\t\t\\\\\n"
"\t__SPNLCK_INITIALIZER,\t\t\t\t\t\t\\\\\n"
"\t0, 0, -1, 0,\t\t\t\t\t\t\t\\\\\n"
"\t0, __LWP_MTX_VALID, 0, 1, 1, 1, 1,\t\t\t\t\\\\\n"
"\t0, 0\t\t\t\t\t\t\t\t\\\\\n"
"}\n";
};
/*
* Wrap spu_info in ifdef _KERNEL. GCC cannot handle an array of unknown
* type and mpinfou is only defined when _KERNEL is set.
*/
fix = {
hackname = hpux_spu_info;
mach = "*-hp-hpux*";
/*
* It is tempting to omit the first "files" entry. Do not.
* The testing machinery will take the first "files" entry as the name
* of a test file to play with. It would be a nuisance to have a directory
* with the name "*".
*/
files = "ia64/sys/getppdp.h";
files = "*/sys/getppdp.h";
select = "^.*extern.*spu_info.*";
c_fix = format;
c_fix_arg = "#ifdef _KERNEL\n%0\n#endif";
test_text = "extern union mpinfou spu_info[];";
};
/*
* These hacks are need in inttypes.h on 11.23 and in stdint.h on 11.31.
*/
fix = {
hackname = hpux_stdint_least_fast;
mach = "*-hp-hpux11.2*";
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-hpux11.h, stdint.h;
select =
"^[ \t]*#[ \t]*define[ \t]+UINT_(LEAST|FAST)64_MAX[ \t]+ULLONG_MAX";
c_fix = format;
c-fix-arg = "# define UINT_%164_MAX __UINT64_MAX__";
test-text = "# define UINT_FAST64_MAX ULLONG_MAX\n"
"# define UINT_LEAST64_MAX ULLONG_MAX\n";
};
/*
* Add noreturn attribute to longjmp declarations in hpux <setjmp.h>
*/
fix = {
hackname = hpux_longjmp;
mach = "*-hp-hpux*";
files = setjmp.h;
select = "^[ \t]*extern[ \t]+void[ \t]+.*longjmp[ \t]*\(__\\(\\(.*int\\)\\)|\\(.*int\\)|\\(\\)\)";
c_fix = format;
c_fix_arg = "%0 __attribute__ ((__noreturn__))";
test_text = 'extern void longjmp __((jmp_buf, int));';
};
/*
* Fix hpux10.20 <sys/time.h> to avoid invalid forward decl
*/
fix = {
hackname = hpux_systime;
files = sys/time.h;
select = "^extern struct sigevent;";
c_fix = format;
c_fix_arg = "struct sigevent;";
test_text = 'extern struct sigevent;';
};
/*
* Fix glibc definition of HUGE_VAL in terms of hex floating point constant
*/
fix = {
hackname = huge_val_hex;
files = bits/huge_val.h, '*/bits/huge_val.h';
select = "^#[ \t]*define[ \t]*HUGE_VAL[ \t].*0x1\\.0p.*";
bypass = "__builtin_huge_val";
c_fix = format;
c_fix_arg = "#define HUGE_VAL (__builtin_huge_val())\n";
test_text = "# define HUGE_VAL\t(__extension__ 0x1.0p2047)";
};
/*
* Fix glibc definition of HUGE_VALF in terms of hex floating point constant
*/
fix = {
hackname = huge_valf_hex;
files = bits/huge_val.h, '*/bits/huge_val.h';
select = "^#[ \t]*define[ \t]*HUGE_VALF[ \t].*0x1\\.0p.*";
bypass = "__builtin_huge_valf";
c_fix = format;
c_fix_arg = "#define HUGE_VALF (__builtin_huge_valf())\n";
test_text = "# define HUGE_VALF (__extension__ 0x1.0p255f)";
};
/*
* Fix glibc definition of HUGE_VALL in terms of hex floating point constant
*/
fix = {
hackname = huge_vall_hex;
files = bits/huge_val.h, '*/bits/huge_val.h';
select = "^#[ \t]*define[ \t]*HUGE_VALL[ \t].*0x1\\.0p.*";
bypass = "__builtin_huge_vall";
c_fix = format;
c_fix_arg = "#define HUGE_VALL (__builtin_huge_vall())\n";
test_text = "# define HUGE_VALL (__extension__ 0x1.0p32767L)";
};
/*
* Fix return type of abort and free
*/
fix = {
hackname = int_abort_free_and_exit;
files = stdlib.h;
select = "int[ \t]+(abort|free|exit)[ \t]*\\(";
bypass = "_CLASSIC_ANSI_TYPES";
c_fix = format;
c_fix_arg = "void\t%1(";
test_text = "extern int abort(int);\n"
"extern int free(void*);\n"
"extern int exit(void*);";
};
/*
* Fix various macros used to define ioctl numbers.
* The traditional syntax was:
*
* #define _IO(n, x) (('n'<<8)+x)
* #define TIOCFOO _IO(T, 1)
*
* but this does not work with the C standard, which disallows macro
* expansion inside strings. We have to rewrite it thus:
*
* #define _IO(n, x) ((n<<8)+x)
* #define TIOCFOO _IO('T', 1)
*
* The select expressions match too much, but the c_fix code is cautious.
*
* _IO might be: _IO DESIO BSD43__IO with W, R, WR, C, ... suffixes.
*/
fix = {
hackname = io_quotes_def;
select = "define[ \t]+[A-Z0-9_]+IO[A-Z]*\\([a-zA-Z][,)]";
c_fix = char_macro_def;
c_fix_arg = "IO";
test_text =
"#define BSD43__IOWR(n, x) (('n'<<8)+x)\n"
"#define _IOWN(x,y,t) (_IOC_IN|(((t)&_IOCPARM_MASK)<<16)|('x'<<8)|y)\n"
"#define _IO(x,y) ('x'<<8|y)";
test_text =
"#define XX_IO(x) ('x'<<8|256)";
};
/*
* Fix the usage of the ioctl macro numbers.
*/
fix = {
hackname = io_quotes_use;
select = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+IO[A-Z]*[ \t]*"
"\\( *[^,']";
c_fix = char_macro_use;
c_fix_arg = "IO";
test_text = "#define TIOCFOO BSD43__IOWR(T, 1)\n"
"#define TIOCFOO \\\\\n"
"BSD43__IOWR(T, 1) /* Some are multi-line */";
};
/*
* Check for missing ';' in struct
*/
fix = {
hackname = ip_missing_semi;
files = netinet/ip.h;
select = "}$";
sed = "/^struct/,/^};/s/}$/};/";
test_text=
"struct mumble {\n"
" union {\n"
" int x;\n"
" }\n"
"}; /* mumbled struct */\n";
};
/*
* Non-traditional "const" declaration in Irix's limits.h.
*/
fix = {
hackname = irix_limits_const;
files = fixinc-test-limits.h, limits.h;
select = "^extern const ";
c_fix = format;
c_fix_arg = "extern __const ";
test_text = "extern const char limit; /* test limits */";
};
/*
Remove obsolete IRIX 6.5 support libstdc++-v3: * configure.host (irix6.5*): Remove. * config/os/irix: Remove. * config/io/basic_file_stdio.cc (__basic_file<char>::showmanyc()) [_GLIBCXX_FIONREAD_TAKES_OFF_T]: Remove. * doc/xml/faq.xml: Remove IRIX reference. * doc/xml/manual/using.xml (Finding Dynamic or Shared Libraries): Remove IRIX example. * testsuite/20_util/shared_ptr/thread/default_weaktoshared.cc: Remove mips-sgi-irix6* handling. * testsuite/20_util/shared_ptr/thread/mutex_weaktoshared.cc: Likewise. * testsuite/21_strings/basic_string/pthread18185.cc: Likewise. * testsuite/21_strings/basic_string/pthread4.cc: Likewise. * testsuite/22_locale/locale/cons/12658_thread-1.cc: Likewise. * testsuite/22_locale/locale/cons/12658_thread-2.cc: Likewise. * testsuite/23_containers/list/pthread1.cc: Likewise. * testsuite/23_containers/list/pthread5.cc: Likewise. * testsuite/23_containers/map/pthread6.cc: Likewise. * testsuite/23_containers/vector/debug/multithreaded_swap.cc: Likewise. * testsuite/27_io/basic_ofstream/pthread2.cc: Likewise. * testsuite/27_io/basic_ostringstream/pthread3.cc: Likewise. * testsuite/30_threads/async/42819.cc: Likewise. * testsuite/30_threads/async/49668.cc: Likewise. * testsuite/30_threads/async/any.cc: Likewise. * testsuite/30_threads/async/async.cc: Likewise. * testsuite/30_threads/async/launch.cc: Likewise. * testsuite/30_threads/async/sync.cc: Likewise. * testsuite/30_threads/call_once/39909.cc: Likewise. * testsuite/30_threads/call_once/49668.cc: Likewise. * testsuite/30_threads/call_once/call_once1.cc: Likewise. * testsuite/30_threads/condition_variable/cons/1.cc: Likewise. * testsuite/30_threads/condition_variable/members/1.cc: Likewise. * testsuite/30_threads/condition_variable/members/2.cc: Likewise. * testsuite/30_threads/condition_variable/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/condition_variable_any/50862.cc: Likewise. * testsuite/30_threads/condition_variable_any/cons/1.cc: Likewise. * testsuite/30_threads/condition_variable_any/members/1.cc: Likewise. * testsuite/30_threads/condition_variable_any/members/2.cc: Likewise. * testsuite/30_threads/future/cons/move.cc: Likewise. * testsuite/30_threads/future/members/45133.cc: Likewise. * testsuite/30_threads/future/members/get.cc: Likewise. * testsuite/30_threads/future/members/get2.cc: Likewise. * testsuite/30_threads/future/members/share.cc: Likewise. * testsuite/30_threads/future/members/valid.cc: Likewise. * testsuite/30_threads/future/members/wait.cc: Likewise. * testsuite/30_threads/future/members/wait_for.cc: Likewise. * testsuite/30_threads/future/members/wait_until.cc: Likewise. * testsuite/30_threads/lock/1.cc: Likewise. * testsuite/30_threads/lock/2.cc: Likewise. * testsuite/30_threads/lock/3.cc: Likewise. * testsuite/30_threads/lock/4.cc: Likewise. * testsuite/30_threads/lock_guard/cons/1.cc: Likewise. * testsuite/30_threads/mutex/cons/1.cc: Likewise. * testsuite/30_threads/mutex/dest/destructor_locked.cc: Likewise. * testsuite/30_threads/mutex/lock/1.cc: Likewise. * testsuite/30_threads/mutex/native_handle/1.cc: Likewise. * testsuite/30_threads/mutex/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/mutex/try_lock/1.cc: Likewise. * testsuite/30_threads/mutex/try_lock/2.cc: Likewise. * testsuite/30_threads/mutex/unlock/1.cc: Likewise. * testsuite/30_threads/packaged_task/49668.cc: Likewise. * testsuite/30_threads/packaged_task/cons/1.cc: Likewise. * testsuite/30_threads/packaged_task/cons/2.cc: Likewise. * testsuite/30_threads/packaged_task/cons/3.cc: Likewise. * testsuite/30_threads/packaged_task/cons/alloc.cc: Likewise. * testsuite/30_threads/packaged_task/cons/move.cc: Likewise. * testsuite/30_threads/packaged_task/cons/move_assign.cc: Likewise. * testsuite/30_threads/packaged_task/members/get_future.cc: Likewise. * testsuite/30_threads/packaged_task/members/get_future2.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke2.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke3.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke4.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke5.cc: Likewise. * testsuite/30_threads/packaged_task/members/reset.cc: Likewise. * testsuite/30_threads/packaged_task/members/reset2.cc: Likewise. * testsuite/30_threads/packaged_task/members/swap.cc: Likewise. * testsuite/30_threads/packaged_task/members/valid.cc: Likewise. * testsuite/30_threads/promise/cons/1.cc: Likewise. * testsuite/30_threads/promise/cons/alloc.cc: Likewise. * testsuite/30_threads/promise/cons/move.cc: Likewise. * testsuite/30_threads/promise/cons/move_assign.cc: Likewise. * testsuite/30_threads/promise/members/get_future.cc: Likewise. * testsuite/30_threads/promise/members/get_future2.cc: Likewise. * testsuite/30_threads/promise/members/set_exception.cc: Likewise. * testsuite/30_threads/promise/members/set_exception2.cc: Likewise. * testsuite/30_threads/promise/members/set_value.cc: Likewise. * testsuite/30_threads/promise/members/set_value2.cc: Likewise. * testsuite/30_threads/promise/members/set_value3.cc: Likewise. * testsuite/30_threads/promise/members/swap.cc: Likewise. * testsuite/30_threads/recursive_mutex/cons/1.cc: Likewise. * testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc: Likewise. * testsuite/30_threads/recursive_mutex/lock/1.cc: Likewise. * testsuite/30_threads/recursive_mutex/native_handle/1.cc: Likewise. * testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/recursive_mutex/try_lock/1.cc: Likewise. * testsuite/30_threads/recursive_mutex/try_lock/2.cc: Likewise. * testsuite/30_threads/recursive_mutex/unlock/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/cons/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/lock/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/lock/2.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/unlock/1.cc: Likewise. * testsuite/30_threads/shared_future/cons/move.cc: Likewise. * testsuite/30_threads/shared_future/members/45133.cc: Likewise. * testsuite/30_threads/shared_future/members/get.cc: Likewise. * testsuite/30_threads/shared_future/members/get2.cc: Likewise. * testsuite/30_threads/shared_future/members/valid.cc: Likewise. * testsuite/30_threads/shared_future/members/wait.cc: Likewise. * testsuite/30_threads/shared_future/members/wait_for.cc: Likewise. * testsuite/30_threads/shared_future/members/wait_until.cc: Likewise. * testsuite/30_threads/this_thread/1.cc: Likewise. * testsuite/30_threads/this_thread/2.cc: Likewise. * testsuite/30_threads/this_thread/3.cc: Likewise. * testsuite/30_threads/this_thread/4.cc: Likewise. * testsuite/30_threads/thread/cons/1.cc: Likewise. * testsuite/30_threads/thread/cons/2.cc: Likewise. * testsuite/30_threads/thread/cons/3.cc: Likewise. * testsuite/30_threads/thread/cons/4.cc: Likewise. * testsuite/30_threads/thread/cons/49668.cc: Likewise. * testsuite/30_threads/thread/cons/5.cc: Likewise. * testsuite/30_threads/thread/cons/6.cc: Likewise. * testsuite/30_threads/thread/cons/7.cc: Likewise. * testsuite/30_threads/thread/cons/8.cc: Likewise. * testsuite/30_threads/thread/cons/9.cc: Likewise. * testsuite/30_threads/thread/cons/moveable.cc: Likewise. * testsuite/30_threads/thread/members/1.cc: Likewise. * testsuite/30_threads/thread/members/2.cc: Likewise. * testsuite/30_threads/thread/members/3.cc: Likewise. * testsuite/30_threads/thread/members/4.cc: Likewise. * testsuite/30_threads/thread/members/5.cc: Likewise. * testsuite/30_threads/thread/members/hardware_concurrency.cc: Likewise. * testsuite/30_threads/thread/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/thread/swap/1.cc: Likewise. * testsuite/30_threads/timed_mutex/cons/1.cc: Likewise. * testsuite/30_threads/timed_mutex/dest/destructor_locked.cc: Likewise. * testsuite/30_threads/timed_mutex/lock/1.cc: Likewise. * testsuite/30_threads/timed_mutex/native_handle/1.cc: Likewise. * testsuite/30_threads/timed_mutex/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock/1.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock/2.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_for/1.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_for/2.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_for/3.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_until/1.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_until/2.cc: Likewise. * testsuite/30_threads/timed_mutex/unlock/1.cc: Likewise. * testsuite/30_threads/try_lock/1.cc: Likewise. * testsuite/30_threads/try_lock/2.cc: Likewise. * testsuite/30_threads/try_lock/3.cc: Likewise. * testsuite/30_threads/try_lock/4.cc: Likewise. * testsuite/30_threads/unique_lock/cons/1.cc: Likewise. * testsuite/30_threads/unique_lock/cons/2.cc: Likewise. * testsuite/30_threads/unique_lock/cons/3.cc: Likewise. * testsuite/30_threads/unique_lock/cons/4.cc: Likewise. * testsuite/30_threads/unique_lock/cons/5.cc: Likewise. * testsuite/30_threads/unique_lock/cons/6.cc: Likewise. * testsuite/30_threads/unique_lock/locking/1.cc: Likewise. * testsuite/30_threads/unique_lock/locking/2.cc: Likewise. * testsuite/30_threads/unique_lock/locking/3.cc: Likewise. * testsuite/30_threads/unique_lock/locking/4.cc: Likewise. * testsuite/30_threads/unique_lock/modifiers/1.cc: Likewise. * testsuite/30_threads/unique_lock/modifiers/2.cc: Likewise. * testsuite/ext/rope/pthread7-rope.cc: Likewise. * testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc: Likewise. * testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc: Likewise. * testsuite/23_containers/vector/capacity/resize/1.cc: Remove dg-options for mips*-*-irix6*. * testsuite/27_io/ios_base/storage/1.cc: Likewise. * testsuite/27_io/ios_base/storage/2.cc: Likewise. * testsuite/27_io/ios_base/storage/3.cc: Likewise. * testsuite/lib/libstdc++.exp (v3-build_support): Remove IRIX 6 workaround. libjava: * configure.ac (libgcj_cv_exidx): Remove IRIX 6 ld workaround. (mips-sgi-irix6*): Remove. (mips-sgi-irix*): Remove. (AC_CHECK_HEADERS): Remove bstring.h. * configure: Regenerate. * include/config.h.in: Regenerate. * configure.host (mips-sgi-irix6*): Remove. * include/posix-signal.h [__sgi__]: Remove. * gnu/java/net/natPlainDatagramSocketImplPosix.cc [HAVE_BSTRING_H]: Remove. * gnu/java/net/natPlainDatagramSocketImplWin32.cc: Likewise. * gnu/java/net/natPlainSocketImplPosix.cc: Likewise. libitm: * configure.tgt (*-*-irix6*): Remove. libgomp: * configure.tgt (mips-sgi-irix6*): Remove. libgfortran: * intrinsics/c99_functions.c [__sgi__ && !HAVE_COMPLEX_H]: Remove. libgcc: * config.host (mips-sgi-irix6.5*): Remove. * config/mips/irix-crti.S: Remove. * config/mips/irix-crtn.S: Remove. * config/mips/irix6-unwind.h: Remove. * config/mips/t-irix6: Remove. * config/mips/t-slibgcc-irix: Remove. gnattools: * configure.ac (mips-sgi-irix*): Remove. * configure: Regenerate. gcc/testsuite: * g++.dg/other/anon5.C: Don't skip on mips-sgi-irix*. * g++.dg/tree-prof/partition1.C: Likewise. * g++.dg/tree-prof/partition2.C: Likewise. * g++.old-deja/g++.other/init19.C: Remove mips-sgi-irix* handling. * gcc.c-torture/compile/labels-3.c: Remove dg-options. * gcc.c-torture/execute/20010724-1.c: Remove. * gcc.c-torture/execute/20010724-1.x: Remove. * gcc.c-torture/execute/20040208-2.c: Remove. * gcc.c-torture/execute/20040208-2.x: Remove. * gcc.c-torture/execute/ieee/20000320-1.c [__mips__ && __sgi__]: Remove. (main) [__mips__ && __sgi__]: Remove. * gcc.c-torture/execute/ieee/copysign1.c: Remove IRIX reference. * gcc.c-torture/execute/ieee/copysign2.c: Likewise. * gcc.c-torture/execute/ieee/mul-subnormal-single-1.x: Remove mips-sgi-irix6* handling. * gcc.dg/cpp/assert4.c [__mips__]: Remove __sgi__, sgi. * gcc.dg/torture/20090618-1.c: Don't skip on mips-sgi-irix*. * gcc.dg/torture/builtin-frexp-1.c: Remove mips*-*-irix6* handling. * gcc.dg/torture/builtin-logb-1.c: Likewise. * gcc.dg/torture/pr47917.c: Remove mips-sgi-irix6.5 handling. * gcc.dg/tree-ssa/ssa-store-ccp-3.c: Don't skip on mips*-*-irix*. * gcc.misc-tests/linkage.exp: Remove mips-sgi-irix6* handling. * gcc.target/mips/args-1.c [!__sgi__]: Remove. * gcc.target/mips/interrupt_handler-2.c: Don't skip on mips-sgi-irix6*. * gcc.target/mips/interrupt_handler-3.c: Likewise. * gcc.target/mips/save-restore-1.c: Don't skip on mips-sgi-irix6*. * gcc.target/mips/save-restore-3.c: Likewise. * gcc.target/mips/save-restore-4.c: Likewise. * gcc.target/mips/save-restore-5.c: Likewise. * gfortran.dg/g77/cabs.f: Don't xfail on mips-sgi-irix6*. * lib/prune.exp (prune_gcc_output): Remove pruning of IRIX 6 ld messages. * lib/target-libpath.exp (set_ld_library_path_env_vars): Remove IRIX 6 handling. (restore_ld_library_path_env_vars): Likewise. * lib/target-supports.exp (check_profiling_available): Remove mips*-*-irix* handling. (check_ascii_locale_available): Remove mips-sgi-irix* handling. (add_options_for_c99_runtime): Remove mips-sgi-irix6.5* handling. * objc.dg/stabs-1.m: Don't xfail on mips-sgi-irix6.5. gcc/ada: * gcc-interface/Makefile.in (mips-sgi-irix6*): Remove. * a-intnam-irix.ads, mlib-tgt-specific-irix.adb, s-intman-irix.adb, s-mastop-irix.adb, s-osinte-irix.adb, s-osinte-irix.ads, s-proinf-irix-athread.adb, s-proinf-irix-athread.ads, s-taprop-irix.adb, s-tasinf-irix.ads, system-irix-n32.ads, system-irix-n64.ads, system-irix-o32.ads: Remove. * adaint.c [__mips && __sgi]: Remove. (__gnat_number_of_cpus) [__mips && __sgi]: Remove. [IS_CROSS && !(__mips && __sgi)]: Remove. * adaint.h [sgi && _LFAPI]: Remove. * cstreams.c (__gnat_full_name) [sgi]: Remove. * env.c (__gnat_unsetenv) [__mips && __sgi]: Remove. (__gnat_clearenv) [__mips && __sgi]: Remove. * errno.c (_SGI_MP_SOURCE): Remove. * gsocket.h [sgi]: Remove. * init.c: Remove IRIX reference. [sgi]: Remove. * link.c [sgi]: Remove. * s-oscons-tmplt.c [__mips && __sgi] (IOV_MAX): Don't define. (main) [__mips && __sgi] (MAX_tv_sec): Don't define. (CLOCK_SGI_FAST, CLOCK_SGI_CYCLE): Remove. * sysdep.c [sgi]: Remove. (getc_immediate_common) [sgi]: Remove. (__gnat_localtime_tzoff) [sgi]: Remove. * terminals.c [__mips && __sgi] (IRIX): Don't define. [IRIX] (USE_GETPTY): Don't define. (allocate_pty_desc) [USE_GETPTY]: Remove. * g-traceb.ads: Remove IRIX reference. * g-trasym.ads: Likewise. * memtrack.adb: Likewise. * s-interr-sigaction.adb: Likewise. * gnat_rm.texi (Implementation Advice): Remove SGI info. (Implementation Defined Characteristics): Likewise. * gnat_ugn.texi (Summary of Run-Time Configurations, mips-irix): Remove. (Irix-Specific Considerations): Remove. gcc/cp: * Make-lang.in (doc/g++.1): Remove IRIX 6.5 reference. gcc: * config.gcc (enable_obsolete): Remove mips-sgi-irix6.5. (mips-sgi-irix6.5*): Remove. * config.host (mips-sgi-irix*): Remove. * configure.ac (enable_fixed_point): Remove mips*-sgi-irix*. (set_have_as_tls): Remove *-*-irix6*. (gcc_cv_ld_static_dynamic): Remove mips-sgi-irix6*. * configure: Regenerate. * config/mips/iris6.h: Remove. * config/mips/iris6.opt: Remove. * config/mips/t-irix6: Remove. * config/mips/mips.h (TARGET_GPWORD): Remove IRIX 6 N64 handling. (TARGET_IRIX6): Remove. (TARGET_CPU_CPP_BUILTINS): Remove IRIX 6 handling. Don't define LANGUAGE_C, _LANGUAGE_C for Objective-C. * config/mips/mips.c (mips_build_builtin_va_list): Remove IRIX 6 handling. (mips_file_start): Likewise. * config/mips/mips-protos.h (irix_asm_output_align): Remove. * config/mips/driver-native.c [__sgi__]: Remove. (host_detect_local_cpu) [__sgi__]: Remove. * config/mips/gnu-user.h: Remove iris5.h reference. * config/mips/mips-modes.def: Remove IRIX 6 reference. * config/mips/gnu-user64.h (MIPS_TFMODE_FORMAT): Remove. * config/mips/mips.c (mips_option_override) [MIPS_TFMODE_FORMAT]: Remove. * gcc.c (main): Move asm_debug initialization ... (asm_debug): ... here. * ginclude/stddef.h (__STDDEF_H__): Don't define. * defaults.h (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): Remove. * system.h (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): Poison. * collect2.c [LINK_ELIMINATE_DUPLICATE_LDIRECTORIES]: Remove. (main) [LINK_ELIMINATE_DUPLICATE_LDIRECTORIES]: Remove. [LINK_ELIMINATE_DUPLICATE_LDIRECTORIES] (is_in_args): Remove. * doc/tm.texi.in (Driver, LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): Remove. * doc/tm.texi: Regenerate. * doc/invoke.texi (Debugging Options, -gdwarf-<version>): Remove IRIX 6 reference. (MIPS Options, -march): Remove IRIX reference. * doc/install.texi (Binaries, SGI IRIX): Remove. (Specific, mips-sgi-irix6): Document IRIX 6.5 removal, remove rest of section. * doc/trouble.texi (Interoperation): Remove -lgl_s handling. fixincludes: * inclhack.def (broken_cabs): Remove IRIX and SunOS 4 support. (irix___restrict): Remove. (irix___generic1): Remove. (irix___generic2): Remove. (irix_asm_apostrophe): Remove. (irix_complex): Remove. (irix_pthread_init): Remove. (irix_socklen_t): Remove. (irix_stdint_c99_mode): Remove. (irix_stdint_c99_types): Remove. (irix_stdint_c99_macros): Remove. (irix_stdio_va_list): Remove IRIX 6.5 support. (irix_wcsftime): Remove. (stdio_va_list): Remove IRIX 6.5 support. (svr4_profil): Remove IRIX bypass. * fixincl.x: Regenerate. * tests/base/complex.h [IRIX_COMPLEX_CHECK]: Remove. * tests/base/internal/math_core.h: Remove. * tests/base/internal/sgimacros.h: Remove. * tests/base/internal/wchar_core.h: Remove. * tests/base/math.h [BROKEN_CABS_CHECK]: Remove IRIX and SunOS 4 support. * tests/base/pthread.h [IRIX_PTHREAD_INIT_CHECK]: Remove. * tests/base/stdint-irix65.h: Remove. * tests/base/stdint.h [IRIX_STDINT_C99_MODE_CHECK]: Remove. * tests/base/sys/asm.h: Remove. * tests/base/sys/socket.h [IRIX_SOCKLEN_T_CHECK]: Remove. contrib: * config-list.mk (LIST): Remove mips-sgi-irix6.5. toplevel: * MAINTAINERS (OS Port Maintainers): Remove irix. * configure.ac (enable_libgomp): Remove *-*-irix6*. (unsupported_languages): Remove mips-sgi-irix6.*. (noconfigdirs): Don't add ${libgcj} for mips*-*-irix6*. (with_stabs): Remove. * configure: Regenerate. From-SVN: r185390
2012-03-14 16:33:37 +00:00
* IRIX 5.x's stdio.h declares some functions that take a va_list as
* taking char *. However, GCC uses void * for va_list, so
* calling vfprintf with a va_list fails in C++. */
fix = {
hackname = irix_stdio_va_list;
files = stdio.h;
select = '/\* va_list \*/ char \*';
c_fix = format;
c_fix_arg = "__gnuc_va_list";
test_text =
"extern int printf( const char *, /* va_list */ char * );";
};
/*
* These files in Sun OS 4.x and ARM/RISCiX and BSD4.3
* use / * * / to concatenate tokens.
*/
fix = {
hackname = kandr_concat;
files = "sparc/asm_linkage.h";
files = "sun*/asm_linkage.h";
files = "arm/as_support.h";
files = "arm/mc_type.h";
files = "arm/xcb.h";
files = "dev/chardefmac.h";
files = "dev/ps_irq.h";
files = "dev/screen.h";
files = "dev/scsi.h";
files = "sys/tty.h";
files = "Xm.acorn/XmP.h";
files = bsd43/bsd43_.h;
select = '/\*\*/';
c_fix = format;
c_fix_arg = '##';
test_text = "#define __CONCAT__(a,b) a/**/b";
};
/*
* The /usr/include/sys/ucontext.h on ia64-*linux-gnu systems defines
* an _SC_GR0_OFFSET macro using an idiom that isn't a compile time
* constant on recent versions of g++.
*/
fix = {
hackname = linux_ia64_ucontext;
files = "sys/ucontext.h";
mach = "ia64-*-linux*";
select = '\(\(\(char \*\) &\(\(struct sigcontext \*\) 0\)'
'->sc_gr\[0\]\) - \(char \*\) 0\)';
c_fix = format;
c_fix_arg = "__builtin_offsetof \(struct sigcontext, sc_gr[0]\)";
test_text = "# define _SC_GR0_OFFSET\t\\\\\n"
"\t(((char *) &((struct sigcontext *) 0)->sc_gr[0]) - (char *) 0)\n";
};
/*
* Remove header file warning from sys/time.h. Autoconf's
* AC_HEADER_TIME recommends to include both sys/time.h and time.h
* which causes warning on LynxOS. Remove the warning.
*/
fix = {
hackname = lynxos_no_warning_in_sys_time_h;
files = sys/time.h;
select = "#warning[ \t]+Using <time.h> instead of <sys/time.h>";
c_fix = format;
c_fix_arg = "";
test_text = "#warning Using <time.h> instead of <sys/time.h>";
};
/*
* Add missing declaration for putenv.
*/
fix = {
hackname = lynxos_missing_putenv;
mach = '*-*-lynxos*';
files = stdlib.h;
bypass = 'putenv[ \t]*\\(';
select = "extern char \\*getenv[ \t]*_AP\\(\\(const char \\*\\)\\);";
c_fix = format;
c_fix_arg = "%0\n"
"extern int putenv _AP((char *));";
c_fix_arg = "extern char \\*getenv[ \t]*_AP\\(\\(const char \\*\\)\\);";
test_text = "extern char *getenv _AP((const char *));";
};
/*
* Fix BSD machine/ansi.h to use __builtin_va_list to define _BSD_VA_LIST_.
*
* On NetBSD, machine is a symbolic link to an architecture specific
* directory name, so we can't match a specific file name here.
*/
fix = {
hackname = machine_ansi_h_va_list;
select = "define[ \t]+_BSD_VA_LIST_[ \t]";
bypass = '__builtin_va_list';
c_fix = format;
c_fix_arg = "%1__builtin_va_list";
c_fix_arg = "(define[ \t]+_BSD_VA_LIST_[ \t]+).*";
test_text = " # define _BSD_VA_LIST_\tchar**";
};
/*
* Fix non-ansi machine name defines
*/
fix = {
hackname = machine_name;
c_test = machine_name;
c_fix = machine_name;
test_text = "/* MACH_DIFF: */\n"
"#if defined( i386 ) || defined( sparc ) || defined( vax ) || "
"defined( linux ) || __has_include ( <linux.h> )"
"\n/* no uniform test, so be careful :-) */";
};
/*
* Some math.h files define struct exception (it's in the System V
* Interface Definition), which conflicts with the class exception defined
* in the C++ file std/stdexcept.h. We redefine it to __math_exception.
* This is not a great fix, but I haven't been able to think of anything
inclhack.def (aix_syswait, [...]): Remove. fixincludes: * inclhack.def (aix_syswait, exception_structure, pthread_page_size): Remove. (math_exception): Remove mention of fixproto in comment. * fixincl.x: Regenerate. * mkheaders.in: Do not handle STMP_FIXPROTO. gcc: * config/arm/t-arm-coff, config/h8300/coff.h, config/i386/i386-aout.h, config/i386/i386-coff.h, config/libgloss.h, config/m68k/coff.h, config/m68k/m68k-aout.h, config/pdp11/2bsd.h, config/rs6000/aix41.h, config/rs6000/aix41.opt, config/rs6000/t-newas, config/sh/coff.h, fix-header.c, fixproto, gen-protos.c, protoize.c, scan-decls.c, scan-types.sh, scan.c, scan.h, sort-protos, sys-protos.h, sys-types.h: Remove. * Makefile.in: Remove protoize and fixproto support and references in comments. (SYSCALLS.c.X-warn, TARGET_GETGROUPS_T, STMP_FIXPROTO, PROTOIZE_INSTALL_NAME, UNPROTOIZE_INSTALL_NAME, FIXPROTO_DEFINES): Remove. (ALL_HOST_OBJS): Remove $(PROTO_OBJS). (MOSTLYCLEANFILES): Remove protoize$(exeext) and unprotoize$(exeext). (rest.encap): Don't depend on $(STMP_FIXPROTO) (.PHONY): Don't depend on proto. (libgcc-support): Don't depend on $(STMP_FIXPROTO). (proto, PROTO_OBJS, protoize$(exeext), unprotoize$(exeext), protoize.o, unprotoize.o, SYSCALLS.c.X, test-protoize-simple, deduced.h, GEN_PROTOS_OBJS, build/gen-protos$(build_exeext), build/gen-protos.o, build/scan.o, xsys-protos.h, build/fix-header$(build_exeext), build/fix-header.o, build/scan-decls.o, fixhdr.ready, stmp-fixproto, stmp-install-fixproto): Remove. (mostlyclean): Don't remove xsys-protos.hT, SYSCALLS.c.X, SYSCALLS.c or fixproto files. (install-common): Don't install protoize. (install-headers-tar, install-headers-cpio, install-headers-cp): Don't depend on $(STMP_FIXPROTO). (install-mkheaders): Don't depend on $(STMP_FIXPROTO). Don't install fixproto files or write out fixproto settings. (uninstall): Don't uninstall protoize. * config.gcc (use_fixproto): Remove. (arm-*-coff*, armel-*-coff*, h8300-*-*, i[34567]86-*-aout*, i[34567]86-*-coff*, m68k-*-aout*, m68k-*-coff*, pdp11-*-bsd, rs6000-ibm-aix4.[12]*, powerpc-ibm-aix4.[12]*, sh-*-*): Remove. * config/m32r/t-linux (STMP_FIXPROTO): Remove. * config/m68k/m68k.c: Remove M68K_TARGET_COFF-conditional code. * config/mips/t-iris (FIXPROTO_DEFINES): Remove. * config/pa/t-pa-hpux (FIXPROTO_DEFINES): Remove. * config/pdp11/pdp11.c: Remove TWO_BSD-conditional code. * config/t-svr4 (FIXPROTO_DEFINES): Remove. * config/t-vxworks (STMP_FIXPROTO): Remove. * configure.ac (AC_TYPE_GETGROUPS, TARGET_GETGROUPS_T, STMP_FIXPROTO): Remove. * config.in, configure: Regenerate. * crtstuff.c (gid_t, uid_t): Don't undefine. * doc/install.texi: Change m68k-coff to m68k-elf in example. (arm-*-coff, arm-*-aout: Remove target entries. (*-ibm-aix*): Mention removal of support for AIX 4.2 and older. Remove mention of AIX 4.1. (m68k-*-*): Remove mention of m68k-*-aout and m68k-*-coff*. * doc/invoke.texi (Running Protoize): Remove. * doc/trouble.texi (Actual Bugs): Remove mention of fixproto. (Protoize Caveats): Remove. * tsystem.h: Update comments on headers assumed to exist. gcc/po: * EXCLUDES (fix-header.c, gen-protos.c, scan-decls.c, scan.c, scan.h): Remove. gcc/testsuite: * g++.old-deja/g++.ext/attrib5.C, g++.old-deja/g++.jason/thunk3.C, gcc.c-torture/compile/981006-1.c: Don't XFAIL or add special options for removed targets. libgcc: * config.host (arm-*-coff*, armel-*-coff*, arm-semi-aof, armel-semi-aof, h8300-*-*, i[34567]86-*-aout*, i[34567]86-*-coff*, m68k-*-aout*, m68k-*-coff*, pdp11-*-bsd, rs6000-ibm-aix4.[12]*, powerpc-ibm-aix4.[12]*, sh-*-*): Remove. From-SVN: r145158
2009-03-28 06:51:09 +00:00
* better.
*/
fix = {
hackname = math_exception;
files = math.h;
select = "struct exception";
/*
Remove obsolete Solaris 8 support libstdc++-v3: * config/os/solaris/solaris2.8: Rename to ... * config/os/solaris/solaris2.9: ... this. * config/abi/post/solaris2.8: Rename to ... * config/abi/post/solaris2.9: ... this. * configure.host (os_include_dir): Remove solaris2.8. Reflect renaming. (abi_baseline_pair): Remove *-*-solaris2.8. Reflect renaming. * configure.ac (GLIBCXX_CHECK_MATH_PROTO): Remove (GLIBCXX_CHECK_STDLIB_PROTO): Remove. * acinclude.m4 (GLIBCXX_CHECK_MATH_PROTO): Remove (GLIBCXX_CHECK_STDLIB_PROTO): Remove. (GLIBCXX_CHECK_GTHREADS): Remove Solaris 8 handling. * crossconfig.m4 (GLIBCXX_CROSSCONFIG): Remove *-solaris2.8 handling. * configure: Regenerate. * config.h.in: Regenerate. * config/os/solaris/solaris2.9/os_defines.h (__CORRECT_ISO_CPP_MATH_H_PROTO): Define. (__CORRECT_ISO_CPP_STDLIB_H_PROTO): Define. * include/c_global/cmath: Rename __CORRECT_ISO_CPP_MATH_H_PROTO1 to __CORRECT_ISO_CPP_MATH_H_PROTO. [!__CORRECT_ISO_CPP_MATH_H_PROTO2]: Remove. * include/tr1/cmath: Rename __CORRECT_ISO_CPP_MATH_H_PROTO1 to __CORRECT_ISO_CPP_MATH_H_PROTO. * doc/xml/manual/configure.xml (Configure, --enable-libstdcxx-threads): Remove Solaris 8 reference. * testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc: Don't xfail on *-*-solaris2.8. * testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc: Likewise. * testsuite/ext/enc_filebuf/char/13598.cc: Don't xfail on *-*-solaris2.8. libjava: * configure.ac (THREADLIBS): Remove *-*-solaris2.8 handling. * configure: Regenerate. libgcc: * config/i386/sol2-unwind.h (x86_fallback_frame_state): Remove Solaris 8 handling. * config/sparc/sol2-unwind.h (sparc64_is_sighandler): Remove Solaris 8 handling. (sparc_is_sighandler): Likewise. libcpp: * lex.c: Remove Solaris 8 reference. gcc/testsuite: * g++.dg/warn/miss-format-1.C: Remove *-*-solaris2.8 handling. * gcc.dg/c99-stdint-6.c: Likewise. * gcc.dg/lto/20090210_0.c: Likewise. * gcc.dg/pr28796-2.c: Don't skip on sparc*-sun-solaris2.8. * gcc.dg/pragma-init-fini.c: Don't skip on i?86-*-solaris2.8. * gcc.dg/pragma-init-fini-2.c: Likewise. * gcc.dg/torture/pr47917.c: Remove *-*-solaris2.8 handling. * gcc.target/i386/pr22076.c: Remove i?86-*-solaris2.8 handling. * gcc.target/i386/pr22152.c: Likewise. * gcc.target/i386/vect8-ret.c: Likewise. * lib/target-supports.exp (add_options_for_tls): Remove Solaris 8 handling. gcc: * config.gcc (enable_obsolete): Remove *-*-solaris2.8*. (*-*-solaris2.[0-8], *-*-solaris2.[0-8].*): Mark unsupported. (i[34567]86-*-solaris2*, x86_64-*-solaris2.1[0-9]*): Remove Solaris 8 support. * configure.ac (gcc_cv_ld_hidden): Remove *-*-solaris2.8*. (ld_tls_support): Remove Solaris 8 references. (lwp_dir, lwp_spec): Remove support for alternate thread library. * acinclude.m4 (gcc_cv_initfini_array): Remove *-*-solaris2.* tests. * configure: Regenerate. * config.in: Regenerate. * config/sol2.h (LINK_SPEC): Remove LIB_THREAD_LDFLAGS_SPEC. * config/i386/sol2.h: Remove Solaris 8 references. * doc/install.texi (Specific, i?86-*-solaris2.[89]): Rename to ... (i?86-*-solaris2.9): ... this. Remove Solaris 8 references. (Specific, *-*-solaris2*): Document Solaris 8 removal. Remove Solaris 8 references. fixincludes: * inclhack.def (math_exception): Remove duplicate. (solaris_cond_init): Remove. (solaris_sys_va_list): Remove Solaris 8 support. * fixincl.x: Regenerate. * tests/base/pthread.h [SOLARIS_COND_INIT_CHECK]: Remove. From-SVN: r185392
2012-03-14 17:08:03 +00:00
* This should be bypassed on __cplusplus, but some supposedly C++
* aware headers, such as Solaris 8 and 9, don't wrap their struct
* exception either. So currently we bypass only for glibc, based on a
* comment in the fixed glibc header. Ick.
*/
bypass = 'We have a problem when using C\+\+|for C\+\+, '
'_[a-z0-9A-Z_]+_exception; for C, exception';
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
/* The Solaris 10 headers already get this right. */
mach = '*-*-solaris2.1[0-9]*';
not_machine = true;
c_fix = wrap;
c_fix_arg = "#ifdef __cplusplus\n"
"#define exception __math_exception\n"
"#endif\n";
c_fix_arg = "#ifdef __cplusplus\n"
"#undef exception\n"
"#endif\n";
test_text = "typedef struct exception t_math_exception;";
};
/*
* This looks pretty broken to me. ``dbl_max_def'' will contain
* "define DBL_MAX " at the start, when what we really want is just
* the value portion. Can't figure out how to write a test case
* for this either :-(
*/
fix = {
fixtests.c (is_cxx_header): New fn, split out of double_slash_test. 1999-12-17 13:21 -0800 Zack Weinberg <zack@rabi.columbia.edu> * fixtests.c (is_cxx_header): New fn, split out of double_slash_test. (else_endif_label): Allow "#endif // comment" in C++ headers, as determined by is_cxx_header. * fixfixes.c (else_endif_label_fix): Update comment. * fixincl.c: Don't output VERB_PROGRESS lines if stdout is not a tty. * genfixes: Correct double thinko in commandline parsing. * hackshell.tpl: Generate correct sh syntax for bypass entries. * inclhack.def (all): Whenever an inserted preprocessor conditional is split over multiple lines, use double backslashes in this file so the fixed header will be readable. (AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h and add bypass entry for correct version of this header. (AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h. (AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h. (hpux8_bogus_inlines): New fix, split from... (ultrix_atof_param) ... here. (math_expression): Add bypass entry keyed to glibc comment indicating the problem has been dealt with; disable unnecessary sed operations; update commentary. (math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max, add select and bypass entries, simplify shell operation. (math_huge_val_ifndef): Split from math_gcc_ifndefs. (ip_missing_semi, rs6000_param, tinfo_cplusplus, ultrix_atof_param): Add select entry. (stdio_va_list, sunos_mather_decl): Add bypass entry. (systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the comments with the fixes they describe. * fixincl.x, fixincl.sh, inclhack.sh: Regen. From-SVN: r30999
1999-12-17 21:49:30 +00:00
hackname = math_huge_val_from_dbl_max;
files = math.h;
/*
fixtests.c (is_cxx_header): New fn, split out of double_slash_test. 1999-12-17 13:21 -0800 Zack Weinberg <zack@rabi.columbia.edu> * fixtests.c (is_cxx_header): New fn, split out of double_slash_test. (else_endif_label): Allow "#endif // comment" in C++ headers, as determined by is_cxx_header. * fixfixes.c (else_endif_label_fix): Update comment. * fixincl.c: Don't output VERB_PROGRESS lines if stdout is not a tty. * genfixes: Correct double thinko in commandline parsing. * hackshell.tpl: Generate correct sh syntax for bypass entries. * inclhack.def (all): Whenever an inserted preprocessor conditional is split over multiple lines, use double backslashes in this file so the fixed header will be readable. (AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h and add bypass entry for correct version of this header. (AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h. (AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h. (hpux8_bogus_inlines): New fix, split from... (ultrix_atof_param) ... here. (math_expression): Add bypass entry keyed to glibc comment indicating the problem has been dealt with; disable unnecessary sed operations; update commentary. (math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max, add select and bypass entries, simplify shell operation. (math_huge_val_ifndef): Split from math_gcc_ifndefs. (ip_missing_semi, rs6000_param, tinfo_cplusplus, ultrix_atof_param): Add select entry. (stdio_va_list, sunos_mather_decl): Add bypass entry. (systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the comments with the fixes they describe. * fixincl.x, fixincl.sh, inclhack.sh: Regen. From-SVN: r30999
1999-12-17 21:49:30 +00:00
* IF HUGE_VAL is defined to be DBL_MAX *and* DBL_MAX is _not_ defined
* in math.h, this fix applies.
*/
select = "define[ \t]+HUGE_VAL[ \t]+DBL_MAX";
bypass = "define[ \t]+DBL_MAX";
fixtests.c (is_cxx_header): New fn, split out of double_slash_test. 1999-12-17 13:21 -0800 Zack Weinberg <zack@rabi.columbia.edu> * fixtests.c (is_cxx_header): New fn, split out of double_slash_test. (else_endif_label): Allow "#endif // comment" in C++ headers, as determined by is_cxx_header. * fixfixes.c (else_endif_label_fix): Update comment. * fixincl.c: Don't output VERB_PROGRESS lines if stdout is not a tty. * genfixes: Correct double thinko in commandline parsing. * hackshell.tpl: Generate correct sh syntax for bypass entries. * inclhack.def (all): Whenever an inserted preprocessor conditional is split over multiple lines, use double backslashes in this file so the fixed header will be readable. (AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h and add bypass entry for correct version of this header. (AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h. (AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h. (hpux8_bogus_inlines): New fix, split from... (ultrix_atof_param) ... here. (math_expression): Add bypass entry keyed to glibc comment indicating the problem has been dealt with; disable unnecessary sed operations; update commentary. (math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max, add select and bypass entries, simplify shell operation. (math_huge_val_ifndef): Split from math_gcc_ifndefs. (ip_missing_semi, rs6000_param, tinfo_cplusplus, ultrix_atof_param): Add select entry. (stdio_va_list, sunos_mather_decl): Add bypass entry. (systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the comments with the fixes they describe. * fixincl.x, fixincl.sh, inclhack.sh: Regen. From-SVN: r30999
1999-12-17 21:49:30 +00:00
shell =
/*
fixtests.c (is_cxx_header): New fn, split out of double_slash_test. 1999-12-17 13:21 -0800 Zack Weinberg <zack@rabi.columbia.edu> * fixtests.c (is_cxx_header): New fn, split out of double_slash_test. (else_endif_label): Allow "#endif // comment" in C++ headers, as determined by is_cxx_header. * fixfixes.c (else_endif_label_fix): Update comment. * fixincl.c: Don't output VERB_PROGRESS lines if stdout is not a tty. * genfixes: Correct double thinko in commandline parsing. * hackshell.tpl: Generate correct sh syntax for bypass entries. * inclhack.def (all): Whenever an inserted preprocessor conditional is split over multiple lines, use double backslashes in this file so the fixed header will be readable. (AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h and add bypass entry for correct version of this header. (AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h. (AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h. (hpux8_bogus_inlines): New fix, split from... (ultrix_atof_param) ... here. (math_expression): Add bypass entry keyed to glibc comment indicating the problem has been dealt with; disable unnecessary sed operations; update commentary. (math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max, add select and bypass entries, simplify shell operation. (math_huge_val_ifndef): Split from math_gcc_ifndefs. (ip_missing_semi, rs6000_param, tinfo_cplusplus, ultrix_atof_param): Add select entry. (stdio_va_list, sunos_mather_decl): Add bypass entry. (systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the comments with the fixes they describe. * fixincl.x, fixincl.sh, inclhack.sh: Regen. From-SVN: r30999
1999-12-17 21:49:30 +00:00
* See if we have a definition for DBL_MAX in float.h.
* If we do, we will replace the one in math.h with that one.
*/
"\tdbl_max_def=`egrep 'define[ \t]+DBL_MAX[ \t]+.*' float.h "
"| sed 's/.*DBL_MAX[ \t]*//' 2>/dev/null`\n\n"
fixtests.c (is_cxx_header): New fn, split out of double_slash_test. 1999-12-17 13:21 -0800 Zack Weinberg <zack@rabi.columbia.edu> * fixtests.c (is_cxx_header): New fn, split out of double_slash_test. (else_endif_label): Allow "#endif // comment" in C++ headers, as determined by is_cxx_header. * fixfixes.c (else_endif_label_fix): Update comment. * fixincl.c: Don't output VERB_PROGRESS lines if stdout is not a tty. * genfixes: Correct double thinko in commandline parsing. * hackshell.tpl: Generate correct sh syntax for bypass entries. * inclhack.def (all): Whenever an inserted preprocessor conditional is split over multiple lines, use double backslashes in this file so the fixed header will be readable. (AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h and add bypass entry for correct version of this header. (AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h. (AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h. (hpux8_bogus_inlines): New fix, split from... (ultrix_atof_param) ... here. (math_expression): Add bypass entry keyed to glibc comment indicating the problem has been dealt with; disable unnecessary sed operations; update commentary. (math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max, add select and bypass entries, simplify shell operation. (math_huge_val_ifndef): Split from math_gcc_ifndefs. (ip_missing_semi, rs6000_param, tinfo_cplusplus, ultrix_atof_param): Add select entry. (stdio_va_list, sunos_mather_decl): Add bypass entry. (systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the comments with the fixes they describe. * fixincl.x, fixincl.sh, inclhack.sh: Regen. From-SVN: r30999
1999-12-17 21:49:30 +00:00
"\tif ( test -n \"${dbl_max_def}\" ) > /dev/null 2>&1\n"
"\tthen sed -e '/define[ \t]*HUGE_VAL[ \t]*DBL_MAX/"
"s@DBL_MAX@'\"$dbl_max_def@\"\n"
fixtests.c (is_cxx_header): New fn, split out of double_slash_test. 1999-12-17 13:21 -0800 Zack Weinberg <zack@rabi.columbia.edu> * fixtests.c (is_cxx_header): New fn, split out of double_slash_test. (else_endif_label): Allow "#endif // comment" in C++ headers, as determined by is_cxx_header. * fixfixes.c (else_endif_label_fix): Update comment. * fixincl.c: Don't output VERB_PROGRESS lines if stdout is not a tty. * genfixes: Correct double thinko in commandline parsing. * hackshell.tpl: Generate correct sh syntax for bypass entries. * inclhack.def (all): Whenever an inserted preprocessor conditional is split over multiple lines, use double backslashes in this file so the fixed header will be readable. (AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h and add bypass entry for correct version of this header. (AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h. (AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h. (hpux8_bogus_inlines): New fix, split from... (ultrix_atof_param) ... here. (math_expression): Add bypass entry keyed to glibc comment indicating the problem has been dealt with; disable unnecessary sed operations; update commentary. (math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max, add select and bypass entries, simplify shell operation. (math_huge_val_ifndef): Split from math_gcc_ifndefs. (ip_missing_semi, rs6000_param, tinfo_cplusplus, ultrix_atof_param): Add select entry. (stdio_va_list, sunos_mather_decl): Add bypass entry. (systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the comments with the fixes they describe. * fixincl.x, fixincl.sh, inclhack.sh: Regen. From-SVN: r30999
1999-12-17 21:49:30 +00:00
"\telse cat\n"
"\tfi";
test_text =
"`echo '#define DBL_MAX\t3.1415e+9 /* really big */' >> float.h`\n"
"#define HUGE_VAL DBL_MAX";
};
/*
* nested comment
*/
fix = {
hackname = nested_auth_des;
files = rpc/rpc.h;
select = '(/\*.*rpc/auth_des\.h>.*)/\*';
c_fix = format;
c_fix_arg = "%1*/ /*";
test_text = "/*#include <rpc/auth_des.h> /* skip this */";
};
/*
* Some versions of NetBSD don't expect the C99 inline semantics.
*/
fix = {
hackname = netbsd_c99_inline_1;
mach = "*-*-netbsd*";
files = signal.h;
select = "extern __inline int";
c_fix = format;
c_fix_arg = "extern\n"
"#ifdef __GNUC_STDC_INLINE__\n"
"__attribute__((__gnu_inline__))\n"
"#endif\n"
"__inline int";
test_text = "extern __inline int\nsigaddset(sigset_t *set, int signo)\n{}";
};
/*
* netbsd_c99_inline_2
*/
fix = {
hackname = netbsd_c99_inline_2;
mach = "*-*-netbsd*";
files = signal.h;
select = "#define _SIGINLINE extern __inline";
c_fix = format;
c_fix_arg = <<- _EOArg_
#ifdef __GNUC_STDC_INLINE__
#define _SIGINLINE extern __attribute__((__gnu_inline__)) __inline
#else
%0
#endif
_EOArg_;
test_text = "#define _SIGINLINE extern __inline";
};
/*
* NetBSD has a semicolon after the ending '}' for some extern "C".
*/
fix = {
hackname = netbsd_extra_semicolon;
mach = "*-*-netbsd*";
files = sys/cdefs.h;
select = "#define[ \t]*__END_DECLS[ \t]*};";
c_fix = format;
c_fix_arg = "#define __END_DECLS }";
test_text = "#define __END_DECLS };";
};
/*
* newlib's stdint.h has several failures to conform to C99. The fix
* for these removed a comment that can be matched to identify unfixed
* versions.
*/
re PR c/448 (<stdint.h>-related issues (C99 issues)) PR c/448 fixincludes: * inclhack.def (newlib_stdint_1, newlib_stdint_2): New fixes. * fixincl.x: Regenerate. * tests/base/stdint.h: Update. gcc: * Makefile.in (USE_GCC_STDINT): Define. (stmp-int-hdrs): Install stdint.h if applicable. * c-common.c (CHAR16_TYPE): Define in terms of UINT_LEAST16_TYPE if known. (CHAR32_TYPE): Define in terms of UINT_LEAST32_TYPE if known. (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Define. (c_common_nodes_and_builtins): Initialize underlying_wchar_type_node. Do not initialize signed_wchar_type_node or unsigned_wchar_type_node. Initialize nodes for new types. (c_stddef_cpp_builtins): Define macros for new types. * c-common.h (CTI_SIGNED_WCHAR_TYPE, CTI_UNSIGNED_WCHAR_TYPE): Remove. (CTI_UNDERLYING_WCHAR_TYPE, CTI_SIG_ATOMIC_TYPE, CTI_INT8_TYPE, CTI_INT16_TYPE, CTI_INT32_TYPE, CTI_INT64_TYPE, CTI_UINT8_TYPE, CTI_UINT16_TYPE, CTI_UINT32_TYPE, CTI_UINT64_TYPE, CTI_INT_LEAST8_TYPE, CTI_INT_LEAST16_TYPE, CTI_INT_LEAST32_TYPE, CTI_INT_LEAST64_TYPE, CTI_UINT_LEAST8_TYPE, CTI_UINT_LEAST16_TYPE, CTI_UINT_LEAST32_TYPE, CTI_UINT_LEAST64_TYPE, CTI_INT_FAST8_TYPE, CTI_INT_FAST16_TYPE, CTI_INT_FAST32_TYPE, CTI_INT_FAST64_TYPE, CTI_UINT_FAST8_TYPE, CTI_UINT_FAST16_TYPE, CTI_UINT_FAST32_TYPE, CTI_UINT_FAST64_TYPE, CTI_INTPTR_TYPE, CTI_UINTPTR_TYPE): Define. (signed_wchar_type_node, unsigned_wchar_type_node): Remove. (underlying_wchar_type_node, sig_atomic_type_node, int8_type_node, int16_type_node, int32_type_node, int64_type_node, uint8_type_node, uint16_type_node, c_uint32_type_node, c_uint64_type_node, int_least8_type_node, int_least16_type_node, int_least32_type_node, int_least64_type_node, uint_least8_type_node, uint_least16_type_node, uint_least32_type_node, uint_least64_type_node, int_fast8_type_node, int_fast16_type_node, int_fast32_type_node, int_fast64_type_node, uint_fast8_type_node, uint_fast16_type_node, uint_fast32_type_node, uint_fast64_type_node, intptr_type_node, uintptr_type_node): Define. * c-cppbuiltin.c (builtin_define_constants, builtin_define_type_minmax): New. (builtin_define_stdint_macros): Define more macros. (c_cpp_builtins): Define more limit macros. (type_suffix): New. (builtin_define_type_max): Define in terms of builtin_define_type_minmax. Remove is_long parameter. All callers changed. * config.gcc (use_gcc_stdint): Define. (tm_file): Add glibc-stdint.h for targets using glibc or uClibc. Add newlib-stdint.h for generic targets. * config/glibc-stdint.h, config/newlib-stdint.h, ginclude/stdint-gcc.h, ginclude/stdint-wrap.h: New. * config/m32c/m32c.h (UINTPTR_TYPE): Define. * config/score/score.h (UINTPTR_TYPE): Define. * config/sol2.h (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Define. * config/spu/spu.h (STDINT_LONG32): Define. * configure.ac (use_gcc_stdint): Substitute. * configure: Regenerate. * doc/cpp.texi (__SIG_ATOMIC_TYPE__, __INT8_TYPE__, __INT16_TYPE__, __INT32_TYPE__, __INT64_TYPE__, __UINT8_TYPE__, __UINT16_TYPE__, __UINT32_TYPE__, __UINT64_TYPE__, __INT_LEAST8_TYPE__, __INT_LEAST16_TYPE__, __INT_LEAST32_TYPE__, __INT_LEAST64_TYPE__, __UINT_LEAST8_TYPE__, __UINT_LEAST16_TYPE__, __UINT_LEAST32_TYPE_, __UINT_LEAST64_TYPE__, __INT_FAST8_TYPE__, __INT_FAST16_TYPE__, __INT_FAST32_TYPE__, __INT_FAST64_TYPE__, __UINT_FAST8_TYPE__, __UINT_FAST16_TYPE__, __UINT_FAST32_TYPE__, __UINT_FAST64_TYPE__, __INTPTR_TYPE__, __UINTPTR_TYPE__, __WINT_MAX__, __SIZE_MAX__, __PTRDIFF_MAX__, __UINTMAX_MAX__, __SIG_ATOMIC_MAX__, __INT8_MAX__, __INT16_MAX__, __INT32_MAX__, __INT64_MAX__, __UINT8_MAX__, __UINT16_MAX__, __UINT32_MAX__, __UINT64_MAX__, __INT_LEAST8_MAX__, __INT_LEAST16_MAX__, __INT_LEAST32_MAX__, __INT_LEAST64_MAX__, __UINT_LEAST8_MAX__, __UINT_LEAST16_MAX__, __UINT_LEAST32_MAX__, __UINT_LEAST64_MAX__, __INT_FAST8_MAX__, __INT_FAST16_MAX__, __INT_FAST32_MAX__, __INT_FAST64_MAX__, __UINT_FAST8_MAX__, __UINT_FAST16_MAX__, __UINT_FAST32_MAX__, __UINT_FAST64_MAX__, __INTPTR_MAX__, __UINTPTR_MAX__, __WCHAR_MIN__, __WINT_MIN__, __SIG_ATOMIC_MIN__, __INT8_C, __INT16_C, __INT32_C, __INT64_C, __UINT8_C, __UINT16_C, __UINT32_C, __UINT64_C, __INTMAX_C, __UINTMAX_C): Document. * doc/tm.texi (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Document. gcc/testsuite: * lib/target-supports.exp (check_effective_target_stdint_types): Update comment. (check_effective_target_inttypes_types): New. * gcc.dg/c99-stdint-1.c, gcc.dg/c99-stdint-2.c, gcc.dg/c99-stdint-3.c, gcc.dg/c99-stdint-4.c, gcc.dg/c99-stdint-5.c, gcc.dg/c99-stdint-6.c: New tests. From-SVN: r145372
2009-03-31 21:30:31 +01:00
fix = {
hackname = newlib_stdint_1;
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-newlib.h, stdint.h;
re PR c/448 (<stdint.h>-related issues (C99 issues)) PR c/448 fixincludes: * inclhack.def (newlib_stdint_1, newlib_stdint_2): New fixes. * fixincl.x: Regenerate. * tests/base/stdint.h: Update. gcc: * Makefile.in (USE_GCC_STDINT): Define. (stmp-int-hdrs): Install stdint.h if applicable. * c-common.c (CHAR16_TYPE): Define in terms of UINT_LEAST16_TYPE if known. (CHAR32_TYPE): Define in terms of UINT_LEAST32_TYPE if known. (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Define. (c_common_nodes_and_builtins): Initialize underlying_wchar_type_node. Do not initialize signed_wchar_type_node or unsigned_wchar_type_node. Initialize nodes for new types. (c_stddef_cpp_builtins): Define macros for new types. * c-common.h (CTI_SIGNED_WCHAR_TYPE, CTI_UNSIGNED_WCHAR_TYPE): Remove. (CTI_UNDERLYING_WCHAR_TYPE, CTI_SIG_ATOMIC_TYPE, CTI_INT8_TYPE, CTI_INT16_TYPE, CTI_INT32_TYPE, CTI_INT64_TYPE, CTI_UINT8_TYPE, CTI_UINT16_TYPE, CTI_UINT32_TYPE, CTI_UINT64_TYPE, CTI_INT_LEAST8_TYPE, CTI_INT_LEAST16_TYPE, CTI_INT_LEAST32_TYPE, CTI_INT_LEAST64_TYPE, CTI_UINT_LEAST8_TYPE, CTI_UINT_LEAST16_TYPE, CTI_UINT_LEAST32_TYPE, CTI_UINT_LEAST64_TYPE, CTI_INT_FAST8_TYPE, CTI_INT_FAST16_TYPE, CTI_INT_FAST32_TYPE, CTI_INT_FAST64_TYPE, CTI_UINT_FAST8_TYPE, CTI_UINT_FAST16_TYPE, CTI_UINT_FAST32_TYPE, CTI_UINT_FAST64_TYPE, CTI_INTPTR_TYPE, CTI_UINTPTR_TYPE): Define. (signed_wchar_type_node, unsigned_wchar_type_node): Remove. (underlying_wchar_type_node, sig_atomic_type_node, int8_type_node, int16_type_node, int32_type_node, int64_type_node, uint8_type_node, uint16_type_node, c_uint32_type_node, c_uint64_type_node, int_least8_type_node, int_least16_type_node, int_least32_type_node, int_least64_type_node, uint_least8_type_node, uint_least16_type_node, uint_least32_type_node, uint_least64_type_node, int_fast8_type_node, int_fast16_type_node, int_fast32_type_node, int_fast64_type_node, uint_fast8_type_node, uint_fast16_type_node, uint_fast32_type_node, uint_fast64_type_node, intptr_type_node, uintptr_type_node): Define. * c-cppbuiltin.c (builtin_define_constants, builtin_define_type_minmax): New. (builtin_define_stdint_macros): Define more macros. (c_cpp_builtins): Define more limit macros. (type_suffix): New. (builtin_define_type_max): Define in terms of builtin_define_type_minmax. Remove is_long parameter. All callers changed. * config.gcc (use_gcc_stdint): Define. (tm_file): Add glibc-stdint.h for targets using glibc or uClibc. Add newlib-stdint.h for generic targets. * config/glibc-stdint.h, config/newlib-stdint.h, ginclude/stdint-gcc.h, ginclude/stdint-wrap.h: New. * config/m32c/m32c.h (UINTPTR_TYPE): Define. * config/score/score.h (UINTPTR_TYPE): Define. * config/sol2.h (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Define. * config/spu/spu.h (STDINT_LONG32): Define. * configure.ac (use_gcc_stdint): Substitute. * configure: Regenerate. * doc/cpp.texi (__SIG_ATOMIC_TYPE__, __INT8_TYPE__, __INT16_TYPE__, __INT32_TYPE__, __INT64_TYPE__, __UINT8_TYPE__, __UINT16_TYPE__, __UINT32_TYPE__, __UINT64_TYPE__, __INT_LEAST8_TYPE__, __INT_LEAST16_TYPE__, __INT_LEAST32_TYPE__, __INT_LEAST64_TYPE__, __UINT_LEAST8_TYPE__, __UINT_LEAST16_TYPE__, __UINT_LEAST32_TYPE_, __UINT_LEAST64_TYPE__, __INT_FAST8_TYPE__, __INT_FAST16_TYPE__, __INT_FAST32_TYPE__, __INT_FAST64_TYPE__, __UINT_FAST8_TYPE__, __UINT_FAST16_TYPE__, __UINT_FAST32_TYPE__, __UINT_FAST64_TYPE__, __INTPTR_TYPE__, __UINTPTR_TYPE__, __WINT_MAX__, __SIZE_MAX__, __PTRDIFF_MAX__, __UINTMAX_MAX__, __SIG_ATOMIC_MAX__, __INT8_MAX__, __INT16_MAX__, __INT32_MAX__, __INT64_MAX__, __UINT8_MAX__, __UINT16_MAX__, __UINT32_MAX__, __UINT64_MAX__, __INT_LEAST8_MAX__, __INT_LEAST16_MAX__, __INT_LEAST32_MAX__, __INT_LEAST64_MAX__, __UINT_LEAST8_MAX__, __UINT_LEAST16_MAX__, __UINT_LEAST32_MAX__, __UINT_LEAST64_MAX__, __INT_FAST8_MAX__, __INT_FAST16_MAX__, __INT_FAST32_MAX__, __INT_FAST64_MAX__, __UINT_FAST8_MAX__, __UINT_FAST16_MAX__, __UINT_FAST32_MAX__, __UINT_FAST64_MAX__, __INTPTR_MAX__, __UINTPTR_MAX__, __WCHAR_MIN__, __WINT_MIN__, __SIG_ATOMIC_MIN__, __INT8_C, __INT16_C, __INT32_C, __INT64_C, __UINT8_C, __UINT16_C, __UINT32_C, __UINT64_C, __INTMAX_C, __UINTMAX_C): Document. * doc/tm.texi (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Document. gcc/testsuite: * lib/target-supports.exp (check_effective_target_stdint_types): Update comment. (check_effective_target_inttypes_types): New. * gcc.dg/c99-stdint-1.c, gcc.dg/c99-stdint-2.c, gcc.dg/c99-stdint-3.c, gcc.dg/c99-stdint-4.c, gcc.dg/c99-stdint-5.c, gcc.dg/c99-stdint-6.c: New tests. From-SVN: r145372
2009-03-31 21:30:31 +01:00
select = "@todo - Add support for wint_t types";
sed = "s@#define INT32_MIN.*@#define INT32_MIN (-INT32_MAX - 1)@";
sed = "s@#define INT32_MAX.*@#define INT32_MAX __INT32_MAX__@";
sed = "s@#define UINT32_MAX.*@#define UINT32_MAX __UINT32_MAX__@";
sed = "s@#define INT_LEAST32_MIN.*@"
"#define INT_LEAST32_MIN (-INT_LEAST32_MAX - 1)@";
sed = "s@#define INT_LEAST32_MAX.*@"
"#define INT_LEAST32_MAX __INT_LEAST32_MAX__@";
sed = "s@#define UINT_LEAST32_MAX.*@"
"#define UINT_LEAST32_MAX __UINT_LEAST32_MAX__@";
sed = 's@#define INT_FAST\([0-9]*\)_MIN.*@'
'#define INT_FAST\1_MIN (-INT_FAST\1_MAX - 1)@';
sed = 's@#define INT_FAST\([0-9]*\)_MAX.*@'
'#define INT_FAST\1_MAX __INT_FAST\1_MAX__@';
sed = 's@#define UINT_FAST\([0-9]*\)_MAX.*@'
'#define UINT_FAST\1_MAX __UINT_FAST\1_MAX__@';
re PR c/448 (<stdint.h>-related issues (C99 issues)) PR c/448 fixincludes: * inclhack.def (newlib_stdint_1, newlib_stdint_2): New fixes. * fixincl.x: Regenerate. * tests/base/stdint.h: Update. gcc: * Makefile.in (USE_GCC_STDINT): Define. (stmp-int-hdrs): Install stdint.h if applicable. * c-common.c (CHAR16_TYPE): Define in terms of UINT_LEAST16_TYPE if known. (CHAR32_TYPE): Define in terms of UINT_LEAST32_TYPE if known. (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Define. (c_common_nodes_and_builtins): Initialize underlying_wchar_type_node. Do not initialize signed_wchar_type_node or unsigned_wchar_type_node. Initialize nodes for new types. (c_stddef_cpp_builtins): Define macros for new types. * c-common.h (CTI_SIGNED_WCHAR_TYPE, CTI_UNSIGNED_WCHAR_TYPE): Remove. (CTI_UNDERLYING_WCHAR_TYPE, CTI_SIG_ATOMIC_TYPE, CTI_INT8_TYPE, CTI_INT16_TYPE, CTI_INT32_TYPE, CTI_INT64_TYPE, CTI_UINT8_TYPE, CTI_UINT16_TYPE, CTI_UINT32_TYPE, CTI_UINT64_TYPE, CTI_INT_LEAST8_TYPE, CTI_INT_LEAST16_TYPE, CTI_INT_LEAST32_TYPE, CTI_INT_LEAST64_TYPE, CTI_UINT_LEAST8_TYPE, CTI_UINT_LEAST16_TYPE, CTI_UINT_LEAST32_TYPE, CTI_UINT_LEAST64_TYPE, CTI_INT_FAST8_TYPE, CTI_INT_FAST16_TYPE, CTI_INT_FAST32_TYPE, CTI_INT_FAST64_TYPE, CTI_UINT_FAST8_TYPE, CTI_UINT_FAST16_TYPE, CTI_UINT_FAST32_TYPE, CTI_UINT_FAST64_TYPE, CTI_INTPTR_TYPE, CTI_UINTPTR_TYPE): Define. (signed_wchar_type_node, unsigned_wchar_type_node): Remove. (underlying_wchar_type_node, sig_atomic_type_node, int8_type_node, int16_type_node, int32_type_node, int64_type_node, uint8_type_node, uint16_type_node, c_uint32_type_node, c_uint64_type_node, int_least8_type_node, int_least16_type_node, int_least32_type_node, int_least64_type_node, uint_least8_type_node, uint_least16_type_node, uint_least32_type_node, uint_least64_type_node, int_fast8_type_node, int_fast16_type_node, int_fast32_type_node, int_fast64_type_node, uint_fast8_type_node, uint_fast16_type_node, uint_fast32_type_node, uint_fast64_type_node, intptr_type_node, uintptr_type_node): Define. * c-cppbuiltin.c (builtin_define_constants, builtin_define_type_minmax): New. (builtin_define_stdint_macros): Define more macros. (c_cpp_builtins): Define more limit macros. (type_suffix): New. (builtin_define_type_max): Define in terms of builtin_define_type_minmax. Remove is_long parameter. All callers changed. * config.gcc (use_gcc_stdint): Define. (tm_file): Add glibc-stdint.h for targets using glibc or uClibc. Add newlib-stdint.h for generic targets. * config/glibc-stdint.h, config/newlib-stdint.h, ginclude/stdint-gcc.h, ginclude/stdint-wrap.h: New. * config/m32c/m32c.h (UINTPTR_TYPE): Define. * config/score/score.h (UINTPTR_TYPE): Define. * config/sol2.h (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Define. * config/spu/spu.h (STDINT_LONG32): Define. * configure.ac (use_gcc_stdint): Substitute. * configure: Regenerate. * doc/cpp.texi (__SIG_ATOMIC_TYPE__, __INT8_TYPE__, __INT16_TYPE__, __INT32_TYPE__, __INT64_TYPE__, __UINT8_TYPE__, __UINT16_TYPE__, __UINT32_TYPE__, __UINT64_TYPE__, __INT_LEAST8_TYPE__, __INT_LEAST16_TYPE__, __INT_LEAST32_TYPE__, __INT_LEAST64_TYPE__, __UINT_LEAST8_TYPE__, __UINT_LEAST16_TYPE__, __UINT_LEAST32_TYPE_, __UINT_LEAST64_TYPE__, __INT_FAST8_TYPE__, __INT_FAST16_TYPE__, __INT_FAST32_TYPE__, __INT_FAST64_TYPE__, __UINT_FAST8_TYPE__, __UINT_FAST16_TYPE__, __UINT_FAST32_TYPE__, __UINT_FAST64_TYPE__, __INTPTR_TYPE__, __UINTPTR_TYPE__, __WINT_MAX__, __SIZE_MAX__, __PTRDIFF_MAX__, __UINTMAX_MAX__, __SIG_ATOMIC_MAX__, __INT8_MAX__, __INT16_MAX__, __INT32_MAX__, __INT64_MAX__, __UINT8_MAX__, __UINT16_MAX__, __UINT32_MAX__, __UINT64_MAX__, __INT_LEAST8_MAX__, __INT_LEAST16_MAX__, __INT_LEAST32_MAX__, __INT_LEAST64_MAX__, __UINT_LEAST8_MAX__, __UINT_LEAST16_MAX__, __UINT_LEAST32_MAX__, __UINT_LEAST64_MAX__, __INT_FAST8_MAX__, __INT_FAST16_MAX__, __INT_FAST32_MAX__, __INT_FAST64_MAX__, __UINT_FAST8_MAX__, __UINT_FAST16_MAX__, __UINT_FAST32_MAX__, __UINT_FAST64_MAX__, __INTPTR_MAX__, __UINTPTR_MAX__, __WCHAR_MIN__, __WINT_MIN__, __SIG_ATOMIC_MIN__, __INT8_C, __INT16_C, __INT32_C, __INT64_C, __UINT8_C, __UINT16_C, __UINT32_C, __UINT64_C, __INTMAX_C, __UINTMAX_C): Document. * doc/tm.texi (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Document. gcc/testsuite: * lib/target-supports.exp (check_effective_target_stdint_types): Update comment. (check_effective_target_inttypes_types): New. * gcc.dg/c99-stdint-1.c, gcc.dg/c99-stdint-2.c, gcc.dg/c99-stdint-3.c, gcc.dg/c99-stdint-4.c, gcc.dg/c99-stdint-5.c, gcc.dg/c99-stdint-6.c: New tests. From-SVN: r145372
2009-03-31 21:30:31 +01:00
sed = "s@#define SIZE_MAX.*@#define SIZE_MAX __SIZE_MAX__@";
sed = "s@#define PTRDIFF_MIN.*@#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)@";
sed = "s@#define PTRDIFF_MAX.*@#define PTRDIFF_MAX __PTRDIFF_MAX__@";
sed = "s@#define UINT8_C.*@#define UINT8_C(c) __UINT8_C(c)@";
sed = "s@#define UINT16_C.*@#define UINT16_C(c) __UINT16_C(c)@";
test_text = "/* @todo - Add support for wint_t types. */\n"
"#define INT32_MIN (-2147483647-1)\n"
"#define INT32_MAX 2147483647\n"
"#define UINT32_MAX 4294967295U\n"
"#define INT_LEAST32_MIN (-2147483647-1)\n"
"#define INT_LEAST32_MAX 2147483647\n"
"#define UINT_LEAST32_MAX 4294967295U\n"
"#define INT_FAST8_MIN INT8_MIN\n"
"#define INT_FAST8_MAX INT8_MAX\n"
"#define UINT_FAST8_MAX UINT8_MAX\n"
"#define SIZE_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1)\n"
"#define PTRDIFF_MIN (-__STDINT_EXP(LONG_MAX) - 1L)\n"
"#define PTRDIFF_MAX __STDINT_EXP(LONG_MAX)\n"
"#define UINT8_C(x) x##U\n"
"#define UINT16_C(x) x##U";
};
/*
* newlib_stdint_2
*/
re PR c/448 (<stdint.h>-related issues (C99 issues)) PR c/448 fixincludes: * inclhack.def (newlib_stdint_1, newlib_stdint_2): New fixes. * fixincl.x: Regenerate. * tests/base/stdint.h: Update. gcc: * Makefile.in (USE_GCC_STDINT): Define. (stmp-int-hdrs): Install stdint.h if applicable. * c-common.c (CHAR16_TYPE): Define in terms of UINT_LEAST16_TYPE if known. (CHAR32_TYPE): Define in terms of UINT_LEAST32_TYPE if known. (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Define. (c_common_nodes_and_builtins): Initialize underlying_wchar_type_node. Do not initialize signed_wchar_type_node or unsigned_wchar_type_node. Initialize nodes for new types. (c_stddef_cpp_builtins): Define macros for new types. * c-common.h (CTI_SIGNED_WCHAR_TYPE, CTI_UNSIGNED_WCHAR_TYPE): Remove. (CTI_UNDERLYING_WCHAR_TYPE, CTI_SIG_ATOMIC_TYPE, CTI_INT8_TYPE, CTI_INT16_TYPE, CTI_INT32_TYPE, CTI_INT64_TYPE, CTI_UINT8_TYPE, CTI_UINT16_TYPE, CTI_UINT32_TYPE, CTI_UINT64_TYPE, CTI_INT_LEAST8_TYPE, CTI_INT_LEAST16_TYPE, CTI_INT_LEAST32_TYPE, CTI_INT_LEAST64_TYPE, CTI_UINT_LEAST8_TYPE, CTI_UINT_LEAST16_TYPE, CTI_UINT_LEAST32_TYPE, CTI_UINT_LEAST64_TYPE, CTI_INT_FAST8_TYPE, CTI_INT_FAST16_TYPE, CTI_INT_FAST32_TYPE, CTI_INT_FAST64_TYPE, CTI_UINT_FAST8_TYPE, CTI_UINT_FAST16_TYPE, CTI_UINT_FAST32_TYPE, CTI_UINT_FAST64_TYPE, CTI_INTPTR_TYPE, CTI_UINTPTR_TYPE): Define. (signed_wchar_type_node, unsigned_wchar_type_node): Remove. (underlying_wchar_type_node, sig_atomic_type_node, int8_type_node, int16_type_node, int32_type_node, int64_type_node, uint8_type_node, uint16_type_node, c_uint32_type_node, c_uint64_type_node, int_least8_type_node, int_least16_type_node, int_least32_type_node, int_least64_type_node, uint_least8_type_node, uint_least16_type_node, uint_least32_type_node, uint_least64_type_node, int_fast8_type_node, int_fast16_type_node, int_fast32_type_node, int_fast64_type_node, uint_fast8_type_node, uint_fast16_type_node, uint_fast32_type_node, uint_fast64_type_node, intptr_type_node, uintptr_type_node): Define. * c-cppbuiltin.c (builtin_define_constants, builtin_define_type_minmax): New. (builtin_define_stdint_macros): Define more macros. (c_cpp_builtins): Define more limit macros. (type_suffix): New. (builtin_define_type_max): Define in terms of builtin_define_type_minmax. Remove is_long parameter. All callers changed. * config.gcc (use_gcc_stdint): Define. (tm_file): Add glibc-stdint.h for targets using glibc or uClibc. Add newlib-stdint.h for generic targets. * config/glibc-stdint.h, config/newlib-stdint.h, ginclude/stdint-gcc.h, ginclude/stdint-wrap.h: New. * config/m32c/m32c.h (UINTPTR_TYPE): Define. * config/score/score.h (UINTPTR_TYPE): Define. * config/sol2.h (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Define. * config/spu/spu.h (STDINT_LONG32): Define. * configure.ac (use_gcc_stdint): Substitute. * configure: Regenerate. * doc/cpp.texi (__SIG_ATOMIC_TYPE__, __INT8_TYPE__, __INT16_TYPE__, __INT32_TYPE__, __INT64_TYPE__, __UINT8_TYPE__, __UINT16_TYPE__, __UINT32_TYPE__, __UINT64_TYPE__, __INT_LEAST8_TYPE__, __INT_LEAST16_TYPE__, __INT_LEAST32_TYPE__, __INT_LEAST64_TYPE__, __UINT_LEAST8_TYPE__, __UINT_LEAST16_TYPE__, __UINT_LEAST32_TYPE_, __UINT_LEAST64_TYPE__, __INT_FAST8_TYPE__, __INT_FAST16_TYPE__, __INT_FAST32_TYPE__, __INT_FAST64_TYPE__, __UINT_FAST8_TYPE__, __UINT_FAST16_TYPE__, __UINT_FAST32_TYPE__, __UINT_FAST64_TYPE__, __INTPTR_TYPE__, __UINTPTR_TYPE__, __WINT_MAX__, __SIZE_MAX__, __PTRDIFF_MAX__, __UINTMAX_MAX__, __SIG_ATOMIC_MAX__, __INT8_MAX__, __INT16_MAX__, __INT32_MAX__, __INT64_MAX__, __UINT8_MAX__, __UINT16_MAX__, __UINT32_MAX__, __UINT64_MAX__, __INT_LEAST8_MAX__, __INT_LEAST16_MAX__, __INT_LEAST32_MAX__, __INT_LEAST64_MAX__, __UINT_LEAST8_MAX__, __UINT_LEAST16_MAX__, __UINT_LEAST32_MAX__, __UINT_LEAST64_MAX__, __INT_FAST8_MAX__, __INT_FAST16_MAX__, __INT_FAST32_MAX__, __INT_FAST64_MAX__, __UINT_FAST8_MAX__, __UINT_FAST16_MAX__, __UINT_FAST32_MAX__, __UINT_FAST64_MAX__, __INTPTR_MAX__, __UINTPTR_MAX__, __WCHAR_MIN__, __WINT_MIN__, __SIG_ATOMIC_MIN__, __INT8_C, __INT16_C, __INT32_C, __INT64_C, __UINT8_C, __UINT16_C, __UINT32_C, __UINT64_C, __INTMAX_C, __UINTMAX_C): Document. * doc/tm.texi (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Document. gcc/testsuite: * lib/target-supports.exp (check_effective_target_stdint_types): Update comment. (check_effective_target_inttypes_types): New. * gcc.dg/c99-stdint-1.c, gcc.dg/c99-stdint-2.c, gcc.dg/c99-stdint-3.c, gcc.dg/c99-stdint-4.c, gcc.dg/c99-stdint-5.c, gcc.dg/c99-stdint-6.c: New tests. From-SVN: r145372
2009-03-31 21:30:31 +01:00
fix = {
hackname = newlib_stdint_2;
config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. gcc: * config.gcc (mips-sgi-irix[56]*): Set use_gcc_stdint. * config/mips/iris.h (INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE): Define. (UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE): Define. (INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE): Define. (UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE): Define. (INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE) INT_FAST64_TYPE): Define. (UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE): Define. (INTMAX_TYPE, UINTMAX_TYPE): Define. (INTPTR_TYPE, UINTPTR_TYPE): Define. (SIG_ATOMIC_TYPE): Define. fixincludes: * inclhack.def (aix_stdint_1): Add stdint-aix.h to files. (aix_stdint_2): Likewise. (aix_stdint_3): Likewise. (aix_stdint_4): Likewise. (aix_stdint_5): Likewise. (darwin_stdint_1): Add stdint-darwin.h to files. (darwin_stdint_2): Likewise. (darwin_stdint_3): Likewise. (darwin_stdint_4): Likewise. (darwin_stdint_5): Likewise. (darwin_stdint_6): Likewise. (darwin_stdint_7): Likewise. (hpux_c99_intptr): Add stdint-hpux11.h to files. (hpux_c99_inttypes): Likewise. (hpux_c99_inttypes2): Likewise. (hpux_stdint_least_fast): Likewise. (irix_stdint_c99): Renamed to irix_stdint_c99_mode. (irix_stdint_c99_types): New fix. (irix_stdint_c99_macros): New fix. (newlib_stdint_1): Add stdint-newlib.h to files. (newlib_stdint_2): Likewise. fixincl.x: Regenerate. tests/base/stdint-aix.h: New file. tests/base/stdint.h [AIX_STDINT_1_CHECK, AIX_STDINT_2_CHECK, AIX_STDINT_3_CHECK, AIX_STDINT_4_CHECK, AIX_STDINT_5_CHECK]: Moved ... tests/base/stdint-aix.h: ... here. [AIX_STDINT_3_CHECK]: Updated to match aix_stdint_3 fix. [AIX_STDINT_4_CHECK]: Updated to match aix_stdint_4 fix. [AIX_STDINT_5_CHECK]: Updated to match aix_stdint_5 fix. tests/base/stdint-darwin.h: New file. tests/base/stdint.h [DARWIN_STDINT_1_CHECK, DARWIN_STDINT_2_CHECK, DARWIN_STDINT_3_CHECK, DARWIN_STDINT_4_CHECK, DARWIN_STDINT_5_CHECK, DARWIN_STDINT_6_CHECK]: Moved ... tests/base/stdint-darwin.h: ... here. [DARWIN_STDINT_1_CHECK]: Updated to match darwin_stdint_1 fix. [DARWIN_STDINT_4_CHECK]: Updated to match darwin_stdint_4 fix. [DARWIN_STDINT_6_CHECK]: Updated to match darwin_stdint_6 fix. tests/base/stdint-hpux11.h: New file. tests/base/stdint.h [HPUX_C99_INTPTR_CHECK, HPUX_C99_INTTYPES2_CHECK, HPUX_STDINT_LEAST_FAST_CHECK]: Moved ... tests/base/stdint-hpux11.h: ... here. [HPUX_C99_INTPTR_CHECK]: Updated to match hpux_c99_intptr fix. [HPUX_C99_INTTYPES2_CHECK]: Updated to match hpux_c99_inttypes2 fix. tests/base/stdint.h [IRIX_STDINT_C99_CHECK]: Renamed guard to IRIX_STDINT_C99_MODE_CHECK. tests/base/stdint-irix65.h: New file. tests/base/stdint-newlib.h: New file. tests/base/stdint.h [NEWLIB_STDINT_1_CHECK, NEWLIB_STDINT_2_CHECK]: Moved ... tests/base/stdint-newlib.h: ... here. From-SVN: r156259
2010-01-26 19:24:32 +00:00
files = stdint-newlib.h, stdint.h;
re PR c/448 (<stdint.h>-related issues (C99 issues)) PR c/448 fixincludes: * inclhack.def (newlib_stdint_1, newlib_stdint_2): New fixes. * fixincl.x: Regenerate. * tests/base/stdint.h: Update. gcc: * Makefile.in (USE_GCC_STDINT): Define. (stmp-int-hdrs): Install stdint.h if applicable. * c-common.c (CHAR16_TYPE): Define in terms of UINT_LEAST16_TYPE if known. (CHAR32_TYPE): Define in terms of UINT_LEAST32_TYPE if known. (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Define. (c_common_nodes_and_builtins): Initialize underlying_wchar_type_node. Do not initialize signed_wchar_type_node or unsigned_wchar_type_node. Initialize nodes for new types. (c_stddef_cpp_builtins): Define macros for new types. * c-common.h (CTI_SIGNED_WCHAR_TYPE, CTI_UNSIGNED_WCHAR_TYPE): Remove. (CTI_UNDERLYING_WCHAR_TYPE, CTI_SIG_ATOMIC_TYPE, CTI_INT8_TYPE, CTI_INT16_TYPE, CTI_INT32_TYPE, CTI_INT64_TYPE, CTI_UINT8_TYPE, CTI_UINT16_TYPE, CTI_UINT32_TYPE, CTI_UINT64_TYPE, CTI_INT_LEAST8_TYPE, CTI_INT_LEAST16_TYPE, CTI_INT_LEAST32_TYPE, CTI_INT_LEAST64_TYPE, CTI_UINT_LEAST8_TYPE, CTI_UINT_LEAST16_TYPE, CTI_UINT_LEAST32_TYPE, CTI_UINT_LEAST64_TYPE, CTI_INT_FAST8_TYPE, CTI_INT_FAST16_TYPE, CTI_INT_FAST32_TYPE, CTI_INT_FAST64_TYPE, CTI_UINT_FAST8_TYPE, CTI_UINT_FAST16_TYPE, CTI_UINT_FAST32_TYPE, CTI_UINT_FAST64_TYPE, CTI_INTPTR_TYPE, CTI_UINTPTR_TYPE): Define. (signed_wchar_type_node, unsigned_wchar_type_node): Remove. (underlying_wchar_type_node, sig_atomic_type_node, int8_type_node, int16_type_node, int32_type_node, int64_type_node, uint8_type_node, uint16_type_node, c_uint32_type_node, c_uint64_type_node, int_least8_type_node, int_least16_type_node, int_least32_type_node, int_least64_type_node, uint_least8_type_node, uint_least16_type_node, uint_least32_type_node, uint_least64_type_node, int_fast8_type_node, int_fast16_type_node, int_fast32_type_node, int_fast64_type_node, uint_fast8_type_node, uint_fast16_type_node, uint_fast32_type_node, uint_fast64_type_node, intptr_type_node, uintptr_type_node): Define. * c-cppbuiltin.c (builtin_define_constants, builtin_define_type_minmax): New. (builtin_define_stdint_macros): Define more macros. (c_cpp_builtins): Define more limit macros. (type_suffix): New. (builtin_define_type_max): Define in terms of builtin_define_type_minmax. Remove is_long parameter. All callers changed. * config.gcc (use_gcc_stdint): Define. (tm_file): Add glibc-stdint.h for targets using glibc or uClibc. Add newlib-stdint.h for generic targets. * config/glibc-stdint.h, config/newlib-stdint.h, ginclude/stdint-gcc.h, ginclude/stdint-wrap.h: New. * config/m32c/m32c.h (UINTPTR_TYPE): Define. * config/score/score.h (UINTPTR_TYPE): Define. * config/sol2.h (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Define. * config/spu/spu.h (STDINT_LONG32): Define. * configure.ac (use_gcc_stdint): Substitute. * configure: Regenerate. * doc/cpp.texi (__SIG_ATOMIC_TYPE__, __INT8_TYPE__, __INT16_TYPE__, __INT32_TYPE__, __INT64_TYPE__, __UINT8_TYPE__, __UINT16_TYPE__, __UINT32_TYPE__, __UINT64_TYPE__, __INT_LEAST8_TYPE__, __INT_LEAST16_TYPE__, __INT_LEAST32_TYPE__, __INT_LEAST64_TYPE__, __UINT_LEAST8_TYPE__, __UINT_LEAST16_TYPE__, __UINT_LEAST32_TYPE_, __UINT_LEAST64_TYPE__, __INT_FAST8_TYPE__, __INT_FAST16_TYPE__, __INT_FAST32_TYPE__, __INT_FAST64_TYPE__, __UINT_FAST8_TYPE__, __UINT_FAST16_TYPE__, __UINT_FAST32_TYPE__, __UINT_FAST64_TYPE__, __INTPTR_TYPE__, __UINTPTR_TYPE__, __WINT_MAX__, __SIZE_MAX__, __PTRDIFF_MAX__, __UINTMAX_MAX__, __SIG_ATOMIC_MAX__, __INT8_MAX__, __INT16_MAX__, __INT32_MAX__, __INT64_MAX__, __UINT8_MAX__, __UINT16_MAX__, __UINT32_MAX__, __UINT64_MAX__, __INT_LEAST8_MAX__, __INT_LEAST16_MAX__, __INT_LEAST32_MAX__, __INT_LEAST64_MAX__, __UINT_LEAST8_MAX__, __UINT_LEAST16_MAX__, __UINT_LEAST32_MAX__, __UINT_LEAST64_MAX__, __INT_FAST8_MAX__, __INT_FAST16_MAX__, __INT_FAST32_MAX__, __INT_FAST64_MAX__, __UINT_FAST8_MAX__, __UINT_FAST16_MAX__, __UINT_FAST32_MAX__, __UINT_FAST64_MAX__, __INTPTR_MAX__, __UINTPTR_MAX__, __WCHAR_MIN__, __WINT_MIN__, __SIG_ATOMIC_MIN__, __INT8_C, __INT16_C, __INT32_C, __INT64_C, __UINT8_C, __UINT16_C, __UINT32_C, __UINT64_C, __INTMAX_C, __UINTMAX_C): Document. * doc/tm.texi (SIG_ATOMIC_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, INT64_TYPE, UINT8_TYPE, UINT16_TYPE, UINT32_TYPE, UINT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE, INT_LEAST32_TYPE, INT_LEAST64_TYPE, UINT_LEAST8_TYPE, UINT_LEAST16_TYPE, UINT_LEAST32_TYPE, UINT_LEAST64_TYPE, INT_FAST8_TYPE, INT_FAST16_TYPE, INT_FAST32_TYPE, INT_FAST64_TYPE, UINT_FAST8_TYPE, UINT_FAST16_TYPE, UINT_FAST32_TYPE, UINT_FAST64_TYPE, INTPTR_TYPE, UINTPTR_TYPE): Document. gcc/testsuite: * lib/target-supports.exp (check_effective_target_stdint_types): Update comment. (check_effective_target_inttypes_types): New. * gcc.dg/c99-stdint-1.c, gcc.dg/c99-stdint-2.c, gcc.dg/c99-stdint-3.c, gcc.dg/c99-stdint-4.c, gcc.dg/c99-stdint-5.c, gcc.dg/c99-stdint-6.c: New tests. From-SVN: r145372
2009-03-31 21:30:31 +01:00
select = "@todo - Add support for wint_t types";
c_fix = format;
c_fix_arg = "#define INTMAX_MAX __INTMAX_MAX__\n"
"#define INTMAX_MIN (-INTMAX_MAX - 1)\n"
"#define UINTMAX_MAX __UINTMAX_MAX__\n"
"#define WCHAR_MAX __WCHAR_MAX__\n"
"#define WCHAR_MIN __WCHAR_MIN__\n"
"#define WINT_MAX __WINT_MAX__\n"
"#define WINT_MIN __WINT_MIN__\n\n"
"%0";
c_fix_arg = '/\*\* Macros for minimum-width integer constant expressions \*/';
test_text = "/* @todo - Add support for wint_t types. */\n"
"/** Macros for minimum-width integer constant expressions */";
};
/*
* NeXT 3.2 adds const prefix to some math functions.
* These conflict with the built-in functions.
*/
fix = {
hackname = next_math_prefix;
files = ansi/math.h;
select = "^extern[ \t]+double[ \t]+__const__[ \t]";
c_fix = format;
c_fix_arg = "extern double %1(";
c_fix_arg = "^extern[ \t]+double[ \t]+__const__[ \t]+([a-z]+)\\(";
test_text = "extern\tdouble\t__const__\tmumble();";
};
/*
* NeXT 3.2 uses the word "template" as a parameter for some
* functions. GCC reports an invalid use of a reserved key word
* with the built-in functions.
*/
fix = {
hackname = next_template;
files = bsd/libc.h;
select = "[ \t]template\\)";
c_fix = format;
c_fix_arg = "(%1)";
c_fix_arg = "\\(([^)]*)[ \t]template\\)";
test_text = "extern mumble( char * template); /* fix */";
};
/*
* NeXT 3.2 includes the keyword volatile in the abort() and exit()
* function prototypes. That conflicts with the built-in functions.
*/
fix = {
hackname = next_volitile;
files = ansi/stdlib.h;
select = "^extern[ \t]+volatile[ \t]+void[ \t]";
c_fix = format;
c_fix_arg = "extern void %1(";
c_fix_arg = "^extern[ \t]+volatile[ \t]+void[ \t]+(exit|abort)\\(";
test_text = "extern\tvolatile\tvoid\tabort();";
};
/*
* NeXT 2.0 defines 'int wait(union wait*)', which conflicts with Posix.1.
* Note that version 3 of the NeXT system has wait.h in a different directory,
* so that this code won't do anything. But wait.h in version 3 has a
* conditional, so it doesn't need this fix. So everything is okay.
*/
fix = {
hackname = next_wait_union;
files = sys/wait.h;
select = 'wait\(union wait';
c_fix = format;
c_fix_arg = "wait(void";
test_text = "extern pid_d wait(union wait*);";
};
/*
* a missing semi-colon at the end of the nodeent structure definition.
*/
fix = {
hackname = nodeent_syntax;
files = netdnet/dnetdb.h;
select = "char[ \t]*\\*na_addr[ \t]*$";
c_fix = format;
c_fix_arg = "%0;";
test_text = "char *na_addr\t";
};
/*
* Fix OpenBSD's NULL definition.
*/
fix = {
hackname = openbsd_null_definition;
mach = "*-*-openbsd*";
files = locale.h, stddef.h, stdio.h, string.h,
time.h, unistd.h, wchar.h, sys/param.h;
select = "__GNUG__";
c_fix = format;
c_fix_arg = "#ifndef NULL\n"
"#ifdef __cplusplus\n"
"#ifdef __GNUG__\n"
"#define NULL\t__null\n"
"#else\t /* ! __GNUG__ */\n"
"#define NULL\t0L\n"
"#endif\t /* __GNUG__ */\n"
"#else\t /* ! __cplusplus */\n"
"#define NULL\t((void *)0)\n"
"#endif\t /* __cplusplus */\n"
"#endif\t /* !NULL */";
c_fix_arg = "^#ifndef[ \t]*NULL\n"
"^#ifdef[ \t]*__GNUG__\n"
"^#define[ \t]*NULL[ \t]*__null\n"
"^#else\n"
"^#define[ \t]*NULL[ \t]*0L\n"
"^#endif\n"
"^#endif";
test_text =
"#ifndef NULL\n"
"#ifdef __GNUG__\n"
"#define NULL __null\n"
"#else\n"
"#define NULL 0L\n"
"#endif\n"
"#endif\n";
};
/*
* obstack.h used casts as lvalues.
*
* We need to change postincrements of casted pointers (which are
* then dereferenced and assigned into) of the form
*
* *((TYPE*)PTRVAR)++ = (VALUE)
*
* into expressions like
*
* ((*((TYPE*)PTRVAR) = (VALUE)), (PTRVAR += sizeof (TYPE)))
*
* which is correct for the cases used in obstack.h since PTRVAR is
* of type char * and the value of the expression is not used.
*/
fix = {
hackname = obstack_lvalue_cast;
files = obstack.h;
select = '\*\(\(([^()]*)\*\)(.*)\)\+\+ = \(([^()]*)\)';
c_fix = format;
c_fix_arg = "((*((%1*)%2) = (%3)), (%2 += sizeof (%1)))";
test_text = "*((void **) (h)->next_free)++ = (aptr)";
};
/*
* Fix OpenBSD's va_start define.
*/
fix = {
hackname = openbsd_va_start;
mach = "*-*-openbsd*";
files = stdarg.h;
select = '__builtin_stdarg_start';
c_fix = format;
c_fix_arg = __builtin_va_start;
test_text = "#define va_start(v,l) __builtin_stdarg_start((v),l)";
};
/*
* sys/lc_core.h on some versions of OSF1/4.x pollutes the namespace by
* defining regex.h related types. This causes libg++ build and usage
* failures. Fixing this correctly requires checking and modifying 3 files.
*/
fix = {
hackname = osf_namespace_a;
files = reg_types.h;
files = sys/lc_core.h;
test = " -r reg_types.h";
test = " -r sys/lc_core.h";
test = " -n \"`grep '} regex_t;' reg_types.h`\"";
test = " -z \"`grep __regex_t regex.h`\"";
c_fix = format;
c_fix_arg = "__%0";
c_fix_arg = "reg(ex|off|match)_t";
test_text = "`touch sys/lc_core.h`"
"typedef struct {\n int stuff, mo_suff;\n} regex_t;\n"
"extern regex_t re;\n"
"extern regoff_t ro;\n"
"extern regmatch_t rm;\n";
};
fix = {
hackname = osf_namespace_c;
files = regex.h;
test = " -r reg_types.h";
test = " -r sys/lc_core.h";
test = " -n \"`grep '} regex_t;' reg_types.h`\"";
test = " -z \"`grep __regex_t regex.h`\"";
select = "#include <reg_types\.h>.*";
c_fix = format;
c_fix_arg = "%0\n"
"typedef __regex_t\tregex_t;\n"
"typedef __regoff_t\tregoff_t;\n"
"typedef __regmatch_t\tregmatch_t;";
test_text = "#include <reg_types.h>";
};
/*
* On broken glibc-2.3.3 systems an array of incomplete structures is
* passed to __sigsetjmp. Fix that to take a pointer instead.
*/
fix = {
hackname = pthread_incomplete_struct_argument;
files = pthread.h;
select = "struct __jmp_buf_tag";
c_fix = format;
c_fix_arg = "%1 *%2%3";
c_fix_arg = "^(extern int __sigsetjmp \\(struct __jmp_buf_tag) "
"(__env)\\[1\\](.*)$";
test_text = "extern int __sigsetjmp (struct __jmp_buf_tag __env[1], "
"int __savemask);";
};
/*
* Fix return type of fread and fwrite on sysV68
*/
fix = {
hackname = read_ret_type;
files = stdio.h;
select = "extern int\t.*, fread\\(\\), fwrite\\(\\)";
c_fix = format;
c_fix_arg = "extern unsigned int fread(), fwrite();\n%1%2";
c_fix_arg = "(extern int\t.*), fread\\(\\), fwrite\\(\\)(.*)";
test_text = "extern int\tfclose(), fflush(), fread(), fwrite(), foo();";
};
/*
* Fix casts as lvalues in glibc's <rpc/xdr.h>.
*/
fix = {
hackname = rpc_xdr_lvalue_cast_a;
files = rpc/xdr.h;
select = "#define[ \t]*IXDR_GET_LONG.*\\\\\n.*__extension__.*";
c_fix = format;
c_fix_arg = "#define IXDR_GET_LONG(buf) ((long)IXDR_GET_U_INT32(buf))";
test_text = "#define IXDR_GET_LONG(buf) \\\\\n"
"\t((long)ntohl((u_long)*__extension__((u_int32_t*)(buf))++))";
};
/*
* rpc_xdr_lvalue_cast_b
*/
fix = {
hackname = rpc_xdr_lvalue_cast_b;
files = rpc/xdr.h;
select = "#define[ \t]*IXDR_PUT_LONG.*\\\\\n.*__extension__.*";
c_fix = format;
c_fix_arg = "#define IXDR_PUT_LONG(buf, v) ((long)IXDR_PUT_INT32(buf, (long)(v)))";
test_text = "#define IXDR_PUT_LONG(buf, v) \\\\\n"
"\t(*__extension__((u_int32_t*)(buf))++ = (long)htonl((u_long)(v)))";
};
/*
* function class(double x) conflicts with C++ keyword on rs/6000
*/
fix = {
hackname = rs6000_double;
files = math.h;
select = '[^a-zA-Z_]class\(';
c_fix = format;
c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
c_fix_arg = '^.*[^a-zA-Z_]class\(.*';
test_text = "extern int class();";
};
/*
* Wrong fchmod prototype on RS/6000.
*/
fix = {
hackname = rs6000_fchmod;
files = sys/stat.h;
select = 'fchmod\(char \*';
c_fix = format;
c_fix_arg = "fchmod(int";
test_text = "extern int fchmod(char *, mode_t);";
};
/*
* parameters conflict with C++ new on rs/6000
*/
fix = {
hackname = rs6000_param;
files = "stdio.h";
files = "unistd.h";
select = 'rename\(const char \*old, const char \*new\)';
c_fix = format;
c_fix_arg = 'rename(const char *_old, const char *_new)';
test_text = 'extern int rename(const char *old, const char *new);';
};
/*
* Solaris 10+ <sys/feature_tests.h> defines _RESTRICT_KYWD as restrict
* for C99. This is wrong for C++, which needs many C99 features, but
* only supports __restrict.
*/
fix = {
hackname = solaris___restrict;
files = sys/feature_tests.h;
select = "#define[ \t]*_RESTRICT_KYWD[ \t]*restrict";
mach = "*-*-solaris2*";
c_fix = format;
c_fix_arg = "#ifdef __cplusplus\n#define\t_RESTRICT_KYWD\t__restrict\n"
"#else\n%0\n#endif";
test_text = "#define _RESTRICT_KYWD restrict";
};
/*
* Solaris 10+ complex.h defines _Complex_I and _Imaginary_I in terms of
* themselves, which are Sun Studio compiler intrinsics. Remove _Imaginary_I
* and imaginary definitions which are not supported by GCC.
*/
fix = {
hackname = solaris_complex;
mach = "*-*-solaris2.*";
files = complex.h;
select = "#define[ \t]_Complex_I[ \t]_Complex_I";
sed = "s/#define[ \t]_Complex_I[ \t]_Complex_I/"
"#define\t_Complex_I\t(__extension__ 1.0iF)/";
sed = "/#define[ \t]_Imaginary_I[ \t]_Imaginary_I/d";
sed = "/#define[ \t]imaginary[ \t]_Imaginary/d";
sed = "s/#define[ \t]I[ \t]\\{1,\\}_Imaginary_I/#define\tI\t\t_Complex_I/";
test_text = "#define _Complex_I _Complex_I\n"
"#define complex _Complex\n"
"#define _Imaginary_I _Imaginary_I\n"
"#define imaginary _Imaginary\n"
"#undef I\n"
"#define I _Imaginary_I";
};
/*
* Solaris 10+ <complex.h> is wrapped in #ifndef __cplusplus. Wrap in
* extern "C" instead so libstdc++ can use it.
*/
fix = {
hackname = solaris_complex_cxx;
mach = "*-*-solaris2.*";
files = complex.h;
sed = "/#if[ \t]*!defined(__cplusplus)/c\\\n"
"#ifdef\t__cplusplus\\\nextern \"C\" {\\\n#endif";
sed = "/#endif[ \t]*\\/\\* !defined(__cplusplus) \\*\\//c\\\n"
"#ifdef\t__cplusplus\\\n}\\\n#endif";
test_text = "#if !defined(__cplusplus)\n"
"#endif /* !defined(__cplusplus) */";
};
/*
* g++ rejects functions declared with both C and C++ linkage.
*/
fix = {
hackname = solaris_cxx_linkage;
mach = '*-*-solaris2*';
files = "iso/stdlib_iso.h";
select = "(#if __cplusplus >= 199711L)\n"
"(extern \"C\\+\\+\" \\{\n)"
"(.*(bsearch|qsort).*)";
c_fix = format;
c_fix_arg = "%1 && !__GNUG__\n%2%3";
test_text =
"#if __cplusplus >= 199711L\n"
"extern \"C++\" {\n"
" void *bsearch(const void *, const void *, size_t, size_t,";
};
/*
* Solaris <iso/stdio_iso.h> doesn't declare getc for C++ with
* _STRICT_STDC, but uses it.
*/
fix = {
hackname = solaris_getc_strict_stdc;
mach = "*-*-solaris2*";
files = "iso/stdio_iso.h";
select = "(.*&& )!defined\\(_STRICT_STDC\\)(.*)";
c_fix = format;
c_fix_arg = "%1(!defined(_STRICT_STDC) || (__cplusplus >= 199711L))%2";
test_text =
"#if !defined(_REENTRANT) && !defined(_LP64) && !defined(_STRICT_STDC)";
};
/*
* Solaris <iso/stdio_iso.h> should deprecate gets before C11.
*/
fix = {
hackname = solaris_gets_c11;
mach = "*-*-solaris2*";
files = "iso/stdio_iso.h";
select = "(extern char[ \t]*\\*gets\\(char \\*\\));";
c_fix = format;
c_fix_arg = "#if __STDC_VERSION__ < 201112L && __cplusplus < 201402L\n"
"%1 __attribute__((__deprecated__));\n"
"#endif";
test_text = "extern char *gets(char *);";
};
/*
* Solaris <iso/stdio_iso.h> shouldn't declare gets for C++14.
*/
fix = {
hackname = solaris_gets_cxx14;
mach = "*-*-solaris2*";
files = "iso/stdio_iso.h";
select = <<- _EOSelect_
(#if __STDC_VERSION__ < 201112L)
(extern char \*gets\(char \*\) __ATTR_DEPRECATED;)
_EOSelect_;
c_fix = format;
c_fix_arg = "%1 && __cplusplus < 201402L\n%2";
test_text = <<- _EOText_
#if __STDC_VERSION__ < 201112L
extern char *gets(char *) __ATTR_DEPRECATED;
_EOText_;
};
/*
* Sun Solaris 2 has a version of sys/int_const.h that defines
* UINT8_C and UINT16_C to unsigned constants.
*/
fix = {
hackname = solaris_int_const;
files = sys/int_const.h;
mach = '*-*-solaris2*';
c_fix = format;
c_fix_arg = "#define\tUINT8_C(c)\t(c)\n"
"%1\n"
"#define\tUINT16_C(c)\t(c)";
select = "^#define[ \t]+UINT8_C\\(c\\)[ \t]+__CONCAT__.*\n"
"(/\*.*\*/)\n"
"#define[ \t]+UINT16_C\\(c\\)[ \t]+__CONCAT__.*";
test_text =
"#define UINT8_C(c) __CONCAT__(c,u)\n"
"/* CSTYLED */\n"
"#define UINT16_C(c) __CONCAT__(c,u)";
};
/*
* Sun Solaris 2 has a version of sys/int_limits.h that defines
* UINT8_MAX and UINT16_MAX to unsigned constants.
*/
fix = {
hackname = solaris_int_limits_1;
files = sys/int_limits.h;
mach = '*-*-solaris2*';
c_fix = format;
c_fix_arg = "#define\tUINT8_MAX\t(255)\n"
"#define\tUINT16_MAX\t(65535)";
select = "^#define[ \t]+UINT8_MAX[ \t]+\\(255U\\)\n"
"#define[ \t]+UINT16_MAX[ \t]+\\(65535U\\)";
test_text =
"#define UINT8_MAX (255U)\n"
"#define UINT16_MAX (65535U)";
};
/*
* Sun Solaris 2 has a version of sys/int_limits.h that defines
* INT_FAST16 limits to wrong values for sys/int_types.h.
*/
fix = {
hackname = solaris_int_limits_2;
files = sys/int_limits.h;
mach = '*-*-solaris2*';
c_fix = format;
c_fix_arg = "#define\t%1_FAST16_%2 %132_%2";
select = "^#define[ \t]+(INT|UINT)_FAST16_(MAX|MIN)[ \t](INT|UINT)16.*";
test_text =
"#define INT_FAST16_MAX INT16_MAX\n"
"#define UINT_FAST16_MAX UINT16_MAX\n"
"#define INT_FAST16_MIN INT16_MIN";
};
/*
* Sun Solaris 2 has a version of sys/int_limits.h that defines
* SIZE_MAX as unsigned long.
*/
fix = {
hackname = solaris_int_limits_3;
files = sys/int_limits.h;
mach = '*-*-solaris2*';
c_fix = format;
c_fix_arg = "#define\tSIZE_MAX\t4294967295U";
select = "^#define[ \t]+SIZE_MAX[ \t]+4294967295UL";
test_text =
"#define SIZE_MAX 4294967295UL";
};
/*
* Sun Solaris 10 defines several C99 math macros in terms of
* builtins specific to the Studio compiler, in particular not
* compatible with the GNU compiler.
*/
fix = {
hackname = solaris_math_1;
select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
bypass = "__GNUC__";
files = iso/math_c99.h;
c_fix = format;
c_fix_arg = "#define\tHUGE_VA%1\t(__builtin_huge_va%2())";
c_fix_arg = "^#define[ \t]+HUGE_VA([LF]+)[ \t]+__builtin_huge_va([lf]+)";
test_text =
'#ident "@(#)math_c99.h 1.9 04/11/01 SMI"'"\n"
"#undef HUGE_VAL\n"
"#define HUGE_VAL __builtin_huge_val\n"
"#undef HUGE_VALF\n"
"#define HUGE_VALF __builtin_huge_valf\n"
"#undef HUGE_VALL\n"
"#define HUGE_VALL __builtin_huge_vall";
};
/*
* On Solaris 11, if you do isinf(NaN) you'll get a floating point
* exception. Provide an alternative using GCC's builtin.
*/
fix = {
hackname = solaris_math_10;
select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
files = iso/math_c99.h;
c_fix = format;
c_fix_arg = "#define\tisinf(x) __builtin_isinf(x)";
c_fix_arg = "^#define[ \t]+isinf\\(x\\)[ \t]+__extension__\\([ \t]*\\\\\n"
"[ \t]*\\{[ \t]*__typeof\\(x\\)[ \t]*__x_i[ \t]*=[ \t]*\\(x\\);"
"[ \t]*\\\\\n"
"[ \t]*__x_i[ \t]*==[ \t]*\\(__typeof\\(__x_i\\)\\)[ \t]*"
"INFINITY[ \t]*\\|\\|[ \t]*\\\\\n"
"[ \t]*__x_i[ \t]*==[ \t]*\\(__typeof\\(__x_i\\)\\)[ \t]*"
"\\(-INFINITY\\);[ \t]*\\}\\)";
test_text =
'#pragma ident "@(#)math_c99.h 1.12 07/01/21 SMI"'"\n"
"#undef isinf\n"
"#define isinf(x) __extension__( \\\\\n"
" { __typeof(x) __x_i = (x); \\\\\n"
" __x_i == (__typeof(__x_i)) INFINITY || \\\\\n"
" __x_i == (__typeof(__x_i)) (-INFINITY); })";
};
/*
* Solaris math INFINITY
*/
fix = {
hackname = solaris_math_2;
select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
bypass = "__GNUC__";
files = iso/math_c99.h;
c_fix = format;
c_fix_arg = "#define\tINFINITY\t(__builtin_inff())";
c_fix_arg = "^#define[ \t]+INFINITY[ \t]+__builtin_infinity";
test_text =
'#ident "@(#)math_c99.h 1.9 04/11/01 SMI"'"\n"
"#undef INFINITY\n"
"#define INFINITY __builtin_infinity";
};
/*
* Solaris math NAN
*/
fix = {
hackname = solaris_math_3;
select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
bypass = "__GNUC__";
files = iso/math_c99.h;
c_fix = format;
c_fix_arg = "#define\tNAN\t\t(__builtin_nanf(\"\"))";
c_fix_arg = "^#define[ \t]+NAN[ \t]+__builtin_nan";
test_text =
'#ident "@(#)math_c99.h 1.9 04/11/01 SMI"'"\n"
"#undef NAN\n"
"#define NAN __builtin_nan";
};
/*
* Solaris math fpclassify
*/
fix = {
hackname = solaris_math_4;
select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
bypass = "__GNUC__";
files = iso/math_c99.h;
c_fix = format;
c_fix_arg = "#define\tfpclassify(x) \\\n"
" __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, "
"FP_SUBNORMAL, FP_ZERO, (x))";
c_fix_arg = "^#define[ \t]+fpclassify\\(x\\)[ \t]+__builtin_fpclassify\\(x\\)";
test_text =
'#ident "@(#)math_c99.h 1.9 04/11/01 SMI"'"\n"
"#undef fpclassify\n"
"#define fpclassify(x) __builtin_fpclassify(x)";
};
/*
* Solaris math signbit
*/
fix = {
hackname = solaris_math_8;
select = '@\(#\)math_c99\.h' "[ \t]+1\\.[0-9]+[ \t]+[0-9/]+ SMI";
bypass = "__GNUC__";
files = iso/math_c99.h;
c_fix = format;
c_fix_arg = "#define\tsignbit(x)\t(sizeof(x) == sizeof(float) \\\n"
"\t\t\t ? __builtin_signbitf(x) \\\n"
"\t\t\t : sizeof(x) == sizeof(long double) \\\n"
"\t\t\t ? __builtin_signbitl(x) \\\n"
"\t\t\t : __builtin_signbit(x))";
c_fix_arg = "^#define[ \t]+signbit\\(x\\)[ \t]+__builtin_signbit\\(x\\)";
test_text = <<- _EOText_
#ident "@(#)math_c99.h 1.9 04/11/01 SMI"
#undef signbit
#define signbit(x) __builtin_signbit(x)
_EOText_;
};
/*
* Solaris math comparison macros
*/
fix = {
hackname = solaris_math_9;
select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
bypass = "__GNUC__";
files = iso/math_c99.h;
c_fix = format;
c_fix_arg = "#define\t%1(x, y)%2__builtin_%1(x, y)";
c_fix_arg = "^#define[ \t]+([a-z]+)\\(x, y\\)([ \t]+)\\(\\(x\\) "
"__builtin_[a-z]+\\(y\\)\\)";
test_text =
'#ident "@(#)math_c99.h 1.9 04/11/01 SMI"'"\n"
"#undef isgreater\n"
"#define isgreater(x, y) ((x) __builtin_isgreater(y))\n"
"#undef isgreaterequal\n"
"#define isgreaterequal(x, y) ((x) __builtin_isgreaterequal(y))\n"
"#undef isless\n"
"#define isless(x, y) ((x) __builtin_isless(y))\n"
"#undef islessequal\n"
"#define islessequal(x, y) ((x) __builtin_islessequal(y))\n"
"#undef islessgreater\n"
"#define islessgreater(x, y) ((x) __builtin_islessgreater(y))\n"
"#undef isunordered\n"
"#define isunordered(x, y) ((x) __builtin_isunordered(y))";
};
/*
* Newer Solaris 10/11 GCC signbit implementations cause strict-aliasing
* warnings.
*/
fix = {
hackname = solaris_math_11;
select = '@\(#\)math_c99\.h' "[ \t]+1\\.[0-9]+[ \t]+[0-9/]+ ";
files = iso/math_c99.h;
c_fix = format;
c_fix_arg = << _EOArg_
#undef signbit
#define signbit(x) (sizeof(x) == sizeof(float) \
? __builtin_signbitf(x) \
: sizeof(x) == sizeof(long double) \
? __builtin_signbitl(x) \
: __builtin_signbit(x))
_EOArg_;
c_fix_arg = << _EOArg_
^#undef[ ]+signbit
#if defined\(__sparc\)
#define[ ]+signbit\(x\)[ ]+__extension__\( \\
[ ]+\{[ ]*__typeof\(x\)[ ]*__x_s[ ]*=[ ]*\(x\);[ ]*\\
[ ]+\(int\)[ ]*\(\*\(unsigned[ ]*\*\)[ ]*\&__x_s[ ]*>>[ ]*31\);[ ]*\}\)
#elif defined\(__i386\) \|\| defined\(__amd64\)
#define[ ]+signbit\(x\)[ ]+__extension__\( \\
[ ]+\{ __typeof\(x\) __x_s = \(x\); \\
[ ]+\(sizeof \(__x_s\) == sizeof \(float\) \? \\
[ ]+\(int\) \(\*\(unsigned \*\) \&__x_s >> 31\) : \\
[ ]+sizeof \(__x_s\) == sizeof \(double\) \? \\
[ ]+\(int\) \(\(\(unsigned \*\) \&__x_s\)\[1\] >> 31\) : \\
[ ]+\(int\) \(\(\(unsigned short \*\) \&__x_s\)\[4\] >> 15\)\); \}\)
#endif
_EOArg_;
test_text = << _EOText_
/* @(#)math_c99.h 1.14 13/03/27 */
#undef signbit
#if defined(__sparc)
#define signbit(x) __extension__( \\
{ __typeof(x) __x_s = (x); \\
(int) (*(unsigned *) &__x_s >> 31); })
#elif defined(__i386) || defined(__amd64)
#define signbit(x) __extension__( \\
{ __typeof(x) __x_s = (x); \\
(sizeof (__x_s) == sizeof (float) ? \\
(int) (*(unsigned *) &__x_s >> 31) : \\
sizeof (__x_s) == sizeof (double) ? \\
(int) (((unsigned *) &__x_s)[1] >> 31) : \\
(int) (((unsigned short *) &__x_s)[4] >> 15)); })
#endif
_EOText_;
};
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
/*
* Some versions of Solaris 10+ <math.h> #undef libstdc++-internal macros.
*/
fix = {
hackname = solaris_math_12;
files = math.h;
mach = '*-*-solaris2*';
select = '#undef.*_GLIBCXX_USE_C99_MATH';
bypass = '__MATH_PREEMPTS_GLIBCXX_C99_MATH';
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
sed = "/#undef[ \t]*_GLIBCXX_USE_C99_MATH/d";
test_text = << _EOText_
#if __cplusplus >= 201103L
#undef _GLIBCXX_USE_C99_MATH
#undef _GLIBCXX_USE_C99_MATH_TR1
#endif
_EOText_;
};
/*
* Sun Solaris defines PTHREAD_ONCE_INIT as an array containing a
* structure. As such, it need two levels of brackets, but only
* contains one. Wrap the macro definition in an extra layer.
*/
fix = {
hackname = solaris_once_init_1;
select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
files = pthread.h;
mach = '*-*-solaris*';
c_fix = format;
c_fix_arg = "%1{%2}%3";
c_fix_arg = "(^#define[ \t]+PTHREAD_ONCE_INIT[ \t]+\\{)([^}]+)(\\})[ \t]*$";
test_text =
'#pragma ident "@(#)pthread.h 1.37 04/09/28 SMI"'"\n"
"#define PTHREAD_ONCE_INIT\t{0, 0, 0, PTHREAD_ONCE_NOTDONE}";
};
/*
* Solaris 10+ <spawn.h> uses char *const argv[_RESTRICT_KYWD] in the
* posix_spawn declarations, which doesn't work with C++.
*/
fix = {
hackname = solaris_posix_spawn_restrict;
files = spawn.h;
mach = '*-*-solaris2*';
c_fix = format;
c_fix_arg = "%1*_RESTRICT_KYWD %2%3";
select = "(.*[ \t]+)([a-z]+)\\[_RESTRICT_KYWD\\](.*)";
test_text =
"char *const argv[_RESTRICT_KYWD],\n"
"char *const envp[_RESTRICT_KYWD]);";
};
/*
* The pow overloads with int were removed in C++ 2011 DR 550.
*/
fix = {
hackname = solaris_pow_int_overload;
mach = '*-*-solaris2*';
files = "iso/math_iso.h";
select = "^[ \t]*inline [a-z ]* pow\\([^()]*, int [^()]*\\)"
" *\\{[^{}]*\n[^{}]*\\}";
c_fix = format;
c_fix_arg = "#if __cplusplus < 201103L\n%0\n#endif";
test_text =
" inline long double pow(long double __X, int __Y) { return\n"
" __powl(__X, (long double) (__Y)); }";
};
/*
* Sun Solaris defines PTHREAD_RWLOCK_INITIALIZER with a "0" for some
* fields of the pthread_rwlock_t structure, which are of type
* upad64_t, which itself is typedef'd to int64_t, but with __STDC__
* defined (e.g. by -ansi) it is a union. So change the initializer
* to "{0}" instead.
*/
fix = {
hackname = solaris_rwlock_init_1;
select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
files = pthread.h;
mach = '*-*-solaris*';
c_fix = format;
c_fix_arg = "#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n"
"%0\n"
"#else\n"
"%1{0, 0, 0, {{0}, {0}, {0}}, {{0}, {0}}, {{0}, {0}}}\n"
"#endif";
c_fix_arg = "(^#define[ \t]+PTHREAD_RWLOCK_INITIALIZER[ \t]+)"
"\\{0, 0, 0, \\{0, 0, 0\\}, \\{0, 0\\}, \\{0, 0\\}\\}[ \t]*$";
test_text =
'#ident "@(#)pthread.h 1.26 98/04/12 SMI"'"\n"
"#define PTHREAD_RWLOCK_INITIALIZER\t{0, 0, 0, {0, 0, 0}, {0, 0}, {0, 0}}";
};
/*
* Before Solaris 10, <stdio.h> lacks declarations of std::__filbuf and
* std::__flsbuf, but <iso/stdio_iso.h> uses them.
*/
fix = {
hackname = solaris_std___filbuf;
files = stdio.h;
mach = '*-*-solaris2*';
bypass = "using std::__filbuf";
select = "(using std::perror;\n)(#endif)";
c_fix = format;
c_fix_arg = "%1#ifndef _LP64\n"
"using std::__filbuf;\n"
"using std::__flsbuf;\n"
"#endif\n%2";
test_text = "using std::perror;\n"
"#endif";
};
/*
* Solaris <stdio.h> shouldn't use std::gets for C++14.
*/
fix = {
hackname = solaris_std_gets_cxx14;
mach = "*-*-solaris2*";
files = "stdio.h";
select = "using std::gets;";
c_fix = format;
c_fix_arg = "#if __cplusplus < 201402L\n%0\n#endif";
test_text = "using std::gets;";
};
/*
* Sun Solaris 8 has what appears to be some gross workaround for
* some old version of their c++ compiler. G++ doesn't want it
* either, but doesn't want to be tied to SunPRO version numbers.
*/
fix = {
hackname = solaris_stdio_tag;
files = stdio_tag.h;
select = '__cplusplus < 54321L';
/* In Solaris 10, the code in stdio_tag.h is conditionalized on
"!defined(__GNUC__)" so we no longer need to fix it. */
bypass = '__GNUC__';
sed = 's/defined(__cplusplus) && (__cplusplus < 54321L)/0/';
2002-05-02 05:18:08 +00:00
test_text = "#if\tdefined(__cplusplus) && (__cplusplus < 54321L)";
};
/*
* Solaris <stdlib.h> shouldn't use _Noreturn, breaks with C++.
*/
fix = {
hackname = solaris_stdlib_noreturn;
mach = "*-*-solaris2*";
files = "iso/stdlib_c99.h";
select = "(extern) _Noreturn (void quick_exit\\(int\\));";
c_fix = format;
c_fix_arg = "%1 %2 __attribute__((__noreturn__));";
test_text = "extern _Noreturn void quick_exit(int);";
};
/*
* a missing semi-colon at the end of the statsswtch structure definition.
*/
fix = {
hackname = statsswtch;
files = rpcsvc/rstat.h;
select = "boottime$";
c_fix = format;
c_fix_arg = "boottime;";
test_text = "struct statswtch {\n int boottime\n};";
};
/*
* Arrange for stdio.h to use stdarg.h to define __gnuc_va_list.
* On 4BSD-derived systems, stdio.h defers to machine/ansi.h; that's
* OK too.
*/
fix = {
hackname = stdio_stdarg_h;
files = stdio.h;
bypass = "include.*(stdarg\.h|machine/ansi\.h)";
/*
* On Solaris 10, this fix is unncessary; <stdio.h> includes
* <iso/stdio_iso.h>, which includes <sys/va_list.h>.
*/
mach = '*-*-solaris2.1[0-9]*';
not_machine = true;
c_fix = wrap;
c_fix_arg = "#define __need___va_list\n#include <stdarg.h>\n";
test_text = "";
};
/*
* Don't use or define the name va_list in stdio.h. This is for
* ANSI. Note _BSD_VA_LIST_ is dealt with elsewhere. The presence
* of __gnuc_va_list, __DJ_va_list, or _G_va_list is taken to
* indicate that the header knows what it's doing -- under SUSv2,
* stdio.h is required to define va_list, and we shouldn't break
Remove obsolete IRIX 6.5 support libstdc++-v3: * configure.host (irix6.5*): Remove. * config/os/irix: Remove. * config/io/basic_file_stdio.cc (__basic_file<char>::showmanyc()) [_GLIBCXX_FIONREAD_TAKES_OFF_T]: Remove. * doc/xml/faq.xml: Remove IRIX reference. * doc/xml/manual/using.xml (Finding Dynamic or Shared Libraries): Remove IRIX example. * testsuite/20_util/shared_ptr/thread/default_weaktoshared.cc: Remove mips-sgi-irix6* handling. * testsuite/20_util/shared_ptr/thread/mutex_weaktoshared.cc: Likewise. * testsuite/21_strings/basic_string/pthread18185.cc: Likewise. * testsuite/21_strings/basic_string/pthread4.cc: Likewise. * testsuite/22_locale/locale/cons/12658_thread-1.cc: Likewise. * testsuite/22_locale/locale/cons/12658_thread-2.cc: Likewise. * testsuite/23_containers/list/pthread1.cc: Likewise. * testsuite/23_containers/list/pthread5.cc: Likewise. * testsuite/23_containers/map/pthread6.cc: Likewise. * testsuite/23_containers/vector/debug/multithreaded_swap.cc: Likewise. * testsuite/27_io/basic_ofstream/pthread2.cc: Likewise. * testsuite/27_io/basic_ostringstream/pthread3.cc: Likewise. * testsuite/30_threads/async/42819.cc: Likewise. * testsuite/30_threads/async/49668.cc: Likewise. * testsuite/30_threads/async/any.cc: Likewise. * testsuite/30_threads/async/async.cc: Likewise. * testsuite/30_threads/async/launch.cc: Likewise. * testsuite/30_threads/async/sync.cc: Likewise. * testsuite/30_threads/call_once/39909.cc: Likewise. * testsuite/30_threads/call_once/49668.cc: Likewise. * testsuite/30_threads/call_once/call_once1.cc: Likewise. * testsuite/30_threads/condition_variable/cons/1.cc: Likewise. * testsuite/30_threads/condition_variable/members/1.cc: Likewise. * testsuite/30_threads/condition_variable/members/2.cc: Likewise. * testsuite/30_threads/condition_variable/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/condition_variable_any/50862.cc: Likewise. * testsuite/30_threads/condition_variable_any/cons/1.cc: Likewise. * testsuite/30_threads/condition_variable_any/members/1.cc: Likewise. * testsuite/30_threads/condition_variable_any/members/2.cc: Likewise. * testsuite/30_threads/future/cons/move.cc: Likewise. * testsuite/30_threads/future/members/45133.cc: Likewise. * testsuite/30_threads/future/members/get.cc: Likewise. * testsuite/30_threads/future/members/get2.cc: Likewise. * testsuite/30_threads/future/members/share.cc: Likewise. * testsuite/30_threads/future/members/valid.cc: Likewise. * testsuite/30_threads/future/members/wait.cc: Likewise. * testsuite/30_threads/future/members/wait_for.cc: Likewise. * testsuite/30_threads/future/members/wait_until.cc: Likewise. * testsuite/30_threads/lock/1.cc: Likewise. * testsuite/30_threads/lock/2.cc: Likewise. * testsuite/30_threads/lock/3.cc: Likewise. * testsuite/30_threads/lock/4.cc: Likewise. * testsuite/30_threads/lock_guard/cons/1.cc: Likewise. * testsuite/30_threads/mutex/cons/1.cc: Likewise. * testsuite/30_threads/mutex/dest/destructor_locked.cc: Likewise. * testsuite/30_threads/mutex/lock/1.cc: Likewise. * testsuite/30_threads/mutex/native_handle/1.cc: Likewise. * testsuite/30_threads/mutex/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/mutex/try_lock/1.cc: Likewise. * testsuite/30_threads/mutex/try_lock/2.cc: Likewise. * testsuite/30_threads/mutex/unlock/1.cc: Likewise. * testsuite/30_threads/packaged_task/49668.cc: Likewise. * testsuite/30_threads/packaged_task/cons/1.cc: Likewise. * testsuite/30_threads/packaged_task/cons/2.cc: Likewise. * testsuite/30_threads/packaged_task/cons/3.cc: Likewise. * testsuite/30_threads/packaged_task/cons/alloc.cc: Likewise. * testsuite/30_threads/packaged_task/cons/move.cc: Likewise. * testsuite/30_threads/packaged_task/cons/move_assign.cc: Likewise. * testsuite/30_threads/packaged_task/members/get_future.cc: Likewise. * testsuite/30_threads/packaged_task/members/get_future2.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke2.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke3.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke4.cc: Likewise. * testsuite/30_threads/packaged_task/members/invoke5.cc: Likewise. * testsuite/30_threads/packaged_task/members/reset.cc: Likewise. * testsuite/30_threads/packaged_task/members/reset2.cc: Likewise. * testsuite/30_threads/packaged_task/members/swap.cc: Likewise. * testsuite/30_threads/packaged_task/members/valid.cc: Likewise. * testsuite/30_threads/promise/cons/1.cc: Likewise. * testsuite/30_threads/promise/cons/alloc.cc: Likewise. * testsuite/30_threads/promise/cons/move.cc: Likewise. * testsuite/30_threads/promise/cons/move_assign.cc: Likewise. * testsuite/30_threads/promise/members/get_future.cc: Likewise. * testsuite/30_threads/promise/members/get_future2.cc: Likewise. * testsuite/30_threads/promise/members/set_exception.cc: Likewise. * testsuite/30_threads/promise/members/set_exception2.cc: Likewise. * testsuite/30_threads/promise/members/set_value.cc: Likewise. * testsuite/30_threads/promise/members/set_value2.cc: Likewise. * testsuite/30_threads/promise/members/set_value3.cc: Likewise. * testsuite/30_threads/promise/members/swap.cc: Likewise. * testsuite/30_threads/recursive_mutex/cons/1.cc: Likewise. * testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc: Likewise. * testsuite/30_threads/recursive_mutex/lock/1.cc: Likewise. * testsuite/30_threads/recursive_mutex/native_handle/1.cc: Likewise. * testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/recursive_mutex/try_lock/1.cc: Likewise. * testsuite/30_threads/recursive_mutex/try_lock/2.cc: Likewise. * testsuite/30_threads/recursive_mutex/unlock/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/cons/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/lock/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/lock/2.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc: Likewise. * testsuite/30_threads/recursive_timed_mutex/unlock/1.cc: Likewise. * testsuite/30_threads/shared_future/cons/move.cc: Likewise. * testsuite/30_threads/shared_future/members/45133.cc: Likewise. * testsuite/30_threads/shared_future/members/get.cc: Likewise. * testsuite/30_threads/shared_future/members/get2.cc: Likewise. * testsuite/30_threads/shared_future/members/valid.cc: Likewise. * testsuite/30_threads/shared_future/members/wait.cc: Likewise. * testsuite/30_threads/shared_future/members/wait_for.cc: Likewise. * testsuite/30_threads/shared_future/members/wait_until.cc: Likewise. * testsuite/30_threads/this_thread/1.cc: Likewise. * testsuite/30_threads/this_thread/2.cc: Likewise. * testsuite/30_threads/this_thread/3.cc: Likewise. * testsuite/30_threads/this_thread/4.cc: Likewise. * testsuite/30_threads/thread/cons/1.cc: Likewise. * testsuite/30_threads/thread/cons/2.cc: Likewise. * testsuite/30_threads/thread/cons/3.cc: Likewise. * testsuite/30_threads/thread/cons/4.cc: Likewise. * testsuite/30_threads/thread/cons/49668.cc: Likewise. * testsuite/30_threads/thread/cons/5.cc: Likewise. * testsuite/30_threads/thread/cons/6.cc: Likewise. * testsuite/30_threads/thread/cons/7.cc: Likewise. * testsuite/30_threads/thread/cons/8.cc: Likewise. * testsuite/30_threads/thread/cons/9.cc: Likewise. * testsuite/30_threads/thread/cons/moveable.cc: Likewise. * testsuite/30_threads/thread/members/1.cc: Likewise. * testsuite/30_threads/thread/members/2.cc: Likewise. * testsuite/30_threads/thread/members/3.cc: Likewise. * testsuite/30_threads/thread/members/4.cc: Likewise. * testsuite/30_threads/thread/members/5.cc: Likewise. * testsuite/30_threads/thread/members/hardware_concurrency.cc: Likewise. * testsuite/30_threads/thread/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/thread/swap/1.cc: Likewise. * testsuite/30_threads/timed_mutex/cons/1.cc: Likewise. * testsuite/30_threads/timed_mutex/dest/destructor_locked.cc: Likewise. * testsuite/30_threads/timed_mutex/lock/1.cc: Likewise. * testsuite/30_threads/timed_mutex/native_handle/1.cc: Likewise. * testsuite/30_threads/timed_mutex/native_handle/typesizes.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock/1.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock/2.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_for/1.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_for/2.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_for/3.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_until/1.cc: Likewise. * testsuite/30_threads/timed_mutex/try_lock_until/2.cc: Likewise. * testsuite/30_threads/timed_mutex/unlock/1.cc: Likewise. * testsuite/30_threads/try_lock/1.cc: Likewise. * testsuite/30_threads/try_lock/2.cc: Likewise. * testsuite/30_threads/try_lock/3.cc: Likewise. * testsuite/30_threads/try_lock/4.cc: Likewise. * testsuite/30_threads/unique_lock/cons/1.cc: Likewise. * testsuite/30_threads/unique_lock/cons/2.cc: Likewise. * testsuite/30_threads/unique_lock/cons/3.cc: Likewise. * testsuite/30_threads/unique_lock/cons/4.cc: Likewise. * testsuite/30_threads/unique_lock/cons/5.cc: Likewise. * testsuite/30_threads/unique_lock/cons/6.cc: Likewise. * testsuite/30_threads/unique_lock/locking/1.cc: Likewise. * testsuite/30_threads/unique_lock/locking/2.cc: Likewise. * testsuite/30_threads/unique_lock/locking/3.cc: Likewise. * testsuite/30_threads/unique_lock/locking/4.cc: Likewise. * testsuite/30_threads/unique_lock/modifiers/1.cc: Likewise. * testsuite/30_threads/unique_lock/modifiers/2.cc: Likewise. * testsuite/ext/rope/pthread7-rope.cc: Likewise. * testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc: Likewise. * testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc: Likewise. * testsuite/23_containers/vector/capacity/resize/1.cc: Remove dg-options for mips*-*-irix6*. * testsuite/27_io/ios_base/storage/1.cc: Likewise. * testsuite/27_io/ios_base/storage/2.cc: Likewise. * testsuite/27_io/ios_base/storage/3.cc: Likewise. * testsuite/lib/libstdc++.exp (v3-build_support): Remove IRIX 6 workaround. libjava: * configure.ac (libgcj_cv_exidx): Remove IRIX 6 ld workaround. (mips-sgi-irix6*): Remove. (mips-sgi-irix*): Remove. (AC_CHECK_HEADERS): Remove bstring.h. * configure: Regenerate. * include/config.h.in: Regenerate. * configure.host (mips-sgi-irix6*): Remove. * include/posix-signal.h [__sgi__]: Remove. * gnu/java/net/natPlainDatagramSocketImplPosix.cc [HAVE_BSTRING_H]: Remove. * gnu/java/net/natPlainDatagramSocketImplWin32.cc: Likewise. * gnu/java/net/natPlainSocketImplPosix.cc: Likewise. libitm: * configure.tgt (*-*-irix6*): Remove. libgomp: * configure.tgt (mips-sgi-irix6*): Remove. libgfortran: * intrinsics/c99_functions.c [__sgi__ && !HAVE_COMPLEX_H]: Remove. libgcc: * config.host (mips-sgi-irix6.5*): Remove. * config/mips/irix-crti.S: Remove. * config/mips/irix-crtn.S: Remove. * config/mips/irix6-unwind.h: Remove. * config/mips/t-irix6: Remove. * config/mips/t-slibgcc-irix: Remove. gnattools: * configure.ac (mips-sgi-irix*): Remove. * configure: Regenerate. gcc/testsuite: * g++.dg/other/anon5.C: Don't skip on mips-sgi-irix*. * g++.dg/tree-prof/partition1.C: Likewise. * g++.dg/tree-prof/partition2.C: Likewise. * g++.old-deja/g++.other/init19.C: Remove mips-sgi-irix* handling. * gcc.c-torture/compile/labels-3.c: Remove dg-options. * gcc.c-torture/execute/20010724-1.c: Remove. * gcc.c-torture/execute/20010724-1.x: Remove. * gcc.c-torture/execute/20040208-2.c: Remove. * gcc.c-torture/execute/20040208-2.x: Remove. * gcc.c-torture/execute/ieee/20000320-1.c [__mips__ && __sgi__]: Remove. (main) [__mips__ && __sgi__]: Remove. * gcc.c-torture/execute/ieee/copysign1.c: Remove IRIX reference. * gcc.c-torture/execute/ieee/copysign2.c: Likewise. * gcc.c-torture/execute/ieee/mul-subnormal-single-1.x: Remove mips-sgi-irix6* handling. * gcc.dg/cpp/assert4.c [__mips__]: Remove __sgi__, sgi. * gcc.dg/torture/20090618-1.c: Don't skip on mips-sgi-irix*. * gcc.dg/torture/builtin-frexp-1.c: Remove mips*-*-irix6* handling. * gcc.dg/torture/builtin-logb-1.c: Likewise. * gcc.dg/torture/pr47917.c: Remove mips-sgi-irix6.5 handling. * gcc.dg/tree-ssa/ssa-store-ccp-3.c: Don't skip on mips*-*-irix*. * gcc.misc-tests/linkage.exp: Remove mips-sgi-irix6* handling. * gcc.target/mips/args-1.c [!__sgi__]: Remove. * gcc.target/mips/interrupt_handler-2.c: Don't skip on mips-sgi-irix6*. * gcc.target/mips/interrupt_handler-3.c: Likewise. * gcc.target/mips/save-restore-1.c: Don't skip on mips-sgi-irix6*. * gcc.target/mips/save-restore-3.c: Likewise. * gcc.target/mips/save-restore-4.c: Likewise. * gcc.target/mips/save-restore-5.c: Likewise. * gfortran.dg/g77/cabs.f: Don't xfail on mips-sgi-irix6*. * lib/prune.exp (prune_gcc_output): Remove pruning of IRIX 6 ld messages. * lib/target-libpath.exp (set_ld_library_path_env_vars): Remove IRIX 6 handling. (restore_ld_library_path_env_vars): Likewise. * lib/target-supports.exp (check_profiling_available): Remove mips*-*-irix* handling. (check_ascii_locale_available): Remove mips-sgi-irix* handling. (add_options_for_c99_runtime): Remove mips-sgi-irix6.5* handling. * objc.dg/stabs-1.m: Don't xfail on mips-sgi-irix6.5. gcc/ada: * gcc-interface/Makefile.in (mips-sgi-irix6*): Remove. * a-intnam-irix.ads, mlib-tgt-specific-irix.adb, s-intman-irix.adb, s-mastop-irix.adb, s-osinte-irix.adb, s-osinte-irix.ads, s-proinf-irix-athread.adb, s-proinf-irix-athread.ads, s-taprop-irix.adb, s-tasinf-irix.ads, system-irix-n32.ads, system-irix-n64.ads, system-irix-o32.ads: Remove. * adaint.c [__mips && __sgi]: Remove. (__gnat_number_of_cpus) [__mips && __sgi]: Remove. [IS_CROSS && !(__mips && __sgi)]: Remove. * adaint.h [sgi && _LFAPI]: Remove. * cstreams.c (__gnat_full_name) [sgi]: Remove. * env.c (__gnat_unsetenv) [__mips && __sgi]: Remove. (__gnat_clearenv) [__mips && __sgi]: Remove. * errno.c (_SGI_MP_SOURCE): Remove. * gsocket.h [sgi]: Remove. * init.c: Remove IRIX reference. [sgi]: Remove. * link.c [sgi]: Remove. * s-oscons-tmplt.c [__mips && __sgi] (IOV_MAX): Don't define. (main) [__mips && __sgi] (MAX_tv_sec): Don't define. (CLOCK_SGI_FAST, CLOCK_SGI_CYCLE): Remove. * sysdep.c [sgi]: Remove. (getc_immediate_common) [sgi]: Remove. (__gnat_localtime_tzoff) [sgi]: Remove. * terminals.c [__mips && __sgi] (IRIX): Don't define. [IRIX] (USE_GETPTY): Don't define. (allocate_pty_desc) [USE_GETPTY]: Remove. * g-traceb.ads: Remove IRIX reference. * g-trasym.ads: Likewise. * memtrack.adb: Likewise. * s-interr-sigaction.adb: Likewise. * gnat_rm.texi (Implementation Advice): Remove SGI info. (Implementation Defined Characteristics): Likewise. * gnat_ugn.texi (Summary of Run-Time Configurations, mips-irix): Remove. (Irix-Specific Considerations): Remove. gcc/cp: * Make-lang.in (doc/g++.1): Remove IRIX 6.5 reference. gcc: * config.gcc (enable_obsolete): Remove mips-sgi-irix6.5. (mips-sgi-irix6.5*): Remove. * config.host (mips-sgi-irix*): Remove. * configure.ac (enable_fixed_point): Remove mips*-sgi-irix*. (set_have_as_tls): Remove *-*-irix6*. (gcc_cv_ld_static_dynamic): Remove mips-sgi-irix6*. * configure: Regenerate. * config/mips/iris6.h: Remove. * config/mips/iris6.opt: Remove. * config/mips/t-irix6: Remove. * config/mips/mips.h (TARGET_GPWORD): Remove IRIX 6 N64 handling. (TARGET_IRIX6): Remove. (TARGET_CPU_CPP_BUILTINS): Remove IRIX 6 handling. Don't define LANGUAGE_C, _LANGUAGE_C for Objective-C. * config/mips/mips.c (mips_build_builtin_va_list): Remove IRIX 6 handling. (mips_file_start): Likewise. * config/mips/mips-protos.h (irix_asm_output_align): Remove. * config/mips/driver-native.c [__sgi__]: Remove. (host_detect_local_cpu) [__sgi__]: Remove. * config/mips/gnu-user.h: Remove iris5.h reference. * config/mips/mips-modes.def: Remove IRIX 6 reference. * config/mips/gnu-user64.h (MIPS_TFMODE_FORMAT): Remove. * config/mips/mips.c (mips_option_override) [MIPS_TFMODE_FORMAT]: Remove. * gcc.c (main): Move asm_debug initialization ... (asm_debug): ... here. * ginclude/stddef.h (__STDDEF_H__): Don't define. * defaults.h (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): Remove. * system.h (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): Poison. * collect2.c [LINK_ELIMINATE_DUPLICATE_LDIRECTORIES]: Remove. (main) [LINK_ELIMINATE_DUPLICATE_LDIRECTORIES]: Remove. [LINK_ELIMINATE_DUPLICATE_LDIRECTORIES] (is_in_args): Remove. * doc/tm.texi.in (Driver, LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): Remove. * doc/tm.texi: Regenerate. * doc/invoke.texi (Debugging Options, -gdwarf-<version>): Remove IRIX 6 reference. (MIPS Options, -march): Remove IRIX reference. * doc/install.texi (Binaries, SGI IRIX): Remove. (Specific, mips-sgi-irix6): Document IRIX 6.5 removal, remove rest of section. * doc/trouble.texi (Interoperation): Remove -lgl_s handling. fixincludes: * inclhack.def (broken_cabs): Remove IRIX and SunOS 4 support. (irix___restrict): Remove. (irix___generic1): Remove. (irix___generic2): Remove. (irix_asm_apostrophe): Remove. (irix_complex): Remove. (irix_pthread_init): Remove. (irix_socklen_t): Remove. (irix_stdint_c99_mode): Remove. (irix_stdint_c99_types): Remove. (irix_stdint_c99_macros): Remove. (irix_stdio_va_list): Remove IRIX 6.5 support. (irix_wcsftime): Remove. (stdio_va_list): Remove IRIX 6.5 support. (svr4_profil): Remove IRIX bypass. * fixincl.x: Regenerate. * tests/base/complex.h [IRIX_COMPLEX_CHECK]: Remove. * tests/base/internal/math_core.h: Remove. * tests/base/internal/sgimacros.h: Remove. * tests/base/internal/wchar_core.h: Remove. * tests/base/math.h [BROKEN_CABS_CHECK]: Remove IRIX and SunOS 4 support. * tests/base/pthread.h [IRIX_PTHREAD_INIT_CHECK]: Remove. * tests/base/stdint-irix65.h: Remove. * tests/base/stdint.h [IRIX_STDINT_C99_MODE_CHECK]: Remove. * tests/base/sys/asm.h: Remove. * tests/base/sys/socket.h [IRIX_SOCKLEN_T_CHECK]: Remove. contrib: * config-list.mk (LIST): Remove mips-sgi-irix6.5. toplevel: * MAINTAINERS (OS Port Maintainers): Remove irix. * configure.ac (enable_libgomp): Remove *-*-irix6*. (unsupported_languages): Remove mips-sgi-irix6.*. (noconfigdirs): Don't add ${libgcj} for mips*-*-irix6*. (with_stabs): Remove. * configure: Regenerate. From-SVN: r185390
2012-03-14 16:33:37 +00:00
* that.
*/
fix = {
hackname = stdio_va_list;
files = stdio.h;
bypass = '__gnuc_va_list|_BSD_VA_LIST_|__DJ_va_list|_G_va_list';
/*
* On Solaris 10, the definition in
* <stdio.h> is guarded appropriately by the _XPG4 feature macro;
* there is therefore no need for this fix there.
*/
mach = '*-*-solaris2.1[0-9]*';
not_machine = true;
/*
* Use __gnuc_va_list in arg types in place of va_list.
* On 386BSD use __gnuc_va_list instead of _VA_LIST_. On Tru64 UNIX V5.1A
* use __gnuc_va_list instead of __VA_LIST__. We're hoping the
* trailing parentheses and semicolon save all other systems from this.
* Define __not_va_list__ (something harmless and unused)
* instead of va_list.
* Don't claim to have defined va_list.
*/
sed = "s@[ \t]va_list\\([ \t)]\\)@ __gnuc_va_list\\1@\n"
"s@(va_list)&@(__gnuc_va_list)\\&@\n"
"s@ _VA_LIST_));@ __gnuc_va_list));@\n"
"s@ __VA_LIST__));@ __gnuc_va_list));@\n"
"s@ va_list@ __not_va_list__@\n"
"s@\\*va_list@*__not_va_list__@\n"
"s@ __va_list)@ __gnuc_va_list)@\n"
"s@typedef[ \t]\\(.*\\)[ \t]va_list[ \t]*;"
"@typedef \\1 __not_va_list__;@\n"
"s@typedef[ \t]*__va_list__@typedef __gnuc_va_list@\n"
"s@GNUC_VA_LIST@GNUC_Va_LIST@\n"
"s@_VA_LIST_DEFINED@_Va_LIST_DEFINED@\n"
"s@_NEED___VA_LIST@_NEED___Va_LIST@\n"
"s@VA_LIST@DUMMY_VA_LIST@\n"
"s@_Va_LIST@_VA_LIST@";
test_text = "extern void mumble( va_list);";
};
/*
* Fix headers that use va_list from stdio.h to use the updated
* va_list from the stdio_va_list change. Note _BSD_VA_LIST_ is
* dealt with elsewhere. The presence of __gnuc_va_list,
* __DJ_va_list, or _G_va_list is taken to indicate that the header
* knows what it's doing.
*/
fix = {
hackname = stdio_va_list_clients;
files = com_err.h;
files = cps.h;
files = curses.h;
files = krb5.h;
files = lc_core.h;
files = pfmt.h;
files = wchar.h;
files = curses_colr/curses.h;
bypass = '__gnuc_va_list|_BSD_VA_LIST_|__DJ_va_list|_G_va_list';
/* Don't fix, if we use va_list from stdarg.h, or if the use is
otherwise protected. */
bypass = 'include <stdarg\.h>|#ifdef va_start';
/*
* Use __gnuc_va_list in arg types in place of va_list.
* On 386BSD use __gnuc_va_list instead of _VA_LIST_. On Tru64 UNIX V5.1A
* use __gnuc_va_list instead of __VA_LIST__. We're hoping the
* trailing parentheses and semicolon save all other systems from this.
* Define __not_va_list__ (something harmless and unused)
* instead of va_list.
* Don't claim to have defined va_list.
*/
sed = "s@[ \t]va_list\\([ \t)]\\)@ __gnuc_va_list\\1@\n"
"s@(va_list)&@(__gnuc_va_list)\\&@\n"
"s@ _VA_LIST_));@ __gnuc_va_list));@\n"
"s@ __VA_LIST__));@ __gnuc_va_list));@\n"
"s@ va_list@ __not_va_list__@\n"
"s@\\*va_list@*__not_va_list__@\n"
"s@ __va_list)@ __gnuc_va_list)@\n"
"s@typedef[ \t]\\(.*\\)[ \t]va_list[ \t]*;"
"@typedef \\1 __not_va_list__;@\n"
"s@typedef[ \t]*__va_list__@typedef __gnuc_va_list@\n"
"s@GNUC_VA_LIST@GNUC_Va_LIST@\n"
"s@_VA_LIST_DEFINED@_Va_LIST_DEFINED@\n"
"s@_NEED___VA_LIST@_NEED___Va_LIST@\n"
"s@VA_LIST@DUMMY_VA_LIST@\n"
"s@_Va_LIST@_VA_LIST@";
test_text = "extern void mumble( va_list);";
};
/*
* "!__STDC__" or "__STDC__==0" or "__STDC__!=1" or "__STDC__-0==0"
* is "!defined( __STRICT_ANSI__ )"
*/
fix = {
hackname = strict_ansi_not;
select = "^([ \t]*#[ \t]*if.*)"
"(!__STDC__"
"|__STDC__[ \t]*==[ \t]*0"
"|__STDC__[ \t]*!=[ \t]*1"
"|__STDC__[ \t]*-[ \t]*0[ \t]*==[ \t]*0)";
/* Tru64 UNIX V4.0F/V5.1 <standards.h> supports GCC usage of __STDC__. */
bypass = 'GNU and MIPS C compilers define __STDC__ differently';
/* GNU gmp.h uses "__STDC__ != 1" only if __SCO_VERSION__, which
is not defined by GCC, so it is safe. */
bypass = '__SCO_VERSION__.*__STDC__ != 1';
c_test = stdc_0_in_system_headers;
c_fix = format;
c_fix_arg = "%1 !defined(__STRICT_ANSI__)";
test_text = "#if !__STDC__ \n"
"#if __STDC__ == 0\n"
"#if __STDC__ != 1\n"
"#if __STDC__ - 0 == 0"
"/* not std C */\nint foo;\n"
"\n#end-end-end-end-if :-)";
};
/*
* "__STDC__-0==0"
* is "!defined( __STRICT_ANSI__ )" on continued #if-s
*/
fix = {
hackname = strict_ansi_not_ctd;
files = math.h, limits.h, stdio.h, signal.h,
stdlib.h, sys/signal.h, time.h;
/*
* Starting at the beginning of a line, skip white space and
* a leading "(" or "&&" or "||". One of those must be found.
* Then, zero, one or more copies of a "defined(_FOO_BAR_) &&"
* expression. If these are nested, then they must accumulate
* because we won't match any closing parentheses. Finally,
* after skipping over all that, we must then match our suspect
* phrase: "__STDC__-0==0" with or without white space.
*/
select = "^([ \t]*" '(\(|&&|\|\|)'
"([ \t(]*!*[ \t]*defined\\([a-zA-Z_0-9]+\\)[ \t]*[|&][|&])*"
"[ \t(]*)"
"(__STDC__[ \t]*(|-[ \t]*0[ \t]*)==[ \t]*0)";
c_test = stdc_0_in_system_headers;
c_fix = format;
c_fix_arg = "%1 !defined(__STRICT_ANSI__)";
test_text = "#if 1 && \\\\\n"
"&& defined(mumbling) |& (__STDC__ - 0 == 0) \\\\\n"
"( __STDC__ == 0 && !defined(_XOPEN_SOURCE) \\\\\n"
"|| __STDC__ - 0 == 0 ) /* not std C */\n"
"int foo;\n#endif";
};
/*
* "__STDC__!=0" or "__STDC__==1" or "__STDC__-0==1"
* is "defined( __STRICT_ANSI__ )"
*/
fix = {
hackname = strict_ansi_only;
select = "^([ \t]*#[ \t]*if.*)"
"(__STDC__[ \t]*!=[ \t]*0"
"|__STDC__[ \t]*==[ \t]*1"
"|__STDC__[ \t]*-[ \t]*0[ \t]*==[ \t]*1"
"|__STDC__[ \t]*-[ \t]*0[ \t]*!=[ \t]*0)";
c_test = stdc_0_in_system_headers;
c_fix = format;
c_fix_arg = "%1 defined(__STRICT_ANSI__)";
test_text = "#if __STDC__ == 1 /* is std C\n */\nint foo;\n#endif";
};
/*
* IRIX 4.0.5 <rpc/xdr.h> uses struct __file_s
* in prototype without previous definition.
*/
fix = {
hackname = struct_file;
files = rpc/xdr.h;
select = '^.*xdrstdio_create.*struct __file_s';
c_fix = format;
c_fix_arg = "struct __file_s;\n%0";
test_text = "extern void xdrstdio_create( struct __file_s* );";
};
/*
* IRIX 4.0.5 <rpc/auth.h> uses struct sockaddr
* in prototype without previous definition.
*
* Don't fix OpenBSD, which uses struct sockaddr_in prototyping the same
* function, and does define it.
*/
fix = {
hackname = struct_sockaddr;
files = rpc/auth.h;
select = "^.*authdes_create.*struct sockaddr[^_]";
bypass = "<sys/socket\.h>";
bypass = "struct sockaddr;\n";
c_fix = format;
c_fix_arg = "struct sockaddr;\n%0";
test_text = "extern AUTH* authdes_create( struct sockaddr* );";
};
/*
* Apply fix this to all OSs since this problem seems to effect
* more than just SunOS.
*/
fix = {
hackname = sun_auth_proto;
files = rpc/auth.h;
files = rpc/clnt.h;
files = rpc/svc.h;
files = rpc/xdr.h;
bypass = "__cplusplus";
/*
* Select those files containing '(*name)()'.
*/
select = '\(\*[a-z][a-z_]*\)\(\)';
c_fix = format;
c_fix_arg = "#ifdef __cplusplus\n%1(...);%2\n"
"#else\n%1();%2\n#endif";
c_fix_arg = '(.*\(\*[a-z][a-z_]*\))\(\);(.*)';
test_text =
"struct auth_t {\n"
" int (*name)(); /* C++ bad */\n"
"};";
};
/*
* Fix bogus #ifdef on SunOS 4.1.
*/
fix = {
hackname = sun_bogus_ifdef;
files = "hsfs/hsfs_spec.h";
files = "hsfs/iso_spec.h";
select = '#ifdef(.*\|\|.*)';
c_fix = format;
c_fix_arg = "#if%1";
test_text = "#ifdef __i386__ || __vax__ || __sun4c__";
};
/*
* Fix the CAT macro in SunOS memvar.h.
*/
fix = {
hackname = sun_catmacro;
files = pixrect/memvar.h;
select = "^#define[ \t]+CAT\\(a,b\\).*";
c_fix = format;
c_fix_arg =
"#ifdef __STDC__\n"
"# define CAT(a,b) a##b\n"
"#else\n%0\n#endif";
test_text =
"#define CAT(a,b)\ta/**/b";
};
/*
* Fix return type of free and {c,m,re}alloc in <malloc.h> on SunOS 4.1.
* Also fix return type of {m,re}alloc in <malloc.h> on sysV68
*/
fix = {
hackname = sun_malloc;
files = malloc.h;
bypass = "_CLASSIC_ANSI_TYPES";
sed = "s/typedef[ \t]char \\*\tmalloc_t/typedef void \\*\tmalloc_t/g";
sed = "s/int[ \t][ \t]*free/void\tfree/g";
sed = "s/char\\([ \t]*\\*[ \t]*malloc\\)/void\\1/g";
sed = "s/char\\([ \t]*\\*[ \t]*realloc\\)/void\\1/g";
sed = "s/char\\([ \t]*\\*[ \t]*calloc\\)/void\\1/g";
test_text =
"typedef char *\tmalloc_t;\n"
"int \tfree();\n"
"char*\tmalloc();\n"
"char*\tcalloc();\n"
"char*\trealloc();";
};
/*
* Check for yet more missing ';' in struct (in SunOS 4.0.x)
*/
fix = {
hackname = sun_rusers_semi;
files = rpcsvc/rusers.h;
select = "_cnt$";
sed = "/^struct/,/^};/s/_cnt$/_cnt;/";
test_text = "struct mumble\n int _cnt\n};";
};
/*
* signal.h on SunOS defines signal using (),
* which causes trouble when compiling with g++ -pedantic.
*/
fix = {
hackname = sun_signal;
files = sys/signal.h;
files = signal.h;
select = "^void\t" '\(\*signal\(\)\)\(\);.*';
c_fix = format;
c_fix_arg =
"#ifdef __cplusplus\n"
"void\t(*signal(...))(...);\n"
"#else\n%0\n#endif";
test_text = "void\t(*signal())();";
};
/*
* Correct the return type for strlen in strings.h in SunOS 4.
*/
fix = {
hackname = sunos_strlen;
files = strings.h;
select = "int[ \t]*strlen\\(\\);(.*)";
c_fix = format;
c_fix_arg = "__SIZE_TYPE__ strlen();%1";
test_text = " int\tstrlen(); /* string length */";
};
/*
* Linux kernel's vt.h breaks C++
*/
fix = {
hackname = suse_linux_vt_cxx;
files = linux/vt.h;
select = "^[ \t]*unsigned int new;";
c_fix = format;
c_fix_arg = "unsigned int newev;";
test_text = " unsigned int new; /* New console (if changing) */";
};
/*
* Disable apparent native compiler optimization cruft in SVR4.2 <string.h>
* that is visible to any ANSI compiler using this include. Simply
* delete the lines that #define some string functions to internal forms.
*/
fix = {
hackname = svr4_disable_opt;
files = string.h;
select = '#define.*__std_hdr_';
sed = '/#define.*__std_hdr_/d';
test_text = "#define strlen __std_hdr_strlen\n";
};
/*
* Fix broken decl of getcwd present on some svr4 systems.
*/
fix = {
hackname = svr4_getcwd;
files = stdlib.h;
files = unistd.h;
files = prototypes.h;
select = 'getcwd\(char \*, int\)';
c_fix = format;
c_fix_arg = "getcwd(char *, size_t)";
test_text = "extern char* getcwd(char *, int);";
};
/*
* Fix broken decl of profil present on some svr4 systems.
*/
fix = {
hackname = svr4_profil;
files = stdlib.h;
files = unistd.h;
select =
'profil\(unsigned short \*, unsigned int, unsigned int, unsigned int\)';
c_fix = format;
c_fix_arg = 'profil(unsigned short *, size_t, int, unsigned int)';
test_text =
'profil(unsigned short *, unsigned int, unsigned int, unsigned int);';
};
/*
* Correct types for signal handler constants like SIG_DFL; they might be
* void (*) (), and should be void (*) (int). C++ doesn't like the
* old style.
*/
fix = {
hackname = svr4_sighandler_type;
files = sys/signal.h;
select = 'void *\(\*\)\(\)';
c_fix = format;
c_fix_arg = "void (*)(int)";
test_text = "#define SIG_DFL (void(*)())0\n"
"#define SIG_IGN (void (*)())0\n";
};
/*
* Some SysV r4 systems, including Sequent's DYNIX/ptx, use the local
* function 'getrnge' in <regexp.h> before they declare it. For these
* systems add a 'static int' declaration of 'getrnge' into <regexp.h>
* early on.
*
* 'getrnge' traditionally manipulates a file-scope global called 'size',
* so put the declaration right after the declaration of 'size'.
*
* Don't do this if there is already a `static void getrnge' declaration
* present, since this would cause a redeclaration error. Solaris 2.x has
* such a declaration.
*/
fix = {
hackname = svr4_undeclared_getrnge;
files = regexp.h;
select = "getrnge";
bypass = "static void getrnge";
c_fix = format;
c_fix_arg = "%0\n"
"static int getrnge ();";
c_fix_arg = "^static int[ \t]+size;";
test_text = "static int size;\n"
"/* stuff which calls getrnge() */\n"
"static getrnge()\n"
"{}";
};
/*
* Fix return value of mem{ccpy,chr,cpy,set} and str{len,spn,cspn}
* in string.h on sysV68
* Correct the return type for strlen in string.h on Lynx.
* Correct the argument type for ffs in string.h on Alpha OSF/1 V2.0.
* Add missing const for strdup on OSF/1 V3.0.
* On sysV88 layout is slightly different.
*/
fix = {
hackname = sysv68_string;
files = testing.h;
files = string.h;
bypass = "_CLASSIC_ANSI_TYPES";
sed = "s/extern[ \t]*int[ \t]*strlen();/extern unsigned int strlen();/";
sed = "s/extern[ \t]*int[ \t]*ffs[ \t]*(long);/extern int ffs(int);/";
sed = "s/strdup(char \\*s1);/strdup(const char *s1);/";
sed = "/^extern char$/N";
sed = "s/^extern char\\(\\n\t\\*memccpy(),\\)$/extern void\\1/";
sed = "/^extern int$/N";
sed = "s/^extern int\\(\\n\tstrlen(),\\)/extern size_t\\1/";
sed = "/^\tstrncmp(),$/N";
sed = 's/^\(' "\t" 'strncmp()\),\n\(' "\t" 'strlen(),\)$/'
'\1;' "\\\nextern unsigned int\\\n\\2/";
test_text =
"extern int strlen();\n"
"extern int ffs(long);\n"
"extern char\n"
"\t*memccpy(),\n"
"\tmemcpy();\n"
"extern int\n"
"\tstrcmp(),\n"
"\tstrncmp(),\n"
"\tstrlen(),\n"
"\tstrspn();\n"
"extern int\n"
"\tstrlen(), strspn();";
};
/*
* Fix return type of calloc, malloc, realloc, bsearch and exit
*/
fix = {
hackname = sysz_stdlib_for_sun;
files = stdlib.h;
bypass = "_CLASSIC_ANSI_TYPES";
select = "char[ \t]*\\*[ \t]*(calloc|malloc|realloc|bsearch)[ \t]*\\(";
c_fix = format;
c_fix_arg = "void *\t%1(";
test_text =
"extern char*\tcalloc(size_t);\n"
"extern char*\tmalloc(size_t);\n"
"extern char*\trealloc(void*,size_t);\n"
"extern char*\tbsearch(void*,size_t,size_t);\n";
};
/*
* __thread is now a keyword.
*/
fix = {
hackname = thread_keyword;
files = "pthread.h";
files = bits/sigthread.h, '*/bits/sigthread.h';
select = "([* ])__thread([,)])";
c_fix = format;
c_fix_arg = "%1__thr%2";
test_text =
"extern int pthread_create (pthread_t *__restrict __thread,\n"
"extern int pthread_kill (pthread_t __thread, int __signo);\n"
"extern int pthread_cancel (pthread_t __thread);";
};
/*
fixtests.c (is_cxx_header): New fn, split out of double_slash_test. 1999-12-17 13:21 -0800 Zack Weinberg <zack@rabi.columbia.edu> * fixtests.c (is_cxx_header): New fn, split out of double_slash_test. (else_endif_label): Allow "#endif // comment" in C++ headers, as determined by is_cxx_header. * fixfixes.c (else_endif_label_fix): Update comment. * fixincl.c: Don't output VERB_PROGRESS lines if stdout is not a tty. * genfixes: Correct double thinko in commandline parsing. * hackshell.tpl: Generate correct sh syntax for bypass entries. * inclhack.def (all): Whenever an inserted preprocessor conditional is split over multiple lines, use double backslashes in this file so the fixed header will be readable. (AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h and add bypass entry for correct version of this header. (AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h. (AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h. (hpux8_bogus_inlines): New fix, split from... (ultrix_atof_param) ... here. (math_expression): Add bypass entry keyed to glibc comment indicating the problem has been dealt with; disable unnecessary sed operations; update commentary. (math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max, add select and bypass entries, simplify shell operation. (math_huge_val_ifndef): Split from math_gcc_ifndefs. (ip_missing_semi, rs6000_param, tinfo_cplusplus, ultrix_atof_param): Add select entry. (stdio_va_list, sunos_mather_decl): Add bypass entry. (systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the comments with the fixes they describe. * fixincl.x, fixincl.sh, inclhack.sh: Regen. From-SVN: r30999
1999-12-17 21:49:30 +00:00
* if the #if says _cplusplus, not the double underscore __cplusplus
* that it should be
*/
fix = {
hackname = tinfo_cplusplus;
files = tinfo.h;
fixtests.c (is_cxx_header): New fn, split out of double_slash_test. 1999-12-17 13:21 -0800 Zack Weinberg <zack@rabi.columbia.edu> * fixtests.c (is_cxx_header): New fn, split out of double_slash_test. (else_endif_label): Allow "#endif // comment" in C++ headers, as determined by is_cxx_header. * fixfixes.c (else_endif_label_fix): Update comment. * fixincl.c: Don't output VERB_PROGRESS lines if stdout is not a tty. * genfixes: Correct double thinko in commandline parsing. * hackshell.tpl: Generate correct sh syntax for bypass entries. * inclhack.def (all): Whenever an inserted preprocessor conditional is split over multiple lines, use double backslashes in this file so the fixed header will be readable. (AAB_fd_zero_glibc_1_0): Rename to AAB_fd_zero_asm_posix_types_h and add bypass entry for correct version of this header. (AAB_fd_zero_glibc_1_x): Rename to AAB_fd_zero_gnu_types_h. (AAB_fd_zero_glibc_2_0): Rename to AAB_fd_zero_selectbits_h. (hpux8_bogus_inlines): New fix, split from... (ultrix_atof_param) ... here. (math_expression): Add bypass entry keyed to glibc comment indicating the problem has been dealt with; disable unnecessary sed operations; update commentary. (math_gcc_ifndefs): Rename to math_huge_val_from_dbl_max, add select and bypass entries, simplify shell operation. (math_huge_val_ifndef): Split from math_gcc_ifndefs. (ip_missing_semi, rs6000_param, tinfo_cplusplus, ultrix_atof_param): Add select entry. (stdio_va_list, sunos_mather_decl): Add bypass entry. (systypes_for_aix, sysv86_string, tinfo_cplusplus): Put the comments with the fixes they describe. * fixincl.x, fixincl.sh, inclhack.sh: Regen. From-SVN: r30999
1999-12-17 21:49:30 +00:00
select = "[ \t]_cplusplus";
c_fix = format;
c_fix_arg = " __cplusplus";
test_text = "#ifdef _cplusplus\nint bogus;\n#endif";
};
/*
* parameters not const on DECstation Ultrix V4.0 and OSF/1.
*/
fix = {
hackname = ultrix_const;
files = stdio.h;
select = 'perror\( char \*';
c_fix = format;
c_fix_arg = "%1 const %3 *__";
c_fix_arg = "([ \t*](perror|fputs|fwrite|scanf|fscanf)\\(.*)"
"[ \t]+(char|void) \\*__";
test_text =
"extern void perror( char *__s );\n"
"extern int fputs( char *__s, FILE *);\n"
"extern size_t fwrite( void *__ptr, size_t, size_t, FILE *);\n"
"extern int fscanf( FILE *__stream, char *__format, ...);\n"
"extern int scanf( char *__format, ...);\n";
};
/*
* parameters not const on DECstation Ultrix V4.0 and OSF/1.
*/
fix = {
hackname = ultrix_const2;
files = stdio.h;
select = '\*fopen\( char \*';
c_fix = format;
c_fix_arg = "%1( const char *%3, const char *";
c_fix_arg = "([ \t*](fopen|sscanf|popen|tempnam))\\("
"[ \t]*char[ \t]*\\*([^,]*),"
"[ \t]*char[ \t]*\\*[ \t]*";
test_text =
"extern FILE *fopen( char *__filename, char *__type );\n"
"extern int sscanf( char *__s, char *__format, ...);\n"
"extern FILE *popen(char *, char *);\n"
"extern char *tempnam(char*,char*);\n";
};
/*
* Fix definitions of macros used by va-i960.h in VxWorks header file.
*/
fix = {
hackname = va_i960_macro;
files = arch/i960/archI960.h;
select = "__(vsiz|vali|vpad|alignof__)";
c_fix = format;
c_fix_arg = "__vx%1";
test_text =
"extern int __vsiz vsiz;\n"
"extern int __vali vali;\n"
"extern int __vpad vpad;\n"
"#define __alignof__(x) ...";
};
/*
* On VMS, add missing braces around sigset_t constants.
*/
fix = {
hackname = vms_add_missing_braces;
select = "(_SIG_[A-Z]+_SET[ \t]+= \\{)(0x[0F]+, 0x[0F]+)";
mach = "*-*-*vms*";
files = "rtldef/signal.h";
c_fix = format;
c_fix_arg = '%1 {%2} ';
test_text = "static const __sigset_t _SIG_EMPTY_SET = "
"{0x00000000, 0x00000000},\n"
" _SIG_FULL_SET = {0xFFFFFFFF, 0xFFFFFFFF};\n";
};
/*
* On VMS, some DEC-C builtins are directly used.
*/
fix = {
hackname = vms_decc_builtin;
select = "(__MEMSET|__MEMMOVE|__MEMCPY|__STRLEN|__STRCPY)";
mach = "*-*-*vms*";
files = rtldef/string.h, rtldef/time.h, rtldef/strings.h,
rtldef/socket.h;
sed = "s@__MEMSET@memset@";
sed = "s@__MEMMOVE@memmove@";
sed = "s@__MEMCPY@memcpy@";
sed = "s@__STRLEN@strlen@";
sed = "s@__STRCPY@strcpy@";
test_text = "define FD_ZERO(__p) __MEMSET((__p), 0, sizeof(*(__p)))\n";
};
/*
* Define __CAN_USE_EXTERN_PREFIX on vms.
*/
fix = {
hackname = vms_define_can_use_extern_prefix;
files = "rtldef/decc$types.h";
select = "#[ \t]*else\n"
"#[ \t]*if defined\\(__DECCXX\\)\n"
"#[ \t]*define __CAN_USE_EXTERN_PREFIX 1\n";
mach = "*-*-*vms*";
c_fix = format;
c_fix_arg = "%0"
"# elif defined (__GNUC__)\n"
"#\tdefine __CAN_USE_EXTERN_PREFIX 1\n";
test_text = "# else\n"
"# if defined(__DECCXX)\n"
"#\tdefine __CAN_USE_EXTERN_PREFIX 1\n"
"# endif\n"
"# endif\n";
};
/*
* On VMS, disable the use of dec-c string builtins
*/
fix = {
hackname = vms_disable_decc_string_builtins;
select = "#if !defined\\(__VAX\\)\n";
mach = "*-*-*vms*";
files = "rtldef/string.h";
c_fix = format;
c_fix_arg = "#if !defined(__VAX) && !defined(__GNUC__)\n";
test_text = "#if !defined(__VAX)\n";
};
/*
* On VMS, fix incompatible redeclaration of hostalias.
*/
fix = {
hackname = vms_do_not_redeclare_hostalias;
select = "(void[ \t]+fp_nquery \\(const u_char \\*, int, FILE \\*\\);)\n"
"(__char_ptr32[ \t]+hostalias \\(const char \\*\\);)";
mach = "*-*-*vms*";
files = "rtldef/resolv.h";
c_fix = format;
c_fix_arg = "%1\n"
"/* %2 */";
test_text = "void fp_nquery (const u_char *, int, FILE *);\n"
"__char_ptr32 hostalias (const char *);\n";
};
/*
* On VMS, forward declare structure before referencing them in prototypes.
*/
fix = {
hackname = vms_forward_declare_struct;
select = "(/\\* forward decls for C\\+\\+ \\*/\n)"
"#ifdef __cplusplus\n";
mach = "*-*-*vms*";
files = rtldef/if.h;
c_fix = format;
c_fix_arg = "%1"
"#if defined (__cplusplus) || defined (__GNUC__)\n";
test_text = "/* forward decls for C++ */\n"
"#ifdef __cplusplus\n"
"struct foo;\n"
"#endif\n";
};
/*
* On VMS, do not declare getopt and al if pointers are 64 bit.
*/
fix = {
hackname = vms_no_64bit_getopt;
select = "^[ \t]*(extern[ \t]*)?(int[ \t]*(getopt|optind|opterr|optopt)"
"|(char \\*optarg))([ \t]*\\(.*\\))?;\n";
mach = "*-*-*vms*";
files = rtldef/stdio.h, rtldef/unistd.h;
c_fix = format;
c_fix_arg = <<- _EOArg_
#if __INITIAL_POINTER_SIZE != 64 /* getopt is short ptr only. */
%0#endif
_EOArg_;
test_text = "int getopt (int, char * const [], const char *);";
};
/*
* On VMS, force the use of fast setjmp, as the normal setjmp uses conditions
* which is not yet fully supported by gcc.
*/
fix = {
hackname = vms_use_fast_setjmp;
select = "(#[ \t]*if[ \t]*defined\\(__FAST_SETJMP\\)[ \t]*\\|\\|)";
mach = "*-*-*vms*";
files = rtldef/setjmp.h;
c_fix = format;
c_fix_arg = "%0 defined (__GNUC__) ||";
test_text = "# if defined(__FAST_SETJMP) || defined(__UNIX_SETJMP)";
};
/*
* On VMS, use pragma extern_model instead of VAX-C keywords.
*/
fix = {
hackname = vms_use_pragma_extern_model;
select = "#if defined\\(__DECC\\) \\|\\| defined\\(__DECCXX\\)\n"
"# pragma extern_model __save\n";
mach = "*-*-*vms*";
c_fix = format;
c_fix_arg = "#if defined(__DECC) || defined(__DECCXX) || defined(__GNUC__)\n"
"# pragma extern_model __save\n";
test_text = "#if defined(__DECC) || defined(__DECCXX)\n"
"# pragma extern_model __save\n"
"# pragma extern_model strict_refdef\n"
" extern struct x zz$yy;\n"
"# pragma extern_model __restore\n"
"#endif\n";
};
/*
* On VMS, change <resource.h> to <sys/resource.h> to avoid a
* conflict while building gcc. Likewise for <builtins.h>
*/
fix = {
hackname = vms_use_quoted_include;
select = "(#[ \t]*include[ \t]+)<(resource|builtins)\\.h>";
mach = "*-*-*vms*";
files = rtldef/wait.h, starlet_c/pthread.h;
c_fix = format;
c_fix_arg = '%1<sys/%2.h>';
test_text = "# include <resource.h>";
};
/*
* AIX and Interix headers define NULL to be cast to a void pointer,
* which is illegal in ANSI C++.
*/
fix = {
hackname = void_null;
files = curses.h, dbm.h, locale.h, stdio.h, stdlib.h, string.h,
time.h, unistd.h, sys/dir.h, sys/param.h, sys/types.h;
/* avoid changing C++ friendly NULL */
bypass = __cplusplus;
bypass = __null;
select = "^#[ \t]*define[ \t]+NULL[ \t]+\\(\\(void[ \t]*\\*\\)0\\)";
c_fix = format;
c_fix_arg = <<- _EOFix_
#ifndef NULL
#ifdef __cplusplus
#ifdef __GNUG__
#define NULL __null
#else /* ! __GNUG__ */
#define NULL 0L
#endif /* __GNUG__ */
#else /* ! __cplusplus */
#define NULL ((void *)0)
#endif /* __cplusplus */
#endif /* !NULL */
_EOFix_;
test_text = "# define\tNULL \t((void *)0) /* typed NULL */";
};
/*
* Make VxWorks header which is almost gcc ready fully gcc ready.
*/
fix = {
hackname = vxworks_gcc_problem;
files = types/vxTypesBase.h;
select = "__GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__";
sed = "s/#ifdef __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__/"
"#if 1/";
sed = "/[ \t]size_t/i\\\n"
"#ifndef _GCC_SIZE_T\\\n"
"#define _GCC_SIZE_T\n";
sed = "/[ \t]size_t/a\\\n"
"#endif\n";
sed = "/[ \t]ptrdiff_t/i\\\n"
"#ifndef _GCC_PTRDIFF_T\\\n"
"#define _GCC_PTRDIFF_T\n";
sed = "/[ \t]ptrdiff_t/a\\\n"
"#endif\n";
sed = "/[ \t]wchar_t/i\\\n"
"#ifndef _GCC_WCHAR_T\\\n"
"#define _GCC_WCHAR_T\n";
sed = "/[ \t]wchar_t/a\\\n"
"#endif\n";
test_text =
"#ifdef __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__\n"
"typedef unsigned int size_t;\n"
"typedef long ptrdiff_t;\n"
"typedef unsigned short wchar_t;\n"
"#endif /* __GNUC_TYPEOF_FEATURE_BROKEN_USE_DEFAULT_UNTIL_FIXED__ */\n";
};
2012-10-28 21:42:48 +00:00
/*
* Wrap VxWorks ioctl to keep everything pretty
*/
fix = {
hackname = vxworks_ioctl_macro;
files = ioLib.h;
mach = "*-*-vxworks*";
c_fix = format;
c_fix_arg = "%0\n"
fixincludes: vxworks: remove unnecessary parentheses in ioctl wrapper macro The rationale for the fixinclude ioctl macro wrapper is, as far as I can tell (https://gcc.gnu.org/ml/gcc-patches/2012-09/msg01619.html) Fix 2: Add hack for ioctl() on VxWorks. ioctl() is supposed to be variadic, but VxWorks only has a three argument version with the third argument of type int. This messes up when the third argument is not implicitly convertible to int. This adds a macro which wraps around ioctl() and explicitly casts the third argument to an int. This way, the most common use case of ioctl (with a const char * for the third argument) will compile in C++, where pointers must be explicitly casted to int. However, we have existing C++ code that calls the ioctl function via ::ioctl(foo, bar, baz) and obviously this breaks when it gets expanded to ::(ioctl)(foo, bar, (int)(baz)) Since the GNU C preprocessor already prevents recursive expansion of function-like macros, the parentheses around ioctl are unnecessary. Incidentally, there is also a macro sioIoctl() in the vxworks sioLib.h header that expands to ((pSioChan)->pDrvFuncs->ioctl (pSioChan, cmd, arg)) which also breaks when that gets further expanded to ((pSioChan)->pDrvFuncs->(ioctl) (pSioChan, cmd, (int)(arg))) This patch partly fixes that issue as well, but the third argument to the pDrvFuncs->ioctl method should be void*, so the cast to (int) is slightly annoying. Internally, we've simply patched the sioIoctl macro: (((pSioChan)->pDrvFuncs->ioctl) (pSioChan, cmd, arg)) From-SVN: r264056
2018-09-03 15:26:45 +02:00
"#define ioctl(fd, func, arg) ioctl(fd, func, (int)(arg))\n";
2012-10-28 21:42:48 +00:00
c_fix_arg = "extern[\t ]+int[\t ]+ioctl[\t ]*\\([\t ,[:alnum:]]*\\);";
test_text = "extern int ioctl ( int asdf1234, int jkl , int qwerty ) ;";
};
/*
* Provide C99 FP classification support in VxWorks math.h if
* not already there. Note the strict expectation on #define without
* whitespaces in the bypass expression, which "works" for
* the system headers we have met and doesn't match test texts for
* other hacks, found in the test baseline.
*/
fix = {
hackname = vxworks_math_h_fp_c99;
mach = "*-*-vxworks*";
files = math.h;
bypass = "#define[ \t]+FP_INFINITE";
select = "#define HUGE_VAL[ \t]*_ARCH.*";
c_fix = format;
c_fix_arg = << _EOArg_
%0
#if _C99
#define FP_INFINITE 1
#define FP_NAN 2
#define FP_NORMAL (-1)
#define FP_SUBNORMAL (-2)
#define FP_ZERO 0
#define fpclassify(x) \
__builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, \
FP_SUBNORMAL, FP_ZERO, (x))
#define signbit(x) __builtin_signbit(x)
#define isfinite(x) __builtin_isfinite(x)
#define isnormal(x) __builtin_isnormal(x)
#define isnan(x) __builtin_isnan(x)
#define isinf(x) __builtin_isinf(x)
#define isgreater(x, y) __builtin_isgreater((x),(y))
#define isgreaterequal(x, y) __builtin_isgreaterequal((x),(y))
#define isless(x, y) __builtin_isless((x),(y))
#define islessequal(x, y) __builtin_islessequal((x),(y))
#define islessgreater(x, y) __builtin_islessgreater((x),(y))
#define isunordered(x, y) __builtin_isunordered((x),(y))
#endif /* _C99 */
_EOArg_;
test_text = "#define HUGE_VAL _ARCH_HUGH_VAL";
};
2012-10-28 21:42:48 +00:00
/*
* mkdir's posix interface expects two arguments. While the RTP VxWorks
* API is fine, the kernel version handles only one. We used to expose
* a macro and this didn't play nice with uses such as posix:mkdir(x, y)
* in libstdc++, so we expose a vararg prototype instead.
2012-10-28 21:42:48 +00:00
*/
fix = {
hackname = vxworks_posix_mkdir;
2012-10-28 21:42:48 +00:00
files = sys/stat.h;
mach = "*-*-vxworks*";
c_fix = format;
c_fix_arg = "extern STATUS mkdir(const char *dir, ...);";
2012-10-28 21:42:48 +00:00
c_fix_arg = "extern[\t ]+STATUS[\t ]+mkdir[\t ]*"
"\\([\t ]*const[\t ]+char[\t ]*\\*[\t ]*" /* arg type */
"(|[_[:alpha:]][_[:alnum:]]*)" /* arg name (optional) */
"\\)[\t ]*;";
2012-10-28 21:42:48 +00:00
test_text = "extern STATUS mkdir (const char * _qwerty) ;";
};
/*
* Fix VxWorks <time.h> to not require including <vxTypes.h>.
*/
fix = {
hackname = vxworks_needs_vxtypes;
files = time.h;
select = "uint_t([ \t]+_clocks_per_sec)";
c_fix = format;
c_fix_arg = "unsigned int%1";
test_text = "uint_t\t_clocks_per_sec;";
};
/*
* Fix VxWorks <sys/stat.h> to not require including <vxWorks.h>.
*/
fix = {
hackname = vxworks_needs_vxworks;
files = sys/stat.h;
test = " -r types/vxTypesOld.h";
test = " -n \"`egrep '#include' $file`\"";
test = " -n \"`egrep ULONG $file`\"";
select = "#[ \t]define[ \t]+__INCstath";
sed = "/#[ \t]define[ \t][ \t]*__INCstath/a\\\n"
"#include <types/vxTypesOld.h>\n";
test_text = "`touch types/vxTypesOld.h`"
"#include </dev/null> /* ULONG */\n"
"# define\t__INCstath <sys/stat.h>";
};
/*
* yvals.h on VxWorks-6 expects the toolchain to provide its own
* version of the header, which we don't do. Arrange to fallback
* on the system definition.
*/
fix = {
hackname = vxworks_next_yvals;
mach = "*-*-vxworks*";
files = yvals.h;
select = "#include_next <yvals.h>";
c_fix = format;
c_fix_arg = "#if 0 /* GCC does not provide yvals.h. */\n%1";
c_fix_arg = "#if .*\n"
"/\\* .*\n"
"(#include_next <yvals.h>\n)";
test_text = "#if (defined(__cplusplus) && defined(__GNUC__))\n"
"/* GCC C++ has it's own yvals.h */\n"
"#include_next <yvals.h>\n"
"#else\n";
};
2012-10-28 21:42:48 +00:00
/*
* Make it so VxWorks does not include gcc/regs.h accidentally
*/
fix = {
hackname = vxworks_regs;
mach = "*-*-vxworks*";
select = "#[\t ]*include[\t ]+[<\"]regs.h[>\"]";
c_fix = format;
c_fix_arg = "#include <arch/../regs.h>";
test_text = "#include <regs.h>\n";
};
/*
* Likewise, open's posix interface allows two or three arguments and
* some VxWorks headers expose only a strict 3 arguments version. Merely
* changing the prototype into a varargs one is risky as the implementation
* would receive garbage in the third arg for calls providing only two,
* which libstdc++ does. We simply provide an always inline overload for C++
* instead.
*
* Both fcntl.h and ioLib.h might "feature" such a prototype for _WRS_KERNEL.
* The latter #includes the former though (since 1992 according to the embedded
* log), so just leave ioLib.h alone.
*/
fix = {
hackname = vxworks_posix_open;
mach = "*-*-vxworks*";
files = fcntl.h;
select = "extern int.*open \\(const char \\*[ a-z]*, int[ a-z]*, int[ a-z]*\\);";
c_fix = format;
c_fix_arg = << _EOArg_
%0
#if defined(__cplusplus)
extern "C++" {
inline int open (const char *, int) __attribute__((__always_inline__));
inline int
open (const char *name, int flags)
{
return open (name, flags, 0);
}
}
#endif
_EOArg_;
test_text =
"extern int open (const char *, int, int);\n"
"extern int open (const char *name, int flags, int mode );\n";
};
/*
* Another bad dependency in VxWorks 5.2 <time.h>.
*/
fix = {
hackname = vxworks_time;
files = time.h;
test = " -r vxWorks.h";
select = "#[ \t]*define[ \t]+VOIDFUNCPTR[ \t].*";
c_fix = format;
c_fix_arg =
"#ifndef __gcc_VOIDFUNCPTR_defined\n"
"#ifdef __cplusplus\n"
"typedef void (*__gcc_VOIDFUNCPTR) (...);\n"
"#else\n"
"typedef void (*__gcc_VOIDFUNCPTR) ();\n"
"#endif\n"
"#define __gcc_VOIDFUNCPTR_defined\n"
"#endif\n"
"#define VOIDFUNCPTR __gcc_VOIDFUNCPTR";
test_text = "`touch vxWorks.h`"
"#define VOIDFUNCPTR (void(*)())";
};
2012-10-28 21:42:48 +00:00
/*
* This hack makes write const-correct on VxWorks
*/
fix = {
hackname = vxworks_write_const;
files = ioLib.h;
mach = "*-*-vxworks*";
c_fix = format;
c_fix_arg = "extern int write (int, const char*, size_t);";
c_fix_arg = "extern[\t ]+int[\t ]+write[\t ]*\\("
"[\t ]*int[\t ]*,"
"[\t ]*char[\t ]*\\*[\t ]*,"
"[\t ]*size_t[\t ]*\\)[\t ]*;";
test_text = "extern int write ( int , char * , size_t ) ;";
};
/*
* This hack ensures the include_next in the fixed unistd.h actually
* finds the system's unistd.h and not the fixed unistd.h again.
*/
fix = {
hackname = vxworks_iolib_include_unistd;
files = ioLib.h;
mach = "*-*-vxworks*";
select = "#include \"unistd.h\"";
c_fix = format;
c_fix_arg = "#include <unistd.h>";
test_text = "#include \"unistd.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.
*
* The new #include has to come after the one for vxWorks.h in kernel headers
* and vxWorks.h is typically not #included in RTP headers. yvals.h is
* conditionally included in the latter, instead, and new #include are better
* inserted after that.
*/
fix = {
hackname = vxworks_time_h_syslib;
files = time.h;
mach = "*-*-vxworks*";
select = "[ \t]*#define[ \t]+CLOCKS_PER_SEC[ \t]+sysClkRateGet.*";
c_fix = format;
c_fix_arg = "%0\n#include <sysLib.h>";
c_fix_arg = "#include <vxWorks.h>|#endif.* _YVALS.*";
test_text =
"/* kernel header pattern: */\n"
"#include <vxWorks.h>\n"
"\n"
"/* rtp header pattern: */\n"
"#ifndef _YVALS\n"
"#include <yvals.h>\n"
"#endif /* _YVALS */\n"
"\n"
"#define CLOCKS_PER_SEC sysClkRateGet()";
};
/*
* There are several name conflicts with C++ reserved words in X11 header
* files. These are fixed in some versions, so don't do the fixes if
* we find __cplusplus in the file. These were found on the RS/6000.
*/
fix = {
hackname = x11_class;
files = X11/ShellP.h;
bypass = __cplusplus;
select = "^([ \t]*char \\*)class;(.*)";
c_fix = format;
c_fix_arg = "#ifdef __cplusplus\n%1c_class;%2\n"
"#else\n%1class;%2\n#endif";
test_text =
"struct {\n"
" char *class;\n"
"} mumble;\n";
};
/*
* class in Xm/BaseClassI.h
*/
fix = {
hackname = x11_class_usage;
files = Xm/BaseClassI.h;
bypass = "__cplusplus";
select = " class\\)";
c_fix = format;
c_fix_arg = " c_class)";
test_text = "extern mumble (int class);\n";
};
/*
* new in Xm/Traversal.h
*/
fix = {
hackname = x11_new;
files = Xm/Traversal.h;
bypass = __cplusplus;
sed = "/Widget\told, new;/i\\\n"
"#ifdef __cplusplus\\\n"
"\\\tWidget\told, c_new;\\\n"
"#else\n";
sed = "/Widget\told, new;/a\\\n"
"#endif\n";
sed = "s/Widget new,/Widget c_new,/g";
test_text =
"struct wedge {\n"
" Widget\told, new;\n"
"};\nextern Wedged( Widget new, Widget old );";
};
/*
* Incorrect sprintf declaration in X11/Xmu.h
*/
fix = {
hackname = x11_sprintf;
files = X11/Xmu.h;
files = X11/Xmu/Xmu.h;
select = "^extern char \\*\tsprintf\\(\\);$";
c_fix = format;
c_fix_arg = "#ifndef __STDC__\n%0\n#endif /* !defined __STDC__ */";
test_text = "extern char *\tsprintf();";
};
/*EOF*/