1 /* Parse C expressions for cpplib.
2 Copyright (C) 1987, 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2001,
3 2002 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 2, or (at your option) any
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; if not, write to the Free Software
18 Foundation, 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
26 #define PART_PRECISION (sizeof (cpp_num_part) * CHAR_BIT)
27 #define HALF_MASK (~(cpp_num_part) 0 >> (PART_PRECISION / 2))
28 #define LOW_PART(num_part) (num_part & HALF_MASK)
29 #define HIGH_PART(num_part) (num_part >> (PART_PRECISION / 2))
33 const cpp_token *token; /* The token forming op (for diagnostics). */
34 cpp_num value; /* The value logically "right" of 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 PARAMS ((cpp_num, size_t));
42 static bool num_greater_eq PARAMS ((cpp_num, cpp_num, size_t));
43 static cpp_num num_trim PARAMS ((cpp_num, size_t));
44 static cpp_num num_part_mul PARAMS ((cpp_num_part, cpp_num_part));
46 static cpp_num num_unary_op PARAMS ((cpp_reader *, cpp_num, enum cpp_ttype));
47 static cpp_num num_binary_op PARAMS ((cpp_reader *, cpp_num, cpp_num,
49 static cpp_num num_negate PARAMS ((cpp_num, size_t));
50 static cpp_num num_bitwise_op PARAMS ((cpp_reader *, cpp_num, cpp_num,
52 static cpp_num num_inequality_op PARAMS ((cpp_reader *, cpp_num, cpp_num,
54 static cpp_num num_equality_op PARAMS ((cpp_reader *, cpp_num, cpp_num,
56 static cpp_num num_mul PARAMS ((cpp_reader *, cpp_num, cpp_num));
57 static cpp_num num_div_op PARAMS ((cpp_reader *, cpp_num, cpp_num,
59 static cpp_num num_lshift PARAMS ((cpp_num, size_t, size_t));
60 static cpp_num num_rshift PARAMS ((cpp_num, size_t, size_t));
62 static cpp_num append_digit PARAMS ((cpp_num, int, int, size_t));
63 static cpp_num parse_defined PARAMS ((cpp_reader *));
64 static cpp_num eval_token PARAMS ((cpp_reader *, const cpp_token *));
65 static struct op *reduce PARAMS ((cpp_reader *, struct op *, enum cpp_ttype));
66 static unsigned int interpret_float_suffix PARAMS ((const uchar *, size_t));
67 static unsigned int interpret_int_suffix PARAMS ((const uchar *, size_t));
68 static void check_promotion PARAMS ((cpp_reader *, const struct op *));
70 /* Token type abuse to create unary plus and minus operators. */
71 #define CPP_UPLUS (CPP_LAST_CPP_OP + 1)
72 #define CPP_UMINUS (CPP_LAST_CPP_OP + 2)
74 /* With -O2, gcc appears to produce nice code, moving the error
75 message load and subsequent jump completely out of the main path. */
76 #define SYNTAX_ERROR(msgid) \
77 do { cpp_error (pfile, DL_ERROR, msgid); goto syntax_error; } while(0)
78 #define SYNTAX_ERROR2(msgid, arg) \
79 do { cpp_error (pfile, DL_ERROR, msgid, arg); goto syntax_error; } while(0)
81 /* Subroutine of cpp_classify_number. S points to a float suffix of
82 length LEN, possibly zero. Returns 0 for an invalid suffix, or a
83 flag vector describing the suffix. */
85 interpret_float_suffix (s, len)
89 size_t f = 0, l = 0, i = 0;
94 case 'f': case 'F': f++; break;
95 case 'l': case 'L': l++; break;
97 case 'j': case 'J': i++; break;
102 if (f + l > 1 || i > 1)
105 return ((i ? CPP_N_IMAGINARY : 0)
107 l ? CPP_N_LARGE : CPP_N_MEDIUM));
110 /* Subroutine of cpp_classify_number. S points to an integer suffix
111 of length LEN, possibly zero. Returns 0 for an invalid suffix, or a
112 flag vector describing the suffix. */
114 interpret_int_suffix (s, len)
125 case 'u': case 'U': u++; break;
127 case 'j': case 'J': i++; break;
128 case 'l': case 'L': l++;
129 /* If there are two Ls, they must be adjacent and the same case. */
130 if (l == 2 && s[len] != s[len + 1])
137 if (l > 2 || u > 1 || i > 1)
140 return ((i ? CPP_N_IMAGINARY : 0)
141 | (u ? CPP_N_UNSIGNED : 0)
142 | ((l == 0) ? CPP_N_SMALL
143 : (l == 1) ? CPP_N_MEDIUM : CPP_N_LARGE));
146 /* Categorize numeric constants according to their field (integer,
147 floating point, or invalid), radix (decimal, octal, hexadecimal),
148 and type suffixes. */
150 cpp_classify_number (pfile, token)
152 const cpp_token *token;
154 const uchar *str = token->val.str.text;
156 unsigned int max_digit, result, radix;
157 enum {NOT_FLOAT = 0, AFTER_POINT, AFTER_EXPON} float_flag;
159 /* If the lexer has done its job, length one can only be a single
160 digit. Fast-path this very common case. */
161 if (token->val.str.len == 1)
162 return CPP_N_INTEGER | CPP_N_SMALL | CPP_N_DECIMAL;
164 limit = str + token->val.str.len;
165 float_flag = NOT_FLOAT;
169 /* First, interpret the radix. */
175 /* Require at least one hex digit to classify it as hex. */
176 if ((*str == 'x' || *str == 'X') && ISXDIGIT (str[1]))
183 /* Now scan for a well-formed integer or float. */
186 unsigned int c = *str++;
188 if (ISDIGIT (c) || (ISXDIGIT (c) && radix == 16))
196 if (float_flag == NOT_FLOAT)
197 float_flag = AFTER_POINT;
199 SYNTAX_ERROR ("too many decimal points in number");
201 else if ((radix <= 10 && (c == 'e' || c == 'E'))
202 || (radix == 16 && (c == 'p' || c == 'P')))
204 float_flag = AFTER_EXPON;
209 /* Start of suffix. */
215 if (float_flag != NOT_FLOAT && radix == 8)
218 if (max_digit >= radix)
219 SYNTAX_ERROR2 ("invalid digit \"%c\" in octal constant", '0' + max_digit);
221 if (float_flag != NOT_FLOAT)
223 if (radix == 16 && CPP_PEDANTIC (pfile) && !CPP_OPTION (pfile, c99))
224 cpp_error (pfile, DL_PEDWARN,
225 "use of C99 hexadecimal floating constant");
227 if (float_flag == AFTER_EXPON)
229 if (*str == '+' || *str == '-')
232 /* Exponent is decimal, even if string is a hex float. */
234 SYNTAX_ERROR ("exponent has no digits");
238 while (ISDIGIT (*str));
240 else if (radix == 16)
241 SYNTAX_ERROR ("hexadecimal floating constants require an exponent");
243 result = interpret_float_suffix (str, limit - str);
246 cpp_error (pfile, DL_ERROR,
247 "invalid suffix \"%.*s\" on floating constant",
248 (int) (limit - str), str);
249 return CPP_N_INVALID;
252 /* Traditional C didn't accept any floating suffixes. */
254 && CPP_WTRADITIONAL (pfile)
255 && ! cpp_sys_macro_p (pfile))
256 cpp_error (pfile, DL_WARNING,
257 "traditional C rejects the \"%.*s\" suffix",
258 (int) (limit - str), str);
260 result |= CPP_N_FLOATING;
264 result = interpret_int_suffix (str, limit - str);
267 cpp_error (pfile, DL_ERROR,
268 "invalid suffix \"%.*s\" on integer constant",
269 (int) (limit - str), str);
270 return CPP_N_INVALID;
273 /* Traditional C only accepted the 'L' suffix. */
274 if (result != CPP_N_SMALL && result != CPP_N_MEDIUM
275 && CPP_WTRADITIONAL (pfile)
276 && ! cpp_sys_macro_p (pfile))
277 cpp_error (pfile, DL_WARNING,
278 "traditional C rejects the \"%.*s\" suffix",
279 (int) (limit - str), str);
281 if ((result & CPP_N_WIDTH) == CPP_N_LARGE
282 && ! CPP_OPTION (pfile, c99)
283 && CPP_OPTION (pfile, warn_long_long))
284 cpp_error (pfile, DL_PEDWARN, "use of C99 long long integer constant");
286 result |= CPP_N_INTEGER;
289 if ((result & CPP_N_IMAGINARY) && CPP_PEDANTIC (pfile))
290 cpp_error (pfile, DL_PEDWARN, "imaginary constants are a GCC extension");
293 result |= CPP_N_DECIMAL;
294 else if (radix == 16)
297 result |= CPP_N_OCTAL;
302 return CPP_N_INVALID;
305 /* cpp_interpret_integer converts an integer constant into a cpp_num,
306 of precision options->precision.
308 We do not provide any interface for decimal->float conversion,
309 because the preprocessor doesn't need it and the floating point
310 handling in GCC proper is too ugly to speak of. */
312 cpp_interpret_integer (pfile, token, type)
314 const cpp_token *token;
317 const uchar *p, *end;
322 result.unsignedp = !!(type & CPP_N_UNSIGNED);
323 result.overflow = false;
325 p = token->val.str.text;
326 end = p + token->val.str.len;
328 /* Common case of a single digit. */
329 if (token->val.str.len == 1)
330 result.low = p[0] - '0';
334 size_t precision = CPP_OPTION (pfile, precision);
335 unsigned int base = 10, c = 0;
336 bool overflow = false;
338 if ((type & CPP_N_RADIX) == CPP_N_OCTAL)
343 else if ((type & CPP_N_RADIX) == CPP_N_HEX)
349 /* We can add a digit to numbers strictly less than this without
350 needing the precision and slowness of double integers. */
351 max = ~(cpp_num_part) 0;
352 if (precision < PART_PRECISION)
353 max >>= PART_PRECISION - precision;
354 max = (max - base + 1) / base + 1;
360 if (ISDIGIT (c) || (base == 16 && ISXDIGIT (c)))
365 /* Strict inequality for when max is set to zero. */
366 if (result.low < max)
367 result.low = result.low * base + c;
370 result = append_digit (result, c, base, precision);
371 overflow |= result.overflow;
377 cpp_error (pfile, DL_PEDWARN,
378 "integer constant is too large for its type");
379 /* If too big to be signed, consider it unsigned. Only warn for
380 decimal numbers. Traditional numbers were always signed (but
381 we still honour an explicit U suffix); but we only have
382 traditional semantics in directives. */
383 else if (!result.unsignedp
384 && !(CPP_OPTION (pfile, traditional)
385 && pfile->state.in_directive)
386 && !num_positive (result, precision))
389 cpp_error (pfile, DL_WARNING,
390 "integer constant is so large that it is unsigned");
391 result.unsignedp = true;
398 /* Append DIGIT to NUM, a number of PRECISION bits being read in base
401 append_digit (num, digit, base, precision)
407 unsigned int shift = 3 + (base == 16);
409 cpp_num_part add_high, add_low;
411 /* Multiply by 8 or 16. Catching this overflow here means we don't
412 need to worry about add_high overflowing. */
413 overflow = !!(num.high >> (PART_PRECISION - shift));
414 result.high = num.high << shift;
415 result.low = num.low << shift;
416 result.high |= num.low >> (PART_PRECISION - shift);
420 add_low = num.low << 1;
421 add_high = (num.high << 1) + (num.low >> (PART_PRECISION - 1));
424 add_high = add_low = 0;
426 if (add_low + digit < add_low)
430 if (result.low + add_low < result.low)
432 if (result.high + add_high < result.high)
435 result.low += add_low;
436 result.high += add_high;
438 /* The above code catches overflow of a cpp_num type. This catches
439 overflow of the (possibly shorter) target precision. */
440 num.low = result.low;
441 num.high = result.high;
442 result = num_trim (result, precision);
443 if (!num_eq (result, num))
446 result.unsignedp = num.unsignedp;
447 result.overflow = overflow;
451 /* Handle meeting "defined" in a preprocessor expression. */
453 parse_defined (pfile)
458 cpp_hashnode *node = 0;
459 const cpp_token *token;
460 cpp_context *initial_context = pfile->context;
462 /* Don't expand macros. */
463 pfile->state.prevent_expansion++;
465 token = cpp_get_token (pfile);
466 if (token->type == CPP_OPEN_PAREN)
469 token = cpp_get_token (pfile);
472 if (token->type == CPP_NAME)
474 node = token->val.node;
475 if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN)
477 cpp_error (pfile, DL_ERROR, "missing ')' after \"defined\"");
483 cpp_error (pfile, DL_ERROR,
484 "operator \"defined\" requires an identifier");
485 if (token->flags & NAMED_OP)
490 op.type = token->type;
491 cpp_error (pfile, DL_ERROR,
492 "(\"%s\" is an alternative token for \"%s\" in C++)",
493 cpp_token_as_text (pfile, token),
494 cpp_token_as_text (pfile, &op));
500 if (pfile->context != initial_context)
501 cpp_error (pfile, DL_WARNING,
502 "this use of \"defined\" may not be portable");
504 _cpp_mark_macro_used (node);
506 /* A possible controlling macro of the form #if !defined ().
507 _cpp_parse_expr checks there was no other junk on the line. */
508 pfile->mi_ind_cmacro = node;
511 pfile->state.prevent_expansion--;
513 result.unsignedp = false;
515 result.overflow = false;
516 result.low = node && node->type == NT_MACRO;
520 /* Convert a token into a CPP_NUMBER (an interpreted preprocessing
521 number or character constant, or the result of the "defined" or "#"
524 eval_token (pfile, token)
526 const cpp_token *token;
535 temp = cpp_classify_number (pfile, token);
536 switch (temp & CPP_N_CATEGORY)
539 cpp_error (pfile, DL_ERROR,
540 "floating constant in preprocessor expression");
543 if (!(temp & CPP_N_IMAGINARY))
544 return cpp_interpret_integer (pfile, token, temp);
545 cpp_error (pfile, DL_ERROR,
546 "imaginary number in preprocessor expression");
550 /* Error already issued. */
553 result.high = result.low = 0;
559 cppchar_t cc = cpp_interpret_charconst (pfile, token,
564 /* Sign-extend the result if necessary. */
565 if (!unsignedp && (cppchar_signed_t) cc < 0)
567 if (PART_PRECISION > BITS_PER_CPPCHAR_T)
568 result.low |= ~(~(cpp_num_part) 0
569 >> (PART_PRECISION - BITS_PER_CPPCHAR_T));
570 result.high = ~(cpp_num_part) 0;
571 result = num_trim (result, CPP_OPTION (pfile, precision));
577 if (token->val.node == pfile->spec_nodes.n_defined)
578 return parse_defined (pfile);
579 else if (CPP_OPTION (pfile, cplusplus)
580 && (token->val.node == pfile->spec_nodes.n_true
581 || token->val.node == pfile->spec_nodes.n_false))
584 result.low = (token->val.node == pfile->spec_nodes.n_true);
586 /* Warn about use of true or false in #if when pedantic
587 and stdbool.h has not been included. */
588 if (CPP_PEDANTIC (pfile)
589 && ! cpp_defined (pfile, DSC("__bool_true_false_are_defined")))
590 cpp_error (pfile, DL_PEDWARN,
591 "ISO C++ does not permit \"%s\" in #if",
592 NODE_NAME (token->val.node));
598 if (CPP_OPTION (pfile, warn_undef) && !pfile->state.skip_eval)
599 cpp_error (pfile, DL_WARNING, "\"%s\" is not defined",
600 NODE_NAME (token->val.node));
604 default: /* CPP_HASH */
605 _cpp_test_assertion (pfile, &temp);
610 result.unsignedp = !!unsignedp;
611 result.overflow = false;
615 /* Operator precedence and flags table.
617 After an operator is returned from the lexer, if it has priority less
618 than the operator on the top of the stack, we reduce the stack by one
619 operator and repeat the test. Since equal priorities do not reduce,
620 this is naturally right-associative.
622 We handle left-associative operators by decrementing the priority of
623 just-lexed operators by one, but retaining the priority of operators
624 already on the stack.
626 The remaining cases are '(' and ')'. We handle '(' by skipping the
627 reduction phase completely. ')' is given lower priority than
628 everything else, including '(', effectively forcing a reduction of the
629 parenthesised expression. If there is a matching '(', the routine
630 reduce() exits immediately. If the normal exit route sees a ')', then
631 there cannot have been a matching '(' and an error message is output.
633 The parser assumes all shifted operators require a left operand unless
634 the flag NO_L_OPERAND is set. These semantics are automatic; any
635 extra semantics need to be handled with operator-specific code. */
637 /* Flags. If CHECK_PROMOTION, we warn if the effective sign of an
638 operand changes because of integer promotions. */
639 #define NO_L_OPERAND (1 << 0)
640 #define LEFT_ASSOC (1 << 1)
641 #define CHECK_PROMOTION (1 << 2)
643 /* Operator to priority map. Must be in the same order as the first
644 N entries of enum cpp_ttype. */
645 static const struct operator
651 /* EQ */ {0, 0}, /* Shouldn't happen. */
652 /* NOT */ {16, NO_L_OPERAND},
653 /* GREATER */ {12, LEFT_ASSOC | CHECK_PROMOTION},
654 /* LESS */ {12, LEFT_ASSOC | CHECK_PROMOTION},
655 /* PLUS */ {14, LEFT_ASSOC | CHECK_PROMOTION},
656 /* MINUS */ {14, LEFT_ASSOC | CHECK_PROMOTION},
657 /* MULT */ {15, LEFT_ASSOC | CHECK_PROMOTION},
658 /* DIV */ {15, LEFT_ASSOC | CHECK_PROMOTION},
659 /* MOD */ {15, LEFT_ASSOC | CHECK_PROMOTION},
660 /* AND */ {9, LEFT_ASSOC | CHECK_PROMOTION},
661 /* OR */ {7, LEFT_ASSOC | CHECK_PROMOTION},
662 /* XOR */ {8, LEFT_ASSOC | CHECK_PROMOTION},
663 /* RSHIFT */ {13, LEFT_ASSOC},
664 /* LSHIFT */ {13, LEFT_ASSOC},
666 /* MIN */ {10, LEFT_ASSOC | CHECK_PROMOTION},
667 /* MAX */ {10, LEFT_ASSOC | CHECK_PROMOTION},
669 /* COMPL */ {16, NO_L_OPERAND},
670 /* AND_AND */ {6, LEFT_ASSOC},
671 /* OR_OR */ {5, LEFT_ASSOC},
673 /* COLON */ {4, LEFT_ASSOC | CHECK_PROMOTION},
674 /* COMMA */ {2, LEFT_ASSOC},
675 /* OPEN_PAREN */ {1, NO_L_OPERAND},
676 /* CLOSE_PAREN */ {0, 0},
678 /* EQ_EQ */ {11, LEFT_ASSOC},
679 /* NOT_EQ */ {11, LEFT_ASSOC},
680 /* GREATER_EQ */ {12, LEFT_ASSOC | CHECK_PROMOTION},
681 /* LESS_EQ */ {12, LEFT_ASSOC | CHECK_PROMOTION},
682 /* UPLUS */ {16, NO_L_OPERAND},
683 /* UMINUS */ {16, NO_L_OPERAND}
686 /* Parse and evaluate a C expression, reading from PFILE.
687 Returns the truth value of the expression.
689 The implementation is an operator precedence parser, i.e. a
690 bottom-up parser, using a stack for not-yet-reduced tokens.
692 The stack base is op_stack, and the current stack pointer is 'top'.
693 There is a stack element for each operator (only), and the most
694 recently pushed operator is 'top->op'. An operand (value) is
695 stored in the 'value' field of the stack element of the operator
698 _cpp_parse_expr (pfile)
701 struct op *top = pfile->op_stack;
702 unsigned int lex_count;
703 bool saw_leading_not, want_value = true;
705 pfile->state.skip_eval = 0;
707 /* Set up detection of #if ! defined(). */
708 pfile->mi_ind_cmacro = 0;
709 saw_leading_not = false;
712 /* Lowest priority operator prevents further reductions. */
720 op.token = cpp_get_token (pfile);
721 op.op = op.token->type;
725 /* These tokens convert into values. */
732 SYNTAX_ERROR2 ("missing binary operator before token \"%s\"",
733 cpp_token_as_text (pfile, op.token));
735 top->value = eval_token (pfile, op.token);
739 saw_leading_not = lex_count == 1;
750 if (ISGRAPH (op.token->val.c))
751 SYNTAX_ERROR2 ("invalid character '%c' in #if", op.token->val.c);
753 SYNTAX_ERROR2 ("invalid character '\\%03o' in #if",
757 if ((int) op.op <= (int) CPP_EQ || (int) op.op >= (int) CPP_PLUS_EQ)
758 SYNTAX_ERROR2 ("token \"%s\" is not valid in preprocessor expressions",
759 cpp_token_as_text (pfile, op.token));
763 /* Check we have a value or operator as appropriate. */
764 if (optab[op.op].flags & NO_L_OPERAND)
767 SYNTAX_ERROR2 ("missing binary operator before token \"%s\"",
768 cpp_token_as_text (pfile, op.token));
772 /* Ordering here is subtle and intended to favour the
773 missing parenthesis diagnostics over alternatives. */
774 if (op.op == CPP_CLOSE_PAREN)
776 if (top->op == CPP_OPEN_PAREN)
777 SYNTAX_ERROR ("void expression between '(' and ')'");
779 else if (top->op == CPP_EOF)
780 SYNTAX_ERROR ("#if with no expression");
781 if (top->op != CPP_EOF && top->op != CPP_OPEN_PAREN)
782 SYNTAX_ERROR2 ("operator '%s' has no right operand",
783 cpp_token_as_text (pfile, top->token));
786 top = reduce (pfile, top, op.op);
790 if (op.op == CPP_EOF)
795 case CPP_CLOSE_PAREN:
798 if (!num_zerop (top->value))
799 pfile->state.skip_eval++;
803 if (num_zerop (top->value))
804 pfile->state.skip_eval++;
807 if (top->op != CPP_QUERY)
808 SYNTAX_ERROR (" ':' without preceding '?'");
809 if (!num_zerop (top[-1].value)) /* Was '?' condition true? */
810 pfile->state.skip_eval++;
812 pfile->state.skip_eval--;
819 /* Check for and handle stack overflow. */
820 if (++top == pfile->op_limit)
821 top = _cpp_expand_op_stack (pfile);
824 top->token = op.token;
827 /* The controlling macro expression is only valid if we called lex 3
828 times: <!> <defined expression> and <EOF>. push_conditional ()
829 checks that we are at top-of-file. */
830 if (pfile->mi_ind_cmacro && !(saw_leading_not && lex_count == 3))
831 pfile->mi_ind_cmacro = 0;
833 if (top != pfile->op_stack)
835 cpp_error (pfile, DL_ICE, "unbalanced stack in #if");
837 return false; /* Return false on syntax error. */
840 return !num_zerop (top->value);
843 /* Reduce the operator / value stack if possible, in preparation for
844 pushing operator OP. Returns NULL on error, otherwise the top of
847 reduce (pfile, top, op)
854 if (top->op <= CPP_EQ || top->op > CPP_LAST_CPP_OP + 2)
857 cpp_error (pfile, DL_ICE, "impossible operator '%u'", top->op);
861 if (op == CPP_OPEN_PAREN)
864 /* Decrement the priority of left-associative operators to force a
865 reduction with operators of otherwise equal priority. */
866 prio = optab[op].prio - ((optab[op].flags & LEFT_ASSOC) != 0);
867 while (prio < optab[top->op].prio)
869 if (CPP_OPTION (pfile, warn_num_sign_change)
870 && optab[top->op].flags & CHECK_PROMOTION)
871 check_promotion (pfile, top);
879 top[-1].value = num_unary_op (pfile, top->value, top->op);
889 top[-1].value = num_binary_op (pfile, top[-1].value,
890 top->value, top->op);
898 = num_inequality_op (pfile, top[-1].value, top->value, top->op);
904 = num_equality_op (pfile, top[-1].value, top->value, top->op);
911 = num_bitwise_op (pfile, top[-1].value, top->value, top->op);
915 top[-1].value = num_mul (pfile, top[-1].value, top->value);
920 top[-1].value = num_div_op (pfile, top[-1].value,
921 top->value, top->op);
926 if (!num_zerop (top->value))
927 pfile->state.skip_eval--;
928 top->value.low = (!num_zerop (top->value)
929 || !num_zerop (top[1].value));
931 top->value.unsignedp = false;
932 top->value.overflow = false;
937 if (num_zerop (top->value))
938 pfile->state.skip_eval--;
939 top->value.low = (!num_zerop (top->value)
940 && !num_zerop (top[1].value));
942 top->value.unsignedp = false;
943 top->value.overflow = false;
947 if (op != CPP_CLOSE_PAREN)
949 cpp_error (pfile, DL_ERROR, "missing ')' in expression");
953 top->value = top[1].value;
958 if (!num_zerop (top->value))
960 pfile->state.skip_eval--;
961 top->value = top[1].value;
964 top->value = top[2].value;
965 top->value.unsignedp = (top[1].value.unsignedp
966 || top[2].value.unsignedp);
970 cpp_error (pfile, DL_ERROR, "'?' without following ':'");
978 if (top->value.overflow && !pfile->state.skip_eval)
979 cpp_error (pfile, DL_PEDWARN,
980 "integer overflow in preprocessor expression");
983 if (op == CPP_CLOSE_PAREN)
985 cpp_error (pfile, DL_ERROR, "missing '(' in expression");
992 /* Returns the position of the old top of stack after expansion. */
994 _cpp_expand_op_stack (pfile)
997 size_t old_size = (size_t) (pfile->op_limit - pfile->op_stack);
998 size_t new_size = old_size * 2 + 20;
1000 pfile->op_stack = (struct op *) xrealloc (pfile->op_stack,
1001 new_size * sizeof (struct op));
1002 pfile->op_limit = pfile->op_stack + new_size;
1004 return pfile->op_stack + old_size;
1007 /* Emits a warning if the effective sign of either operand of OP
1008 changes because of integer promotions. */
1010 check_promotion (pfile, op)
1012 const struct op *op;
1014 if (op->value.unsignedp == op[-1].value.unsignedp)
1017 if (op->value.unsignedp)
1019 if (!num_positive (op[-1].value, CPP_OPTION (pfile, precision)))
1020 cpp_error (pfile, DL_WARNING,
1021 "the left operand of \"%s\" changes sign when promoted",
1022 cpp_token_as_text (pfile, op->token));
1024 else if (!num_positive (op->value, CPP_OPTION (pfile, precision)))
1025 cpp_error (pfile, DL_WARNING,
1026 "the right operand of \"%s\" changes sign when promoted",
1027 cpp_token_as_text (pfile, op->token));
1030 /* Clears the unused high order bits of the number pointed to by PNUM. */
1032 num_trim (num, precision)
1036 if (precision > PART_PRECISION)
1038 precision -= PART_PRECISION;
1039 if (precision < PART_PRECISION)
1040 num.high &= ((cpp_num_part) 1 << precision) - 1;
1044 if (precision < PART_PRECISION)
1045 num.low &= ((cpp_num_part) 1 << precision) - 1;
1052 /* True iff A (presumed signed) >= 0. */
1054 num_positive (num, precision)
1058 if (precision > PART_PRECISION)
1060 precision -= PART_PRECISION;
1061 return (num.high & (cpp_num_part) 1 << (precision - 1)) == 0;
1064 return (num.low & (cpp_num_part) 1 << (precision - 1)) == 0;
1067 /* Sign extend a number, with PRECISION significant bits and all
1068 others assumed clear, to fill out a cpp_num structure. */
1070 cpp_num_sign_extend (num, precision)
1076 if (precision > PART_PRECISION)
1078 precision -= PART_PRECISION;
1079 if (precision < PART_PRECISION
1080 && (num.high & (cpp_num_part) 1 << (precision - 1)))
1081 num.high |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
1083 else if (num.low & (cpp_num_part) 1 << (precision - 1))
1085 if (precision < PART_PRECISION)
1086 num.low |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
1087 num.high = ~(cpp_num_part) 0;
1094 /* Returns the negative of NUM. */
1096 num_negate (num, precision)
1103 num.high = ~num.high;
1107 num = num_trim (num, precision);
1108 num.overflow = (!num.unsignedp && num_eq (num, copy) && !num_zerop (num));
1113 /* Returns true if A >= B. */
1115 num_greater_eq (pa, pb, precision)
1121 unsignedp = pa.unsignedp || pb.unsignedp;
1125 /* Both numbers have signed type. If they are of different
1126 sign, the answer is the sign of A. */
1127 unsignedp = num_positive (pa, precision);
1129 if (unsignedp != num_positive (pb, precision))
1132 /* Otherwise we can do an unsigned comparison. */
1135 return (pa.high > pb.high) || (pa.high == pb.high && pa.low >= pb.low);
1138 /* Returns LHS OP RHS, where OP is a bit-wise operation. */
1140 num_bitwise_op (pfile, lhs, rhs, op)
1141 cpp_reader *pfile ATTRIBUTE_UNUSED;
1145 lhs.overflow = false;
1146 lhs.unsignedp = lhs.unsignedp || rhs.unsignedp;
1148 /* As excess precision is zeroed, there is no need to num_trim () as
1149 these operations cannot introduce a set bit there. */
1153 lhs.high &= rhs.high;
1155 else if (op == CPP_OR)
1158 lhs.high |= rhs.high;
1163 lhs.high ^= rhs.high;
1169 /* Returns LHS OP RHS, where OP is an inequality. */
1171 num_inequality_op (pfile, lhs, rhs, op)
1176 bool gte = num_greater_eq (lhs, rhs, CPP_OPTION (pfile, precision));
1178 if (op == CPP_GREATER_EQ)
1180 else if (op == CPP_LESS)
1182 else if (op == CPP_GREATER)
1183 lhs.low = gte && !num_eq (lhs, rhs);
1184 else /* CPP_LESS_EQ. */
1185 lhs.low = !gte || num_eq (lhs, rhs);
1188 lhs.overflow = false;
1189 lhs.unsignedp = false;
1193 /* Returns LHS OP RHS, where OP is == or !=. */
1195 num_equality_op (pfile, lhs, rhs, op)
1196 cpp_reader *pfile ATTRIBUTE_UNUSED;
1200 /* Work around a 3.0.4 bug; see PR 6950. */
1201 bool eq = num_eq (lhs, rhs);
1202 if (op == CPP_NOT_EQ)
1206 lhs.overflow = false;
1207 lhs.unsignedp = false;
1211 /* Shift NUM, of width PRECISION, right by N bits. */
1213 num_rshift (num, precision, n)
1215 size_t precision, n;
1217 cpp_num_part sign_mask;
1219 if (num.unsignedp || num_positive (num, precision))
1222 sign_mask = ~(cpp_num_part) 0;
1225 num.high = num.low = sign_mask;
1229 if (precision < PART_PRECISION)
1230 num.high = sign_mask, num.low |= sign_mask << precision;
1231 else if (precision < 2 * PART_PRECISION)
1232 num.high |= sign_mask << (precision - PART_PRECISION);
1234 if (n >= PART_PRECISION)
1236 n -= PART_PRECISION;
1238 num.high = sign_mask;
1243 num.low = (num.low >> n) | (num.high << (PART_PRECISION - n));
1244 num.high = (num.high >> n) | (sign_mask << (PART_PRECISION - n));
1248 num = num_trim (num, precision);
1249 num.overflow = false;
1253 /* Shift NUM, of width PRECISION, left by N bits. */
1255 num_lshift (num, precision, n)
1257 size_t precision, n;
1261 num.overflow = !num.unsignedp && !num_zerop (num);
1262 num.high = num.low = 0;
1266 cpp_num orig, maybe_orig;
1270 if (m >= PART_PRECISION)
1272 m -= PART_PRECISION;
1278 num.high = (num.high << m) | (num.low >> (PART_PRECISION - m));
1281 num = num_trim (num, precision);
1284 num.overflow = false;
1287 maybe_orig = num_rshift (num, precision, n);
1288 num.overflow = !num_eq (orig, maybe_orig);
1295 /* The four unary operators: +, -, ! and ~. */
1297 num_unary_op (pfile, num, op)
1305 if (CPP_WTRADITIONAL (pfile) && !pfile->state.skip_eval)
1306 cpp_error (pfile, DL_WARNING,
1307 "traditional C rejects the unary plus operator");
1308 num.overflow = false;
1312 num = num_negate (num, CPP_OPTION (pfile, precision));
1316 num.high = ~num.high;
1318 num = num_trim (num, CPP_OPTION (pfile, precision));
1319 num.overflow = false;
1322 default: /* case CPP_NOT: */
1323 num.low = num_zerop (num);
1325 num.overflow = false;
1326 num.unsignedp = false;
1333 /* The various binary operators. */
1335 num_binary_op (pfile, lhs, rhs, op)
1341 size_t precision = CPP_OPTION (pfile, precision);
1350 if (!rhs.unsignedp && !num_positive (rhs, precision))
1352 /* A negative shift is a positive shift the other way. */
1353 if (op == CPP_LSHIFT)
1357 rhs = num_negate (rhs, precision);
1360 n = ~0; /* Maximal. */
1363 if (op == CPP_LSHIFT)
1364 lhs = num_lshift (lhs, precision, n);
1366 lhs = num_rshift (lhs, precision, n);
1373 bool unsignedp = lhs.unsignedp || rhs.unsignedp;
1375 gte = num_greater_eq (lhs, rhs, precision);
1380 lhs.unsignedp = unsignedp;
1386 rhs = num_negate (rhs, precision);
1388 result.low = lhs.low + rhs.low;
1389 result.high = lhs.high + rhs.high;
1390 if (result.low < lhs.low)
1393 result = num_trim (result, precision);
1394 result.unsignedp = lhs.unsignedp || rhs.unsignedp;
1395 if (result.unsignedp)
1396 result.overflow = false;
1399 bool lhsp = num_positive (lhs, precision);
1400 result.overflow = (lhsp == num_positive (rhs, precision)
1401 && lhsp != num_positive (result, precision));
1406 default: /* case CPP_COMMA: */
1407 if (CPP_PEDANTIC (pfile) && !pfile->state.skip_eval)
1408 cpp_error (pfile, DL_PEDWARN,
1409 "comma operator in operand of #if");
1417 /* Multiplies two unsigned cpp_num_parts to give a cpp_num. This
1420 num_part_mul (lhs, rhs)
1421 cpp_num_part lhs, rhs;
1424 cpp_num_part middle[2], temp;
1426 result.low = LOW_PART (lhs) * LOW_PART (rhs);
1427 result.high = HIGH_PART (lhs) * HIGH_PART (rhs);
1429 middle[0] = LOW_PART (lhs) * HIGH_PART (rhs);
1430 middle[1] = HIGH_PART (lhs) * LOW_PART (rhs);
1433 result.low += LOW_PART (middle[0]) << (PART_PRECISION / 2);
1434 if (result.low < temp)
1438 result.low += LOW_PART (middle[1]) << (PART_PRECISION / 2);
1439 if (result.low < temp)
1442 result.high += HIGH_PART (middle[0]);
1443 result.high += HIGH_PART (middle[1]);
1448 /* Multiply two preprocessing numbers. */
1450 num_mul (pfile, lhs, rhs)
1454 cpp_num result, temp;
1455 bool unsignedp = lhs.unsignedp || rhs.unsignedp;
1456 bool overflow, negate = false;
1457 size_t precision = CPP_OPTION (pfile, precision);
1459 /* Prepare for unsigned multiplication. */
1462 if (!num_positive (lhs, precision))
1463 negate = !negate, lhs = num_negate (lhs, precision);
1464 if (!num_positive (rhs, precision))
1465 negate = !negate, rhs = num_negate (rhs, precision);
1468 overflow = lhs.high && rhs.high;
1469 result = num_part_mul (lhs.low, rhs.low);
1471 temp = num_part_mul (lhs.high, rhs.low);
1472 result.high += temp.low;
1476 temp = num_part_mul (lhs.low, rhs.high);
1477 result.high += temp.low;
1481 temp.low = result.low, temp.high = result.high;
1482 result = num_trim (result, precision);
1483 if (!num_eq (result, temp))
1487 result = num_negate (result, precision);
1490 result.overflow = false;
1492 result.overflow = overflow || (num_positive (result, precision) ^ !negate
1493 && !num_zerop (result));
1494 result.unsignedp = unsignedp;
1499 /* Divide two preprocessing numbers, returning the answer or the
1500 remainder depending upon OP. */
1502 num_div_op (pfile, lhs, rhs, op)
1507 cpp_num result, sub;
1509 bool unsignedp = lhs.unsignedp || rhs.unsignedp;
1510 bool negate = false, lhs_neg = false;
1511 size_t i, precision = CPP_OPTION (pfile, precision);
1513 /* Prepare for unsigned division. */
1516 if (!num_positive (lhs, precision))
1517 negate = !negate, lhs_neg = true, lhs = num_negate (lhs, precision);
1518 if (!num_positive (rhs, precision))
1519 negate = !negate, rhs = num_negate (rhs, precision);
1522 /* Find the high bit. */
1526 mask = (cpp_num_part) 1 << (i - PART_PRECISION);
1527 for (; ; i--, mask >>= 1)
1528 if (rhs.high & mask)
1533 if (precision > PART_PRECISION)
1534 i = precision - PART_PRECISION - 1;
1537 mask = (cpp_num_part) 1 << i;
1538 for (; ; i--, mask >>= 1)
1544 if (!pfile->state.skip_eval)
1545 cpp_error (pfile, DL_ERROR, "division by zero in #if");
1549 /* First non-zero bit of RHS is bit I. Do naive division by
1550 shifting the RHS fully left, and subtracting from LHS if LHS is
1551 at least as big, and then repeating but with one less shift.
1552 This is not very efficient, but is easy to understand. */
1554 rhs.unsignedp = true;
1555 lhs.unsignedp = true;
1556 i = precision - i - 1;
1557 sub = num_lshift (rhs, precision, i);
1559 result.high = result.low = 0;
1562 if (num_greater_eq (lhs, sub, precision))
1564 lhs = num_binary_op (pfile, lhs, sub, CPP_MINUS);
1565 if (i >= PART_PRECISION)
1566 result.high |= (cpp_num_part) 1 << (i - PART_PRECISION);
1568 result.low |= (cpp_num_part) 1 << i;
1572 sub.low = (sub.low >> 1) | (sub.high << (PART_PRECISION - 1));
1576 /* We divide so that the remainder has the sign of the LHS. */
1579 result.unsignedp = unsignedp;
1581 result.overflow = false;
1585 result = num_negate (result, precision);
1586 result.overflow = num_positive (result, precision) ^ !negate;
1593 lhs.unsignedp = unsignedp;
1594 lhs.overflow = false;
1596 lhs = num_negate (lhs, precision);