diff options
author | sje <sje@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-04-28 15:17:49 +0000 |
---|---|---|
committer | sje <sje@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-04-28 15:17:49 +0000 |
commit | 8869ef7363218f00a2a4bcad730611e6f797c951 (patch) | |
tree | f4e2713da92204b23f131d111429435387a6ab03 /fixincludes | |
parent | 029529e65cdfd210955a375317c7ece353e2de83 (diff) | |
download | gcc-8869ef7363218f00a2a4bcad730611e6f797c951.tar.gz |
* inclhack.def (hpux11_uint32_c): Remove.
(hpux_long_double): Disable on hpux11.3*.
(hpux_long_double_2): New.
(hpux_c99_intptr): New.
(hpux_c99_inttypes): New.
(hpux_c99_inttypes2): New.
(hpux_stdint_least): New.
(hpux_stdint_fast): New.
(hpux_inttype_int_least8_t): New.
(hpux_inttype_int8_t): New.
* fixincl.x: Regenerate.
* tests/base/sys/_inttypes.h: New.
* tests/base/inttypes.h: Update.
* tests/base/stdlib.h: Update.
* tests/base/stdint.h: Update.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146899 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'fixincludes')
-rw-r--r-- | fixincludes/ChangeLog | 18 | ||||
-rw-r--r-- | fixincludes/inclhack.def | 136 | ||||
-rw-r--r-- | fixincludes/tests/base/inttypes.h | 11 | ||||
-rw-r--r-- | fixincludes/tests/base/stdint.h | 42 | ||||
-rw-r--r-- | fixincludes/tests/base/stdlib.h | 6 | ||||
-rw-r--r-- | fixincludes/tests/base/sys/_inttypes.h | 21 |
6 files changed, 201 insertions, 33 deletions
diff --git a/fixincludes/ChangeLog b/fixincludes/ChangeLog index a6205bd5c29..a31631df12f 100644 --- a/fixincludes/ChangeLog +++ b/fixincludes/ChangeLog @@ -1,3 +1,21 @@ +2009-04-28 Steve Ellcey <sje@cup.hp.com> + + * inclhack.def (hpux11_uint32_c): Remove. + (hpux_long_double): Disable on hpux11.3*. + (hpux_long_double_2): New. + (hpux_c99_intptr): New. + (hpux_c99_inttypes): New. + (hpux_c99_inttypes2): New. + (hpux_stdint_least): New. + (hpux_stdint_fast): New. + (hpux_inttype_int_least8_t): New. + (hpux_inttype_int8_t): New. + * fixincl.x: Regenerate. + * tests/base/sys/_inttypes.h: New. + * tests/base/inttypes.h: Update. + * tests/base/stdlib.h: Update. + * tests/base/stdint.h: Update. + 2009-04-28 Joseph Myers <joseph@codesourcery.com> * inclhack.def (glibc_stdint): New fix. diff --git a/fixincludes/inclhack.def b/fixincludes/inclhack.def index 0b7c3b094fa..f77845f77d2 100644 --- a/fixincludes/inclhack.def +++ b/fixincludes/inclhack.def @@ -1609,35 +1609,6 @@ fix = { "extern int snprintf(char *, _hpux_size_t, char *, ...);"; }; - -/* - * In inttypes.h on HPUX 11, the use of __CONCAT__ in the definition - * of UINT32_C has undefined behavior according to ISO/ANSI: - * the arguments to __CONCAT__ are not macro expanded before the - * concatination happens so the trailing ')' in the first argument - * is concatinated with the 'l' in the second argument creating an - * invalid pp token. The behavior of invalid pp tokens is undefined. - * GCC does not handle these invalid tokens the way the HP compiler does. - * This problem will potentially occur anytime macros are used in the - * arguments to __CONCAT__. A general solution to this problem would be to - * insert another layer of macro between __CONCAT__ and its use - * in UINT32_C. An example of this solution can be found in the C standard. - * A more specific solution, the one used here, is to change the UINT32_C - * macro to not used macros in the arguments to __CONCAT__. - */ -fix = { - hackname = hpux11_uint32_c; - files = inttypes.h; - select = "^#define UINT32_C\\(__c\\)[ \t]*" - "__CONCAT__\\(__CONCAT_U__\\(__c\\),l\\)"; - c_fix = format; - c_fix_arg = '#define UINT32_C(__c) __CONCAT__(__c,ul)'; - test_text = - "#define CONCAT_U__(__c)\t__CONCAT__(__c,u)\n" - "#define UINT32_C(__c)\t__CONCAT__(__CONCAT_U__(__c),l)"; -}; - - /* * Fix hpux 11.00 broken vsnprintf declaration */ @@ -1721,6 +1692,8 @@ fix = { */ fix = { hackname = hpux_long_double; + mach = "*-*-hpux10*"; + mach = "*-*-hpux11.[012]*"; files = stdlib.h; select = "extern[ \t]long_double[ \t]strtold"; bypass = "long_double_t"; @@ -1736,6 +1709,20 @@ fix = { "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"; +}; /* * Fix hpux10.20 <sys/time.h> to avoid invalid forward decl @@ -1849,6 +1836,97 @@ fix = { "}\n"; }; +fix = { + hackname = hpux_c99_intptr; + mach = "*-hp-hpux11.3*"; + files = 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.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"; +}; + +fix = { + hackname = hpux_c99_inttypes2; + mach = "*-hp-hpux11.2*"; + files = 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 = { + hackname = hpux_stdint_least; + mach = "*-hp-hpux11.2*"; + files = stdint.h; + select = "^[ \t]*#[ \t]*define[ \t]*UINT_LEAST64_MAX[ \t]*ULLONG_MAX"; + c_fix = format; + c_fix_arg = "#ifdef __LP64__\n# define UINT_LEAST64_MAX ULONG_MAX\n#else\n%0\n#endif\n"; + test_text ="# define UINT_LEAST64_MAX ULLONG_MAX\n"; +}; + +fix = { + hackname = hpux_stdint_fast; + mach = "*-hp-hpux11.2*"; + files = stdint.h; + select = "^[ \t]*#[ \t]*define[ \t]*UINT_FAST64_MAX[ \t]*ULLONG_MAX"; + c_fix = format; + c_fix_arg = "#ifdef __LP64__\n# define UINT_FAST64_MAX ULONG_MAX\n#else\n%0\n#endif\n"; + test_text ="# define UINT_FAST64_MAX ULLONG_MAX\n"; +}; + +fix = { + hackname = hpux_inttype_int_least8_t; + mach = "*-hp-hpux11.*"; + files = sys/_inttypes.h; + select = "^[ \t]*typedef[ \t]*char[ \t]*int_least8_t.*"; + c_fix = format; + c_fix_arg = "typedef signed char int_least8_t;"; + test_text ="typedef char int_least8_t;\n"; +}; + +fix = { + hackname = hpux_inttype_int8_t; + mach = "*-hp-hpux11.*"; + files = sys/_inttypes.h; + select = "^[ \t]*typedef[ \t]*char[ \t]*int8_t.*"; + c_fix = format; + c_fix_arg = "typedef signed char int8_t;"; + test_text ="typedef char int8_t;\n"; +}; + /* * Fix glibc definition of HUGE_VAL in terms of hex floating point constant */ diff --git a/fixincludes/tests/base/inttypes.h b/fixincludes/tests/base/inttypes.h index 06d7ebd5ce3..3f556856a41 100644 --- a/fixincludes/tests/base/inttypes.h +++ b/fixincludes/tests/base/inttypes.h @@ -9,7 +9,10 @@ -#if defined( HPUX11_UINT32_C_CHECK ) -#define CONCAT_U__(__c) __CONCAT__(__c,u) -#define UINT32_C(__c) __CONCAT__(__c,ul) -#endif /* HPUX11_UINT32_C_CHECK */ +#if defined( HPUX_C99_INTTYPES_CHECK ) +#define UINT8_C(__c) (__c) +#define UINT16_C(__c) (__c) +#define INT32_C(__c) (__c) +#define UINT32_C(__c) __CONCAT__(__c,u) + +#endif /* HPUX_C99_INTTYPES_CHECK */ diff --git a/fixincludes/tests/base/stdint.h b/fixincludes/tests/base/stdint.h index 30ba3adac88..653c5da69e8 100644 --- a/fixincludes/tests/base/stdint.h +++ b/fixincludes/tests/base/stdint.h @@ -16,6 +16,48 @@ #endif /* GLIBC_STDINT_CHECK */ +#if defined( HPUX_C99_INTPTR_CHECK ) +#define PTRDIFF_MAX __PTRDIFF_MAX__ +#define PTRDIFF_MIN (-PTRDIFF_MAX - 1) +#define INTPTR_MAX (2147483647l) +#define INTPTR_MIN (-INTPTR_MAX - 1) +#define UINTPTR_MAX (4294967295ul) +#define SIZE_MAX __SIZE_MAX__ + +#endif /* HPUX_C99_INTPTR_CHECK */ + + +#if defined( HPUX_C99_INTTYPES2_CHECK ) +#define INT8_C(__c) (__c) +#define UINT8_C(c) __UINT8_C(c) +#define INT16_C(__c) (__c) +#define UINT16_C(c) __UINT16_C(c) + +#endif /* HPUX_C99_INTTYPES2_CHECK */ + + +#if defined( HPUX_STDINT_LEAST_CHECK ) +#ifdef __LP64__ +# define UINT_LEAST64_MAX ULONG_MAX +#else +# define UINT_LEAST64_MAX ULLONG_MAX +#endif + + +#endif /* HPUX_STDINT_LEAST_CHECK */ + + +#if defined( HPUX_STDINT_FAST_CHECK ) +#ifdef __LP64__ +# define UINT_FAST64_MAX ULONG_MAX +#else +# define UINT_FAST64_MAX ULLONG_MAX +#endif + + +#endif /* HPUX_STDINT_FAST_CHECK */ + + #if defined( IRIX_STDINT_C99_CHECK ) #if 0 #error This header file is to be used only for c99 mode compilations diff --git a/fixincludes/tests/base/stdlib.h b/fixincludes/tests/base/stdlib.h index e7174e19108..d104cc7d517 100644 --- a/fixincludes/tests/base/stdlib.h +++ b/fixincludes/tests/base/stdlib.h @@ -20,6 +20,12 @@ extern long double strtold(const char *, char **); #endif /* HPUX_LONG_DOUBLE_CHECK */ +#if defined( HPUX_LONG_DOUBLE_2_CHECK ) +# if !defined(__ia64) || !defined(_PROTOTYPES) || defined(_LONG_DOUBLE_STRUCT) + +#endif /* HPUX_LONG_DOUBLE_2_CHECK */ + + #if defined( INT_ABORT_FREE_AND_EXIT_CHECK ) extern void abort(int); extern void free(void*); diff --git a/fixincludes/tests/base/sys/_inttypes.h b/fixincludes/tests/base/sys/_inttypes.h new file mode 100644 index 00000000000..6773ab834c9 --- /dev/null +++ b/fixincludes/tests/base/sys/_inttypes.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE. + + It has been auto-edited by fixincludes from: + + "fixinc/tests/inc/sys/_inttypes.h" + + This had to be done to correct non-standard usages in the + original, manufacturer supplied header file. */ + + + +#if defined( HPUX_INTTYPE_INT_LEAST8_T_CHECK ) +typedef signed char int_least8_t; + +#endif /* HPUX_INTTYPE_INT_LEAST8_T_CHECK */ + + +#if defined( HPUX_INTTYPE_INT8_T_CHECK ) +typedef signed char int8_t; + +#endif /* HPUX_INTTYPE_INT8_T_CHECK */ |