1/* Parse C expressions for cpplib.
2   Copyright (C) 1987-2015 Free Software Foundation, Inc.
3   Contributed by Per Bothner, 1994.
4
5This program is free software; you can redistribute it and/or modify it
6under the terms of the GNU General Public License as published by the
7Free Software Foundation; either version 3, or (at your option) any
8later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along 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
29struct 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)
40static bool num_positive (cpp_num, size_t);
41static bool num_greater_eq (cpp_num, cpp_num, size_t);
42static cpp_num num_trim (cpp_num, size_t);
43static cpp_num num_part_mul (cpp_num_part, cpp_num_part);
44
45static cpp_num num_unary_op (cpp_reader *, cpp_num, enum cpp_ttype);
46static cpp_num num_binary_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype);
47static cpp_num num_negate (cpp_num, size_t);
48static cpp_num num_bitwise_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype);
49static cpp_num num_inequality_op (cpp_reader *, cpp_num, cpp_num,
50				  enum cpp_ttype);
51static cpp_num num_equality_op (cpp_reader *, cpp_num, cpp_num,
52				enum cpp_ttype);
53static cpp_num num_mul (cpp_reader *, cpp_num, cpp_num);
54static cpp_num num_div_op (cpp_reader *, cpp_num, cpp_num, enum cpp_ttype,
55			   source_location);
56static cpp_num num_lshift (cpp_num, size_t, size_t);
57static cpp_num num_rshift (cpp_num, size_t, size_t);
58
59static cpp_num append_digit (cpp_num, int, int, size_t);
60static cpp_num parse_defined (cpp_reader *);
61static cpp_num eval_token (cpp_reader *, const cpp_token *, source_location);
62static struct op *reduce (cpp_reader *, struct op *, enum cpp_ttype);
63static unsigned int interpret_float_suffix (cpp_reader *, const uchar *, size_t);
64static unsigned int interpret_int_suffix (cpp_reader *, const uchar *, size_t);
65static void check_promotion (cpp_reader *, const struct op *);
66
67static 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.  */
90static unsigned int
91interpret_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.  */
206unsigned int
207cpp_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.  */
215static unsigned int
216interpret_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.  */
250unsigned int
251cpp_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.  */
259enum cpp_ttype
260cpp_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.  */
279enum cpp_ttype
280cpp_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.  */
299enum cpp_ttype
300cpp_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.  */
317enum cpp_ttype
318cpp_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.  */
333bool
334cpp_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.  */
347bool
348cpp_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.  */
360const char *
361cpp_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.  */
390unsigned int
391cpp_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.  */
724cpp_num
725cpp_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.  */
836static cpp_num
837append_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.  */
898static cpp_num
899parse_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).  */
990static cpp_num
991eval_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
1103After an operator is returned from the lexer, if it has priority less
1104than the operator on the top of the stack, we reduce the stack by one
1105operator and repeat the test.  Since equal priorities do not reduce,
1106this is naturally right-associative.
1107
1108We handle left-associative operators by decrementing the priority of
1109just-lexed operators by one, but retaining the priority of operators
1110already on the stack.
1111
1112The remaining cases are '(' and ')'.  We handle '(' by skipping the
1113reduction phase completely.  ')' is given lower priority than
1114everything else, including '(', effectively forcing a reduction of the
1115parenthesized expression.  If there is a matching '(', the routine
1116reduce() exits immediately.  If the normal exit route sees a ')', then
1117there cannot have been a matching '(' and an error message is output.
1118
1119The parser assumes all shifted operators require a left operand unless
1120the flag NO_L_OPERAND is set.  These semantics are automatic; any
1121extra 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.  */
1131static 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.  */
1182bool
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.  */
1343static struct op *
1344reduce (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.  */
1504struct 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.  */
1518static void
1519check_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.  */
1538static cpp_num
1539num_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.  */
1558static bool
1559num_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.  */
1572cpp_num
1573cpp_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.  */
1596static cpp_num
1597num_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.  */
1613static bool
1614num_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.  */
1636static cpp_num
1637num_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.  */
1665static cpp_num
1666num_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 !=.  */
1687static cpp_num
1688num_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.  */
1703static cpp_num
1704num_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.  */
1744static cpp_num
1745num_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 ~.  */
1784static cpp_num
1785num_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.  */
1819static cpp_num
1820num_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.  */
1900static cpp_num
1901num_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.  */
1931static cpp_num
1932num_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
1983static cpp_num
1984num_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.  */
2083static cpp_num
2084parse_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