This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: cpp issues


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__ */





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]