OSDN Git Service

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