OSDN Git Service

undo some of the damage
[pf3gnuchains/gcc-fork.git] / fixincludes / inclhack.def
index f7ad877..88d2eeb 100644 (file)
@@ -391,7 +391,7 @@ fix = {
 fix = {
     hackname  = aix_stdint_1;
     mach      = "*-*-aix*";
-    files     = stdint.h;
+    files     = stdint-aix.h, stdint.h;
     select    = "#define[ \t]UINT8_MAX[ \t]\\(255U\\)\n"
                "#define[ \t]UINT16_MAX[ \t]\\(65535U\\)";
     c_fix     = format;
@@ -405,7 +405,7 @@ fix = {
 fix = {
     hackname  = aix_stdint_2;
     mach      = "*-*-aix*";
-    files     = stdint.h;
+    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"
@@ -434,7 +434,7 @@ fix = {
 fix = {
     hackname  = aix_stdint_3;
     mach      = "*-*-aix*";
-    files     = stdint.h;
+    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"
@@ -457,7 +457,7 @@ fix = {
 fix = {
     hackname  = aix_stdint_4;
     mach      = "*-*-aix*";
-    files     = stdint.h;
+    files     = stdint-aix.h, stdint.h;
     select    = "#define[ \t]SIZE_MAX[ \t]UINT64_MAX\n"
                "#else\n"
                "#define[ \t]SIZE_MAX[ \t]*UINT32_MAX";
@@ -474,7 +474,7 @@ fix = {
 fix = {
     hackname  = aix_stdint_5;
     mach      = "*-*-aix*";
-    files     = stdint.h;
+    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;
@@ -1144,7 +1144,7 @@ fix = {
 fix = {
     hackname  = darwin_stdint_1;
     mach      = "*-*-darwin*";
-    files     = stdint.h;
+    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"
@@ -1161,7 +1161,7 @@ fix = {
 fix = {
     hackname  = darwin_stdint_2;
     mach      = "*-*-darwin*";
-    files     = stdint.h;
+    files     = stdint-darwin.h, stdint.h;
     c_fix     = format;
     c_fix_arg = "#if __WORDSIZE == 64\n"
                "#define INTPTR_MAX 9223372036854775807L\n"
@@ -1193,7 +1193,7 @@ fix = {
 fix = {
     hackname  = darwin_stdint_3;
     mach      = "*-*-darwin*";
-    files     = stdint.h;
+    files     = stdint-darwin.h, stdint.h;
     c_fix     = format;
     c_fix_arg = "#if __WORDSIZE == 64\n"
                "#define UINTPTR_MAX 18446744073709551615UL\n"
@@ -1219,7 +1219,7 @@ fix = {
 fix = {
     hackname  = darwin_stdint_4;
     mach      = "*-*-darwin*";
-    files     = stdint.h;
+    files     = stdint-darwin.h, stdint.h;
     c_fix     = format;
     c_fix_arg = "#if __WORDSIZE == 64\n"
                "#define SIZE_MAX 18446744073709551615UL\n"
@@ -1246,7 +1246,7 @@ fix = {
 fix = {
     hackname  = darwin_stdint_5;
     mach      = "*-*-darwin*";
-    files     = stdint.h;
+    files     = stdint-darwin.h, stdint.h;
     c_fix     = format;
     c_fix_arg = "#if __WORDSIZE == 64\n"
                "#define INTMAX_MIN   (-9223372036854775807L - 1)\n"
@@ -1275,7 +1275,7 @@ fix = {
 fix = {
     hackname  = darwin_stdint_6;
     mach      = "*-*-darwin*";
-    files     = stdint.h;
+    files     = stdint-darwin.h, stdint.h;
     c_fix     = format;
     c_fix_arg = "#if __WORDSIZE == 64\n"
                "#define PTRDIFF_MIN (-9223372036854775807L - 1)\n"
@@ -1308,7 +1308,7 @@ fix = {
 fix = {
     hackname  = darwin_stdint_7;
     mach      = "*-*-darwin*";
-    files     = stdint.h;
+    files     = stdint-darwin.h, stdint.h;
     c_fix     = format;
     c_fix_arg = "#if __WORDSIZE == 64\n"
                "#define INTMAX_C(v)  (v ## L)\n"
@@ -1451,10 +1451,19 @@ fix = {
     hackname  = glibc_c99_inline_2;
     files     = sys/stat.h, '*/sys/stat.h';
     select    = "extern __inline__ int";
-    sed     = "s/extern int \\(stat\\|lstat\\|fstat\\|mknod\\)/"
+    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\\|\\) (\\(stat\\|lstat\\|fstat\\)/"
+    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/"
@@ -1509,25 +1518,33 @@ fix = {
     hackname = glibc_mutex_init;
     files    = pthread.h;
     select   = '\{ *\{ *0, *\} *\}';
-    sed      = "/define[ \t]\\+PTHREAD_MUTEX_INITIALIZER[ \t]*\\\\/{\n"
+    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\\|ERRORCHECK\\|ADAPTIVE\\)_NP\\) }/{ \\1, 0 }/";
+               "\\(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_"
-               "\\(RECURSIVE\\|ERRORCHECK\\|ADAPTIVE\\)_NP\\) }/{ \\1, 0, 0 }/";
-    sed      = "/define[ \t]\\+PTHREAD_RWLOCK_INITIALIZER[ \t]*\\\\/"
+               "\\(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]\\+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"
+               "\\(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]\\+PTHREAD_COND_INITIALIZER/"
+    sed      = "/define[ \t]\\{1,\\}PTHREAD_COND_INITIALIZER/"
                "s/{ { 0, } }/{ { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } }/";
 
     test_text = <<- _EOText_
@@ -2141,7 +2158,7 @@ fix = {
 fix = {
     hackname  = hpux_c99_intptr;
     mach      = "*-hp-hpux11.3*";
-    files     = stdint.h;
+    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)@";
@@ -2164,7 +2181,7 @@ fix = {
     hackname  = hpux_c99_inttypes;
     mach      = "*-hp-hpux11.[23]*";
     files     = inttypes.h;
-    files     = stdint.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)@";
@@ -2178,7 +2195,7 @@ fix = {
 fix = {
     hackname  = hpux_c99_inttypes2;
     mach      = "*-hp-hpux11.2*";
-    files     = stdint.h;
+    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)@";
@@ -2192,20 +2209,13 @@ fix = {
 fix = {
     hackname  = hpux_stdint_least_fast;
     mach      = "*-hp-hpux11.2*";
-    files     = stdint.h;
+    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 = <<- _EOFix_
-       #ifdef __LP64__
-       #  define       UINT_%164_MAX   ULONG_MAX
-       #else
-       %0
-       #endif
-       _EOFix_;
-    test-text = <<- _EOFix_
-       #  define       UINT_FAST64_MAX        ULLONG_MAX
-       #  define       UINT_LEAST64_MAX        ULLONG_MAX
+    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";
        _EOFix_;
 };
 
@@ -2501,7 +2511,7 @@ fix = {
  *  otherwise.
  */
 fix = {
-    hackname  = irix_stdint_c99;
+    hackname  = irix_stdint_c99_mode;
     files     = stdint.h;
     select = "(#ifndef __c99\n)(#error This header file is to be used only for c99 mode compilations)";
 
@@ -2515,6 +2525,87 @@ fix = {
 
 
 /*
+ *  IRIX 6.5 <stdint.h> has some *_MIN/MAX constants whose types don't
+ *  match the corresponding types, as required by ISO C99.
+ */
+fix = {
+    hackname  = irix_stdint_c99_types;
+    files     = stdint-irix65.h, stdint.h;
+    mach      = "mips-sgi-irix6.5";
+    sed       = "s@^#define INT64_MIN.*(-0x7fffffffffffffff - 1)$@"
+                "#define INT64_MIN               (-0x7fffffffffffffffLL - 1)@";
+    sed       = "s@^#define INT64_MAX.*0x7fffffffffffffff$@"
+                "#define INT64_MAX               0x7fffffffffffffffLL@";
+    sed       = "s@^#define UINT32_MAX.*0xffffffff$@"
+                "#define UINT32_MAX              0xffffffffU@";
+    sed       = "s@^#define UINT64_MAX.*0xffffffffffffffff$@"
+                "#define UINT64_MAX              0xffffffffffffffffULL@";
+    sed       = "s@^#define INTPTR_MIN.*INT32_MIN$@"
+                "#define INTPTR_MIN              (-0x7fffffffL - 1)@";
+    sed       = "s@^#define INTPTR_MAX.*INT32_MAX$@"
+                "#define INTPTR_MAX              0x7fffffffL@";
+    sed       = "s@^#define UINTPTR_MAX.*UINT32_MAX$@"
+                "#define UINTPTR_MAX             0xffffffffUL@";
+    sed       = "s@^#define INTPTR_MIN.*INT64_MIN@"
+                "#define INTPTR_MIN              (-0x7fffffffffffffffL - 1)@";
+    sed       = "s@^#define INTPTR_MAX.*INT64_MAX$@"
+                "#define INTPTR_MAX              0x7fffffffffffffffL@";
+    sed       = "s@^#define UINTPTR_MAX.*UINT64_MAX$@"
+                "#define UINTPTR_MAX             0xffffffffffffffffUL@";
+    sed       = "s@^#define PTRDIFF_MIN.*INT64_MIN$@"
+                "#define PTRDIFF_MIN             (-0x7fffffffffffffffL - 1)@";
+    sed       = "s@^#define PTRDIFF_MAX.*INT64_MAX$@"
+                "#define PTRDIFF_MAX             0x7fffffffffffffffL@";
+    sed       = "s@^#define SIZE_MAX.*UINT64_MAX$@"
+                "#define SIZE_MAX                0xffffffffffffffffUL@";
+    test_text = "#define INT64_MIN               (-0x7fffffffffffffff - 1)\n"
+                "#define INT64_MAX               0x7fffffffffffffff\n"
+                "#define UINT32_MAX              0xffffffff\n"
+                "#define UINT64_MAX              0xffffffffffffffff\n"
+                "#define INTPTR_MIN              INT32_MIN\n"
+                "#define INTPTR_MAX              INT32_MAX\n"
+                "#define UINTPTR_MAX             UINT32_MAX\n"
+                "#define INTPTR_MIN              INT64_MIN\n"
+                "#define INTPTR_MAX              INT64_MAX\n"
+                "#define UINTPTR_MAX             UINT64_MAX\n"
+                "#define PTRDIFF_MIN             INT64_MIN\n"
+                "#define PTRDIFF_MAX             INT64_MAX\n"
+                "#define SIZE_MAX                UINT64_MAX";
+};
+
+
+/*
+ *  IRIX 6.5 <stdint.h> uses casts in some macros which cannot thus be used
+ *  in preprocessor tests, although ISO C99 requires this.
+ */
+fix = {
+    hackname  = irix_stdint_c99_macros;
+    files     = stdint-irix65.h, stdint.h;
+    mach      = "mips-sgi-irix6.5";
+    sed       = "s@^#define INT8_C(x).*int.*_t.*$@#define INT8_C(x)               (x)@";
+    sed       = "s@^#define INT16_C(x).*int.*_t.*$@#define INT16_C(x)              (x)@";
+    sed       = "s@^#define INT32_C(x).*int.*_t.*$@#define INT32_C(x)              (x)@";
+    sed       = "s@^#define INT64_C(x).*int.*_t.*$@#define INT64_C(x)              (x ## LL)@";
+    sed       = "s@^#define UINT8_C(x).*int.*_t.*$@#define UINT8_C(x)              (x)@";
+    sed       = "s@^#define UINT16_C(x).*int.*_t.*$@#define UINT16_C(x)             (x)@";
+    sed       = "s@^#define UINT32_C(x).*int.*_t.*$@#define UINT32_C(x)             (x ## U)@";
+    sed       = "s@^#define UINT64_C(x).*int.*_t.*$@#define UINT64_C(x)             (x ## ULL)@";
+    sed       = "s@^#define INTMAX_C(x).*int.*_t.*$@#define INTMAX_C(x)             (x ## LL)@";
+    sed       = "s@^#define UINTMAX_C(x).*int.*_t.*$@#define UINTMAX_C(x)            (x ## ULL)@";
+    test_text = "#define INT8_C(x)               (int_least8_t)(x)\n"
+                "#define INT16_C(x)              (int_least16_t)(x)\n"
+                "#define INT32_C(x)              (int_least32_t)(x)\n"
+                "#define INT64_C(x)              (int_least64_t)(x)\n"
+                "#define UINT8_C(x)              (uint_least8_t)(x)\n"
+                "#define UINT16_C(x)             (uint_least16_t)(x)\n"
+                "#define UINT32_C(x)             (uint_least32_t)(x)\n"
+                "#define UINT64_C(x)             (uint_least64_t)(x)\n"
+                "#define INTMAX_C(x)             (intmax_t)(x)\n"
+                "#define UINTMAX_C(x)            (uintmax_t)(x)";
+};
+
+
+/*
  *  IRIX 5.x's stdio.h and IRIX 6.5's internal/stdio_core.h declare
  *  some functions that take a va_list as
  *  taking char *.  However, GCC uses void * for va_list, so
@@ -2551,42 +2642,6 @@ fix = {
                "const struct tm *);";
 };
 
-/*
- * Fixing ISC fmod declaration
- */
-fix = {
-    hackname  = isc_fmod;
-    files     = math.h;
-    select    = 'fmod\(double\)';
-    c_fix     = format;
-    c_fix_arg = "fmod(double, double)";
-    test_text = "extern double fmod(double);";
-};
-
-
-/*
- *  On Interactive Unix 2.2, certain traditional Unix definitions
- *  (notably getc and putc in stdio.h) are omitted if __STDC__ is
- *  defined, not just if _POSIX_SOURCE is defined.  This makes it
- *  impossible to compile any nontrivial program except with -posix.
- */
-fix = {
-    hackname = isc_omits_with_stdc;
-
-    files     = "stdio.h";
-    files     = "math.h";
-    files     = "ctype.h";
-    files     = "sys/limits.h";
-    files     = "sys/fcntl.h";
-    files     = "sys/dirent.h";
-
-    select    = '!defined\(__STDC__\) && !defined\(_POSIX_SOURCE\)';
-    c_fix     = format;
-    c_fix_arg = '!defined(_POSIX_SOURCE)';
-    test_text = "#if !defined(__STDC__) && !defined(_POSIX_SOURCE) /* ? ! */"
-                "\nint foo;\n#endif";
-};
-
 
 /*
  * These files in Sun OS 4.x and ARM/RISCiX and BSD4.3
@@ -2780,20 +2835,6 @@ fix = {
 
 
 /*
- * Fixing nested comments in ISC <sys/limits.h>
- */
-fix = {
-    hackname = nested_sys_limits;
-    files  = sys/limits.h;
-    select = CHILD_MAX;
-    sed    = "/CHILD_MAX/s,/\\* Max, Max,";
-    sed    = "/OPEN_MAX/s,/\\* Max, Max,";
-    test_text = "/*\n#define CHILD_MAX 20 /* Max, Max, ... */ /*\n"
-                "#define OPEN_MAX  20 /* Max, Max, ... */\n";
-};
-
-
-/*
  *  Some versions of NetBSD don't expect the C99 inline semantics.
  */
 fix = {
@@ -2853,7 +2894,7 @@ fix = {
    versions.  */
 fix = {
     hackname  = newlib_stdint_1;
-    files     = stdint.h;
+    files     = stdint-newlib.h, stdint.h;
     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__@";
@@ -2889,7 +2930,7 @@ fix = {
 
 fix = {
     hackname  = newlib_stdint_2;
-    files     = stdint.h;
+    files     = stdint-newlib.h, stdint.h;
     select    = "@todo - Add support for wint_t types";
     c_fix     = format;
     c_fix_arg = "#define INTMAX_MAX __INTMAX_MAX__\n"
@@ -3207,42 +3248,6 @@ fix = {
 
 
 /*
- *  On OpenServer and on UnixWare 7, <math.h> uses the native compiler
- *  __builtin_generic. We fix that usage to use the GCC equivalent.
- * It also has a plethora of inline functions that conflict with libstdc++.
- */
-fix = {
-    hackname = sco_math;
-    files    = math.h, '*/math.h';
-    select   = "inline double abs";
-    bypass   = "__GNUG__";
-    sed      = "/#define.*__fp_class(a) \\\\/i\\\n"
-              "#ifndef __GNUC__\n";
-    sed      =
-"/.*__builtin_generic/a\\\n"
-"#else\\\n"
-"#define __fp_class(a) \\\\\\\n"
-"  __builtin_choose_expr(__builtin_types_compatible_p(typeof(a),long double),\\\\\\\n"
-"   __fpclassifyl(a), \\\\\\\n"
-"    __builtin_choose_expr(__builtin_types_compatible_p(typeof(a), float), \\\\\\\n"
-"      __fpclassifyf(a),__fpclassify(a)))\\\n"
-"#endif";
-
-    sed      = "/extern \"C\\+\\+\"/N;"
-              "/inline double abs/i\\\n"
-               "#ifndef __GNUC__\n";
-    sed      = "/inline long double trunc/N;"
-              "/inline long double trunc.*}.*extern \"C\\+\\+\"/a\\\n"
-              "#endif /* ! __GNUC__ */";
-
-    test_text =
-    "#define __fp_class(a) \\\\\n"
-    " __builtin_generic(a,\"ld:__fplcassifyl;f:__fpclassifyf;:__fpclassify\")\n";
-
-};
-
-
-/*
  * 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.
@@ -3253,10 +3258,10 @@ fix = {
     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\\)/";
+               "#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]\\+_Imaginary_I/#define\tI\t\t_Complex_I/";
+    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"
@@ -3346,7 +3351,6 @@ fix = {
     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)";
 };
 
@@ -3517,22 +3521,21 @@ fix = {
 
 
 /*
- * Sun Solaris 10 has a version of sys/int_const.h that defines
+ * 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;
-    select    = '@\(#\)int_const.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
     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)";
-    c_fix_arg = "^#define[ \t]+UINT8_C\\(c\\)[ \t]+__CONCAT__.*\n"
+    select    = "^#define[ \t]+UINT8_C\\(c\\)[ \t]+__CONCAT__.*\n"
                 "(/\*.*\*/)\n"
                 "#define[ \t]+UINT16_C\\(c\\)[ \t]+__CONCAT__.*";
     test_text =
-    '#pragma ident     "@(#)int_const.h        1.5     04/09/28 SMI"'"\n"
     "#define   UINT8_C(c)      __CONCAT__(c,u)\n"
     "/* CSTYLED */\n"
     "#define   UINT16_C(c)     __CONCAT__(c,u)";
@@ -3540,38 +3543,36 @@ fix = {
 
 
 /*
- * Sun Solaris 10 has a version of sys/int_limits.h that defines
+ * 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;
-    select    = '@\(#\)int_limits.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
     files     = sys/int_limits.h;
+    mach      = '*-*-solaris2*';
     c_fix     = format;
     c_fix_arg = "#define\tUINT8_MAX\t(255)\n"
                 "#define\tUINT16_MAX\t(65535)";
-    c_fix_arg = "^#define[ \t]+UINT8_MAX[ \t]+\\(255U\\)\n"
+    select    = "^#define[ \t]+UINT8_MAX[ \t]+\\(255U\\)\n"
                 "#define[ \t]+UINT16_MAX[ \t]+\\(65535U\\)";
     test_text =
-    '#pragma ident     "@(#)int_limits.h       1.9     04/09/28 SMI"'"\n"
     "#define   UINT8_MAX       (255U)\n"
     "#define   UINT16_MAX      (65535U)";
 };
 
 
 /*
- * Sun Solaris 10 has a version of sys/int_limits.h that defines
+ * 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;
-    select    = '@\(#\)int_limits.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
     files     = sys/int_limits.h;
+    mach      = '*-*-solaris2*';
     c_fix     = format;
     c_fix_arg = "#define\t%1_FAST16_%2 %132_%2";
-    c_fix_arg = "^#define[ \t]+(INT|UINT)_FAST16_(MAX|MIN)[ \t](INT|UINT)16.*";
+    select    = "^#define[ \t]+(INT|UINT)_FAST16_(MAX|MIN)[ \t](INT|UINT)16.*";
     test_text =
-    '#pragma ident     "@(#)int_limits.h       1.9     04/09/28 SMI"'"\n"
     "#define   INT_FAST16_MAX INT16_MAX\n"
     "#define   UINT_FAST16_MAX UINT16_MAX\n"
     "#define   INT_FAST16_MIN  INT16_MIN";
@@ -3579,6 +3580,22 @@ fix = {
 
 
 /*
+ * 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 up to 9 has a version of sys/int_types.h that forbids use
  * of Standard C99 64-bit types in 32-bit mode.
  */
@@ -4438,7 +4455,7 @@ fix = {
 
     sed      = "/Widget\told, new;/i\\\n"
                    "#ifdef __cplusplus\\\n"
-                   "\tWidget\told, c_new;\\\n"
+                   "\\\tWidget\told, c_new;\\\n"
                    "#else\n";
 
     sed      = "/Widget\told, new;/a\\\n"
@@ -4447,7 +4464,7 @@ fix = {
     sed      = "s/Widget new,/Widget c_new,/g";
     test_text =
     "struct wedge {\n"
-    "   Widget\told, new; /* fixinc check FAILS ON BSD */\n"
+    "   Widget\told, new;\n"
     "};\nextern Wedged( Widget new, Widget old );";
 };