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