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