xref: /dragonfly/contrib/gcc-4.7/libcpp/expr.c (revision d4ef6694)
1 /* Parse C expressions for cpplib.
2    Copyright (C) 1987, 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2001,
3    2002, 2004, 2008, 2009, 2010, 2011 Free Software Foundation.
4    Contributed by Per Bothner, 1994.
5 
6 This program is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by the
8 Free Software Foundation; either version 3, or (at your option) any
9 later version.
10 
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with this program; see the file COPYING3.  If not see
18 <http://www.gnu.org/licenses/>.  */
19 
20 #include "config.h"
21 #include "system.h"
22 #include "cpplib.h"
23 #include "internal.h"
24 
25 #define PART_PRECISION (sizeof (cpp_num_part) * CHAR_BIT)
26 #define HALF_MASK (~(cpp_num_part) 0 >> (PART_PRECISION / 2))
27 #define LOW_PART(num_part) (num_part & HALF_MASK)
28 #define HIGH_PART(num_part) (num_part >> (PART_PRECISION / 2))
29 
30 struct op
31 {
32   const cpp_token *token;	/* The token forming op (for diagnostics).  */
33   cpp_num value;		/* The value logically "right" of op.  */
34   source_location loc;          /* The location of this value.         */
35   enum cpp_ttype op;
36 };
37 
38 /* Some simple utility routines on double integers.  */
39 #define num_zerop(num) ((num.low | num.high) == 0)
40 #define num_eq(num1, num2) (num1.low == num2.low && num1.high == num2.high)
41 static bool num_positive (cpp_num, size_t);
42 static bool num_greater_eq (cpp_num, cpp_num, size_t);
43 static cpp_num num_trim (cpp_num, size_t);
44 static cpp_num num_part_mul (cpp_num_part, cpp_num_part);
45 
46 static cpp_num num_unary_op (cpp_reader *, cpp_num, enum cpp_ttype);
47 static cpp_num num_binary_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype);
48 static cpp_num num_negate (cpp_num, size_t);
49 static cpp_num num_bitwise_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype);
50 static cpp_num num_inequality_op (cpp_reader *, cpp_num, cpp_num,
51 				  enum cpp_ttype);
52 static cpp_num num_equality_op (cpp_reader *, cpp_num, cpp_num,
53 				enum cpp_ttype);
54 static cpp_num num_mul (cpp_reader *, cpp_num, cpp_num);
55 static cpp_num num_div_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype,
56 			   source_location);
57 static cpp_num num_lshift (cpp_num, size_t, size_t);
58 static cpp_num num_rshift (cpp_num, size_t, size_t);
59 
60 static cpp_num append_digit (cpp_num, int, int, size_t);
61 static cpp_num parse_defined (cpp_reader *);
62 static cpp_num eval_token (cpp_reader *, const cpp_token *);
63 static struct op *reduce (cpp_reader *, struct op *, enum cpp_ttype);
64 static unsigned int interpret_float_suffix (const uchar *, size_t);
65 static unsigned int interpret_int_suffix (const uchar *, size_t);
66 static void check_promotion (cpp_reader *, const struct op *);
67 
68 /* Token type abuse to create unary plus and minus operators.  */
69 #define CPP_UPLUS ((enum cpp_ttype) (CPP_LAST_CPP_OP + 1))
70 #define CPP_UMINUS ((enum cpp_ttype) (CPP_LAST_CPP_OP + 2))
71 
72 /* With -O2, gcc appears to produce nice code, moving the error
73    message load and subsequent jump completely out of the main path.  */
74 #define SYNTAX_ERROR(msgid) \
75   do { cpp_error (pfile, CPP_DL_ERROR, msgid); goto syntax_error; } while(0)
76 #define SYNTAX_ERROR2(msgid, arg) \
77   do { cpp_error (pfile, CPP_DL_ERROR, msgid, arg); goto syntax_error; } \
78   while(0)
79 
80 /* Subroutine of cpp_classify_number.  S points to a float suffix of
81    length LEN, possibly zero.  Returns 0 for an invalid suffix, or a
82    flag vector describing the suffix.  */
83 static unsigned int
84 interpret_float_suffix (const uchar *s, size_t len)
85 {
86   size_t flags;
87   size_t f, d, l, w, q, i;
88 
89   flags = 0;
90   f = d = l = w = q = i = 0;
91 
92   /* Process decimal float suffixes, which are two letters starting
93      with d or D.  Order and case are significant.  */
94   if (len == 2 && (*s == 'd' || *s == 'D'))
95     {
96       bool uppercase = (*s == 'D');
97       switch (s[1])
98       {
99       case 'f': return (!uppercase ? (CPP_N_DFLOAT | CPP_N_SMALL): 0); break;
100       case 'F': return (uppercase ? (CPP_N_DFLOAT | CPP_N_SMALL) : 0); break;
101       case 'd': return (!uppercase ? (CPP_N_DFLOAT | CPP_N_MEDIUM): 0); break;
102       case 'D': return (uppercase ? (CPP_N_DFLOAT | CPP_N_MEDIUM) : 0); break;
103       case 'l': return (!uppercase ? (CPP_N_DFLOAT | CPP_N_LARGE) : 0); break;
104       case 'L': return (uppercase ? (CPP_N_DFLOAT | CPP_N_LARGE) : 0); break;
105       default:
106 	/* Additional two-character suffixes beginning with D are not
107 	   for decimal float constants.  */
108 	break;
109       }
110     }
111 
112   /* Recognize a fixed-point suffix.  */
113   switch (s[len-1])
114     {
115     case 'k': case 'K': flags = CPP_N_ACCUM; break;
116     case 'r': case 'R': flags = CPP_N_FRACT; break;
117     default: break;
118     }
119 
120   /* Continue processing a fixed-point suffix.  The suffix is case
121      insensitive except for ll or LL.  Order is significant.  */
122   if (flags)
123     {
124       if (len == 1)
125 	return flags;
126       len--;
127 
128       if (*s == 'u' || *s == 'U')
129 	{
130 	  flags |= CPP_N_UNSIGNED;
131 	  if (len == 1)
132 	    return flags;
133 	  len--;
134 	  s++;
135         }
136 
137       switch (*s)
138       {
139       case 'h': case 'H':
140 	if (len == 1)
141 	  return flags |= CPP_N_SMALL;
142 	break;
143       case 'l':
144 	if (len == 1)
145 	  return flags |= CPP_N_MEDIUM;
146 	if (len == 2 && s[1] == 'l')
147 	  return flags |= CPP_N_LARGE;
148 	break;
149       case 'L':
150 	if (len == 1)
151 	  return flags |= CPP_N_MEDIUM;
152 	if (len == 2 && s[1] == 'L')
153 	  return flags |= CPP_N_LARGE;
154 	break;
155       default:
156 	break;
157       }
158       /* Anything left at this point is invalid.  */
159       return 0;
160     }
161 
162   /* In any remaining valid suffix, the case and order don't matter.  */
163   while (len--)
164     switch (s[len])
165       {
166       case 'f': case 'F': f++; break;
167       case 'd': case 'D': d++; break;
168       case 'l': case 'L': l++; break;
169       case 'w': case 'W': w++; break;
170       case 'q': case 'Q': q++; break;
171       case 'i': case 'I':
172       case 'j': case 'J': i++; break;
173       default:
174 	return 0;
175       }
176 
177   if (f + d + l + w + q > 1 || i > 1)
178     return 0;
179 
180   return ((i ? CPP_N_IMAGINARY : 0)
181 	  | (f ? CPP_N_SMALL :
182 	     d ? CPP_N_MEDIUM :
183 	     l ? CPP_N_LARGE :
184 	     w ? CPP_N_MD_W :
185 	     q ? CPP_N_MD_Q : CPP_N_DEFAULT));
186 }
187 
188 /* Return the classification flags for a float suffix.  */
189 unsigned int
190 cpp_interpret_float_suffix (const char *s, size_t len)
191 {
192   return interpret_float_suffix ((const unsigned char *)s, len);
193 }
194 
195 /* Subroutine of cpp_classify_number.  S points to an integer suffix
196    of length LEN, possibly zero. Returns 0 for an invalid suffix, or a
197    flag vector describing the suffix.  */
198 static unsigned int
199 interpret_int_suffix (const uchar *s, size_t len)
200 {
201   size_t u, l, i;
202 
203   u = l = i = 0;
204 
205   while (len--)
206     switch (s[len])
207       {
208       case 'u': case 'U':	u++; break;
209       case 'i': case 'I':
210       case 'j': case 'J':	i++; break;
211       case 'l': case 'L':	l++;
212 	/* If there are two Ls, they must be adjacent and the same case.  */
213 	if (l == 2 && s[len] != s[len + 1])
214 	  return 0;
215 	break;
216       default:
217 	return 0;
218       }
219 
220   if (l > 2 || u > 1 || i > 1)
221     return 0;
222 
223   return ((i ? CPP_N_IMAGINARY : 0)
224 	  | (u ? CPP_N_UNSIGNED : 0)
225 	  | ((l == 0) ? CPP_N_SMALL
226 	     : (l == 1) ? CPP_N_MEDIUM : CPP_N_LARGE));
227 }
228 
229 /* Return the classification flags for an int suffix.  */
230 unsigned int
231 cpp_interpret_int_suffix (const char *s, size_t len)
232 {
233   return interpret_int_suffix ((const unsigned char *)s, len);
234 }
235 
236 /* Return the string type corresponding to the the input user-defined string
237    literal type.  If the input type is not a user-defined string literal
238    type return the input type.  */
239 enum cpp_ttype
240 cpp_userdef_string_remove_type (enum cpp_ttype type)
241 {
242   if (type == CPP_STRING_USERDEF)
243     return CPP_STRING;
244   else if (type == CPP_WSTRING_USERDEF)
245     return CPP_WSTRING;
246   else if (type == CPP_STRING16_USERDEF)
247     return CPP_STRING16;
248   else if (type == CPP_STRING32_USERDEF)
249     return CPP_STRING32;
250   else if (type == CPP_UTF8STRING_USERDEF)
251     return CPP_UTF8STRING;
252   else
253     return type;
254 }
255 
256 /* Return the user-defined string literal type corresponding to the input
257    string type.  If the input type is not a string type return the input
258    type.  */
259 enum cpp_ttype
260 cpp_userdef_string_add_type (enum cpp_ttype type)
261 {
262   if (type == CPP_STRING)
263     return CPP_STRING_USERDEF;
264   else if (type == CPP_WSTRING)
265     return CPP_WSTRING_USERDEF;
266   else if (type == CPP_STRING16)
267     return CPP_STRING16_USERDEF;
268   else if (type == CPP_STRING32)
269     return CPP_STRING32_USERDEF;
270   else if (type == CPP_UTF8STRING)
271     return CPP_UTF8STRING_USERDEF;
272   else
273     return type;
274 }
275 
276 /* Return the char type corresponding to the the input user-defined char
277    literal type.  If the input type is not a user-defined char literal
278    type return the input type.  */
279 enum cpp_ttype
280 cpp_userdef_char_remove_type (enum cpp_ttype type)
281 {
282   if (type == CPP_CHAR_USERDEF)
283     return CPP_CHAR;
284   else if (type == CPP_WCHAR_USERDEF)
285     return CPP_WCHAR;
286   else if (type == CPP_CHAR16_USERDEF)
287     return CPP_CHAR16;
288   else if (type == CPP_CHAR32_USERDEF)
289     return CPP_CHAR32;
290   else
291     return type;
292 }
293 
294 /* Return the user-defined char literal type corresponding to the input
295    char type.  If the input type is not a char type return the input
296    type.  */
297 enum cpp_ttype
298 cpp_userdef_char_add_type (enum cpp_ttype type)
299 {
300   if (type == CPP_CHAR)
301     return CPP_CHAR_USERDEF;
302   else if (type == CPP_WCHAR)
303     return CPP_WCHAR_USERDEF;
304   else if (type == CPP_CHAR16)
305     return CPP_CHAR16_USERDEF;
306   else if (type == CPP_CHAR32)
307     return CPP_CHAR32_USERDEF;
308   else
309     return type;
310 }
311 
312 /* Return true if the token type is a user-defined string literal.  */
313 bool
314 cpp_userdef_string_p (enum cpp_ttype type)
315 {
316   if (type == CPP_STRING_USERDEF
317    || type == CPP_WSTRING_USERDEF
318    || type == CPP_STRING16_USERDEF
319    || type == CPP_STRING32_USERDEF
320    || type == CPP_UTF8STRING_USERDEF)
321     return true;
322   else
323     return false;
324 }
325 
326 /* Return true if the token type is a user-defined char literal.  */
327 bool
328 cpp_userdef_char_p (enum cpp_ttype type)
329 {
330   if (type == CPP_CHAR_USERDEF
331    || type == CPP_WCHAR_USERDEF
332    || type == CPP_CHAR16_USERDEF
333    || type == CPP_CHAR32_USERDEF)
334     return true;
335   else
336     return false;
337 }
338 
339 /* Extract the suffix from a user-defined literal string or char.  */
340 const char *
341 cpp_get_userdef_suffix (const cpp_token *tok)
342 {
343   unsigned int len = tok->val.str.len;
344   const char *text = (const char *)tok->val.str.text;
345   char delim;
346   unsigned int i;
347   for (i = 0; i < len; ++i)
348     if (text[i] == '\'' || text[i] == '"')
349       break;
350   if (i == len)
351     return text + len;
352   delim = text[i];
353   for (i = len; i > 0; --i)
354     if (text[i - 1] == delim)
355       break;
356   return text + i;
357 }
358 
359 /* Categorize numeric constants according to their field (integer,
360    floating point, or invalid), radix (decimal, octal, hexadecimal),
361    and type suffixes.  In C++0X if UD_SUFFIX is non null it will be
362    assigned any unrecognized suffix for a user-defined literal.  */
363 unsigned int
364 cpp_classify_number (cpp_reader *pfile, const cpp_token *token,
365 		     const char **ud_suffix)
366 {
367   const uchar *str = token->val.str.text;
368   const uchar *limit;
369   unsigned int max_digit, result, radix;
370   enum {NOT_FLOAT = 0, AFTER_POINT, AFTER_EXPON} float_flag;
371   bool seen_digit;
372 
373   if (ud_suffix)
374     *ud_suffix = NULL;
375 
376   /* If the lexer has done its job, length one can only be a single
377      digit.  Fast-path this very common case.  */
378   if (token->val.str.len == 1)
379     return CPP_N_INTEGER | CPP_N_SMALL | CPP_N_DECIMAL;
380 
381   limit = str + token->val.str.len;
382   float_flag = NOT_FLOAT;
383   max_digit = 0;
384   radix = 10;
385   seen_digit = false;
386 
387   /* First, interpret the radix.  */
388   if (*str == '0')
389     {
390       radix = 8;
391       str++;
392 
393       /* Require at least one hex digit to classify it as hex.  */
394       if ((*str == 'x' || *str == 'X')
395 	  && (str[1] == '.' || ISXDIGIT (str[1])))
396 	{
397 	  radix = 16;
398 	  str++;
399 	}
400       else if ((*str == 'b' || *str == 'B') && (str[1] == '0' || str[1] == '1'))
401 	{
402 	  radix = 2;
403 	  str++;
404 	}
405     }
406 
407   /* Now scan for a well-formed integer or float.  */
408   for (;;)
409     {
410       unsigned int c = *str++;
411 
412       if (ISDIGIT (c) || (ISXDIGIT (c) && radix == 16))
413 	{
414 	  seen_digit = true;
415 	  c = hex_value (c);
416 	  if (c > max_digit)
417 	    max_digit = c;
418 	}
419       else if (c == '.')
420 	{
421 	  if (float_flag == NOT_FLOAT)
422 	    float_flag = AFTER_POINT;
423 	  else
424 	    SYNTAX_ERROR ("too many decimal points in number");
425 	}
426       else if ((radix <= 10 && (c == 'e' || c == 'E'))
427 	       || (radix == 16 && (c == 'p' || c == 'P')))
428 	{
429 	  float_flag = AFTER_EXPON;
430 	  break;
431 	}
432       else
433 	{
434 	  /* Start of suffix.  */
435 	  str--;
436 	  break;
437 	}
438     }
439 
440   /* The suffix may be for decimal fixed-point constants without exponent.  */
441   if (radix != 16 && float_flag == NOT_FLOAT)
442     {
443       result = interpret_float_suffix (str, limit - str);
444       if ((result & CPP_N_FRACT) || (result & CPP_N_ACCUM))
445 	{
446 	  result |= CPP_N_FLOATING;
447 	  /* We need to restore the radix to 10, if the radix is 8.  */
448 	  if (radix == 8)
449 	    radix = 10;
450 
451 	  if (CPP_PEDANTIC (pfile))
452 	    cpp_error (pfile, CPP_DL_PEDWARN,
453 		       "fixed-point constants are a GCC extension");
454 	  goto syntax_ok;
455 	}
456       else
457 	result = 0;
458     }
459 
460   if (float_flag != NOT_FLOAT && radix == 8)
461     radix = 10;
462 
463   if (max_digit >= radix)
464     {
465       if (radix == 2)
466 	SYNTAX_ERROR2 ("invalid digit \"%c\" in binary constant", '0' + max_digit);
467       else
468 	SYNTAX_ERROR2 ("invalid digit \"%c\" in octal constant", '0' + max_digit);
469     }
470 
471   if (float_flag != NOT_FLOAT)
472     {
473       if (radix == 2)
474 	{
475 	  cpp_error (pfile, CPP_DL_ERROR,
476 		     "invalid prefix \"0b\" for floating constant");
477 	  return CPP_N_INVALID;
478 	}
479 
480       if (radix == 16 && !seen_digit)
481 	SYNTAX_ERROR ("no digits in hexadecimal floating constant");
482 
483       if (radix == 16 && CPP_PEDANTIC (pfile) && !CPP_OPTION (pfile, c99))
484 	cpp_error (pfile, CPP_DL_PEDWARN,
485 		   "use of C99 hexadecimal floating constant");
486 
487       if (float_flag == AFTER_EXPON)
488 	{
489 	  if (*str == '+' || *str == '-')
490 	    str++;
491 
492 	  /* Exponent is decimal, even if string is a hex float.  */
493 	  if (!ISDIGIT (*str))
494 	    SYNTAX_ERROR ("exponent has no digits");
495 
496 	  do
497 	    str++;
498 	  while (ISDIGIT (*str));
499 	}
500       else if (radix == 16)
501 	SYNTAX_ERROR ("hexadecimal floating constants require an exponent");
502 
503       result = interpret_float_suffix (str, limit - str);
504       if (result == 0)
505 	{
506 	  if (CPP_OPTION (pfile, user_literals))
507 	    {
508 	      if (ud_suffix)
509 		*ud_suffix = (const char *) str;
510 	      result = CPP_N_LARGE | CPP_N_USERDEF;
511 	    }
512 	  else
513 	    {
514 	      cpp_error (pfile, CPP_DL_ERROR,
515 			 "invalid suffix \"%.*s\" on floating constant",
516 			 (int) (limit - str), str);
517 	      return CPP_N_INVALID;
518 	    }
519 	}
520 
521       /* Traditional C didn't accept any floating suffixes.  */
522       if (limit != str
523 	  && CPP_WTRADITIONAL (pfile)
524 	  && ! cpp_sys_macro_p (pfile))
525 	cpp_warning (pfile, CPP_W_TRADITIONAL,
526 		     "traditional C rejects the \"%.*s\" suffix",
527 		     (int) (limit - str), str);
528 
529       /* A suffix for double is a GCC extension via decimal float support.
530 	 If the suffix also specifies an imaginary value we'll catch that
531 	 later.  */
532       if ((result == CPP_N_MEDIUM) && CPP_PEDANTIC (pfile))
533 	cpp_error (pfile, CPP_DL_PEDWARN,
534 		   "suffix for double constant is a GCC extension");
535 
536       /* Radix must be 10 for decimal floats.  */
537       if ((result & CPP_N_DFLOAT) && radix != 10)
538         {
539           cpp_error (pfile, CPP_DL_ERROR,
540                      "invalid suffix \"%.*s\" with hexadecimal floating constant",
541                      (int) (limit - str), str);
542           return CPP_N_INVALID;
543         }
544 
545       if ((result & (CPP_N_FRACT | CPP_N_ACCUM)) && CPP_PEDANTIC (pfile))
546 	cpp_error (pfile, CPP_DL_PEDWARN,
547 		   "fixed-point constants are a GCC extension");
548 
549       if ((result & CPP_N_DFLOAT) && CPP_PEDANTIC (pfile))
550 	cpp_error (pfile, CPP_DL_PEDWARN,
551 		   "decimal float constants are a GCC extension");
552 
553       result |= CPP_N_FLOATING;
554     }
555   else
556     {
557       result = interpret_int_suffix (str, limit - str);
558       if (result == 0)
559 	{
560 	  if (CPP_OPTION (pfile, user_literals))
561 	    {
562 	      if (ud_suffix)
563 		*ud_suffix = (const char *) str;
564 	      result = CPP_N_UNSIGNED | CPP_N_LARGE | CPP_N_USERDEF;
565 	    }
566 	  else
567 	    {
568 	      cpp_error (pfile, CPP_DL_ERROR,
569 			 "invalid suffix \"%.*s\" on integer constant",
570 			 (int) (limit - str), str);
571 	      return CPP_N_INVALID;
572 	    }
573 	}
574 
575       /* Traditional C only accepted the 'L' suffix.
576          Suppress warning about 'LL' with -Wno-long-long.  */
577       if (CPP_WTRADITIONAL (pfile) && ! cpp_sys_macro_p (pfile))
578 	{
579 	  int u_or_i = (result & (CPP_N_UNSIGNED|CPP_N_IMAGINARY));
580 	  int large = (result & CPP_N_WIDTH) == CPP_N_LARGE
581 		       && CPP_OPTION (pfile, cpp_warn_long_long);
582 
583 	  if (u_or_i || large)
584 	    cpp_warning (pfile, large ? CPP_W_LONG_LONG : CPP_W_TRADITIONAL,
585 		         "traditional C rejects the \"%.*s\" suffix",
586 		         (int) (limit - str), str);
587 	}
588 
589       if ((result & CPP_N_WIDTH) == CPP_N_LARGE
590 	  && CPP_OPTION (pfile, cpp_warn_long_long))
591         {
592           const char *message = CPP_OPTION (pfile, cplusplus)
593 		                ? N_("use of C++0x long long integer constant")
594 		                : N_("use of C99 long long integer constant");
595 
596 	  if (CPP_OPTION (pfile, c99))
597             cpp_warning (pfile, CPP_W_LONG_LONG, message);
598           else
599             cpp_pedwarning (pfile, CPP_W_LONG_LONG, message);
600         }
601 
602       result |= CPP_N_INTEGER;
603     }
604 
605  syntax_ok:
606   if ((result & CPP_N_IMAGINARY) && CPP_PEDANTIC (pfile))
607     cpp_error (pfile, CPP_DL_PEDWARN,
608 	       "imaginary constants are a GCC extension");
609   if (radix == 2 && CPP_PEDANTIC (pfile))
610     cpp_error (pfile, CPP_DL_PEDWARN,
611 	       "binary constants are a GCC extension");
612 
613   if (radix == 10)
614     result |= CPP_N_DECIMAL;
615   else if (radix == 16)
616     result |= CPP_N_HEX;
617   else if (radix == 2)
618     result |= CPP_N_BINARY;
619   else
620     result |= CPP_N_OCTAL;
621 
622   return result;
623 
624  syntax_error:
625   return CPP_N_INVALID;
626 }
627 
628 /* cpp_interpret_integer converts an integer constant into a cpp_num,
629    of precision options->precision.
630 
631    We do not provide any interface for decimal->float conversion,
632    because the preprocessor doesn't need it and we don't want to
633    drag in GCC's floating point emulator.  */
634 cpp_num
635 cpp_interpret_integer (cpp_reader *pfile, const cpp_token *token,
636 		       unsigned int type)
637 {
638   const uchar *p, *end;
639   cpp_num result;
640 
641   result.low = 0;
642   result.high = 0;
643   result.unsignedp = !!(type & CPP_N_UNSIGNED);
644   result.overflow = false;
645 
646   p = token->val.str.text;
647   end = p + token->val.str.len;
648 
649   /* Common case of a single digit.  */
650   if (token->val.str.len == 1)
651     result.low = p[0] - '0';
652   else
653     {
654       cpp_num_part max;
655       size_t precision = CPP_OPTION (pfile, precision);
656       unsigned int base = 10, c = 0;
657       bool overflow = false;
658 
659       if ((type & CPP_N_RADIX) == CPP_N_OCTAL)
660 	{
661 	  base = 8;
662 	  p++;
663 	}
664       else if ((type & CPP_N_RADIX) == CPP_N_HEX)
665 	{
666 	  base = 16;
667 	  p += 2;
668 	}
669       else if ((type & CPP_N_RADIX) == CPP_N_BINARY)
670 	{
671 	  base = 2;
672 	  p += 2;
673 	}
674 
675       /* We can add a digit to numbers strictly less than this without
676 	 needing the precision and slowness of double integers.  */
677       max = ~(cpp_num_part) 0;
678       if (precision < PART_PRECISION)
679 	max >>= PART_PRECISION - precision;
680       max = (max - base + 1) / base + 1;
681 
682       for (; p < end; p++)
683 	{
684 	  c = *p;
685 
686 	  if (ISDIGIT (c) || (base == 16 && ISXDIGIT (c)))
687 	    c = hex_value (c);
688 	  else
689 	    break;
690 
691 	  /* Strict inequality for when max is set to zero.  */
692 	  if (result.low < max)
693 	    result.low = result.low * base + c;
694 	  else
695 	    {
696 	      result = append_digit (result, c, base, precision);
697 	      overflow |= result.overflow;
698 	      max = 0;
699 	    }
700 	}
701 
702       if (overflow && !(type & CPP_N_USERDEF))
703 	cpp_error (pfile, CPP_DL_PEDWARN,
704 		   "integer constant is too large for its type");
705       /* If too big to be signed, consider it unsigned.  Only warn for
706 	 decimal numbers.  Traditional numbers were always signed (but
707 	 we still honor an explicit U suffix); but we only have
708 	 traditional semantics in directives.  */
709       else if (!result.unsignedp
710 	       && !(CPP_OPTION (pfile, traditional)
711 		    && pfile->state.in_directive)
712 	       && !num_positive (result, precision))
713 	{
714 	  /* This is for constants within the range of uintmax_t but
715 	     not that of intmax_t.  For such decimal constants, a
716 	     diagnostic is required for C99 as the selected type must
717 	     be signed and not having a type is a constraint violation
718 	     (DR#298, TC3), so this must be a pedwarn.  For C90,
719 	     unsigned long is specified to be used for a constant that
720 	     does not fit in signed long; if uintmax_t has the same
721 	     range as unsigned long this means only a warning is
722 	     appropriate here.  C90 permits the preprocessor to use a
723 	     wider range than unsigned long in the compiler, so if
724 	     uintmax_t is wider than unsigned long no diagnostic is
725 	     required for such constants in preprocessor #if
726 	     expressions and the compiler will pedwarn for such
727 	     constants outside the range of unsigned long that reach
728 	     the compiler so a diagnostic is not required there
729 	     either; thus, pedwarn for C99 but use a plain warning for
730 	     C90.  */
731 	  if (base == 10)
732 	    cpp_error (pfile, (CPP_OPTION (pfile, c99)
733 			       ? CPP_DL_PEDWARN
734 			       : CPP_DL_WARNING),
735 		       "integer constant is so large that it is unsigned");
736 	  result.unsignedp = true;
737 	}
738     }
739 
740   return result;
741 }
742 
743 /* Append DIGIT to NUM, a number of PRECISION bits being read in base BASE.  */
744 static cpp_num
745 append_digit (cpp_num num, int digit, int base, size_t precision)
746 {
747   cpp_num result;
748   unsigned int shift;
749   bool overflow;
750   cpp_num_part add_high, add_low;
751 
752   /* Multiply by 2, 8 or 16.  Catching this overflow here means we don't
753      need to worry about add_high overflowing.  */
754   switch (base)
755     {
756     case 2:
757       shift = 1;
758       break;
759 
760     case 16:
761       shift = 4;
762       break;
763 
764     default:
765       shift = 3;
766     }
767   overflow = !!(num.high >> (PART_PRECISION - shift));
768   result.high = num.high << shift;
769   result.low = num.low << shift;
770   result.high |= num.low >> (PART_PRECISION - shift);
771   result.unsignedp = num.unsignedp;
772 
773   if (base == 10)
774     {
775       add_low = num.low << 1;
776       add_high = (num.high << 1) + (num.low >> (PART_PRECISION - 1));
777     }
778   else
779     add_high = add_low = 0;
780 
781   if (add_low + digit < add_low)
782     add_high++;
783   add_low += digit;
784 
785   if (result.low + add_low < result.low)
786     add_high++;
787   if (result.high + add_high < result.high)
788     overflow = true;
789 
790   result.low += add_low;
791   result.high += add_high;
792   result.overflow = overflow;
793 
794   /* The above code catches overflow of a cpp_num type.  This catches
795      overflow of the (possibly shorter) target precision.  */
796   num.low = result.low;
797   num.high = result.high;
798   result = num_trim (result, precision);
799   if (!num_eq (result, num))
800     result.overflow = true;
801 
802   return result;
803 }
804 
805 /* Handle meeting "defined" in a preprocessor expression.  */
806 static cpp_num
807 parse_defined (cpp_reader *pfile)
808 {
809   cpp_num result;
810   int paren = 0;
811   cpp_hashnode *node = 0;
812   const cpp_token *token;
813   cpp_context *initial_context = pfile->context;
814 
815   /* Don't expand macros.  */
816   pfile->state.prevent_expansion++;
817 
818   token = cpp_get_token (pfile);
819   if (token->type == CPP_OPEN_PAREN)
820     {
821       paren = 1;
822       token = cpp_get_token (pfile);
823     }
824 
825   if (token->type == CPP_NAME)
826     {
827       node = token->val.node.node;
828       if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN)
829 	{
830 	  cpp_error (pfile, CPP_DL_ERROR, "missing ')' after \"defined\"");
831 	  node = 0;
832 	}
833     }
834   else
835     {
836       cpp_error (pfile, CPP_DL_ERROR,
837 		 "operator \"defined\" requires an identifier");
838       if (token->flags & NAMED_OP)
839 	{
840 	  cpp_token op;
841 
842 	  op.flags = 0;
843 	  op.type = token->type;
844 	  cpp_error (pfile, CPP_DL_ERROR,
845 		     "(\"%s\" is an alternative token for \"%s\" in C++)",
846 		     cpp_token_as_text (pfile, token),
847 		     cpp_token_as_text (pfile, &op));
848 	}
849     }
850 
851   if (node)
852     {
853       if (pfile->context != initial_context && CPP_PEDANTIC (pfile))
854 	cpp_error (pfile, CPP_DL_WARNING,
855 		   "this use of \"defined\" may not be portable");
856 
857       _cpp_mark_macro_used (node);
858       if (!(node->flags & NODE_USED))
859 	{
860 	  node->flags |= NODE_USED;
861 	  if (node->type == NT_MACRO)
862 	    {
863 	      if ((node->flags & NODE_BUILTIN)
864 		  && pfile->cb.user_builtin_macro)
865 		pfile->cb.user_builtin_macro (pfile, node);
866 	      if (pfile->cb.used_define)
867 		pfile->cb.used_define (pfile, pfile->directive_line, node);
868 	    }
869 	  else
870 	    {
871 	      if (pfile->cb.used_undef)
872 		pfile->cb.used_undef (pfile, pfile->directive_line, node);
873 	    }
874 	}
875 
876       /* A possible controlling macro of the form #if !defined ().
877 	 _cpp_parse_expr checks there was no other junk on the line.  */
878       pfile->mi_ind_cmacro = node;
879     }
880 
881   pfile->state.prevent_expansion--;
882 
883   /* Do not treat conditional macros as being defined.  This is due to the
884      powerpc and spu ports using conditional macros for 'vector', 'bool', and
885      'pixel' to act as conditional keywords.  This messes up tests like #ifndef
886      bool.  */
887   result.unsignedp = false;
888   result.high = 0;
889   result.overflow = false;
890   result.low = (node && node->type == NT_MACRO
891 		&& (node->flags & NODE_CONDITIONAL) == 0);
892   return result;
893 }
894 
895 /* Convert a token into a CPP_NUMBER (an interpreted preprocessing
896    number or character constant, or the result of the "defined" or "#"
897    operators).  */
898 static cpp_num
899 eval_token (cpp_reader *pfile, const cpp_token *token)
900 {
901   cpp_num result;
902   unsigned int temp;
903   int unsignedp = 0;
904 
905   result.unsignedp = false;
906   result.overflow = false;
907 
908   switch (token->type)
909     {
910     case CPP_NUMBER:
911       temp = cpp_classify_number (pfile, token, NULL);
912       if (temp & CPP_N_USERDEF)
913 	cpp_error (pfile, CPP_DL_ERROR,
914 		   "user-defined literal in preprocessor expression");
915       switch (temp & CPP_N_CATEGORY)
916 	{
917 	case CPP_N_FLOATING:
918 	  cpp_error (pfile, CPP_DL_ERROR,
919 		     "floating constant in preprocessor expression");
920 	  break;
921 	case CPP_N_INTEGER:
922 	  if (!(temp & CPP_N_IMAGINARY))
923 	    return cpp_interpret_integer (pfile, token, temp);
924 	  cpp_error (pfile, CPP_DL_ERROR,
925 		     "imaginary number in preprocessor expression");
926 	  break;
927 
928 	case CPP_N_INVALID:
929 	  /* Error already issued.  */
930 	  break;
931 	}
932       result.high = result.low = 0;
933       break;
934 
935     case CPP_WCHAR:
936     case CPP_CHAR:
937     case CPP_CHAR16:
938     case CPP_CHAR32:
939       {
940 	cppchar_t cc = cpp_interpret_charconst (pfile, token,
941 						&temp, &unsignedp);
942 
943 	result.high = 0;
944 	result.low = cc;
945 	/* Sign-extend the result if necessary.  */
946 	if (!unsignedp && (cppchar_signed_t) cc < 0)
947 	  {
948 	    if (PART_PRECISION > BITS_PER_CPPCHAR_T)
949 	      result.low |= ~(~(cpp_num_part) 0
950 			      >> (PART_PRECISION - BITS_PER_CPPCHAR_T));
951 	    result.high = ~(cpp_num_part) 0;
952 	    result = num_trim (result, CPP_OPTION (pfile, precision));
953 	  }
954       }
955       break;
956 
957     case CPP_NAME:
958       if (token->val.node.node == pfile->spec_nodes.n_defined)
959 	return parse_defined (pfile);
960       else if (CPP_OPTION (pfile, cplusplus)
961 	       && (token->val.node.node == pfile->spec_nodes.n_true
962 		   || token->val.node.node == pfile->spec_nodes.n_false))
963 	{
964 	  result.high = 0;
965 	  result.low = (token->val.node.node == pfile->spec_nodes.n_true);
966 	}
967       else
968 	{
969 	  result.high = 0;
970 	  result.low = 0;
971 	  if (CPP_OPTION (pfile, warn_undef) && !pfile->state.skip_eval)
972 	    cpp_warning (pfile, CPP_W_UNDEF, "\"%s\" is not defined",
973 		         NODE_NAME (token->val.node.node));
974 	}
975       break;
976 
977     case CPP_HASH:
978       if (!pfile->state.skipping)
979 	{
980 	  /* A pedantic warning takes precedence over a deprecated
981 	     warning here.  */
982 	  if (CPP_PEDANTIC (pfile))
983 	    cpp_error (pfile, CPP_DL_PEDWARN,
984 		       "assertions are a GCC extension");
985 	  else if (CPP_OPTION (pfile, cpp_warn_deprecated))
986 	    cpp_warning (pfile, CPP_W_DEPRECATED,
987 		         "assertions are a deprecated extension");
988 	}
989       _cpp_test_assertion (pfile, &temp);
990       result.high = 0;
991       result.low = temp;
992       break;
993 
994     default:
995       abort ();
996     }
997 
998   result.unsignedp = !!unsignedp;
999   return result;
1000 }
1001 
1002 /* Operator precedence and flags table.
1003 
1004 After an operator is returned from the lexer, if it has priority less
1005 than the operator on the top of the stack, we reduce the stack by one
1006 operator and repeat the test.  Since equal priorities do not reduce,
1007 this is naturally right-associative.
1008 
1009 We handle left-associative operators by decrementing the priority of
1010 just-lexed operators by one, but retaining the priority of operators
1011 already on the stack.
1012 
1013 The remaining cases are '(' and ')'.  We handle '(' by skipping the
1014 reduction phase completely.  ')' is given lower priority than
1015 everything else, including '(', effectively forcing a reduction of the
1016 parenthesized expression.  If there is a matching '(', the routine
1017 reduce() exits immediately.  If the normal exit route sees a ')', then
1018 there cannot have been a matching '(' and an error message is output.
1019 
1020 The parser assumes all shifted operators require a left operand unless
1021 the flag NO_L_OPERAND is set.  These semantics are automatic; any
1022 extra semantics need to be handled with operator-specific code.  */
1023 
1024 /* Flags.  If CHECK_PROMOTION, we warn if the effective sign of an
1025    operand changes because of integer promotions.  */
1026 #define NO_L_OPERAND	(1 << 0)
1027 #define LEFT_ASSOC	(1 << 1)
1028 #define CHECK_PROMOTION	(1 << 2)
1029 
1030 /* Operator to priority map.  Must be in the same order as the first
1031    N entries of enum cpp_ttype.  */
1032 static const struct cpp_operator
1033 {
1034   uchar prio;
1035   uchar flags;
1036 } optab[] =
1037 {
1038   /* EQ */		{0, 0},	/* Shouldn't happen.  */
1039   /* NOT */		{16, NO_L_OPERAND},
1040   /* GREATER */		{12, LEFT_ASSOC | CHECK_PROMOTION},
1041   /* LESS */		{12, LEFT_ASSOC | CHECK_PROMOTION},
1042   /* PLUS */		{14, LEFT_ASSOC | CHECK_PROMOTION},
1043   /* MINUS */		{14, LEFT_ASSOC | CHECK_PROMOTION},
1044   /* MULT */		{15, LEFT_ASSOC | CHECK_PROMOTION},
1045   /* DIV */		{15, LEFT_ASSOC | CHECK_PROMOTION},
1046   /* MOD */		{15, LEFT_ASSOC | CHECK_PROMOTION},
1047   /* AND */		{9, LEFT_ASSOC | CHECK_PROMOTION},
1048   /* OR */		{7, LEFT_ASSOC | CHECK_PROMOTION},
1049   /* XOR */		{8, LEFT_ASSOC | CHECK_PROMOTION},
1050   /* RSHIFT */		{13, LEFT_ASSOC},
1051   /* LSHIFT */		{13, LEFT_ASSOC},
1052 
1053   /* COMPL */		{16, NO_L_OPERAND},
1054   /* AND_AND */		{6, LEFT_ASSOC},
1055   /* OR_OR */		{5, LEFT_ASSOC},
1056   /* Note that QUERY, COLON, and COMMA must have the same precedence.
1057      However, there are some special cases for these in reduce().  */
1058   /* QUERY */		{4, 0},
1059   /* COLON */		{4, LEFT_ASSOC | CHECK_PROMOTION},
1060   /* COMMA */		{4, LEFT_ASSOC},
1061   /* OPEN_PAREN */	{1, NO_L_OPERAND},
1062   /* CLOSE_PAREN */	{0, 0},
1063   /* EOF */		{0, 0},
1064   /* EQ_EQ */		{11, LEFT_ASSOC},
1065   /* NOT_EQ */		{11, LEFT_ASSOC},
1066   /* GREATER_EQ */	{12, LEFT_ASSOC | CHECK_PROMOTION},
1067   /* LESS_EQ */		{12, LEFT_ASSOC | CHECK_PROMOTION},
1068   /* UPLUS */		{16, NO_L_OPERAND},
1069   /* UMINUS */		{16, NO_L_OPERAND}
1070 };
1071 
1072 /* Parse and evaluate a C expression, reading from PFILE.
1073    Returns the truth value of the expression.
1074 
1075    The implementation is an operator precedence parser, i.e. a
1076    bottom-up parser, using a stack for not-yet-reduced tokens.
1077 
1078    The stack base is op_stack, and the current stack pointer is 'top'.
1079    There is a stack element for each operator (only), and the most
1080    recently pushed operator is 'top->op'.  An operand (value) is
1081    stored in the 'value' field of the stack element of the operator
1082    that precedes it.  */
1083 bool
1084 _cpp_parse_expr (cpp_reader *pfile, bool is_if)
1085 {
1086   struct op *top = pfile->op_stack;
1087   unsigned int lex_count;
1088   bool saw_leading_not, want_value = true;
1089 
1090   pfile->state.skip_eval = 0;
1091 
1092   /* Set up detection of #if ! defined().  */
1093   pfile->mi_ind_cmacro = 0;
1094   saw_leading_not = false;
1095   lex_count = 0;
1096 
1097   /* Lowest priority operator prevents further reductions.  */
1098   top->op = CPP_EOF;
1099 
1100   for (;;)
1101     {
1102       struct op op;
1103 
1104       lex_count++;
1105       op.token = cpp_get_token (pfile);
1106       op.op = op.token->type;
1107       op.loc = op.token->src_loc;
1108 
1109       switch (op.op)
1110 	{
1111 	  /* These tokens convert into values.  */
1112 	case CPP_NUMBER:
1113 	case CPP_CHAR:
1114 	case CPP_WCHAR:
1115 	case CPP_CHAR16:
1116 	case CPP_CHAR32:
1117 	case CPP_NAME:
1118 	case CPP_HASH:
1119 	  if (!want_value)
1120 	    SYNTAX_ERROR2 ("missing binary operator before token \"%s\"",
1121 			   cpp_token_as_text (pfile, op.token));
1122 	  want_value = false;
1123 	  top->value = eval_token (pfile, op.token);
1124 	  continue;
1125 
1126 	case CPP_NOT:
1127 	  saw_leading_not = lex_count == 1;
1128 	  break;
1129 	case CPP_PLUS:
1130 	  if (want_value)
1131 	    op.op = CPP_UPLUS;
1132 	  break;
1133 	case CPP_MINUS:
1134 	  if (want_value)
1135 	    op.op = CPP_UMINUS;
1136 	  break;
1137 
1138 	default:
1139 	  if ((int) op.op <= (int) CPP_EQ || (int) op.op >= (int) CPP_PLUS_EQ)
1140 	    SYNTAX_ERROR2 ("token \"%s\" is not valid in preprocessor expressions",
1141 			   cpp_token_as_text (pfile, op.token));
1142 	  break;
1143 	}
1144 
1145       /* Check we have a value or operator as appropriate.  */
1146       if (optab[op.op].flags & NO_L_OPERAND)
1147 	{
1148 	  if (!want_value)
1149 	    SYNTAX_ERROR2 ("missing binary operator before token \"%s\"",
1150 			   cpp_token_as_text (pfile, op.token));
1151 	}
1152       else if (want_value)
1153 	{
1154 	  /* We want a number (or expression) and haven't got one.
1155 	     Try to emit a specific diagnostic.  */
1156 	  if (op.op == CPP_CLOSE_PAREN && top->op == CPP_OPEN_PAREN)
1157 	    SYNTAX_ERROR ("missing expression between '(' and ')'");
1158 
1159 	  if (op.op == CPP_EOF && top->op == CPP_EOF)
1160  	    SYNTAX_ERROR2 ("%s with no expression", is_if ? "#if" : "#elif");
1161 
1162  	  if (top->op != CPP_EOF && top->op != CPP_OPEN_PAREN)
1163  	    SYNTAX_ERROR2 ("operator '%s' has no right operand",
1164  			   cpp_token_as_text (pfile, top->token));
1165 	  else if (op.op == CPP_CLOSE_PAREN || op.op == CPP_EOF)
1166 	    /* Complain about missing paren during reduction.  */;
1167 	  else
1168 	    SYNTAX_ERROR2 ("operator '%s' has no left operand",
1169 			   cpp_token_as_text (pfile, op.token));
1170 	}
1171 
1172       top = reduce (pfile, top, op.op);
1173       if (!top)
1174 	goto syntax_error;
1175 
1176       if (op.op == CPP_EOF)
1177 	break;
1178 
1179       switch (op.op)
1180 	{
1181 	case CPP_CLOSE_PAREN:
1182 	  continue;
1183 	case CPP_OR_OR:
1184 	  if (!num_zerop (top->value))
1185 	    pfile->state.skip_eval++;
1186 	  break;
1187 	case CPP_AND_AND:
1188 	case CPP_QUERY:
1189 	  if (num_zerop (top->value))
1190 	    pfile->state.skip_eval++;
1191 	  break;
1192 	case CPP_COLON:
1193 	  if (top->op != CPP_QUERY)
1194 	    SYNTAX_ERROR (" ':' without preceding '?'");
1195 	  if (!num_zerop (top[-1].value)) /* Was '?' condition true?  */
1196 	    pfile->state.skip_eval++;
1197 	  else
1198 	    pfile->state.skip_eval--;
1199 	default:
1200 	  break;
1201 	}
1202 
1203       want_value = true;
1204 
1205       /* Check for and handle stack overflow.  */
1206       if (++top == pfile->op_limit)
1207 	top = _cpp_expand_op_stack (pfile);
1208 
1209       top->op = op.op;
1210       top->token = op.token;
1211       top->loc = op.token->src_loc;
1212     }
1213 
1214   /* The controlling macro expression is only valid if we called lex 3
1215      times: <!> <defined expression> and <EOF>.  push_conditional ()
1216      checks that we are at top-of-file.  */
1217   if (pfile->mi_ind_cmacro && !(saw_leading_not && lex_count == 3))
1218     pfile->mi_ind_cmacro = 0;
1219 
1220   if (top != pfile->op_stack)
1221     {
1222       cpp_error (pfile, CPP_DL_ICE, "unbalanced stack in %s",
1223 		 is_if ? "#if" : "#elif");
1224     syntax_error:
1225       return false;  /* Return false on syntax error.  */
1226     }
1227 
1228   return !num_zerop (top->value);
1229 }
1230 
1231 /* Reduce the operator / value stack if possible, in preparation for
1232    pushing operator OP.  Returns NULL on error, otherwise the top of
1233    the stack.  */
1234 static struct op *
1235 reduce (cpp_reader *pfile, struct op *top, enum cpp_ttype op)
1236 {
1237   unsigned int prio;
1238 
1239   if (top->op <= CPP_EQ || top->op > CPP_LAST_CPP_OP + 2)
1240     {
1241     bad_op:
1242       cpp_error (pfile, CPP_DL_ICE, "impossible operator '%u'", top->op);
1243       return 0;
1244     }
1245 
1246   if (op == CPP_OPEN_PAREN)
1247     return top;
1248 
1249   /* Decrement the priority of left-associative operators to force a
1250      reduction with operators of otherwise equal priority.  */
1251   prio = optab[op].prio - ((optab[op].flags & LEFT_ASSOC) != 0);
1252   while (prio < optab[top->op].prio)
1253     {
1254       if (CPP_OPTION (pfile, warn_num_sign_change)
1255 	  && optab[top->op].flags & CHECK_PROMOTION)
1256 	check_promotion (pfile, top);
1257 
1258       switch (top->op)
1259 	{
1260 	case CPP_UPLUS:
1261 	case CPP_UMINUS:
1262 	case CPP_NOT:
1263 	case CPP_COMPL:
1264 	  top[-1].value = num_unary_op (pfile, top->value, top->op);
1265 	  top[-1].loc = top->loc;
1266 	  break;
1267 
1268 	case CPP_PLUS:
1269 	case CPP_MINUS:
1270 	case CPP_RSHIFT:
1271 	case CPP_LSHIFT:
1272 	case CPP_COMMA:
1273 	  top[-1].value = num_binary_op (pfile, top[-1].value,
1274 					 top->value, top->op);
1275 	  top[-1].loc = top->loc;
1276 	  break;
1277 
1278 	case CPP_GREATER:
1279 	case CPP_LESS:
1280 	case CPP_GREATER_EQ:
1281 	case CPP_LESS_EQ:
1282 	  top[-1].value
1283 	    = num_inequality_op (pfile, top[-1].value, top->value, top->op);
1284 	  top[-1].loc = top->loc;
1285 	  break;
1286 
1287 	case CPP_EQ_EQ:
1288 	case CPP_NOT_EQ:
1289 	  top[-1].value
1290 	    = num_equality_op (pfile, top[-1].value, top->value, top->op);
1291 	  top[-1].loc = top->loc;
1292 	  break;
1293 
1294 	case CPP_AND:
1295 	case CPP_OR:
1296 	case CPP_XOR:
1297 	  top[-1].value
1298 	    = num_bitwise_op (pfile, top[-1].value, top->value, top->op);
1299 	  top[-1].loc = top->loc;
1300 	  break;
1301 
1302 	case CPP_MULT:
1303 	  top[-1].value = num_mul (pfile, top[-1].value, top->value);
1304 	  top[-1].loc = top->loc;
1305 	  break;
1306 
1307 	case CPP_DIV:
1308 	case CPP_MOD:
1309 	  top[-1].value = num_div_op (pfile, top[-1].value,
1310 				      top->value, top->op, top->loc);
1311 	  top[-1].loc = top->loc;
1312 	  break;
1313 
1314 	case CPP_OR_OR:
1315 	  top--;
1316 	  if (!num_zerop (top->value))
1317 	    pfile->state.skip_eval--;
1318 	  top->value.low = (!num_zerop (top->value)
1319 			    || !num_zerop (top[1].value));
1320 	  top->value.high = 0;
1321 	  top->value.unsignedp = false;
1322 	  top->value.overflow = false;
1323 	  top->loc = top[1].loc;
1324 	  continue;
1325 
1326 	case CPP_AND_AND:
1327 	  top--;
1328 	  if (num_zerop (top->value))
1329 	    pfile->state.skip_eval--;
1330 	  top->value.low = (!num_zerop (top->value)
1331 			    && !num_zerop (top[1].value));
1332 	  top->value.high = 0;
1333 	  top->value.unsignedp = false;
1334 	  top->value.overflow = false;
1335 	  top->loc = top[1].loc;
1336 	  continue;
1337 
1338 	case CPP_OPEN_PAREN:
1339 	  if (op != CPP_CLOSE_PAREN)
1340 	    {
1341 	      cpp_error_with_line (pfile, CPP_DL_ERROR,
1342 				   top->token->src_loc,
1343 				   0, "missing ')' in expression");
1344 	      return 0;
1345 	    }
1346 	  top--;
1347 	  top->value = top[1].value;
1348 	  top->loc = top[1].loc;
1349 	  return top;
1350 
1351 	case CPP_COLON:
1352 	  top -= 2;
1353 	  if (!num_zerop (top->value))
1354 	    {
1355 	      pfile->state.skip_eval--;
1356 	      top->value = top[1].value;
1357 	      top->loc = top[1].loc;
1358 	    }
1359 	  else
1360 	    {
1361 	      top->value = top[2].value;
1362 	      top->loc = top[2].loc;
1363 	    }
1364 	  top->value.unsignedp = (top[1].value.unsignedp
1365 				  || top[2].value.unsignedp);
1366 	  continue;
1367 
1368 	case CPP_QUERY:
1369 	  /* COMMA and COLON should not reduce a QUERY operator.  */
1370 	  if (op == CPP_COMMA || op == CPP_COLON)
1371 	    return top;
1372 	  cpp_error (pfile, CPP_DL_ERROR, "'?' without following ':'");
1373 	  return 0;
1374 
1375 	default:
1376 	  goto bad_op;
1377 	}
1378 
1379       top--;
1380       if (top->value.overflow && !pfile->state.skip_eval)
1381 	cpp_error (pfile, CPP_DL_PEDWARN,
1382 		   "integer overflow in preprocessor expression");
1383     }
1384 
1385   if (op == CPP_CLOSE_PAREN)
1386     {
1387       cpp_error (pfile, CPP_DL_ERROR, "missing '(' in expression");
1388       return 0;
1389     }
1390 
1391   return top;
1392 }
1393 
1394 /* Returns the position of the old top of stack after expansion.  */
1395 struct op *
1396 _cpp_expand_op_stack (cpp_reader *pfile)
1397 {
1398   size_t old_size = (size_t) (pfile->op_limit - pfile->op_stack);
1399   size_t new_size = old_size * 2 + 20;
1400 
1401   pfile->op_stack = XRESIZEVEC (struct op, pfile->op_stack, new_size);
1402   pfile->op_limit = pfile->op_stack + new_size;
1403 
1404   return pfile->op_stack + old_size;
1405 }
1406 
1407 /* Emits a warning if the effective sign of either operand of OP
1408    changes because of integer promotions.  */
1409 static void
1410 check_promotion (cpp_reader *pfile, const struct op *op)
1411 {
1412   if (op->value.unsignedp == op[-1].value.unsignedp)
1413     return;
1414 
1415   if (op->value.unsignedp)
1416     {
1417       if (!num_positive (op[-1].value, CPP_OPTION (pfile, precision)))
1418 	cpp_error_with_line (pfile, CPP_DL_WARNING, op[-1].loc, 0,
1419 			     "the left operand of \"%s\" changes sign when promoted",
1420 			     cpp_token_as_text (pfile, op->token));
1421     }
1422   else if (!num_positive (op->value, CPP_OPTION (pfile, precision)))
1423     cpp_error_with_line (pfile, CPP_DL_WARNING, op->loc, 0,
1424 	       "the right operand of \"%s\" changes sign when promoted",
1425 	       cpp_token_as_text (pfile, op->token));
1426 }
1427 
1428 /* Clears the unused high order bits of the number pointed to by PNUM.  */
1429 static cpp_num
1430 num_trim (cpp_num num, size_t precision)
1431 {
1432   if (precision > PART_PRECISION)
1433     {
1434       precision -= PART_PRECISION;
1435       if (precision < PART_PRECISION)
1436 	num.high &= ((cpp_num_part) 1 << precision) - 1;
1437     }
1438   else
1439     {
1440       if (precision < PART_PRECISION)
1441 	num.low &= ((cpp_num_part) 1 << precision) - 1;
1442       num.high = 0;
1443     }
1444 
1445   return num;
1446 }
1447 
1448 /* True iff A (presumed signed) >= 0.  */
1449 static bool
1450 num_positive (cpp_num num, size_t precision)
1451 {
1452   if (precision > PART_PRECISION)
1453     {
1454       precision -= PART_PRECISION;
1455       return (num.high & (cpp_num_part) 1 << (precision - 1)) == 0;
1456     }
1457 
1458   return (num.low & (cpp_num_part) 1 << (precision - 1)) == 0;
1459 }
1460 
1461 /* Sign extend a number, with PRECISION significant bits and all
1462    others assumed clear, to fill out a cpp_num structure.  */
1463 cpp_num
1464 cpp_num_sign_extend (cpp_num num, size_t precision)
1465 {
1466   if (!num.unsignedp)
1467     {
1468       if (precision > PART_PRECISION)
1469 	{
1470 	  precision -= PART_PRECISION;
1471 	  if (precision < PART_PRECISION
1472 	      && (num.high & (cpp_num_part) 1 << (precision - 1)))
1473 	    num.high |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
1474 	}
1475       else if (num.low & (cpp_num_part) 1 << (precision - 1))
1476 	{
1477 	  if (precision < PART_PRECISION)
1478 	    num.low |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
1479 	  num.high = ~(cpp_num_part) 0;
1480 	}
1481     }
1482 
1483   return num;
1484 }
1485 
1486 /* Returns the negative of NUM.  */
1487 static cpp_num
1488 num_negate (cpp_num num, size_t precision)
1489 {
1490   cpp_num copy;
1491 
1492   copy = num;
1493   num.high = ~num.high;
1494   num.low = ~num.low;
1495   if (++num.low == 0)
1496     num.high++;
1497   num = num_trim (num, precision);
1498   num.overflow = (!num.unsignedp && num_eq (num, copy) && !num_zerop (num));
1499 
1500   return num;
1501 }
1502 
1503 /* Returns true if A >= B.  */
1504 static bool
1505 num_greater_eq (cpp_num pa, cpp_num pb, size_t precision)
1506 {
1507   bool unsignedp;
1508 
1509   unsignedp = pa.unsignedp || pb.unsignedp;
1510 
1511   if (!unsignedp)
1512     {
1513       /* Both numbers have signed type.  If they are of different
1514        sign, the answer is the sign of A.  */
1515       unsignedp = num_positive (pa, precision);
1516 
1517       if (unsignedp != num_positive (pb, precision))
1518 	return unsignedp;
1519 
1520       /* Otherwise we can do an unsigned comparison.  */
1521     }
1522 
1523   return (pa.high > pb.high) || (pa.high == pb.high && pa.low >= pb.low);
1524 }
1525 
1526 /* Returns LHS OP RHS, where OP is a bit-wise operation.  */
1527 static cpp_num
1528 num_bitwise_op (cpp_reader *pfile ATTRIBUTE_UNUSED,
1529 		cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1530 {
1531   lhs.overflow = false;
1532   lhs.unsignedp = lhs.unsignedp || rhs.unsignedp;
1533 
1534   /* As excess precision is zeroed, there is no need to num_trim () as
1535      these operations cannot introduce a set bit there.  */
1536   if (op == CPP_AND)
1537     {
1538       lhs.low &= rhs.low;
1539       lhs.high &= rhs.high;
1540     }
1541   else if (op == CPP_OR)
1542     {
1543       lhs.low |= rhs.low;
1544       lhs.high |= rhs.high;
1545     }
1546   else
1547     {
1548       lhs.low ^= rhs.low;
1549       lhs.high ^= rhs.high;
1550     }
1551 
1552   return lhs;
1553 }
1554 
1555 /* Returns LHS OP RHS, where OP is an inequality.  */
1556 static cpp_num
1557 num_inequality_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs,
1558 		   enum cpp_ttype op)
1559 {
1560   bool gte = num_greater_eq (lhs, rhs, CPP_OPTION (pfile, precision));
1561 
1562   if (op == CPP_GREATER_EQ)
1563     lhs.low = gte;
1564   else if (op == CPP_LESS)
1565     lhs.low = !gte;
1566   else if (op == CPP_GREATER)
1567     lhs.low = gte && !num_eq (lhs, rhs);
1568   else /* CPP_LESS_EQ.  */
1569     lhs.low = !gte || num_eq (lhs, rhs);
1570 
1571   lhs.high = 0;
1572   lhs.overflow = false;
1573   lhs.unsignedp = false;
1574   return lhs;
1575 }
1576 
1577 /* Returns LHS OP RHS, where OP is == or !=.  */
1578 static cpp_num
1579 num_equality_op (cpp_reader *pfile ATTRIBUTE_UNUSED,
1580 		 cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1581 {
1582   /* Work around a 3.0.4 bug; see PR 6950.  */
1583   bool eq = num_eq (lhs, rhs);
1584   if (op == CPP_NOT_EQ)
1585     eq = !eq;
1586   lhs.low = eq;
1587   lhs.high = 0;
1588   lhs.overflow = false;
1589   lhs.unsignedp = false;
1590   return lhs;
1591 }
1592 
1593 /* Shift NUM, of width PRECISION, right by N bits.  */
1594 static cpp_num
1595 num_rshift (cpp_num num, size_t precision, size_t n)
1596 {
1597   cpp_num_part sign_mask;
1598   bool x = num_positive (num, precision);
1599 
1600   if (num.unsignedp || x)
1601     sign_mask = 0;
1602   else
1603     sign_mask = ~(cpp_num_part) 0;
1604 
1605   if (n >= precision)
1606     num.high = num.low = sign_mask;
1607   else
1608     {
1609       /* Sign-extend.  */
1610       if (precision < PART_PRECISION)
1611 	num.high = sign_mask, num.low |= sign_mask << precision;
1612       else if (precision < 2 * PART_PRECISION)
1613 	num.high |= sign_mask << (precision - PART_PRECISION);
1614 
1615       if (n >= PART_PRECISION)
1616 	{
1617 	  n -= PART_PRECISION;
1618 	  num.low = num.high;
1619 	  num.high = sign_mask;
1620 	}
1621 
1622       if (n)
1623 	{
1624 	  num.low = (num.low >> n) | (num.high << (PART_PRECISION - n));
1625 	  num.high = (num.high >> n) | (sign_mask << (PART_PRECISION - n));
1626 	}
1627     }
1628 
1629   num = num_trim (num, precision);
1630   num.overflow = false;
1631   return num;
1632 }
1633 
1634 /* Shift NUM, of width PRECISION, left by N bits.  */
1635 static cpp_num
1636 num_lshift (cpp_num num, size_t precision, size_t n)
1637 {
1638   if (n >= precision)
1639     {
1640       num.overflow = !num.unsignedp && !num_zerop (num);
1641       num.high = num.low = 0;
1642     }
1643   else
1644     {
1645       cpp_num orig, maybe_orig;
1646       size_t m = n;
1647 
1648       orig = num;
1649       if (m >= PART_PRECISION)
1650 	{
1651 	  m -= PART_PRECISION;
1652 	  num.high = num.low;
1653 	  num.low = 0;
1654 	}
1655       if (m)
1656 	{
1657 	  num.high = (num.high << m) | (num.low >> (PART_PRECISION - m));
1658 	  num.low <<= m;
1659 	}
1660       num = num_trim (num, precision);
1661 
1662       if (num.unsignedp)
1663 	num.overflow = false;
1664       else
1665 	{
1666 	  maybe_orig = num_rshift (num, precision, n);
1667 	  num.overflow = !num_eq (orig, maybe_orig);
1668 	}
1669     }
1670 
1671   return num;
1672 }
1673 
1674 /* The four unary operators: +, -, ! and ~.  */
1675 static cpp_num
1676 num_unary_op (cpp_reader *pfile, cpp_num num, enum cpp_ttype op)
1677 {
1678   switch (op)
1679     {
1680     case CPP_UPLUS:
1681       if (CPP_WTRADITIONAL (pfile) && !pfile->state.skip_eval)
1682 	cpp_warning (pfile, CPP_W_TRADITIONAL,
1683 		     "traditional C rejects the unary plus operator");
1684       num.overflow = false;
1685       break;
1686 
1687     case CPP_UMINUS:
1688       num = num_negate (num, CPP_OPTION (pfile, precision));
1689       break;
1690 
1691     case CPP_COMPL:
1692       num.high = ~num.high;
1693       num.low = ~num.low;
1694       num = num_trim (num, CPP_OPTION (pfile, precision));
1695       num.overflow = false;
1696       break;
1697 
1698     default: /* case CPP_NOT: */
1699       num.low = num_zerop (num);
1700       num.high = 0;
1701       num.overflow = false;
1702       num.unsignedp = false;
1703       break;
1704     }
1705 
1706   return num;
1707 }
1708 
1709 /* The various binary operators.  */
1710 static cpp_num
1711 num_binary_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1712 {
1713   cpp_num result;
1714   size_t precision = CPP_OPTION (pfile, precision);
1715   size_t n;
1716 
1717   switch (op)
1718     {
1719       /* Shifts.  */
1720     case CPP_LSHIFT:
1721     case CPP_RSHIFT:
1722       if (!rhs.unsignedp && !num_positive (rhs, precision))
1723 	{
1724 	  /* A negative shift is a positive shift the other way.  */
1725 	  if (op == CPP_LSHIFT)
1726 	    op = CPP_RSHIFT;
1727 	  else
1728 	    op = CPP_LSHIFT;
1729 	  rhs = num_negate (rhs, precision);
1730 	}
1731       if (rhs.high)
1732 	n = ~0;			/* Maximal.  */
1733       else
1734 	n = rhs.low;
1735       if (op == CPP_LSHIFT)
1736 	lhs = num_lshift (lhs, precision, n);
1737       else
1738 	lhs = num_rshift (lhs, precision, n);
1739       break;
1740 
1741       /* Arithmetic.  */
1742     case CPP_MINUS:
1743       rhs = num_negate (rhs, precision);
1744     case CPP_PLUS:
1745       result.low = lhs.low + rhs.low;
1746       result.high = lhs.high + rhs.high;
1747       if (result.low < lhs.low)
1748 	result.high++;
1749       result.unsignedp = lhs.unsignedp || rhs.unsignedp;
1750       result.overflow = false;
1751 
1752       result = num_trim (result, precision);
1753       if (!result.unsignedp)
1754 	{
1755 	  bool lhsp = num_positive (lhs, precision);
1756 	  result.overflow = (lhsp == num_positive (rhs, precision)
1757 			     && lhsp != num_positive (result, precision));
1758 	}
1759       return result;
1760 
1761       /* Comma.  */
1762     default: /* case CPP_COMMA: */
1763       if (CPP_PEDANTIC (pfile) && (!CPP_OPTION (pfile, c99)
1764 				   || !pfile->state.skip_eval))
1765 	cpp_error (pfile, CPP_DL_PEDWARN,
1766 		   "comma operator in operand of #if");
1767       lhs = rhs;
1768       break;
1769     }
1770 
1771   return lhs;
1772 }
1773 
1774 /* Multiplies two unsigned cpp_num_parts to give a cpp_num.  This
1775    cannot overflow.  */
1776 static cpp_num
1777 num_part_mul (cpp_num_part lhs, cpp_num_part rhs)
1778 {
1779   cpp_num result;
1780   cpp_num_part middle[2], temp;
1781 
1782   result.low = LOW_PART (lhs) * LOW_PART (rhs);
1783   result.high = HIGH_PART (lhs) * HIGH_PART (rhs);
1784 
1785   middle[0] = LOW_PART (lhs) * HIGH_PART (rhs);
1786   middle[1] = HIGH_PART (lhs) * LOW_PART (rhs);
1787 
1788   temp = result.low;
1789   result.low += LOW_PART (middle[0]) << (PART_PRECISION / 2);
1790   if (result.low < temp)
1791     result.high++;
1792 
1793   temp = result.low;
1794   result.low += LOW_PART (middle[1]) << (PART_PRECISION / 2);
1795   if (result.low < temp)
1796     result.high++;
1797 
1798   result.high += HIGH_PART (middle[0]);
1799   result.high += HIGH_PART (middle[1]);
1800   result.unsignedp = true;
1801   result.overflow = false;
1802 
1803   return result;
1804 }
1805 
1806 /* Multiply two preprocessing numbers.  */
1807 static cpp_num
1808 num_mul (cpp_reader *pfile, cpp_num lhs, cpp_num rhs)
1809 {
1810   cpp_num result, temp;
1811   bool unsignedp = lhs.unsignedp || rhs.unsignedp;
1812   bool overflow, negate = false;
1813   size_t precision = CPP_OPTION (pfile, precision);
1814 
1815   /* Prepare for unsigned multiplication.  */
1816   if (!unsignedp)
1817     {
1818       if (!num_positive (lhs, precision))
1819 	negate = !negate, lhs = num_negate (lhs, precision);
1820       if (!num_positive (rhs, precision))
1821 	negate = !negate, rhs = num_negate (rhs, precision);
1822     }
1823 
1824   overflow = lhs.high && rhs.high;
1825   result = num_part_mul (lhs.low, rhs.low);
1826 
1827   temp = num_part_mul (lhs.high, rhs.low);
1828   result.high += temp.low;
1829   if (temp.high)
1830     overflow = true;
1831 
1832   temp = num_part_mul (lhs.low, rhs.high);
1833   result.high += temp.low;
1834   if (temp.high)
1835     overflow = true;
1836 
1837   temp.low = result.low, temp.high = result.high;
1838   result = num_trim (result, precision);
1839   if (!num_eq (result, temp))
1840     overflow = true;
1841 
1842   if (negate)
1843     result = num_negate (result, precision);
1844 
1845   if (unsignedp)
1846     result.overflow = false;
1847   else
1848     result.overflow = overflow || (num_positive (result, precision) ^ !negate
1849 				   && !num_zerop (result));
1850   result.unsignedp = unsignedp;
1851 
1852   return result;
1853 }
1854 
1855 /* Divide two preprocessing numbers, LHS and RHS, returning the answer
1856    or the remainder depending upon OP. LOCATION is the source location
1857    of this operator (for diagnostics).  */
1858 
1859 static cpp_num
1860 num_div_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op,
1861 	    source_location location)
1862 {
1863   cpp_num result, sub;
1864   cpp_num_part mask;
1865   bool unsignedp = lhs.unsignedp || rhs.unsignedp;
1866   bool negate = false, lhs_neg = false;
1867   size_t i, precision = CPP_OPTION (pfile, precision);
1868 
1869   /* Prepare for unsigned division.  */
1870   if (!unsignedp)
1871     {
1872       if (!num_positive (lhs, precision))
1873 	negate = !negate, lhs_neg = true, lhs = num_negate (lhs, precision);
1874       if (!num_positive (rhs, precision))
1875 	negate = !negate, rhs = num_negate (rhs, precision);
1876     }
1877 
1878   /* Find the high bit.  */
1879   if (rhs.high)
1880     {
1881       i = precision - 1;
1882       mask = (cpp_num_part) 1 << (i - PART_PRECISION);
1883       for (; ; i--, mask >>= 1)
1884 	if (rhs.high & mask)
1885 	  break;
1886     }
1887   else if (rhs.low)
1888     {
1889       if (precision > PART_PRECISION)
1890 	i = precision - PART_PRECISION - 1;
1891       else
1892 	i = precision - 1;
1893       mask = (cpp_num_part) 1 << i;
1894       for (; ; i--, mask >>= 1)
1895 	if (rhs.low & mask)
1896 	  break;
1897     }
1898   else
1899     {
1900       if (!pfile->state.skip_eval)
1901 	cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0,
1902 			     "division by zero in #if");
1903       return lhs;
1904     }
1905 
1906   /* First nonzero bit of RHS is bit I.  Do naive division by
1907      shifting the RHS fully left, and subtracting from LHS if LHS is
1908      at least as big, and then repeating but with one less shift.
1909      This is not very efficient, but is easy to understand.  */
1910 
1911   rhs.unsignedp = true;
1912   lhs.unsignedp = true;
1913   i = precision - i - 1;
1914   sub = num_lshift (rhs, precision, i);
1915 
1916   result.high = result.low = 0;
1917   for (;;)
1918     {
1919       if (num_greater_eq (lhs, sub, precision))
1920 	{
1921 	  lhs = num_binary_op (pfile, lhs, sub, CPP_MINUS);
1922 	  if (i >= PART_PRECISION)
1923 	    result.high |= (cpp_num_part) 1 << (i - PART_PRECISION);
1924 	  else
1925 	    result.low |= (cpp_num_part) 1 << i;
1926 	}
1927       if (i-- == 0)
1928 	break;
1929       sub.low = (sub.low >> 1) | (sub.high << (PART_PRECISION - 1));
1930       sub.high >>= 1;
1931     }
1932 
1933   /* We divide so that the remainder has the sign of the LHS.  */
1934   if (op == CPP_DIV)
1935     {
1936       result.unsignedp = unsignedp;
1937       result.overflow = false;
1938       if (!unsignedp)
1939 	{
1940 	  if (negate)
1941 	    result = num_negate (result, precision);
1942 	  result.overflow = (num_positive (result, precision) ^ !negate
1943 			     && !num_zerop (result));
1944 	}
1945 
1946       return result;
1947     }
1948 
1949   /* CPP_MOD.  */
1950   lhs.unsignedp = unsignedp;
1951   lhs.overflow = false;
1952   if (lhs_neg)
1953     lhs = num_negate (lhs, precision);
1954 
1955   return lhs;
1956 }
1957