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