This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: cpp issues
- To: "Kaveh R. Ghazi" <ghazi at caip dot rutgers dot edu>
- Subject: Re: cpp issues
- From: Dave Brolley <brolley at cygnus dot com>
- Date: Mon, 15 Feb 1999 12:49:57 -0500
- CC: law at cygnus dot com, egcs-patches at cygnus dot com, egcs at egcs dot cygnus dot com, zack at rabi dot columbia dot edu
- Organization: Cygnus Solutions Canada Ltd
- References: <199902131545.KAA06266@caip.rutgers.edu>
Assuming that there's nothing major hidden in here and that it's just WIDE_INT->WIDEST_INT, then it's OK
with me.
Dave
Kaveh R. Ghazi wrote:
> This patch implements using WIDEST_INT in cccp. (I'll do cpplib
> next.) Okay to install?
>
> --Kaveh
>
> PS: Jeff, is the mips failure with LL cpp expressions in the testsuite?
> It would be nice to compare before and after results on the testsuite.
>
> Sat Feb 13 10:01:26 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
>
> * cccp.c: Don't define HOST_WIDE_INT. Replace all occurrences of
> WIDE_INT with WIDEST_INT.
>
> * cexp.y: Likewise.
> Don't define unsigned_HOST_WIDE_INT, CHAR_BIT or
> HOST_BITS_PER_WIDE_INT. Replace occurrences of PRINTF_PROTO_1()
> style with PVPROTO() ATTRIBUTE_PRINTF_1 style macros. Replace
> occurrences of "unsigned_HOST" with "unsigned HOST". Provide a
> definition of variable `c89' when compiling a test binary and set it.
>
> * system.h: Don't define the PRINTF_PROTO_* macros.
>
>
> diff -rup orig/egcs-CVS19990212/gcc/cccp.c egcs-CVS19990212/gcc/cccp.c
> --- orig/egcs-CVS19990212/gcc/cccp.c Fri Feb 12 16:26:49 1999
> +++ egcs-CVS19990212/gcc/cccp.c Sat Feb 13 08:54:04 1999
> @@ -82,26 +82,6 @@ static int hack_vms_include_specificatio
> #define INO_T_EQ(a, b) 0
> #endif
>
> -/* Find the largest host integer type and set its size and type.
> - Watch out: on some crazy hosts `long' is shorter than `int'. */
> -
> -#ifndef HOST_WIDE_INT
> -# if HAVE_INTTYPES_H
> -# include <inttypes.h>
> -# define HOST_WIDE_INT intmax_t
> -# else
> -# if (HOST_BITS_PER_LONG <= HOST_BITS_PER_INT && HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_INT)
> -# define HOST_WIDE_INT int
> -# else
> -# if (HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_LONG || ! (defined LONG_LONG_MAX || defined LLONG_MAX))
> -# define HOST_WIDE_INT long
> -# else
> -# define HOST_WIDE_INT long long
> -# endif
> -# endif
> -# endif
> -#endif
> -
> #ifndef INO_T_EQ
> #define INO_T_EQ(a, b) ((a) == (b))
> #endif
> @@ -117,8 +97,8 @@ static int hack_vms_include_specificatio
> /* External declarations. */
>
> extern char *version_string;
> -HOST_WIDE_INT parse_escape PROTO((char **, HOST_WIDE_INT));
> -HOST_WIDE_INT parse_c_expression PROTO((char *, int));
> +HOST_WIDEST_INT parse_escape PROTO((char **, HOST_WIDEST_INT));
> +HOST_WIDEST_INT parse_c_expression PROTO((char *, int));
>
> /* Name under which this program was invoked. */
>
> @@ -959,7 +939,7 @@ static void delete_assertion PROTO((ASSE
>
> static void do_once PROTO((void));
>
> -static HOST_WIDE_INT eval_if_expression PROTO((U_CHAR *, int));
> +static HOST_WIDEST_INT eval_if_expression PROTO((U_CHAR *, int));
> static void conditional_skip PROTO((FILE_BUF *, int, enum node_type, U_CHAR *, FILE_BUF *));
> static void skip_if_group PROTO((FILE_BUF *, int, FILE_BUF *));
> static void validate_else PROTO((U_CHAR *, U_CHAR *));
> @@ -2563,7 +2543,7 @@ get_lintcmd (ibp, limit, argstart, argle
> U_CHAR **argstart; /* point to command arg */
> int *arglen, *cmdlen; /* how long they are */
> {
> - HOST_WIDE_INT linsize;
> + HOST_WIDEST_INT linsize;
> register U_CHAR *numptr; /* temp for arg parsing */
>
> *arglen = 0;
> @@ -6962,7 +6942,7 @@ do_line (buf, limit, op, keyword)
> if (! ignore_escape_flag)
> {
> char *bpc = (char *) bp;
> - HOST_WIDE_INT c = parse_escape (&bpc, (HOST_WIDE_INT) (U_CHAR) (-1));
> + HOST_WIDEST_INT c = parse_escape (&bpc, (HOST_WIDEST_INT) (U_CHAR) (-1));
> bp = (U_CHAR *) bpc;
> if (c < 0)
> p--;
> @@ -7275,7 +7255,7 @@ do_if (buf, limit, op, keyword)
> FILE_BUF *op;
> struct directive *keyword ATTRIBUTE_UNUSED;
> {
> - HOST_WIDE_INT value;
> + HOST_WIDEST_INT value;
> FILE_BUF *ip = &instack[indepth];
>
> value = eval_if_expression (buf, limit - buf);
> @@ -7292,7 +7272,7 @@ do_elif (buf, limit, op, keyword)
> FILE_BUF *op;
> struct directive *keyword ATTRIBUTE_UNUSED;
> {
> - HOST_WIDE_INT value;
> + HOST_WIDEST_INT value;
> FILE_BUF *ip = &instack[indepth];
>
> if (if_stack == instack[indepth].if_stack) {
> @@ -7330,14 +7310,14 @@ do_elif (buf, limit, op, keyword)
> /* Evaluate a #if expression in BUF, of length LENGTH, then parse the
> result as a C expression and return the value as an int. */
>
> -static HOST_WIDE_INT
> +static HOST_WIDEST_INT
> eval_if_expression (buf, length)
> U_CHAR *buf;
> int length;
> {
> FILE_BUF temp_obuf;
> HASHNODE *save_defined;
> - HOST_WIDE_INT value;
> + HOST_WIDEST_INT value;
>
> save_defined = install ((U_CHAR *) "defined", -1, T_SPEC_DEFINED,
> NULL_PTR, -1);
> diff -rup orig/egcs-CVS19990212/gcc/cexp.y egcs-CVS19990212/gcc/cexp.y
> --- orig/egcs-CVS19990212/gcc/cexp.y Fri Feb 12 16:28:47 1999
> +++ egcs-CVS19990212/gcc/cexp.y Sat Feb 13 09:36:26 1999
> @@ -47,44 +47,11 @@ struct arglist {
> int argno;
> };
>
> -/* Find the largest host integer type and set its size and type.
> - Watch out: on some crazy hosts `long' is shorter than `int'. */
> -
> -#ifndef HOST_WIDE_INT
> -# if HAVE_INTTYPES_H
> -# include <inttypes.h>
> -# define HOST_WIDE_INT intmax_t
> -# define unsigned_HOST_WIDE_INT uintmax_t
> -# else
> -# if (HOST_BITS_PER_LONG <= HOST_BITS_PER_INT && HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_INT)
> -# define HOST_WIDE_INT int
> -# else
> -# if (HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_LONG || ! (defined LONG_LONG_MAX || defined LLONG_MAX))
> -# define HOST_WIDE_INT long
> -# else
> -# define HOST_WIDE_INT long long
> -# endif
> -# endif
> -# endif
> -#endif
> -
> -#ifndef unsigned_HOST_WIDE_INT
> -#define unsigned_HOST_WIDE_INT unsigned HOST_WIDE_INT
> -#endif
> -
> -#ifndef CHAR_BIT
> -#define CHAR_BIT 8
> -#endif
> -
> -#ifndef HOST_BITS_PER_WIDE_INT
> -#define HOST_BITS_PER_WIDE_INT (CHAR_BIT * sizeof (HOST_WIDE_INT))
> -#endif
> -
> -HOST_WIDE_INT parse_c_expression PROTO((char *, int));
> +HOST_WIDEST_INT parse_c_expression PROTO((char *, int));
>
> static int yylex PROTO((void));
> -static void yyerror PRINTF_PROTO_1((char *, ...)) __attribute__ ((noreturn));
> -static HOST_WIDE_INT expression_value;
> +static void yyerror PVPROTO((char *, ...)) ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN;
> +static HOST_WIDEST_INT expression_value;
> #ifdef TEST_EXP_READER
> static int expression_signedp;
> #endif
> @@ -145,13 +112,13 @@ extern int c89;
> #define MAX_WCHAR_TYPE_SIZE WCHAR_TYPE_SIZE
> #endif
>
> -#define MAX_CHAR_TYPE_MASK (MAX_CHAR_TYPE_SIZE < HOST_BITS_PER_WIDE_INT \
> - ? (~ (~ (HOST_WIDE_INT) 0 << MAX_CHAR_TYPE_SIZE)) \
> - : ~ (HOST_WIDE_INT) 0)
> -
> -#define MAX_WCHAR_TYPE_MASK (MAX_WCHAR_TYPE_SIZE < HOST_BITS_PER_WIDE_INT \
> - ? ~ (~ (HOST_WIDE_INT) 0 << MAX_WCHAR_TYPE_SIZE) \
> - : ~ (HOST_WIDE_INT) 0)
> +#define MAX_CHAR_TYPE_MASK (MAX_CHAR_TYPE_SIZE < HOST_BITS_PER_WIDEST_INT \
> + ? (~ (~ (HOST_WIDEST_INT) 0 << MAX_CHAR_TYPE_SIZE)) \
> + : ~ (HOST_WIDEST_INT) 0)
> +
> +#define MAX_WCHAR_TYPE_MASK (MAX_WCHAR_TYPE_SIZE < HOST_BITS_PER_WIDEST_INT \
> + ? ~ (~ (HOST_WIDEST_INT) 0 << MAX_WCHAR_TYPE_SIZE) \
> + : ~ (HOST_WIDEST_INT) 0)
>
> /* Suppose A1 + B1 = SUM1, using 2's complement arithmetic ignoring overflow.
> Suppose A, B and SUM have the same respective signs as A1, B1, and SUM1.
> @@ -165,16 +132,16 @@ extern int c89;
>
> struct constant;
>
> -HOST_WIDE_INT parse_escape PROTO((char **, HOST_WIDE_INT));
> +HOST_WIDEST_INT parse_escape PROTO((char **, HOST_WIDEST_INT));
> int check_assertion PROTO((U_CHAR *, int, int, struct arglist *));
> struct hashnode *lookup PROTO((U_CHAR *, int, int));
> -void error PRINTF_PROTO_1((char *, ...));
> -void pedwarn PRINTF_PROTO_1((char *, ...));
> -void warning PRINTF_PROTO_1((char *, ...));
> +void error PVPROTO((char *, ...)) ATTRIBUTE_PRINTF_1;
> +void pedwarn PVPROTO((char *, ...)) ATTRIBUTE_PRINTF_1;
> +void warning PVPROTO((char *, ...)) ATTRIBUTE_PRINTF_1;
>
> static int parse_number PROTO((int));
> -static HOST_WIDE_INT left_shift PROTO((struct constant *, unsigned_HOST_WIDE_INT));
> -static HOST_WIDE_INT right_shift PROTO((struct constant *, unsigned_HOST_WIDE_INT));
> +static HOST_WIDEST_INT left_shift PROTO((struct constant *, unsigned HOST_WIDEST_INT));
> +static HOST_WIDEST_INT right_shift PROTO((struct constant *, unsigned HOST_WIDEST_INT));
> static void integer_overflow PROTO((void));
>
> /* `signedp' values */
> @@ -183,7 +150,7 @@ static void integer_overflow PROTO((void
> %}
>
> %union {
> - struct constant {HOST_WIDE_INT value; int signedp;} integer;
> + struct constant {HOST_WIDEST_INT value; int signedp;} integer;
> struct name {U_CHAR *address; int length;} name;
> struct arglist *keywords;
> }
> @@ -270,7 +237,7 @@ exp : exp '*' exp
> integer_overflow ();
> }
> else
> - $$.value = ((unsigned_HOST_WIDE_INT) $1.value
> + $$.value = ((unsigned HOST_WIDEST_INT) $1.value
> * $3.value); }
> | exp '/' exp
> { if ($3.value == 0)
> @@ -287,7 +254,7 @@ exp : exp '*' exp
> integer_overflow ();
> }
> else
> - $$.value = ((unsigned_HOST_WIDE_INT) $1.value
> + $$.value = ((unsigned HOST_WIDEST_INT) $1.value
> / $3.value); }
> | exp '%' exp
> { if ($3.value == 0)
> @@ -300,7 +267,7 @@ exp : exp '*' exp
> if ($$.signedp)
> $$.value = $1.value % $3.value;
> else
> - $$.value = ((unsigned_HOST_WIDE_INT) $1.value
> + $$.value = ((unsigned HOST_WIDEST_INT) $1.value
> % $3.value); }
> | exp '+' exp
> { $$.value = $1.value + $3.value;
> @@ -337,28 +304,28 @@ exp : exp '*' exp
> if ($1.signedp & $3.signedp)
> $$.value = $1.value <= $3.value;
> else
> - $$.value = ((unsigned_HOST_WIDE_INT) $1.value
> + $$.value = ((unsigned HOST_WIDEST_INT) $1.value
> <= $3.value); }
> | exp GEQ exp
> { $$.signedp = SIGNED;
> if ($1.signedp & $3.signedp)
> $$.value = $1.value >= $3.value;
> else
> - $$.value = ((unsigned_HOST_WIDE_INT) $1.value
> + $$.value = ((unsigned HOST_WIDEST_INT) $1.value
> >= $3.value); }
> | exp '<' exp
> { $$.signedp = SIGNED;
> if ($1.signedp & $3.signedp)
> $$.value = $1.value < $3.value;
> else
> - $$.value = ((unsigned_HOST_WIDE_INT) $1.value
> + $$.value = ((unsigned HOST_WIDEST_INT) $1.value
> < $3.value); }
> | exp '>' exp
> { $$.signedp = SIGNED;
> if ($1.signedp & $3.signedp)
> $$.value = $1.value > $3.value;
> else
> - $$.value = ((unsigned_HOST_WIDE_INT) $1.value
> + $$.value = ((unsigned HOST_WIDEST_INT) $1.value
> > $3.value); }
> | exp '&' exp
> { $$.value = $1.value & $3.value;
> @@ -441,7 +408,7 @@ parse_number (olen)
> {
> register char *p = lexptr;
> register int c;
> - register unsigned_HOST_WIDE_INT n = 0, nd, max_over_base;
> + register unsigned HOST_WIDEST_INT n = 0, nd, max_over_base;
> register int base = 10;
> register int len = olen;
> register int overflow = 0;
> @@ -459,7 +426,7 @@ parse_number (olen)
> }
> }
>
> - max_over_base = (unsigned_HOST_WIDE_INT) -1 / base;
> + max_over_base = (unsigned HOST_WIDEST_INT) -1 / base;
>
> for (; len > 0; len--) {
> c = *p++;
> @@ -514,7 +481,7 @@ parse_number (olen)
> pedwarn ("integer constant out of range");
>
> /* If too big to be signed, consider it unsigned. */
> - if (((HOST_WIDE_INT) n & yylval.integer.signedp) < 0)
> + if (((HOST_WIDEST_INT) n & yylval.integer.signedp) < 0)
> {
> if (base == 10)
> warning ("integer constant is so large that it is unsigned");
> @@ -555,7 +522,7 @@ yylex ()
> register unsigned char *tokstart;
> register struct token *toktab;
> int wide_flag;
> - HOST_WIDE_INT mask;
> + HOST_WIDEST_INT mask;
>
> retry:
>
> @@ -622,7 +589,7 @@ yylex ()
> handles multicharacter constants and wide characters.
> It is mostly copied from c-lex.c. */
> {
> - register HOST_WIDE_INT result = 0;
> + register HOST_WIDEST_INT result = 0;
> register int num_chars = 0;
> int chars_seen = 0;
> unsigned width = MAX_CHAR_TYPE_SIZE;
> @@ -737,12 +704,12 @@ yylex ()
> sizeof ("__CHAR_UNSIGNED__") - 1, -1)
> || ((result >> (num_bits - 1)) & 1) == 0)
> yylval.integer.value
> - = result & (~ (unsigned_HOST_WIDE_INT) 0
> - >> (HOST_BITS_PER_WIDE_INT - num_bits));
> + = result & (~ (unsigned HOST_WIDEST_INT) 0
> + >> (HOST_BITS_PER_WIDEST_INT - num_bits));
> else
> yylval.integer.value
> - = result | ~(~ (unsigned_HOST_WIDE_INT) 0
> - >> (HOST_BITS_PER_WIDE_INT - num_bits));
> + = result | ~(~ (unsigned HOST_WIDEST_INT) 0
> + >> (HOST_BITS_PER_WIDEST_INT - num_bits));
> }
> else
> {
> @@ -868,10 +835,10 @@ yylex ()
> If \ is followed by 000, we return 0 and leave the string pointer
> after the zeros. A value of 0 does not mean end of string. */
>
> -HOST_WIDE_INT
> +HOST_WIDEST_INT
> parse_escape (string_ptr, result_mask)
> char **string_ptr;
> - HOST_WIDE_INT result_mask;
> + HOST_WIDEST_INT result_mask;
> {
> register int c = *(*string_ptr)++;
> switch (c)
> @@ -910,7 +877,7 @@ parse_escape (string_ptr, result_mask)
> case '6':
> case '7':
> {
> - register HOST_WIDE_INT i = c - '0';
> + register HOST_WIDEST_INT i = c - '0';
> register int count = 0;
> while (++count < 3)
> {
> @@ -932,7 +899,7 @@ parse_escape (string_ptr, result_mask)
> }
> case 'x':
> {
> - register unsigned_HOST_WIDE_INT i = 0, overflow = 0;
> + register unsigned HOST_WIDEST_INT i = 0, overflow = 0;
> register int digits_found = 0, digit;
> for (;;)
> {
> @@ -973,31 +940,31 @@ integer_overflow ()
> pedwarn ("integer overflow in preprocessor expression");
> }
>
> -static HOST_WIDE_INT
> +static HOST_WIDEST_INT
> left_shift (a, b)
> struct constant *a;
> - unsigned_HOST_WIDE_INT b;
> + unsigned HOST_WIDEST_INT b;
> {
> /* It's unclear from the C standard whether shifts can overflow.
> The following code ignores overflow; perhaps a C standard
> interpretation ruling is needed. */
> - if (b >= HOST_BITS_PER_WIDE_INT)
> + if (b >= HOST_BITS_PER_WIDEST_INT)
> return 0;
> else
> - return (unsigned_HOST_WIDE_INT) a->value << b;
> + return (unsigned HOST_WIDEST_INT) a->value << b;
> }
>
> -static HOST_WIDE_INT
> +static HOST_WIDEST_INT
> right_shift (a, b)
> struct constant *a;
> - unsigned_HOST_WIDE_INT b;
> + unsigned HOST_WIDEST_INT b;
> {
> - if (b >= HOST_BITS_PER_WIDE_INT)
> - return a->signedp ? a->value >> (HOST_BITS_PER_WIDE_INT - 1) : 0;
> + if (b >= HOST_BITS_PER_WIDEST_INT)
> + return a->signedp ? a->value >> (HOST_BITS_PER_WIDEST_INT - 1) : 0;
> else if (a->signedp)
> return a->value >> b;
> else
> - return (unsigned_HOST_WIDE_INT) a->value >> b;
> + return (unsigned HOST_WIDEST_INT) a->value >> b;
> }
>
> /* This page contains the entry point to this file. */
> @@ -1010,7 +977,7 @@ right_shift (a, b)
> We do not support C comments. They should be removed before
> this function is called. */
>
> -HOST_WIDE_INT
> +HOST_WIDEST_INT
> parse_c_expression (string, warn_undefined)
> char *string;
> int warn_undefined;
> @@ -1064,10 +1031,11 @@ extern int yydebug;
>
> int pedantic;
> int traditional;
> +int c89;
>
> int main PROTO((int, char **));
> static void initialize_random_junk PROTO((void));
> -static void print_unsigned_host_wide_int PROTO((unsigned_HOST_WIDE_INT));
> +static void print_unsigned_host_widest_int PROTO((unsigned HOST_WIDEST_INT));
>
> /* Main program for testing purposes. */
> int
> @@ -1077,12 +1045,13 @@ main (argc, argv)
> {
> int n, c;
> char buf[1024];
> - unsigned_HOST_WIDE_INT u;
> + unsigned HOST_WIDEST_INT u;
>
> pedantic = 1 < argc;
> traditional = 2 < argc;
> + c89 = 3 < argc;
> #if YYDEBUG
> - yydebug = 3 < argc;
> + yydebug = 4 < argc;
> #endif
> initialize_random_junk ();
>
> @@ -1095,7 +1064,7 @@ main (argc, argv)
> break;
> parse_c_expression (buf, 1);
> printf ("parser returned ");
> - u = (unsigned_HOST_WIDE_INT) expression_value;
> + u = (unsigned HOST_WIDEST_INT) expression_value;
> if (expression_value < 0 && expression_signedp) {
> u = -u;
> printf ("-");
> @@ -1103,7 +1072,7 @@ main (argc, argv)
> if (u == 0)
> printf ("0");
> else
> - print_unsigned_host_wide_int (u);
> + print_unsigned_host_widest_int (u);
> if (! expression_signedp)
> printf("u");
> printf ("\n");
> @@ -1113,11 +1082,11 @@ main (argc, argv)
> }
>
> static void
> -print_unsigned_host_wide_int (u)
> - unsigned_HOST_WIDE_INT u;
> +print_unsigned_host_widest_int (u)
> + unsigned HOST_WIDEST_INT u;
> {
> if (u) {
> - print_unsigned_host_wide_int (u / 10);
> + print_unsigned_host_widest_int (u / 10);
> putchar ('0' + (int) (u % 10));
> }
> }
> diff -rup orig/egcs-CVS19990212/gcc/system.h egcs-CVS19990212/gcc/system.h
> --- orig/egcs-CVS19990212/gcc/system.h Fri Feb 12 16:28:45 1999
> +++ egcs-CVS19990212/gcc/system.h Sat Feb 13 09:21:52 1999
> @@ -482,15 +482,4 @@ extern void abort ();
> /* Get libiberty declarations. */
> #include "libiberty.h"
>
> -#if defined (ANSI_PROTOTYPES)
> -# define PRINTF_PROTO(ARGS, m, n) PVPROTO (ARGS) ATTRIBUTE_PRINTF(m, n)
> -#else
> -# define PRINTF_PROTO(ARGS, m, n) () ATTRIBUTE_PRINTF(m, n)
> -#endif
> -#define PRINTF_PROTO_1(ARGS) PRINTF_PROTO(ARGS, 1, 2)
> -#define PRINTF_PROTO_2(ARGS) PRINTF_PROTO(ARGS, 2, 3)
> -#define PRINTF_PROTO_3(ARGS) PRINTF_PROTO(ARGS, 3, 4)
> -#define PRINTF_PROTO_4(ARGS) PRINTF_PROTO(ARGS, 4, 5)
> -
> -
> #endif /* __GCC_SYSTEM_H__ */