From 925a448751fd6d7988db51070b585e4fd55766a2 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Thu, 19 May 2005 09:05:45 +0200 Subject: re PR target/19933 (Problem with define of HUGE_VAL in math_c99.) fixincludes/ PR target/19933 PR target/21315 * inclhack.def: New fixes solaris_math_[1-9]. * fixincl.x: Regenerate. * tests/base/iso/math_c99.h: New. gcc/testsuite/ * gcc.dg/c99-math.h: New * gcc.dg/c99-math-float-1.c: New test. * gcc.dg/c99-math-double-1.c: Likewise. * gcc.dg/c99-math-long-double-1.c: Likewise. Co-Authored-By: Joseph Myers From-SVN: r99953 --- fixincludes/ChangeLog | 9 + fixincludes/fixincl.x | 477 +++++++++++++++++++++++++- fixincludes/inclhack.def | 170 +++++++++ fixincludes/tests/base/iso/math_c99.h | 112 ++++++ gcc/testsuite/ChangeLog | 7 + gcc/testsuite/gcc.dg/c99-math-double-1.c | 18 + gcc/testsuite/gcc.dg/c99-math-float-1.c | 18 + gcc/testsuite/gcc.dg/c99-math-long-double-1.c | 18 + gcc/testsuite/gcc.dg/c99-math.h | 111 ++++++ 9 files changed, 935 insertions(+), 5 deletions(-) create mode 100644 fixincludes/tests/base/iso/math_c99.h create mode 100644 gcc/testsuite/gcc.dg/c99-math-double-1.c create mode 100644 gcc/testsuite/gcc.dg/c99-math-float-1.c create mode 100644 gcc/testsuite/gcc.dg/c99-math-long-double-1.c create mode 100644 gcc/testsuite/gcc.dg/c99-math.h diff --git a/fixincludes/ChangeLog b/fixincludes/ChangeLog index c0d2881..de13766 100644 --- a/fixincludes/ChangeLog +++ b/fixincludes/ChangeLog @@ -1,3 +1,12 @@ +2005-05-19 Eric Botcazou + Joseph S. Myers + + PR target/19933 + PR target/21315 + * inclhack.def: New fixes solaris_math_[1-9]. + * fixincl.x: Regenerate. + * tests/base/iso/math_c99.h: New. + 2005-05-19 Kelley Cook * aclocal.m4: Remove superfluous reference to accross.m4. diff --git a/fixincludes/fixincl.x b/fixincludes/fixincl.x index 7d9e7c8..9b39019 100644 --- a/fixincludes/fixincl.x +++ b/fixincludes/fixincl.x @@ -2,11 +2,11 @@ * * DO NOT EDIT THIS FILE (fixincl.x) * - * It has been AutoGen-ed Saturday May 7, 2005 at 07:01:32 PM UTC + * It has been AutoGen-ed Thursday May 19, 2005 at 08:56:10 AM CEST * From the definitions inclhack.def * and the template file fixincl */ -/* DO NOT CVS-MERGE THIS FILE, EITHER Sat May 7 19:01:33 UTC 2005 +/* DO NOT CVS-MERGE THIS FILE, EITHER Thu May 19 08:56:10 CEST 2005 * * You must regenerate it. Use the ./genfixes script. * @@ -15,7 +15,7 @@ * certain ANSI-incompatible system header files which are fixed to work * correctly with ANSI C and placed in a directory that GNU C will search. * - * This file contains 179 fixup descriptions. + * This file contains 188 fixup descriptions. * * See README for more information. * @@ -4607,6 +4607,419 @@ static const char* apzSco_UtimePatch[] = { /* * * * * * * * * * * * * * * * * * * * * * * * * * * + * Description of Solaris_Math_1 fix + */ +tSCC zSolaris_Math_1Name[] = + "solaris_math_1"; + +/* + * File name selection pattern + */ +tSCC zSolaris_Math_1List[] = + "|iso/math_c99.h|"; +/* + * Machine/OS name selection pattern + */ +#define apzSolaris_Math_1Machs (const char**)NULL + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zSolaris_Math_1Select0[] = + "@\\(#\\)math_c99.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; + +/* + * content bypass pattern - skip fix if pattern found + */ +tSCC zSolaris_Math_1Bypass0[] = + "__GNUC__"; + +#define SOLARIS_MATH_1_TEST_CT 2 +static tTestDesc aSolaris_Math_1Tests[] = { + { TT_NEGREP, zSolaris_Math_1Bypass0, (regex_t*)NULL }, + { TT_EGREP, zSolaris_Math_1Select0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Solaris_Math_1 + */ +static const char* apzSolaris_Math_1Patch[] = { + "format", + "#define\tHUGE_VA%1\t(__builtin_huge_va%2())", + "^#define[ \t]+HUGE_VA([LF]+)[ \t]+__builtin_huge_va([lf]+)", + (char*)NULL }; + +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Solaris_Math_2 fix + */ +tSCC zSolaris_Math_2Name[] = + "solaris_math_2"; + +/* + * File name selection pattern + */ +tSCC zSolaris_Math_2List[] = + "|iso/math_c99.h|"; +/* + * Machine/OS name selection pattern + */ +#define apzSolaris_Math_2Machs (const char**)NULL + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zSolaris_Math_2Select0[] = + "@\\(#\\)math_c99.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; + +/* + * content bypass pattern - skip fix if pattern found + */ +tSCC zSolaris_Math_2Bypass0[] = + "__GNUC__"; + +#define SOLARIS_MATH_2_TEST_CT 2 +static tTestDesc aSolaris_Math_2Tests[] = { + { TT_NEGREP, zSolaris_Math_2Bypass0, (regex_t*)NULL }, + { TT_EGREP, zSolaris_Math_2Select0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Solaris_Math_2 + */ +static const char* apzSolaris_Math_2Patch[] = { + "format", + "#define\tINFINITY\t(__builtin_inff())", + "^#define[ \t]+INFINITY[ \t]+__builtin_infinity", + (char*)NULL }; + +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Solaris_Math_3 fix + */ +tSCC zSolaris_Math_3Name[] = + "solaris_math_3"; + +/* + * File name selection pattern + */ +tSCC zSolaris_Math_3List[] = + "|iso/math_c99.h|"; +/* + * Machine/OS name selection pattern + */ +#define apzSolaris_Math_3Machs (const char**)NULL + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zSolaris_Math_3Select0[] = + "@\\(#\\)math_c99.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; + +/* + * content bypass pattern - skip fix if pattern found + */ +tSCC zSolaris_Math_3Bypass0[] = + "__GNUC__"; + +#define SOLARIS_MATH_3_TEST_CT 2 +static tTestDesc aSolaris_Math_3Tests[] = { + { TT_NEGREP, zSolaris_Math_3Bypass0, (regex_t*)NULL }, + { TT_EGREP, zSolaris_Math_3Select0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Solaris_Math_3 + */ +static const char* apzSolaris_Math_3Patch[] = { + "format", + "#define\tNAN\t\t(__builtin_nanf(\"\"))", + "^#define[ \t]+NAN[ \t]+__builtin_nan", + (char*)NULL }; + +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Solaris_Math_4 fix + */ +tSCC zSolaris_Math_4Name[] = + "solaris_math_4"; + +/* + * File name selection pattern + */ +tSCC zSolaris_Math_4List[] = + "|iso/math_c99.h|"; +/* + * Machine/OS name selection pattern + */ +#define apzSolaris_Math_4Machs (const char**)NULL + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zSolaris_Math_4Select0[] = + "@\\(#\\)math_c99.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; + +/* + * content bypass pattern - skip fix if pattern found + */ +tSCC zSolaris_Math_4Bypass0[] = + "__GNUC__"; + +#define SOLARIS_MATH_4_TEST_CT 2 +static tTestDesc aSolaris_Math_4Tests[] = { + { TT_NEGREP, zSolaris_Math_4Bypass0, (regex_t*)NULL }, + { TT_EGREP, zSolaris_Math_4Select0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Solaris_Math_4 + */ +static const char* apzSolaris_Math_4Patch[] = { + "format", + "#define\tfpclassify(x) \\\n\ + __extension__ ({ __typeof(x) __x_fp = (x); \\\n\ +\t\t isnan(__x_fp) \\\n\ +\t\t ? FP_NAN \\\n\ +\t\t : isinf(__x_fp) \\\n\ +\t\t ? FP_INFINITE \\\n\ +\t\t : isnormal(__x_fp) \\\n\ +\t\t\t ? FP_NORMAL \\\n\ +\t\t\t : __x_fp == 0.0 \\\n\ +\t\t\t ? FP_ZERO \\\n\ +\t\t\t : FP_SUBNORMAL; })", + "^#define[ \t]+fpclassify\\(x\\)[ \t]+__builtin_fpclassify\\(x\\)", + (char*)NULL }; + +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Solaris_Math_5 fix + */ +tSCC zSolaris_Math_5Name[] = + "solaris_math_5"; + +/* + * File name selection pattern + */ +tSCC zSolaris_Math_5List[] = + "|iso/math_c99.h|"; +/* + * Machine/OS name selection pattern + */ +#define apzSolaris_Math_5Machs (const char**)NULL + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zSolaris_Math_5Select0[] = + "@\\(#\\)math_c99.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; + +/* + * content bypass pattern - skip fix if pattern found + */ +tSCC zSolaris_Math_5Bypass0[] = + "__GNUC__"; + +#define SOLARIS_MATH_5_TEST_CT 2 +static tTestDesc aSolaris_Math_5Tests[] = { + { TT_NEGREP, zSolaris_Math_5Bypass0, (regex_t*)NULL }, + { TT_EGREP, zSolaris_Math_5Select0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Solaris_Math_5 + */ +static const char* apzSolaris_Math_5Patch[] = { + "format", + "#define\tisfinite(x) \\\n\ + __extension__ ({ __typeof (x) __x_f = (x); \\\n\ +\t\t __builtin_expect(!isnan(__x_f - __x_f), 1); })", + "^#define[ \t]+isfinite\\(x\\)[ \t]+__builtin_isfinite\\(x\\)", + (char*)NULL }; + +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Solaris_Math_6 fix + */ +tSCC zSolaris_Math_6Name[] = + "solaris_math_6"; + +/* + * File name selection pattern + */ +tSCC zSolaris_Math_6List[] = + "|iso/math_c99.h|"; +/* + * Machine/OS name selection pattern + */ +#define apzSolaris_Math_6Machs (const char**)NULL + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zSolaris_Math_6Select0[] = + "@\\(#\\)math_c99.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; + +/* + * content bypass pattern - skip fix if pattern found + */ +tSCC zSolaris_Math_6Bypass0[] = + "__GNUC__"; + +#define SOLARIS_MATH_6_TEST_CT 2 +static tTestDesc aSolaris_Math_6Tests[] = { + { TT_NEGREP, zSolaris_Math_6Bypass0, (regex_t*)NULL }, + { TT_EGREP, zSolaris_Math_6Select0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Solaris_Math_6 + */ +static const char* apzSolaris_Math_6Patch[] = { + "format", + "#define\tisinf(x) \\\n\ + __extension__ ({ __typeof (x) __x_i = (x); \\\n\ +\t\t __builtin_expect(!isnan(__x_i) && !isfinite(__x_i), 0); })", + "^#define[ \t]+isinf\\(x\\)[ \t]+__builtin_isinf\\(x\\)", + (char*)NULL }; + +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Solaris_Math_7 fix + */ +tSCC zSolaris_Math_7Name[] = + "solaris_math_7"; + +/* + * File name selection pattern + */ +tSCC zSolaris_Math_7List[] = + "|iso/math_c99.h|"; +/* + * Machine/OS name selection pattern + */ +#define apzSolaris_Math_7Machs (const char**)NULL + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zSolaris_Math_7Select0[] = + "@\\(#\\)math_c99.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; + +/* + * content bypass pattern - skip fix if pattern found + */ +tSCC zSolaris_Math_7Bypass0[] = + "__GNUC__"; + +#define SOLARIS_MATH_7_TEST_CT 2 +static tTestDesc aSolaris_Math_7Tests[] = { + { TT_NEGREP, zSolaris_Math_7Bypass0, (regex_t*)NULL }, + { TT_EGREP, zSolaris_Math_7Select0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Solaris_Math_7 + */ +static const char* apzSolaris_Math_7Patch[] = { + "format", + "#define\tisnormal(x) \\\n\ + __extension__ ({ __typeof(x) __x_n = (x); \\\n\ +\t\t if (__x_n < 0.0) __x_n = -__x_n; \\\n\ +\t\t __builtin_expect(isfinite(__x_n) \\\n\ +\t\t\t\t && (sizeof(__x_n) == sizeof(float) \\\n\ +\t\t\t\t\t ? __x_n >= __FLT_MIN__ \\\n\ +\t\t\t\t\t : sizeof(__x_n) == sizeof(long double) \\\n\ +\t\t\t\t\t ? __x_n >= __LDBL_MIN__ \\\n\ +\t\t\t\t\t : __x_n >= __DBL_MIN__), 1); })", + "^#define[ \t]+isnormal\\(x\\)[ \t]+__builtin_isnormal\\(x\\)", + (char*)NULL }; + +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Solaris_Math_8 fix + */ +tSCC zSolaris_Math_8Name[] = + "solaris_math_8"; + +/* + * File name selection pattern + */ +tSCC zSolaris_Math_8List[] = + "|iso/math_c99.h|"; +/* + * Machine/OS name selection pattern + */ +#define apzSolaris_Math_8Machs (const char**)NULL + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zSolaris_Math_8Select0[] = + "@\\(#\\)math_c99.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; + +/* + * content bypass pattern - skip fix if pattern found + */ +tSCC zSolaris_Math_8Bypass0[] = + "__GNUC__"; + +#define SOLARIS_MATH_8_TEST_CT 2 +static tTestDesc aSolaris_Math_8Tests[] = { + { TT_NEGREP, zSolaris_Math_8Bypass0, (regex_t*)NULL }, + { TT_EGREP, zSolaris_Math_8Select0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Solaris_Math_8 + */ +static const char* apzSolaris_Math_8Patch[] = { + "format", + "#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))", + "^#define[ \t]+signbit\\(x\\)[ \t]+__builtin_signbit\\(x\\)", + (char*)NULL }; + +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Solaris_Math_9 fix + */ +tSCC zSolaris_Math_9Name[] = + "solaris_math_9"; + +/* + * File name selection pattern + */ +tSCC zSolaris_Math_9List[] = + "|iso/math_c99.h|"; +/* + * Machine/OS name selection pattern + */ +#define apzSolaris_Math_9Machs (const char**)NULL + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zSolaris_Math_9Select0[] = + "@\\(#\\)math_c99.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI"; + +/* + * content bypass pattern - skip fix if pattern found + */ +tSCC zSolaris_Math_9Bypass0[] = + "__GNUC__"; + +#define SOLARIS_MATH_9_TEST_CT 2 +static tTestDesc aSolaris_Math_9Tests[] = { + { TT_NEGREP, zSolaris_Math_9Bypass0, (regex_t*)NULL }, + { TT_EGREP, zSolaris_Math_9Select0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Solaris_Math_9 + */ +static const char* apzSolaris_Math_9Patch[] = { + "format", + "#define\t%1(x, y)%2__builtin_%1(x, y)", + "^#define[ \t]+([a-z]+)\\(x, y\\)([ \t]+)\\(\\(x\\) __builtin_[a-z]+\\(y\\)\\)", + (char*)NULL }; + +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * * Description of Solaris_Mutex_Init_1 fix */ tSCC zSolaris_Mutex_Init_1Name[] = @@ -7161,9 +7574,9 @@ static const char* apzX11_SprintfPatch[] = { * * List of all fixes */ -#define REGEX_COUNT 209 +#define REGEX_COUNT 227 #define MACH_LIST_SIZE_LIMIT 261 -#define FIX_COUNT 179 +#define FIX_COUNT 188 /* * Enumerate the fixes @@ -7283,6 +7696,15 @@ typedef enum { SCO_REGSET_FIXIDX, SCO_STATIC_FUNC_FIXIDX, SCO_UTIME_FIXIDX, + SOLARIS_MATH_1_FIXIDX, + SOLARIS_MATH_2_FIXIDX, + SOLARIS_MATH_3_FIXIDX, + SOLARIS_MATH_4_FIXIDX, + SOLARIS_MATH_5_FIXIDX, + SOLARIS_MATH_6_FIXIDX, + SOLARIS_MATH_7_FIXIDX, + SOLARIS_MATH_8_FIXIDX, + SOLARIS_MATH_9_FIXIDX, SOLARIS_MUTEX_INIT_1_FIXIDX, SOLARIS_MUTEX_INIT_2_FIXIDX, SOLARIS_SOCKET_FIXIDX, @@ -7921,6 +8343,51 @@ tFixDesc fixDescList[ FIX_COUNT ] = { SCO_UTIME_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, aSco_UtimeTests, apzSco_UtimePatch, 0 }, + { zSolaris_Math_1Name, zSolaris_Math_1List, + apzSolaris_Math_1Machs, + SOLARIS_MATH_1_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aSolaris_Math_1Tests, apzSolaris_Math_1Patch, 0 }, + + { zSolaris_Math_2Name, zSolaris_Math_2List, + apzSolaris_Math_2Machs, + SOLARIS_MATH_2_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aSolaris_Math_2Tests, apzSolaris_Math_2Patch, 0 }, + + { zSolaris_Math_3Name, zSolaris_Math_3List, + apzSolaris_Math_3Machs, + SOLARIS_MATH_3_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aSolaris_Math_3Tests, apzSolaris_Math_3Patch, 0 }, + + { zSolaris_Math_4Name, zSolaris_Math_4List, + apzSolaris_Math_4Machs, + SOLARIS_MATH_4_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aSolaris_Math_4Tests, apzSolaris_Math_4Patch, 0 }, + + { zSolaris_Math_5Name, zSolaris_Math_5List, + apzSolaris_Math_5Machs, + SOLARIS_MATH_5_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aSolaris_Math_5Tests, apzSolaris_Math_5Patch, 0 }, + + { zSolaris_Math_6Name, zSolaris_Math_6List, + apzSolaris_Math_6Machs, + SOLARIS_MATH_6_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aSolaris_Math_6Tests, apzSolaris_Math_6Patch, 0 }, + + { zSolaris_Math_7Name, zSolaris_Math_7List, + apzSolaris_Math_7Machs, + SOLARIS_MATH_7_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aSolaris_Math_7Tests, apzSolaris_Math_7Patch, 0 }, + + { zSolaris_Math_8Name, zSolaris_Math_8List, + apzSolaris_Math_8Machs, + SOLARIS_MATH_8_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aSolaris_Math_8Tests, apzSolaris_Math_8Patch, 0 }, + + { zSolaris_Math_9Name, zSolaris_Math_9List, + apzSolaris_Math_9Machs, + SOLARIS_MATH_9_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aSolaris_Math_9Tests, apzSolaris_Math_9Patch, 0 }, + { zSolaris_Mutex_Init_1Name, zSolaris_Mutex_Init_1List, apzSolaris_Mutex_Init_1Machs, SOLARIS_MUTEX_INIT_1_TEST_CT, FD_MACH_ONLY, diff --git a/fixincludes/inclhack.def b/fixincludes/inclhack.def index 1dac832..447997b 100644 --- a/fixincludes/inclhack.def +++ b/fixincludes/inclhack.def @@ -2564,6 +2564,176 @@ fix = { test_text = "extern int utime(const char *, struct utimbuf *);"; }; +/* + * 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"; +}; + +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"; +}; + +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"; +}; + +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" + " __extension__ ({ __typeof(x) __x_fp = (x); \\\n" + "\t\t isnan(__x_fp) \\\n" + "\t\t ? FP_NAN \\\n" + "\t\t : isinf(__x_fp) \\\n" + "\t\t ? FP_INFINITE \\\n" + "\t\t : isnormal(__x_fp) \\\n" + "\t\t\t ? FP_NORMAL \\\n" + "\t\t\t : __x_fp == 0.0 \\\n" + "\t\t\t ? FP_ZERO \\\n" + "\t\t\t : FP_SUBNORMAL; })"; + 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)"; +}; + +fix = { + hackname = solaris_math_5; + 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\tisfinite(x) \\\n" + " __extension__ ({ __typeof (x) __x_f = (x); \\\n" + "\t\t __builtin_expect(!isnan(__x_f - __x_f), 1); })"; + c_fix_arg = "^#define[ \t]+isfinite\\(x\\)[ \t]+__builtin_isfinite\\(x\\)"; + test_text = + '#ident "@(#)math_c99.h 1.9 04/11/01 SMI"'"\n" + "#undef isfinite\n" + "#define isfinite(x) __builtin_isfinite(x)"; +}; + +fix = { + hackname = solaris_math_6; + 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\tisinf(x) \\\n" + " __extension__ ({ __typeof (x) __x_i = (x); \\\n" + "\t\t __builtin_expect(!isnan(__x_i) && !isfinite(__x_i), 0); })"; + c_fix_arg = "^#define[ \t]+isinf\\(x\\)[ \t]+__builtin_isinf\\(x\\)"; + test_text = + '#ident "@(#)math_c99.h 1.9 04/11/01 SMI"'"\n" + "#undef isinf\n" + "#define isinf(x) __builtin_isinf(x)"; +}; + +fix = { + hackname = solaris_math_7; + 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\tisnormal(x) \\\n" + " __extension__ ({ __typeof(x) __x_n = (x); \\\n" + "\t\t if (__x_n < 0.0) __x_n = -__x_n; \\\n" + "\t\t __builtin_expect(isfinite(__x_n) \\\n" + "\t\t\t\t && (sizeof(__x_n) == sizeof(float) \\\n" + "\t\t\t\t\t ? __x_n >= __FLT_MIN__ \\\n" + "\t\t\t\t\t : sizeof(__x_n) == sizeof(long double) \\\n" + "\t\t\t\t\t ? __x_n >= __LDBL_MIN__ \\\n" + "\t\t\t\t\t : __x_n >= __DBL_MIN__), 1); })"; + c_fix_arg = "^#define[ \t]+isnormal\\(x\\)[ \t]+__builtin_isnormal\\(x\\)"; + test_text = + '#ident "@(#)math_c99.h 1.9 04/11/01 SMI"'"\n" + "#undef isnormal\n" + "#define isnormal(x) __builtin_isnormal(x)"; +}; + +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 = + '#ident "@(#)math_c99.h 1.9 04/11/01 SMI"'"\n" + "#undef signbit\n" + "#define signbit(x) __builtin_signbit(x)"; +}; + +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))"; +}; /* * Sun Solaris 2.5.1, 2.6 defines PTHREAD_{MUTEX|COND}_INITIALIZER diff --git a/fixincludes/tests/base/iso/math_c99.h b/fixincludes/tests/base/iso/math_c99.h new file mode 100644 index 0000000..86b6c20 --- /dev/null +++ b/fixincludes/tests/base/iso/math_c99.h @@ -0,0 +1,112 @@ +/* DO NOT EDIT THIS FILE. + + It has been auto-edited by fixincludes from: + + "fixinc/tests/inc/iso/math_c99.h" + + This had to be done to correct non-standard usages in the + original, manufacturer supplied header file. */ + + + +#if defined( SOLARIS_MATH_1_CHECK ) +#ident "@(#)math_c99.h 1.9 04/11/01 SMI" +#undef HUGE_VAL +#define HUGE_VAL (__builtin_huge_val()) +#undef HUGE_VALF +#define HUGE_VALF (__builtin_huge_valf()) +#undef HUGE_VALL +#define HUGE_VALL (__builtin_huge_vall()) +#endif /* SOLARIS_MATH_1_CHECK */ + + +#if defined( SOLARIS_MATH_2_CHECK ) +#ident "@(#)math_c99.h 1.9 04/11/01 SMI" +#undef INFINITY +#define INFINITY (__builtin_inff()) +#endif /* SOLARIS_MATH_2_CHECK */ + + +#if defined( SOLARIS_MATH_3_CHECK ) +#ident "@(#)math_c99.h 1.9 04/11/01 SMI" +#undef NAN +#define NAN (__builtin_nanf("")) +#endif /* SOLARIS_MATH_3_CHECK */ + + +#if defined( SOLARIS_MATH_4_CHECK ) +#ident "@(#)math_c99.h 1.9 04/11/01 SMI" +#undef fpclassify +#define fpclassify(x) \ + __extension__ ({ __typeof(x) __x_fp = (x); \ + isnan(__x_fp) \ + ? FP_NAN \ + : isinf(__x_fp) \ + ? FP_INFINITE \ + : isnormal(__x_fp) \ + ? FP_NORMAL \ + : __x_fp == 0.0 \ + ? FP_ZERO \ + : FP_SUBNORMAL; }) +#endif /* SOLARIS_MATH_4_CHECK */ + + +#if defined( SOLARIS_MATH_5_CHECK ) +#ident "@(#)math_c99.h 1.9 04/11/01 SMI" +#undef isfinite +#define isfinite(x) \ + __extension__ ({ __typeof (x) __x_f = (x); \ + __builtin_expect(!isnan(__x_f - __x_f), 1); }) +#endif /* SOLARIS_MATH_5_CHECK */ + + +#if defined( SOLARIS_MATH_6_CHECK ) +#ident "@(#)math_c99.h 1.9 04/11/01 SMI" +#undef isinf +#define isinf(x) \ + __extension__ ({ __typeof (x) __x_i = (x); \ + __builtin_expect(!isnan(__x_i) && !isfinite(__x_i), 0); }) +#endif /* SOLARIS_MATH_6_CHECK */ + + +#if defined( SOLARIS_MATH_7_CHECK ) +#ident "@(#)math_c99.h 1.9 04/11/01 SMI" +#undef isnormal +#define isnormal(x) \ + __extension__ ({ __typeof(x) __x_n = (x); \ + if (__x_n < 0.0) __x_n = -__x_n; \ + __builtin_expect(isfinite(__x_n) \ + && (sizeof(__x_n) == sizeof(float) \ + ? __x_n >= __FLT_MIN__ \ + : sizeof(__x_n) == sizeof(long double) \ + ? __x_n >= __LDBL_MIN__ \ + : __x_n >= __DBL_MIN__), 1); }) +#endif /* SOLARIS_MATH_7_CHECK */ + + +#if defined( SOLARIS_MATH_8_CHECK ) +#ident "@(#)math_c99.h 1.9 04/11/01 SMI" +#undef signbit +#define signbit(x) (sizeof(x) == sizeof(float) \ + ? __builtin_signbitf(x) \ + : sizeof(x) == sizeof(long double) \ + ? __builtin_signbitl(x) \ + : __builtin_signbit(x)) +#endif /* SOLARIS_MATH_8_CHECK */ + + +#if defined( SOLARIS_MATH_9_CHECK ) +#ident "@(#)math_c99.h 1.9 04/11/01 SMI" +#undef isgreater +#define isgreater(x, y) __builtin_isgreater(x, y) +#undef isgreaterequal +#define isgreaterequal(x, y) __builtin_isgreaterequal(x, y) +#undef isless +#define isless(x, y) __builtin_isless(x, y) +#undef islessequal +#define islessequal(x, y) __builtin_islessequal(x, y) +#undef islessgreater +#define islessgreater(x, y) __builtin_islessgreater(x, y) +#undef isunordered +#define isunordered(x, y) __builtin_isunordered(x, y) +#endif /* SOLARIS_MATH_9_CHECK */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fbb7b5f..7b1f427 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2005-05-19 Eric Botcazou + + * gcc.dg/c99-math.h: New + * gcc.dg/c99-math-float-1.c: New test. + * gcc.dg/c99-math-double-1.c: Likewise. + * gcc.dg/c99-math-long-double-1.c: Likewise. + 2005-05-18 Richard Henderson * gcc.dg/tree-ssa/20031015-1.c: Expect one V_MUST_DEF. diff --git a/gcc/testsuite/gcc.dg/c99-math-double-1.c b/gcc/testsuite/gcc.dg/c99-math-double-1.c new file mode 100644 index 0000000..227b6e2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c99-math-double-1.c @@ -0,0 +1,18 @@ +/* { dg-do run { target *-*-solaris2.1[0-9]* } } */ +/* { dg-options "-std=c99 -O" } */ + +#include +#include "c99-math.h" + +int main(void) +{ + double nan = NAN; + double inf = INFINITY; + double huge = HUGE_VAL; + double norm = __DBL_MIN__; + double zero = 0.0; + + C99_MATH_TESTS (nan, inf, huge, norm, zero) + + return 0; +} diff --git a/gcc/testsuite/gcc.dg/c99-math-float-1.c b/gcc/testsuite/gcc.dg/c99-math-float-1.c new file mode 100644 index 0000000..9dd4e9a --- /dev/null +++ b/gcc/testsuite/gcc.dg/c99-math-float-1.c @@ -0,0 +1,18 @@ +/* { dg-do run { target *-*-solaris2.1[0-9]* } } */ +/* { dg-options "-std=c99 -O" } */ + +#include +#include "c99-math.h" + +int main(void) +{ + float nan = NAN; + float inf = INFINITY; + float huge = HUGE_VALF; + float norm = __FLT_MIN__; + float zero = 0.0f; + + C99_MATH_TESTS (nan, inf, huge, norm, zero) + + return 0; +} diff --git a/gcc/testsuite/gcc.dg/c99-math-long-double-1.c b/gcc/testsuite/gcc.dg/c99-math-long-double-1.c new file mode 100644 index 0000000..43d1588 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c99-math-long-double-1.c @@ -0,0 +1,18 @@ +/* { dg-do run { target *-*-solaris2.1[0-9]* } } */ +/* { dg-options "-std=c99 -O" } */ + +#include +#include "c99-math.h" + +int main(void) +{ + long double nan = NAN; + long double inf = INFINITY; + long double huge = HUGE_VALL; + long double norm = __LDBL_MIN__; + long double zero = 0.0l; + + C99_MATH_TESTS (nan, inf, huge, norm, zero) + + return 0; +} diff --git a/gcc/testsuite/gcc.dg/c99-math.h b/gcc/testsuite/gcc.dg/c99-math.h new file mode 100644 index 0000000..a1e217c --- /dev/null +++ b/gcc/testsuite/gcc.dg/c99-math.h @@ -0,0 +1,111 @@ +#include + +extern void abort(void); + +#define C99_MATH_TESTS(nan, inf, huge, norm, zero) \ +{ \ + if (fpclassify (nan) != FP_NAN) \ + abort (); \ + \ + if (fpclassify (inf) != FP_INFINITE) \ + abort (); \ + \ + if (fpclassify (huge) != FP_INFINITE) \ + abort (); \ + \ + if (fpclassify (norm) != FP_NORMAL) \ + abort (); \ + \ + if (fpclassify (zero) != FP_ZERO) \ + abort (); \ + \ + \ + if (!isnan (nan)) \ + abort (); \ + \ + if (isnan (inf)) \ + abort (); \ + \ + if (isnan (huge)) \ + abort (); \ + \ + if (isnan (norm)) \ + abort (); \ + \ + if (isnan (zero)) \ + abort (); \ + \ + \ + if (isinf (nan)) \ + abort (); \ + \ + if (!isinf (inf)) \ + abort (); \ + \ + if (!isinf (huge)) \ + abort (); \ + \ + if (isnan (norm)) \ + abort (); \ + \ + if (isinf (zero)) \ + abort (); \ + \ + \ + if (isfinite (nan)) \ + abort (); \ + \ + if (isfinite (inf)) \ + abort (); \ + \ + if (isfinite (huge)) \ + abort (); \ + \ + if (!isfinite (norm)) \ + abort (); \ + \ + if (!isfinite (zero)) \ + abort (); \ + \ + \ + if (isnormal (nan)) \ + abort (); \ + \ + if (isnormal (inf)) \ + abort (); \ + \ + if (isnormal (huge)) \ + abort (); \ + \ + if (!isnormal (norm)) \ + abort (); \ + \ + if (isnormal (zero)) \ + abort (); \ + \ + \ + if (signbit (norm)) \ + abort (); \ + \ + if (!signbit (-(norm))) \ + abort (); \ + \ + \ + if (!isgreater ((inf), (norm))) \ + abort (); \ + \ + if (!isgreaterequal ((inf), (huge))) \ + abort (); \ + \ + if (!isless ((norm), (inf))) \ + abort (); \ + \ + if (!islessequal ((huge), (inf))) \ + abort (); \ + \ + if (!islessgreater ((inf), (norm))) \ + abort (); \ + \ + if (!isunordered ((nan), (norm))) \ + abort (); \ +} -- cgit v1.1