cpp issues

Kaveh R. Ghazi ghazi@caip.rutgers.edu
Sat Feb 13 07:46:00 GMT 1999


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


More information about the Gcc-patches mailing list