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