-dA enhancement
[official-gcc.git] / libcpp / expr.c
blob3c36127b54f9c51e8cd1ff80a4d40a5555118ef0
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.
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.
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.
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/>. */
20 #include "config.h"
21 #include "system.h"
22 #include "cpplib.h"
23 #include "internal.h"
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))
30 struct op
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;
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);
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);
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 *);
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))
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)
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)
86 size_t flags;
87 size_t f, d, l, w, q, i;
89 flags = 0;
90 f = d = l = w = q = i = 0;
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'))
96 bool uppercase = (*s == 'D');
97 switch (s[1])
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;
112 /* Recognize a fixed-point suffix. */
113 switch (s[len-1])
115 case 'k': case 'K': flags = CPP_N_ACCUM; break;
116 case 'r': case 'R': flags = CPP_N_FRACT; break;
117 default: break;
120 /* Continue processing a fixed-point suffix. The suffix is case
121 insensitive except for ll or LL. Order is significant. */
122 if (flags)
124 if (len == 1)
125 return flags;
126 len--;
128 if (*s == 'u' || *s == 'U')
130 flags |= CPP_N_UNSIGNED;
131 if (len == 1)
132 return flags;
133 len--;
134 s++;
137 switch (*s)
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;
158 /* Anything left at this point is invalid. */
159 return 0;
162 /* In any remaining valid suffix, the case and order don't matter. */
163 while (len--)
164 switch (s[len])
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;
177 if (f + d + l + w + q > 1 || i > 1)
178 return 0;
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));
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)
194 size_t u, l, i;
196 u = l = i = 0;
198 while (len--)
199 switch (s[len])
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;
213 if (l > 2 || u > 1 || i > 1)
214 return 0;
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));
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)
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;
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;
239 limit = str + token->val.str.len;
240 float_flag = NOT_FLOAT;
241 max_digit = 0;
242 radix = 10;
243 seen_digit = false;
245 /* First, interpret the radix. */
246 if (*str == '0')
248 radix = 8;
249 str++;
251 /* Require at least one hex digit to classify it as hex. */
252 if ((*str == 'x' || *str == 'X')
253 && (str[1] == '.' || ISXDIGIT (str[1])))
255 radix = 16;
256 str++;
258 else if ((*str == 'b' || *str == 'B') && (str[1] == '0' || str[1] == '1'))
260 radix = 2;
261 str++;
265 /* Now scan for a well-formed integer or float. */
266 for (;;)
268 unsigned int c = *str++;
270 if (ISDIGIT (c) || (ISXDIGIT (c) && radix == 16))
272 seen_digit = true;
273 c = hex_value (c);
274 if (c > max_digit)
275 max_digit = c;
277 else if (c == '.')
279 if (float_flag == NOT_FLOAT)
280 float_flag = AFTER_POINT;
281 else
282 SYNTAX_ERROR ("too many decimal points in number");
284 else if ((radix <= 10 && (c == 'e' || c == 'E'))
285 || (radix == 16 && (c == 'p' || c == 'P')))
287 float_flag = AFTER_EXPON;
288 break;
290 else
292 /* Start of suffix. */
293 str--;
294 break;
298 /* The suffix may be for decimal fixed-point constants without exponent. */
299 if (radix != 16 && float_flag == NOT_FLOAT)
301 result = interpret_float_suffix (str, limit - str);
302 if ((result & CPP_N_FRACT) || (result & CPP_N_ACCUM))
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;
309 if (CPP_PEDANTIC (pfile))
310 cpp_error (pfile, CPP_DL_PEDWARN,
311 "fixed-point constants are a GCC extension");
312 goto syntax_ok;
314 else
315 result = 0;
318 if (float_flag != NOT_FLOAT && radix == 8)
319 radix = 10;
321 if (max_digit >= radix)
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);
329 if (float_flag != NOT_FLOAT)
331 if (radix == 2)
333 cpp_error (pfile, CPP_DL_ERROR,
334 "invalid prefix \"0b\" for floating constant");
335 return CPP_N_INVALID;
338 if (radix == 16 && !seen_digit)
339 SYNTAX_ERROR ("no digits in hexadecimal floating constant");
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");
345 if (float_flag == AFTER_EXPON)
347 if (*str == '+' || *str == '-')
348 str++;
350 /* Exponent is decimal, even if string is a hex float. */
351 if (!ISDIGIT (*str))
352 SYNTAX_ERROR ("exponent has no digits");
355 str++;
356 while (ISDIGIT (*str));
358 else if (radix == 16)
359 SYNTAX_ERROR ("hexadecimal floating constants require an exponent");
361 result = interpret_float_suffix (str, limit - str);
362 if (result == 0)
364 cpp_error (pfile, CPP_DL_ERROR,
365 "invalid suffix \"%.*s\" on floating constant",
366 (int) (limit - str), str);
367 return CPP_N_INVALID;
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);
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");
385 /* Radix must be 10 for decimal floats. */
386 if ((result & CPP_N_DFLOAT) && radix != 10)
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;
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");
398 if ((result & CPP_N_DFLOAT) && CPP_PEDANTIC (pfile))
399 cpp_error (pfile, CPP_DL_PEDWARN,
400 "decimal float constants are a GCC extension");
402 result |= CPP_N_FLOATING;
404 else
406 result = interpret_int_suffix (str, limit - str);
407 if (result == 0)
409 cpp_error (pfile, CPP_DL_ERROR,
410 "invalid suffix \"%.*s\" on integer constant",
411 (int) (limit - str), str);
412 return CPP_N_INVALID;
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))
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);
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);
429 if ((result & CPP_N_WIDTH) == CPP_N_LARGE
430 && CPP_OPTION (pfile, cpp_warn_long_long))
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");
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);
442 result |= CPP_N_INTEGER;
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");
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;
462 return result;
464 syntax_error:
465 return CPP_N_INVALID;
468 /* cpp_interpret_integer converts an integer constant into a cpp_num,
469 of precision options->precision.
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)
478 const uchar *p, *end;
479 cpp_num result;
481 result.low = 0;
482 result.high = 0;
483 result.unsignedp = !!(type & CPP_N_UNSIGNED);
484 result.overflow = false;
486 p = token->val.str.text;
487 end = p + token->val.str.len;
489 /* Common case of a single digit. */
490 if (token->val.str.len == 1)
491 result.low = p[0] - '0';
492 else
494 cpp_num_part max;
495 size_t precision = CPP_OPTION (pfile, precision);
496 unsigned int base = 10, c = 0;
497 bool overflow = false;
499 if ((type & CPP_N_RADIX) == CPP_N_OCTAL)
501 base = 8;
502 p++;
504 else if ((type & CPP_N_RADIX) == CPP_N_HEX)
506 base = 16;
507 p += 2;
509 else if ((type & CPP_N_RADIX) == CPP_N_BINARY)
511 base = 2;
512 p += 2;
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;
522 for (; p < end; p++)
524 c = *p;
526 if (ISDIGIT (c) || (base == 16 && ISXDIGIT (c)))
527 c = hex_value (c);
528 else
529 break;
531 /* Strict inequality for when max is set to zero. */
532 if (result.low < max)
533 result.low = result.low * base + c;
534 else
536 result = append_digit (result, c, base, precision);
537 overflow |= result.overflow;
538 max = 0;
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))
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;
580 return result;
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)
587 cpp_num result;
588 unsigned int shift;
589 bool overflow;
590 cpp_num_part add_high, add_low;
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)
596 case 2:
597 shift = 1;
598 break;
600 case 16:
601 shift = 4;
602 break;
604 default:
605 shift = 3;
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;
613 if (base == 10)
615 add_low = num.low << 1;
616 add_high = (num.high << 1) + (num.low >> (PART_PRECISION - 1));
618 else
619 add_high = add_low = 0;
621 if (add_low + digit < add_low)
622 add_high++;
623 add_low += digit;
625 if (result.low + add_low < result.low)
626 add_high++;
627 if (result.high + add_high < result.high)
628 overflow = true;
630 result.low += add_low;
631 result.high += add_high;
632 result.overflow = overflow;
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;
642 return result;
645 /* Handle meeting "defined" in a preprocessor expression. */
646 static cpp_num
647 parse_defined (cpp_reader *pfile)
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;
655 /* Don't expand macros. */
656 pfile->state.prevent_expansion++;
658 token = cpp_get_token (pfile);
659 if (token->type == CPP_OPEN_PAREN)
661 paren = 1;
662 token = cpp_get_token (pfile);
665 if (token->type == CPP_NAME)
667 node = token->val.node.node;
668 if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN)
670 cpp_error (pfile, CPP_DL_ERROR, "missing ')' after \"defined\"");
671 node = 0;
674 else
676 cpp_error (pfile, CPP_DL_ERROR,
677 "operator \"defined\" requires an identifier");
678 if (token->flags & NAMED_OP)
680 cpp_token op;
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));
691 if (node)
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");
697 _cpp_mark_macro_used (node);
698 if (!(node->flags & NODE_USED))
700 node->flags |= NODE_USED;
701 if (node->type == NT_MACRO)
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);
709 else
711 if (pfile->cb.used_undef)
712 pfile->cb.used_undef (pfile, pfile->directive_line, node);
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;
721 pfile->state.prevent_expansion--;
723 /* Do not treat conditional macros as being defined. This is due to the
724 powerpc and spu ports using conditional macros for 'vector', 'bool', and
725 'pixel' to act as conditional keywords. This messes up tests like #ifndef
726 bool. */
727 result.unsignedp = false;
728 result.high = 0;
729 result.overflow = false;
730 result.low = (node && node->type == NT_MACRO
731 && (node->flags & NODE_CONDITIONAL) == 0);
732 return result;
735 /* Convert a token into a CPP_NUMBER (an interpreted preprocessing
736 number or character constant, or the result of the "defined" or "#"
737 operators). */
738 static cpp_num
739 eval_token (cpp_reader *pfile, const cpp_token *token)
741 cpp_num result;
742 unsigned int temp;
743 int unsignedp = 0;
745 result.unsignedp = false;
746 result.overflow = false;
748 switch (token->type)
750 case CPP_NUMBER:
751 temp = cpp_classify_number (pfile, token);
752 switch (temp & CPP_N_CATEGORY)
754 case CPP_N_FLOATING:
755 cpp_error (pfile, CPP_DL_ERROR,
756 "floating constant in preprocessor expression");
757 break;
758 case CPP_N_INTEGER:
759 if (!(temp & CPP_N_IMAGINARY))
760 return cpp_interpret_integer (pfile, token, temp);
761 cpp_error (pfile, CPP_DL_ERROR,
762 "imaginary number in preprocessor expression");
763 break;
765 case CPP_N_INVALID:
766 /* Error already issued. */
767 break;
769 result.high = result.low = 0;
770 break;
772 case CPP_WCHAR:
773 case CPP_CHAR:
774 case CPP_CHAR16:
775 case CPP_CHAR32:
777 cppchar_t cc = cpp_interpret_charconst (pfile, token,
778 &temp, &unsignedp);
780 result.high = 0;
781 result.low = cc;
782 /* Sign-extend the result if necessary. */
783 if (!unsignedp && (cppchar_signed_t) cc < 0)
785 if (PART_PRECISION > BITS_PER_CPPCHAR_T)
786 result.low |= ~(~(cpp_num_part) 0
787 >> (PART_PRECISION - BITS_PER_CPPCHAR_T));
788 result.high = ~(cpp_num_part) 0;
789 result = num_trim (result, CPP_OPTION (pfile, precision));
792 break;
794 case CPP_NAME:
795 if (token->val.node.node == pfile->spec_nodes.n_defined)
796 return parse_defined (pfile);
797 else if (CPP_OPTION (pfile, cplusplus)
798 && (token->val.node.node == pfile->spec_nodes.n_true
799 || token->val.node.node == pfile->spec_nodes.n_false))
801 result.high = 0;
802 result.low = (token->val.node.node == pfile->spec_nodes.n_true);
804 else
806 result.high = 0;
807 result.low = 0;
808 if (CPP_OPTION (pfile, warn_undef) && !pfile->state.skip_eval)
809 cpp_warning (pfile, CPP_W_UNDEF, "\"%s\" is not defined",
810 NODE_NAME (token->val.node.node));
812 break;
814 case CPP_HASH:
815 if (!pfile->state.skipping)
817 /* A pedantic warning takes precedence over a deprecated
818 warning here. */
819 if (CPP_PEDANTIC (pfile))
820 cpp_error (pfile, CPP_DL_PEDWARN,
821 "assertions are a GCC extension");
822 else if (CPP_OPTION (pfile, cpp_warn_deprecated))
823 cpp_warning (pfile, CPP_W_DEPRECATED,
824 "assertions are a deprecated extension");
826 _cpp_test_assertion (pfile, &temp);
827 result.high = 0;
828 result.low = temp;
829 break;
831 default:
832 abort ();
835 result.unsignedp = !!unsignedp;
836 return result;
839 /* Operator precedence and flags table.
841 After an operator is returned from the lexer, if it has priority less
842 than the operator on the top of the stack, we reduce the stack by one
843 operator and repeat the test. Since equal priorities do not reduce,
844 this is naturally right-associative.
846 We handle left-associative operators by decrementing the priority of
847 just-lexed operators by one, but retaining the priority of operators
848 already on the stack.
850 The remaining cases are '(' and ')'. We handle '(' by skipping the
851 reduction phase completely. ')' is given lower priority than
852 everything else, including '(', effectively forcing a reduction of the
853 parenthesized expression. If there is a matching '(', the routine
854 reduce() exits immediately. If the normal exit route sees a ')', then
855 there cannot have been a matching '(' and an error message is output.
857 The parser assumes all shifted operators require a left operand unless
858 the flag NO_L_OPERAND is set. These semantics are automatic; any
859 extra semantics need to be handled with operator-specific code. */
861 /* Flags. If CHECK_PROMOTION, we warn if the effective sign of an
862 operand changes because of integer promotions. */
863 #define NO_L_OPERAND (1 << 0)
864 #define LEFT_ASSOC (1 << 1)
865 #define CHECK_PROMOTION (1 << 2)
867 /* Operator to priority map. Must be in the same order as the first
868 N entries of enum cpp_ttype. */
869 static const struct cpp_operator
871 uchar prio;
872 uchar flags;
873 } optab[] =
875 /* EQ */ {0, 0}, /* Shouldn't happen. */
876 /* NOT */ {16, NO_L_OPERAND},
877 /* GREATER */ {12, LEFT_ASSOC | CHECK_PROMOTION},
878 /* LESS */ {12, LEFT_ASSOC | CHECK_PROMOTION},
879 /* PLUS */ {14, LEFT_ASSOC | CHECK_PROMOTION},
880 /* MINUS */ {14, LEFT_ASSOC | CHECK_PROMOTION},
881 /* MULT */ {15, LEFT_ASSOC | CHECK_PROMOTION},
882 /* DIV */ {15, LEFT_ASSOC | CHECK_PROMOTION},
883 /* MOD */ {15, LEFT_ASSOC | CHECK_PROMOTION},
884 /* AND */ {9, LEFT_ASSOC | CHECK_PROMOTION},
885 /* OR */ {7, LEFT_ASSOC | CHECK_PROMOTION},
886 /* XOR */ {8, LEFT_ASSOC | CHECK_PROMOTION},
887 /* RSHIFT */ {13, LEFT_ASSOC},
888 /* LSHIFT */ {13, LEFT_ASSOC},
890 /* COMPL */ {16, NO_L_OPERAND},
891 /* AND_AND */ {6, LEFT_ASSOC},
892 /* OR_OR */ {5, LEFT_ASSOC},
893 /* Note that QUERY, COLON, and COMMA must have the same precedence.
894 However, there are some special cases for these in reduce(). */
895 /* QUERY */ {4, 0},
896 /* COLON */ {4, LEFT_ASSOC | CHECK_PROMOTION},
897 /* COMMA */ {4, LEFT_ASSOC},
898 /* OPEN_PAREN */ {1, NO_L_OPERAND},
899 /* CLOSE_PAREN */ {0, 0},
900 /* EOF */ {0, 0},
901 /* EQ_EQ */ {11, LEFT_ASSOC},
902 /* NOT_EQ */ {11, LEFT_ASSOC},
903 /* GREATER_EQ */ {12, LEFT_ASSOC | CHECK_PROMOTION},
904 /* LESS_EQ */ {12, LEFT_ASSOC | CHECK_PROMOTION},
905 /* UPLUS */ {16, NO_L_OPERAND},
906 /* UMINUS */ {16, NO_L_OPERAND}
909 /* Parse and evaluate a C expression, reading from PFILE.
910 Returns the truth value of the expression.
912 The implementation is an operator precedence parser, i.e. a
913 bottom-up parser, using a stack for not-yet-reduced tokens.
915 The stack base is op_stack, and the current stack pointer is 'top'.
916 There is a stack element for each operator (only), and the most
917 recently pushed operator is 'top->op'. An operand (value) is
918 stored in the 'value' field of the stack element of the operator
919 that precedes it. */
920 bool
921 _cpp_parse_expr (cpp_reader *pfile, bool is_if)
923 struct op *top = pfile->op_stack;
924 unsigned int lex_count;
925 bool saw_leading_not, want_value = true;
927 pfile->state.skip_eval = 0;
929 /* Set up detection of #if ! defined(). */
930 pfile->mi_ind_cmacro = 0;
931 saw_leading_not = false;
932 lex_count = 0;
934 /* Lowest priority operator prevents further reductions. */
935 top->op = CPP_EOF;
937 for (;;)
939 struct op op;
941 lex_count++;
942 op.token = cpp_get_token (pfile);
943 op.op = op.token->type;
944 op.loc = op.token->src_loc;
946 switch (op.op)
948 /* These tokens convert into values. */
949 case CPP_NUMBER:
950 case CPP_CHAR:
951 case CPP_WCHAR:
952 case CPP_CHAR16:
953 case CPP_CHAR32:
954 case CPP_NAME:
955 case CPP_HASH:
956 if (!want_value)
957 SYNTAX_ERROR2 ("missing binary operator before token \"%s\"",
958 cpp_token_as_text (pfile, op.token));
959 want_value = false;
960 top->value = eval_token (pfile, op.token);
961 continue;
963 case CPP_NOT:
964 saw_leading_not = lex_count == 1;
965 break;
966 case CPP_PLUS:
967 if (want_value)
968 op.op = CPP_UPLUS;
969 break;
970 case CPP_MINUS:
971 if (want_value)
972 op.op = CPP_UMINUS;
973 break;
975 default:
976 if ((int) op.op <= (int) CPP_EQ || (int) op.op >= (int) CPP_PLUS_EQ)
977 SYNTAX_ERROR2 ("token \"%s\" is not valid in preprocessor expressions",
978 cpp_token_as_text (pfile, op.token));
979 break;
982 /* Check we have a value or operator as appropriate. */
983 if (optab[op.op].flags & NO_L_OPERAND)
985 if (!want_value)
986 SYNTAX_ERROR2 ("missing binary operator before token \"%s\"",
987 cpp_token_as_text (pfile, op.token));
989 else if (want_value)
991 /* We want a number (or expression) and haven't got one.
992 Try to emit a specific diagnostic. */
993 if (op.op == CPP_CLOSE_PAREN && top->op == CPP_OPEN_PAREN)
994 SYNTAX_ERROR ("missing expression between '(' and ')'");
996 if (op.op == CPP_EOF && top->op == CPP_EOF)
997 SYNTAX_ERROR2 ("%s with no expression", is_if ? "#if" : "#elif");
999 if (top->op != CPP_EOF && top->op != CPP_OPEN_PAREN)
1000 SYNTAX_ERROR2 ("operator '%s' has no right operand",
1001 cpp_token_as_text (pfile, top->token));
1002 else if (op.op == CPP_CLOSE_PAREN || op.op == CPP_EOF)
1003 /* Complain about missing paren during reduction. */;
1004 else
1005 SYNTAX_ERROR2 ("operator '%s' has no left operand",
1006 cpp_token_as_text (pfile, op.token));
1009 top = reduce (pfile, top, op.op);
1010 if (!top)
1011 goto syntax_error;
1013 if (op.op == CPP_EOF)
1014 break;
1016 switch (op.op)
1018 case CPP_CLOSE_PAREN:
1019 continue;
1020 case CPP_OR_OR:
1021 if (!num_zerop (top->value))
1022 pfile->state.skip_eval++;
1023 break;
1024 case CPP_AND_AND:
1025 case CPP_QUERY:
1026 if (num_zerop (top->value))
1027 pfile->state.skip_eval++;
1028 break;
1029 case CPP_COLON:
1030 if (top->op != CPP_QUERY)
1031 SYNTAX_ERROR (" ':' without preceding '?'");
1032 if (!num_zerop (top[-1].value)) /* Was '?' condition true? */
1033 pfile->state.skip_eval++;
1034 else
1035 pfile->state.skip_eval--;
1036 default:
1037 break;
1040 want_value = true;
1042 /* Check for and handle stack overflow. */
1043 if (++top == pfile->op_limit)
1044 top = _cpp_expand_op_stack (pfile);
1046 top->op = op.op;
1047 top->token = op.token;
1048 top->loc = op.token->src_loc;
1051 /* The controlling macro expression is only valid if we called lex 3
1052 times: <!> <defined expression> and <EOF>. push_conditional ()
1053 checks that we are at top-of-file. */
1054 if (pfile->mi_ind_cmacro && !(saw_leading_not && lex_count == 3))
1055 pfile->mi_ind_cmacro = 0;
1057 if (top != pfile->op_stack)
1059 cpp_error (pfile, CPP_DL_ICE, "unbalanced stack in %s",
1060 is_if ? "#if" : "#elif");
1061 syntax_error:
1062 return false; /* Return false on syntax error. */
1065 return !num_zerop (top->value);
1068 /* Reduce the operator / value stack if possible, in preparation for
1069 pushing operator OP. Returns NULL on error, otherwise the top of
1070 the stack. */
1071 static struct op *
1072 reduce (cpp_reader *pfile, struct op *top, enum cpp_ttype op)
1074 unsigned int prio;
1076 if (top->op <= CPP_EQ || top->op > CPP_LAST_CPP_OP + 2)
1078 bad_op:
1079 cpp_error (pfile, CPP_DL_ICE, "impossible operator '%u'", top->op);
1080 return 0;
1083 if (op == CPP_OPEN_PAREN)
1084 return top;
1086 /* Decrement the priority of left-associative operators to force a
1087 reduction with operators of otherwise equal priority. */
1088 prio = optab[op].prio - ((optab[op].flags & LEFT_ASSOC) != 0);
1089 while (prio < optab[top->op].prio)
1091 if (CPP_OPTION (pfile, warn_num_sign_change)
1092 && optab[top->op].flags & CHECK_PROMOTION)
1093 check_promotion (pfile, top);
1095 switch (top->op)
1097 case CPP_UPLUS:
1098 case CPP_UMINUS:
1099 case CPP_NOT:
1100 case CPP_COMPL:
1101 top[-1].value = num_unary_op (pfile, top->value, top->op);
1102 top[-1].loc = top->loc;
1103 break;
1105 case CPP_PLUS:
1106 case CPP_MINUS:
1107 case CPP_RSHIFT:
1108 case CPP_LSHIFT:
1109 case CPP_COMMA:
1110 top[-1].value = num_binary_op (pfile, top[-1].value,
1111 top->value, top->op);
1112 top[-1].loc = top->loc;
1113 break;
1115 case CPP_GREATER:
1116 case CPP_LESS:
1117 case CPP_GREATER_EQ:
1118 case CPP_LESS_EQ:
1119 top[-1].value
1120 = num_inequality_op (pfile, top[-1].value, top->value, top->op);
1121 top[-1].loc = top->loc;
1122 break;
1124 case CPP_EQ_EQ:
1125 case CPP_NOT_EQ:
1126 top[-1].value
1127 = num_equality_op (pfile, top[-1].value, top->value, top->op);
1128 top[-1].loc = top->loc;
1129 break;
1131 case CPP_AND:
1132 case CPP_OR:
1133 case CPP_XOR:
1134 top[-1].value
1135 = num_bitwise_op (pfile, top[-1].value, top->value, top->op);
1136 top[-1].loc = top->loc;
1137 break;
1139 case CPP_MULT:
1140 top[-1].value = num_mul (pfile, top[-1].value, top->value);
1141 top[-1].loc = top->loc;
1142 break;
1144 case CPP_DIV:
1145 case CPP_MOD:
1146 top[-1].value = num_div_op (pfile, top[-1].value,
1147 top->value, top->op, top->loc);
1148 top[-1].loc = top->loc;
1149 break;
1151 case CPP_OR_OR:
1152 top--;
1153 if (!num_zerop (top->value))
1154 pfile->state.skip_eval--;
1155 top->value.low = (!num_zerop (top->value)
1156 || !num_zerop (top[1].value));
1157 top->value.high = 0;
1158 top->value.unsignedp = false;
1159 top->value.overflow = false;
1160 top->loc = top[1].loc;
1161 continue;
1163 case CPP_AND_AND:
1164 top--;
1165 if (num_zerop (top->value))
1166 pfile->state.skip_eval--;
1167 top->value.low = (!num_zerop (top->value)
1168 && !num_zerop (top[1].value));
1169 top->value.high = 0;
1170 top->value.unsignedp = false;
1171 top->value.overflow = false;
1172 top->loc = top[1].loc;
1173 continue;
1175 case CPP_OPEN_PAREN:
1176 if (op != CPP_CLOSE_PAREN)
1178 cpp_error_with_line (pfile, CPP_DL_ERROR,
1179 top->token->src_loc,
1180 0, "missing ')' in expression");
1181 return 0;
1183 top--;
1184 top->value = top[1].value;
1185 top->loc = top[1].loc;
1186 return top;
1188 case CPP_COLON:
1189 top -= 2;
1190 if (!num_zerop (top->value))
1192 pfile->state.skip_eval--;
1193 top->value = top[1].value;
1194 top->loc = top[1].loc;
1196 else
1198 top->value = top[2].value;
1199 top->loc = top[2].loc;
1201 top->value.unsignedp = (top[1].value.unsignedp
1202 || top[2].value.unsignedp);
1203 continue;
1205 case CPP_QUERY:
1206 /* COMMA and COLON should not reduce a QUERY operator. */
1207 if (op == CPP_COMMA || op == CPP_COLON)
1208 return top;
1209 cpp_error (pfile, CPP_DL_ERROR, "'?' without following ':'");
1210 return 0;
1212 default:
1213 goto bad_op;
1216 top--;
1217 if (top->value.overflow && !pfile->state.skip_eval)
1218 cpp_error (pfile, CPP_DL_PEDWARN,
1219 "integer overflow in preprocessor expression");
1222 if (op == CPP_CLOSE_PAREN)
1224 cpp_error (pfile, CPP_DL_ERROR, "missing '(' in expression");
1225 return 0;
1228 return top;
1231 /* Returns the position of the old top of stack after expansion. */
1232 struct op *
1233 _cpp_expand_op_stack (cpp_reader *pfile)
1235 size_t old_size = (size_t) (pfile->op_limit - pfile->op_stack);
1236 size_t new_size = old_size * 2 + 20;
1238 pfile->op_stack = XRESIZEVEC (struct op, pfile->op_stack, new_size);
1239 pfile->op_limit = pfile->op_stack + new_size;
1241 return pfile->op_stack + old_size;
1244 /* Emits a warning if the effective sign of either operand of OP
1245 changes because of integer promotions. */
1246 static void
1247 check_promotion (cpp_reader *pfile, const struct op *op)
1249 if (op->value.unsignedp == op[-1].value.unsignedp)
1250 return;
1252 if (op->value.unsignedp)
1254 if (!num_positive (op[-1].value, CPP_OPTION (pfile, precision)))
1255 cpp_error_with_line (pfile, CPP_DL_WARNING, op[-1].loc, 0,
1256 "the left operand of \"%s\" changes sign when promoted",
1257 cpp_token_as_text (pfile, op->token));
1259 else if (!num_positive (op->value, CPP_OPTION (pfile, precision)))
1260 cpp_error_with_line (pfile, CPP_DL_WARNING, op->loc, 0,
1261 "the right operand of \"%s\" changes sign when promoted",
1262 cpp_token_as_text (pfile, op->token));
1265 /* Clears the unused high order bits of the number pointed to by PNUM. */
1266 static cpp_num
1267 num_trim (cpp_num num, size_t precision)
1269 if (precision > PART_PRECISION)
1271 precision -= PART_PRECISION;
1272 if (precision < PART_PRECISION)
1273 num.high &= ((cpp_num_part) 1 << precision) - 1;
1275 else
1277 if (precision < PART_PRECISION)
1278 num.low &= ((cpp_num_part) 1 << precision) - 1;
1279 num.high = 0;
1282 return num;
1285 /* True iff A (presumed signed) >= 0. */
1286 static bool
1287 num_positive (cpp_num num, size_t precision)
1289 if (precision > PART_PRECISION)
1291 precision -= PART_PRECISION;
1292 return (num.high & (cpp_num_part) 1 << (precision - 1)) == 0;
1295 return (num.low & (cpp_num_part) 1 << (precision - 1)) == 0;
1298 /* Sign extend a number, with PRECISION significant bits and all
1299 others assumed clear, to fill out a cpp_num structure. */
1300 cpp_num
1301 cpp_num_sign_extend (cpp_num num, size_t precision)
1303 if (!num.unsignedp)
1305 if (precision > PART_PRECISION)
1307 precision -= PART_PRECISION;
1308 if (precision < PART_PRECISION
1309 && (num.high & (cpp_num_part) 1 << (precision - 1)))
1310 num.high |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
1312 else if (num.low & (cpp_num_part) 1 << (precision - 1))
1314 if (precision < PART_PRECISION)
1315 num.low |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
1316 num.high = ~(cpp_num_part) 0;
1320 return num;
1323 /* Returns the negative of NUM. */
1324 static cpp_num
1325 num_negate (cpp_num num, size_t precision)
1327 cpp_num copy;
1329 copy = num;
1330 num.high = ~num.high;
1331 num.low = ~num.low;
1332 if (++num.low == 0)
1333 num.high++;
1334 num = num_trim (num, precision);
1335 num.overflow = (!num.unsignedp && num_eq (num, copy) && !num_zerop (num));
1337 return num;
1340 /* Returns true if A >= B. */
1341 static bool
1342 num_greater_eq (cpp_num pa, cpp_num pb, size_t precision)
1344 bool unsignedp;
1346 unsignedp = pa.unsignedp || pb.unsignedp;
1348 if (!unsignedp)
1350 /* Both numbers have signed type. If they are of different
1351 sign, the answer is the sign of A. */
1352 unsignedp = num_positive (pa, precision);
1354 if (unsignedp != num_positive (pb, precision))
1355 return unsignedp;
1357 /* Otherwise we can do an unsigned comparison. */
1360 return (pa.high > pb.high) || (pa.high == pb.high && pa.low >= pb.low);
1363 /* Returns LHS OP RHS, where OP is a bit-wise operation. */
1364 static cpp_num
1365 num_bitwise_op (cpp_reader *pfile ATTRIBUTE_UNUSED,
1366 cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1368 lhs.overflow = false;
1369 lhs.unsignedp = lhs.unsignedp || rhs.unsignedp;
1371 /* As excess precision is zeroed, there is no need to num_trim () as
1372 these operations cannot introduce a set bit there. */
1373 if (op == CPP_AND)
1375 lhs.low &= rhs.low;
1376 lhs.high &= rhs.high;
1378 else if (op == CPP_OR)
1380 lhs.low |= rhs.low;
1381 lhs.high |= rhs.high;
1383 else
1385 lhs.low ^= rhs.low;
1386 lhs.high ^= rhs.high;
1389 return lhs;
1392 /* Returns LHS OP RHS, where OP is an inequality. */
1393 static cpp_num
1394 num_inequality_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs,
1395 enum cpp_ttype op)
1397 bool gte = num_greater_eq (lhs, rhs, CPP_OPTION (pfile, precision));
1399 if (op == CPP_GREATER_EQ)
1400 lhs.low = gte;
1401 else if (op == CPP_LESS)
1402 lhs.low = !gte;
1403 else if (op == CPP_GREATER)
1404 lhs.low = gte && !num_eq (lhs, rhs);
1405 else /* CPP_LESS_EQ. */
1406 lhs.low = !gte || num_eq (lhs, rhs);
1408 lhs.high = 0;
1409 lhs.overflow = false;
1410 lhs.unsignedp = false;
1411 return lhs;
1414 /* Returns LHS OP RHS, where OP is == or !=. */
1415 static cpp_num
1416 num_equality_op (cpp_reader *pfile ATTRIBUTE_UNUSED,
1417 cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1419 /* Work around a 3.0.4 bug; see PR 6950. */
1420 bool eq = num_eq (lhs, rhs);
1421 if (op == CPP_NOT_EQ)
1422 eq = !eq;
1423 lhs.low = eq;
1424 lhs.high = 0;
1425 lhs.overflow = false;
1426 lhs.unsignedp = false;
1427 return lhs;
1430 /* Shift NUM, of width PRECISION, right by N bits. */
1431 static cpp_num
1432 num_rshift (cpp_num num, size_t precision, size_t n)
1434 cpp_num_part sign_mask;
1435 bool x = num_positive (num, precision);
1437 if (num.unsignedp || x)
1438 sign_mask = 0;
1439 else
1440 sign_mask = ~(cpp_num_part) 0;
1442 if (n >= precision)
1443 num.high = num.low = sign_mask;
1444 else
1446 /* Sign-extend. */
1447 if (precision < PART_PRECISION)
1448 num.high = sign_mask, num.low |= sign_mask << precision;
1449 else if (precision < 2 * PART_PRECISION)
1450 num.high |= sign_mask << (precision - PART_PRECISION);
1452 if (n >= PART_PRECISION)
1454 n -= PART_PRECISION;
1455 num.low = num.high;
1456 num.high = sign_mask;
1459 if (n)
1461 num.low = (num.low >> n) | (num.high << (PART_PRECISION - n));
1462 num.high = (num.high >> n) | (sign_mask << (PART_PRECISION - n));
1466 num = num_trim (num, precision);
1467 num.overflow = false;
1468 return num;
1471 /* Shift NUM, of width PRECISION, left by N bits. */
1472 static cpp_num
1473 num_lshift (cpp_num num, size_t precision, size_t n)
1475 if (n >= precision)
1477 num.overflow = !num.unsignedp && !num_zerop (num);
1478 num.high = num.low = 0;
1480 else
1482 cpp_num orig, maybe_orig;
1483 size_t m = n;
1485 orig = num;
1486 if (m >= PART_PRECISION)
1488 m -= PART_PRECISION;
1489 num.high = num.low;
1490 num.low = 0;
1492 if (m)
1494 num.high = (num.high << m) | (num.low >> (PART_PRECISION - m));
1495 num.low <<= m;
1497 num = num_trim (num, precision);
1499 if (num.unsignedp)
1500 num.overflow = false;
1501 else
1503 maybe_orig = num_rshift (num, precision, n);
1504 num.overflow = !num_eq (orig, maybe_orig);
1508 return num;
1511 /* The four unary operators: +, -, ! and ~. */
1512 static cpp_num
1513 num_unary_op (cpp_reader *pfile, cpp_num num, enum cpp_ttype op)
1515 switch (op)
1517 case CPP_UPLUS:
1518 if (CPP_WTRADITIONAL (pfile) && !pfile->state.skip_eval)
1519 cpp_warning (pfile, CPP_W_TRADITIONAL,
1520 "traditional C rejects the unary plus operator");
1521 num.overflow = false;
1522 break;
1524 case CPP_UMINUS:
1525 num = num_negate (num, CPP_OPTION (pfile, precision));
1526 break;
1528 case CPP_COMPL:
1529 num.high = ~num.high;
1530 num.low = ~num.low;
1531 num = num_trim (num, CPP_OPTION (pfile, precision));
1532 num.overflow = false;
1533 break;
1535 default: /* case CPP_NOT: */
1536 num.low = num_zerop (num);
1537 num.high = 0;
1538 num.overflow = false;
1539 num.unsignedp = false;
1540 break;
1543 return num;
1546 /* The various binary operators. */
1547 static cpp_num
1548 num_binary_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1550 cpp_num result;
1551 size_t precision = CPP_OPTION (pfile, precision);
1552 size_t n;
1554 switch (op)
1556 /* Shifts. */
1557 case CPP_LSHIFT:
1558 case CPP_RSHIFT:
1559 if (!rhs.unsignedp && !num_positive (rhs, precision))
1561 /* A negative shift is a positive shift the other way. */
1562 if (op == CPP_LSHIFT)
1563 op = CPP_RSHIFT;
1564 else
1565 op = CPP_LSHIFT;
1566 rhs = num_negate (rhs, precision);
1568 if (rhs.high)
1569 n = ~0; /* Maximal. */
1570 else
1571 n = rhs.low;
1572 if (op == CPP_LSHIFT)
1573 lhs = num_lshift (lhs, precision, n);
1574 else
1575 lhs = num_rshift (lhs, precision, n);
1576 break;
1578 /* Arithmetic. */
1579 case CPP_MINUS:
1580 rhs = num_negate (rhs, precision);
1581 case CPP_PLUS:
1582 result.low = lhs.low + rhs.low;
1583 result.high = lhs.high + rhs.high;
1584 if (result.low < lhs.low)
1585 result.high++;
1586 result.unsignedp = lhs.unsignedp || rhs.unsignedp;
1587 result.overflow = false;
1589 result = num_trim (result, precision);
1590 if (!result.unsignedp)
1592 bool lhsp = num_positive (lhs, precision);
1593 result.overflow = (lhsp == num_positive (rhs, precision)
1594 && lhsp != num_positive (result, precision));
1596 return result;
1598 /* Comma. */
1599 default: /* case CPP_COMMA: */
1600 if (CPP_PEDANTIC (pfile) && (!CPP_OPTION (pfile, c99)
1601 || !pfile->state.skip_eval))
1602 cpp_error (pfile, CPP_DL_PEDWARN,
1603 "comma operator in operand of #if");
1604 lhs = rhs;
1605 break;
1608 return lhs;
1611 /* Multiplies two unsigned cpp_num_parts to give a cpp_num. This
1612 cannot overflow. */
1613 static cpp_num
1614 num_part_mul (cpp_num_part lhs, cpp_num_part rhs)
1616 cpp_num result;
1617 cpp_num_part middle[2], temp;
1619 result.low = LOW_PART (lhs) * LOW_PART (rhs);
1620 result.high = HIGH_PART (lhs) * HIGH_PART (rhs);
1622 middle[0] = LOW_PART (lhs) * HIGH_PART (rhs);
1623 middle[1] = HIGH_PART (lhs) * LOW_PART (rhs);
1625 temp = result.low;
1626 result.low += LOW_PART (middle[0]) << (PART_PRECISION / 2);
1627 if (result.low < temp)
1628 result.high++;
1630 temp = result.low;
1631 result.low += LOW_PART (middle[1]) << (PART_PRECISION / 2);
1632 if (result.low < temp)
1633 result.high++;
1635 result.high += HIGH_PART (middle[0]);
1636 result.high += HIGH_PART (middle[1]);
1637 result.unsignedp = true;
1638 result.overflow = false;
1640 return result;
1643 /* Multiply two preprocessing numbers. */
1644 static cpp_num
1645 num_mul (cpp_reader *pfile, cpp_num lhs, cpp_num rhs)
1647 cpp_num result, temp;
1648 bool unsignedp = lhs.unsignedp || rhs.unsignedp;
1649 bool overflow, negate = false;
1650 size_t precision = CPP_OPTION (pfile, precision);
1652 /* Prepare for unsigned multiplication. */
1653 if (!unsignedp)
1655 if (!num_positive (lhs, precision))
1656 negate = !negate, lhs = num_negate (lhs, precision);
1657 if (!num_positive (rhs, precision))
1658 negate = !negate, rhs = num_negate (rhs, precision);
1661 overflow = lhs.high && rhs.high;
1662 result = num_part_mul (lhs.low, rhs.low);
1664 temp = num_part_mul (lhs.high, rhs.low);
1665 result.high += temp.low;
1666 if (temp.high)
1667 overflow = true;
1669 temp = num_part_mul (lhs.low, rhs.high);
1670 result.high += temp.low;
1671 if (temp.high)
1672 overflow = true;
1674 temp.low = result.low, temp.high = result.high;
1675 result = num_trim (result, precision);
1676 if (!num_eq (result, temp))
1677 overflow = true;
1679 if (negate)
1680 result = num_negate (result, precision);
1682 if (unsignedp)
1683 result.overflow = false;
1684 else
1685 result.overflow = overflow || (num_positive (result, precision) ^ !negate
1686 && !num_zerop (result));
1687 result.unsignedp = unsignedp;
1689 return result;
1692 /* Divide two preprocessing numbers, LHS and RHS, returning the answer
1693 or the remainder depending upon OP. LOCATION is the source location
1694 of this operator (for diagnostics). */
1696 static cpp_num
1697 num_div_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op,
1698 source_location location)
1700 cpp_num result, sub;
1701 cpp_num_part mask;
1702 bool unsignedp = lhs.unsignedp || rhs.unsignedp;
1703 bool negate = false, lhs_neg = false;
1704 size_t i, precision = CPP_OPTION (pfile, precision);
1706 /* Prepare for unsigned division. */
1707 if (!unsignedp)
1709 if (!num_positive (lhs, precision))
1710 negate = !negate, lhs_neg = true, lhs = num_negate (lhs, precision);
1711 if (!num_positive (rhs, precision))
1712 negate = !negate, rhs = num_negate (rhs, precision);
1715 /* Find the high bit. */
1716 if (rhs.high)
1718 i = precision - 1;
1719 mask = (cpp_num_part) 1 << (i - PART_PRECISION);
1720 for (; ; i--, mask >>= 1)
1721 if (rhs.high & mask)
1722 break;
1724 else if (rhs.low)
1726 if (precision > PART_PRECISION)
1727 i = precision - PART_PRECISION - 1;
1728 else
1729 i = precision - 1;
1730 mask = (cpp_num_part) 1 << i;
1731 for (; ; i--, mask >>= 1)
1732 if (rhs.low & mask)
1733 break;
1735 else
1737 if (!pfile->state.skip_eval)
1738 cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0,
1739 "division by zero in #if");
1740 return lhs;
1743 /* First nonzero bit of RHS is bit I. Do naive division by
1744 shifting the RHS fully left, and subtracting from LHS if LHS is
1745 at least as big, and then repeating but with one less shift.
1746 This is not very efficient, but is easy to understand. */
1748 rhs.unsignedp = true;
1749 lhs.unsignedp = true;
1750 i = precision - i - 1;
1751 sub = num_lshift (rhs, precision, i);
1753 result.high = result.low = 0;
1754 for (;;)
1756 if (num_greater_eq (lhs, sub, precision))
1758 lhs = num_binary_op (pfile, lhs, sub, CPP_MINUS);
1759 if (i >= PART_PRECISION)
1760 result.high |= (cpp_num_part) 1 << (i - PART_PRECISION);
1761 else
1762 result.low |= (cpp_num_part) 1 << i;
1764 if (i-- == 0)
1765 break;
1766 sub.low = (sub.low >> 1) | (sub.high << (PART_PRECISION - 1));
1767 sub.high >>= 1;
1770 /* We divide so that the remainder has the sign of the LHS. */
1771 if (op == CPP_DIV)
1773 result.unsignedp = unsignedp;
1774 result.overflow = false;
1775 if (!unsignedp)
1777 if (negate)
1778 result = num_negate (result, precision);
1779 result.overflow = (num_positive (result, precision) ^ !negate
1780 && !num_zerop (result));
1783 return result;
1786 /* CPP_MOD. */
1787 lhs.unsignedp = unsignedp;
1788 lhs.overflow = false;
1789 if (lhs_neg)
1790 lhs = num_negate (lhs, precision);
1792 return lhs;