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