1 /* Parse C expressions for cpplib.
2 Copyright (C) 1987, 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2001,
3 2002, 2004 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, 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, 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 (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,
52 static cpp_num num_equality_op (cpp_reader *, cpp_num, cpp_num,
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 static cpp_num num_lshift (cpp_num, size_t, size_t);
57 static cpp_num num_rshift (cpp_num, size_t, size_t);
59 static cpp_num append_digit (cpp_num, int, int, size_t);
60 static cpp_num parse_defined (cpp_reader *);
61 static cpp_num eval_token (cpp_reader *, const cpp_token *);
62 static struct op *reduce (cpp_reader *, struct op *, enum cpp_ttype);
63 static unsigned int interpret_float_suffix (const uchar *, size_t);
64 static unsigned int interpret_int_suffix (const uchar *, size_t);
65 static void check_promotion (cpp_reader *, const struct op *);
67 /* Token type abuse to create unary plus and minus operators. */
68 #define CPP_UPLUS ((enum cpp_ttype) (CPP_LAST_CPP_OP + 1))
69 #define CPP_UMINUS ((enum cpp_ttype) (CPP_LAST_CPP_OP + 2))
71 /* With -O2, gcc appears to produce nice code, moving the error
72 message load and subsequent jump completely out of the main path. */
73 #define SYNTAX_ERROR(msgid) \
74 do { cpp_error (pfile, CPP_DL_ERROR, msgid); goto syntax_error; } while(0)
75 #define SYNTAX_ERROR2(msgid, arg) \
76 do { cpp_error (pfile, CPP_DL_ERROR, msgid, arg); goto syntax_error; } \
79 /* Subroutine of cpp_classify_number. S points to a float suffix of
80 length LEN, possibly zero. Returns 0 for an invalid suffix, or a
81 flag vector describing the suffix. */
83 interpret_float_suffix (const uchar *s, size_t len)
85 size_t f = 0, l = 0, i = 0, d = 0, d0 = 0;
90 case 'f': case 'F': f++; break;
91 case 'l': case 'L': l++; break;
93 case 'j': case 'J': i++; break;
95 /* Disallow fd, ld suffixes. */
104 if (d == 1 && !f && !l) {
109 if (f + d0 + l > 1 || i > 1)
112 /* Allow dd, df, dl suffixes for decimal float constants. */
113 if (d && ((d + f + l != 2) || i))
116 return ((i ? CPP_N_IMAGINARY : 0)
119 l ? CPP_N_LARGE : CPP_N_DEFAULT)
120 | (d ? CPP_N_DFLOAT : 0));
123 /* Subroutine of cpp_classify_number. S points to an integer suffix
124 of length LEN, possibly zero. Returns 0 for an invalid suffix, or a
125 flag vector describing the suffix. */
127 interpret_int_suffix (const uchar *s, size_t len)
136 case 'u': case 'U': u++; break;
138 case 'j': case 'J': i++; break;
139 case 'l': case 'L': l++;
140 /* If there are two Ls, they must be adjacent and the same case. */
141 if (l == 2 && s[len] != s[len + 1])
148 if (l > 2 || u > 1 || i > 1)
151 return ((i ? CPP_N_IMAGINARY : 0)
152 | (u ? CPP_N_UNSIGNED : 0)
153 | ((l == 0) ? CPP_N_SMALL
154 : (l == 1) ? CPP_N_MEDIUM : CPP_N_LARGE));
157 /* Categorize numeric constants according to their field (integer,
158 floating point, or invalid), radix (decimal, octal, hexadecimal),
159 and type suffixes. */
161 cpp_classify_number (cpp_reader *pfile, const cpp_token *token)
163 const uchar *str = token->val.str.text;
165 unsigned int max_digit, result, radix;
166 enum {NOT_FLOAT = 0, AFTER_POINT, AFTER_EXPON} float_flag;
168 /* If the lexer has done its job, length one can only be a single
169 digit. Fast-path this very common case. */
170 if (token->val.str.len == 1)
171 return CPP_N_INTEGER | CPP_N_SMALL | CPP_N_DECIMAL;
173 limit = str + token->val.str.len;
174 float_flag = NOT_FLOAT;
178 /* First, interpret the radix. */
184 /* Require at least one hex digit to classify it as hex. */
185 if ((*str == 'x' || *str == 'X')
186 && (str[1] == '.' || ISXDIGIT (str[1])))
193 /* Now scan for a well-formed integer or float. */
196 unsigned int c = *str++;
198 if (ISDIGIT (c) || (ISXDIGIT (c) && radix == 16))
206 if (float_flag == NOT_FLOAT)
207 float_flag = AFTER_POINT;
209 SYNTAX_ERROR ("too many decimal points in number");
211 else if ((radix <= 10 && (c == 'e' || c == 'E'))
212 || (radix == 16 && (c == 'p' || c == 'P')))
214 float_flag = AFTER_EXPON;
219 /* Start of suffix. */
225 if (float_flag != NOT_FLOAT && radix == 8)
228 if (max_digit >= radix)
229 SYNTAX_ERROR2 ("invalid digit \"%c\" in octal constant", '0' + max_digit);
231 if (float_flag != NOT_FLOAT)
233 if (radix == 16 && CPP_PEDANTIC (pfile) && !CPP_OPTION (pfile, c99))
234 cpp_error (pfile, CPP_DL_PEDWARN,
235 "use of C99 hexadecimal floating constant");
237 if (float_flag == AFTER_EXPON)
239 if (*str == '+' || *str == '-')
242 /* Exponent is decimal, even if string is a hex float. */
244 SYNTAX_ERROR ("exponent has no digits");
248 while (ISDIGIT (*str));
250 else if (radix == 16)
251 SYNTAX_ERROR ("hexadecimal floating constants require an exponent");
253 result = interpret_float_suffix (str, limit - str);
256 cpp_error (pfile, CPP_DL_ERROR,
257 "invalid suffix \"%.*s\" on floating constant",
258 (int) (limit - str), str);
259 return CPP_N_INVALID;
262 /* Traditional C didn't accept any floating suffixes. */
264 && CPP_WTRADITIONAL (pfile)
265 && ! cpp_sys_macro_p (pfile))
266 cpp_error (pfile, CPP_DL_WARNING,
267 "traditional C rejects the \"%.*s\" suffix",
268 (int) (limit - str), str);
270 /* A suffix for double is a GCC extension via decimal float support.
271 If the suffix also specifies an imaginary value we'll catch that
273 if ((result == CPP_N_MEDIUM) && CPP_PEDANTIC (pfile))
274 cpp_error (pfile, CPP_DL_PEDWARN,
275 "suffix for double constant is a GCC extension");
277 /* Radix must be 10 for decimal floats. */
278 if ((result & CPP_N_DFLOAT) && radix != 10)
280 cpp_error (pfile, CPP_DL_ERROR,
281 "invalid suffix \"%.*s\" with hexadecimal floating constant",
282 (int) (limit - str), str);
283 return CPP_N_INVALID;
286 result |= CPP_N_FLOATING;
290 result = interpret_int_suffix (str, limit - str);
293 cpp_error (pfile, CPP_DL_ERROR,
294 "invalid suffix \"%.*s\" on integer constant",
295 (int) (limit - str), str);
296 return CPP_N_INVALID;
299 /* Traditional C only accepted the 'L' suffix.
300 Suppress warning about 'LL' with -Wno-long-long. */
301 if (CPP_WTRADITIONAL (pfile) && ! cpp_sys_macro_p (pfile))
303 int u_or_i = (result & (CPP_N_UNSIGNED|CPP_N_IMAGINARY));
304 int large = (result & CPP_N_WIDTH) == CPP_N_LARGE;
306 if (u_or_i || (large && CPP_OPTION (pfile, warn_long_long)))
307 cpp_error (pfile, CPP_DL_WARNING,
308 "traditional C rejects the \"%.*s\" suffix",
309 (int) (limit - str), str);
312 if ((result & CPP_N_WIDTH) == CPP_N_LARGE
313 && ! CPP_OPTION (pfile, c99)
314 && CPP_OPTION (pfile, warn_long_long))
315 cpp_error (pfile, CPP_DL_PEDWARN,
316 "use of C99 long long integer constant");
318 result |= CPP_N_INTEGER;
321 if ((result & CPP_N_IMAGINARY) && CPP_PEDANTIC (pfile))
322 cpp_error (pfile, CPP_DL_PEDWARN,
323 "imaginary constants are a GCC extension");
326 result |= CPP_N_DECIMAL;
327 else if (radix == 16)
330 result |= CPP_N_OCTAL;
335 return CPP_N_INVALID;
338 /* cpp_interpret_integer converts an integer constant into a cpp_num,
339 of precision options->precision.
341 We do not provide any interface for decimal->float conversion,
342 because the preprocessor doesn't need it and we don't want to
343 drag in GCC's floating point emulator. */
345 cpp_interpret_integer (cpp_reader *pfile, const cpp_token *token,
348 const uchar *p, *end;
353 result.unsignedp = !!(type & CPP_N_UNSIGNED);
354 result.overflow = false;
356 p = token->val.str.text;
357 end = p + token->val.str.len;
359 /* Common case of a single digit. */
360 if (token->val.str.len == 1)
361 result.low = p[0] - '0';
365 size_t precision = CPP_OPTION (pfile, precision);
366 unsigned int base = 10, c = 0;
367 bool overflow = false;
369 if ((type & CPP_N_RADIX) == CPP_N_OCTAL)
374 else if ((type & CPP_N_RADIX) == CPP_N_HEX)
380 /* We can add a digit to numbers strictly less than this without
381 needing the precision and slowness of double integers. */
382 max = ~(cpp_num_part) 0;
383 if (precision < PART_PRECISION)
384 max >>= PART_PRECISION - precision;
385 max = (max - base + 1) / base + 1;
391 if (ISDIGIT (c) || (base == 16 && ISXDIGIT (c)))
396 /* Strict inequality for when max is set to zero. */
397 if (result.low < max)
398 result.low = result.low * base + c;
401 result = append_digit (result, c, base, precision);
402 overflow |= result.overflow;
408 cpp_error (pfile, CPP_DL_PEDWARN,
409 "integer constant is too large for its type");
410 /* If too big to be signed, consider it unsigned. Only warn for
411 decimal numbers. Traditional numbers were always signed (but
412 we still honor an explicit U suffix); but we only have
413 traditional semantics in directives. */
414 else if (!result.unsignedp
415 && !(CPP_OPTION (pfile, traditional)
416 && pfile->state.in_directive)
417 && !num_positive (result, precision))
420 cpp_error (pfile, CPP_DL_WARNING,
421 "integer constant is so large that it is unsigned");
422 result.unsignedp = true;
429 /* Append DIGIT to NUM, a number of PRECISION bits being read in base BASE. */
431 append_digit (cpp_num num, int digit, int base, size_t precision)
434 unsigned int shift = 3 + (base == 16);
436 cpp_num_part add_high, add_low;
438 /* Multiply by 8 or 16. Catching this overflow here means we don't
439 need to worry about add_high overflowing. */
440 overflow = !!(num.high >> (PART_PRECISION - shift));
441 result.high = num.high << shift;
442 result.low = num.low << shift;
443 result.high |= num.low >> (PART_PRECISION - shift);
444 result.unsignedp = num.unsignedp;
448 add_low = num.low << 1;
449 add_high = (num.high << 1) + (num.low >> (PART_PRECISION - 1));
452 add_high = add_low = 0;
454 if (add_low + digit < add_low)
458 if (result.low + add_low < result.low)
460 if (result.high + add_high < result.high)
463 result.low += add_low;
464 result.high += add_high;
465 result.overflow = overflow;
467 /* The above code catches overflow of a cpp_num type. This catches
468 overflow of the (possibly shorter) target precision. */
469 num.low = result.low;
470 num.high = result.high;
471 result = num_trim (result, precision);
472 if (!num_eq (result, num))
473 result.overflow = true;
478 /* Handle meeting "defined" in a preprocessor expression. */
480 parse_defined (cpp_reader *pfile)
484 cpp_hashnode *node = 0;
485 const cpp_token *token;
486 cpp_context *initial_context = pfile->context;
488 /* Don't expand macros. */
489 pfile->state.prevent_expansion++;
491 token = cpp_get_token (pfile);
492 if (token->type == CPP_OPEN_PAREN)
495 token = cpp_get_token (pfile);
498 if (token->type == CPP_NAME)
500 node = token->val.node;
501 if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN)
503 cpp_error (pfile, CPP_DL_ERROR, "missing ')' after \"defined\"");
509 cpp_error (pfile, CPP_DL_ERROR,
510 "operator \"defined\" requires an identifier");
511 if (token->flags & NAMED_OP)
516 op.type = token->type;
517 cpp_error (pfile, CPP_DL_ERROR,
518 "(\"%s\" is an alternative token for \"%s\" in C++)",
519 cpp_token_as_text (pfile, token),
520 cpp_token_as_text (pfile, &op));
526 if (pfile->context != initial_context && CPP_PEDANTIC (pfile))
527 cpp_error (pfile, CPP_DL_WARNING,
528 "this use of \"defined\" may not be portable");
530 _cpp_mark_macro_used (node);
532 /* A possible controlling macro of the form #if !defined ().
533 _cpp_parse_expr checks there was no other junk on the line. */
534 pfile->mi_ind_cmacro = node;
537 pfile->state.prevent_expansion--;
539 result.unsignedp = false;
541 result.overflow = false;
542 result.low = node && node->type == NT_MACRO;
546 /* Convert a token into a CPP_NUMBER (an interpreted preprocessing
547 number or character constant, or the result of the "defined" or "#"
550 eval_token (cpp_reader *pfile, const cpp_token *token)
556 result.unsignedp = false;
557 result.overflow = false;
562 temp = cpp_classify_number (pfile, token);
563 switch (temp & CPP_N_CATEGORY)
566 cpp_error (pfile, CPP_DL_ERROR,
567 "floating constant in preprocessor expression");
570 if (!(temp & CPP_N_IMAGINARY))
571 return cpp_interpret_integer (pfile, token, temp);
572 cpp_error (pfile, CPP_DL_ERROR,
573 "imaginary number in preprocessor expression");
577 /* Error already issued. */
580 result.high = result.low = 0;
586 cppchar_t cc = cpp_interpret_charconst (pfile, token,
591 /* Sign-extend the result if necessary. */
592 if (!unsignedp && (cppchar_signed_t) cc < 0)
594 if (PART_PRECISION > BITS_PER_CPPCHAR_T)
595 result.low |= ~(~(cpp_num_part) 0
596 >> (PART_PRECISION - BITS_PER_CPPCHAR_T));
597 result.high = ~(cpp_num_part) 0;
598 result = num_trim (result, CPP_OPTION (pfile, precision));
604 if (token->val.node == pfile->spec_nodes.n_defined)
605 return parse_defined (pfile);
606 else if (CPP_OPTION (pfile, cplusplus)
607 && (token->val.node == pfile->spec_nodes.n_true
608 || token->val.node == pfile->spec_nodes.n_false))
611 result.low = (token->val.node == pfile->spec_nodes.n_true);
617 if (CPP_OPTION (pfile, warn_undef) && !pfile->state.skip_eval)
618 cpp_error (pfile, CPP_DL_WARNING, "\"%s\" is not defined",
619 NODE_NAME (token->val.node));
623 default: /* CPP_HASH */
624 _cpp_test_assertion (pfile, &temp);
629 result.unsignedp = !!unsignedp;
633 /* Operator precedence and flags table.
635 After an operator is returned from the lexer, if it has priority less
636 than the operator on the top of the stack, we reduce the stack by one
637 operator and repeat the test. Since equal priorities do not reduce,
638 this is naturally right-associative.
640 We handle left-associative operators by decrementing the priority of
641 just-lexed operators by one, but retaining the priority of operators
642 already on the stack.
644 The remaining cases are '(' and ')'. We handle '(' by skipping the
645 reduction phase completely. ')' is given lower priority than
646 everything else, including '(', effectively forcing a reduction of the
647 parenthesized expression. If there is a matching '(', the routine
648 reduce() exits immediately. If the normal exit route sees a ')', then
649 there cannot have been a matching '(' and an error message is output.
651 The parser assumes all shifted operators require a left operand unless
652 the flag NO_L_OPERAND is set. These semantics are automatic; any
653 extra semantics need to be handled with operator-specific code. */
655 /* Flags. If CHECK_PROMOTION, we warn if the effective sign of an
656 operand changes because of integer promotions. */
657 #define NO_L_OPERAND (1 << 0)
658 #define LEFT_ASSOC (1 << 1)
659 #define CHECK_PROMOTION (1 << 2)
661 /* Operator to priority map. Must be in the same order as the first
662 N entries of enum cpp_ttype. */
663 static const struct cpp_operator
669 /* EQ */ {0, 0}, /* Shouldn't happen. */
670 /* NOT */ {16, NO_L_OPERAND},
671 /* GREATER */ {12, LEFT_ASSOC | CHECK_PROMOTION},
672 /* LESS */ {12, LEFT_ASSOC | CHECK_PROMOTION},
673 /* PLUS */ {14, LEFT_ASSOC | CHECK_PROMOTION},
674 /* MINUS */ {14, LEFT_ASSOC | CHECK_PROMOTION},
675 /* MULT */ {15, LEFT_ASSOC | CHECK_PROMOTION},
676 /* DIV */ {15, LEFT_ASSOC | CHECK_PROMOTION},
677 /* MOD */ {15, LEFT_ASSOC | CHECK_PROMOTION},
678 /* AND */ {9, LEFT_ASSOC | CHECK_PROMOTION},
679 /* OR */ {7, LEFT_ASSOC | CHECK_PROMOTION},
680 /* XOR */ {8, LEFT_ASSOC | CHECK_PROMOTION},
681 /* RSHIFT */ {13, LEFT_ASSOC},
682 /* LSHIFT */ {13, LEFT_ASSOC},
684 /* COMPL */ {16, NO_L_OPERAND},
685 /* AND_AND */ {6, LEFT_ASSOC},
686 /* OR_OR */ {5, LEFT_ASSOC},
688 /* COLON */ {4, LEFT_ASSOC | CHECK_PROMOTION},
689 /* COMMA */ {2, LEFT_ASSOC},
690 /* OPEN_PAREN */ {1, NO_L_OPERAND},
691 /* CLOSE_PAREN */ {0, 0},
693 /* EQ_EQ */ {11, LEFT_ASSOC},
694 /* NOT_EQ */ {11, LEFT_ASSOC},
695 /* GREATER_EQ */ {12, LEFT_ASSOC | CHECK_PROMOTION},
696 /* LESS_EQ */ {12, LEFT_ASSOC | CHECK_PROMOTION},
697 /* UPLUS */ {16, NO_L_OPERAND},
698 /* UMINUS */ {16, NO_L_OPERAND}
701 /* Parse and evaluate a C expression, reading from PFILE.
702 Returns the truth value of the expression.
704 The implementation is an operator precedence parser, i.e. a
705 bottom-up parser, using a stack for not-yet-reduced tokens.
707 The stack base is op_stack, and the current stack pointer is 'top'.
708 There is a stack element for each operator (only), and the most
709 recently pushed operator is 'top->op'. An operand (value) is
710 stored in the 'value' field of the stack element of the operator
713 _cpp_parse_expr (cpp_reader *pfile)
715 struct op *top = pfile->op_stack;
716 unsigned int lex_count;
717 bool saw_leading_not, want_value = true;
719 pfile->state.skip_eval = 0;
721 /* Set up detection of #if ! defined(). */
722 pfile->mi_ind_cmacro = 0;
723 saw_leading_not = false;
726 /* Lowest priority operator prevents further reductions. */
734 op.token = cpp_get_token (pfile);
735 op.op = op.token->type;
739 /* These tokens convert into values. */
746 SYNTAX_ERROR2 ("missing binary operator before token \"%s\"",
747 cpp_token_as_text (pfile, op.token));
749 top->value = eval_token (pfile, op.token);
753 saw_leading_not = lex_count == 1;
765 if ((int) op.op <= (int) CPP_EQ || (int) op.op >= (int) CPP_PLUS_EQ)
766 SYNTAX_ERROR2 ("token \"%s\" is not valid in preprocessor expressions",
767 cpp_token_as_text (pfile, op.token));
771 /* Check we have a value or operator as appropriate. */
772 if (optab[op.op].flags & NO_L_OPERAND)
775 SYNTAX_ERROR2 ("missing binary operator before token \"%s\"",
776 cpp_token_as_text (pfile, op.token));
780 /* We want a number (or expression) and haven't got one.
781 Try to emit a specific diagnostic. */
782 if (op.op == CPP_CLOSE_PAREN && top->op == CPP_OPEN_PAREN)
783 SYNTAX_ERROR ("missing expression between '(' and ')'");
785 if (op.op == CPP_EOF && top->op == CPP_EOF)
786 SYNTAX_ERROR ("#if with no expression");
788 if (top->op != CPP_EOF && top->op != CPP_OPEN_PAREN)
789 SYNTAX_ERROR2 ("operator '%s' has no right operand",
790 cpp_token_as_text (pfile, top->token));
791 else if (op.op == CPP_CLOSE_PAREN || op.op == CPP_EOF)
792 /* Complain about missing paren during reduction. */;
794 SYNTAX_ERROR2 ("operator '%s' has no left operand",
795 cpp_token_as_text (pfile, op.token));
798 top = reduce (pfile, top, op.op);
802 if (op.op == CPP_EOF)
807 case CPP_CLOSE_PAREN:
810 if (!num_zerop (top->value))
811 pfile->state.skip_eval++;
815 if (num_zerop (top->value))
816 pfile->state.skip_eval++;
819 if (top->op != CPP_QUERY)
820 SYNTAX_ERROR (" ':' without preceding '?'");
821 if (!num_zerop (top[-1].value)) /* Was '?' condition true? */
822 pfile->state.skip_eval++;
824 pfile->state.skip_eval--;
831 /* Check for and handle stack overflow. */
832 if (++top == pfile->op_limit)
833 top = _cpp_expand_op_stack (pfile);
836 top->token = op.token;
839 /* The controlling macro expression is only valid if we called lex 3
840 times: <!> <defined expression> and <EOF>. push_conditional ()
841 checks that we are at top-of-file. */
842 if (pfile->mi_ind_cmacro && !(saw_leading_not && lex_count == 3))
843 pfile->mi_ind_cmacro = 0;
845 if (top != pfile->op_stack)
847 cpp_error (pfile, CPP_DL_ICE, "unbalanced stack in #if");
849 return false; /* Return false on syntax error. */
852 return !num_zerop (top->value);
855 /* Reduce the operator / value stack if possible, in preparation for
856 pushing operator OP. Returns NULL on error, otherwise the top of
859 reduce (cpp_reader *pfile, struct op *top, enum cpp_ttype op)
863 if (top->op <= CPP_EQ || top->op > CPP_LAST_CPP_OP + 2)
866 cpp_error (pfile, CPP_DL_ICE, "impossible operator '%u'", top->op);
870 if (op == CPP_OPEN_PAREN)
873 /* Decrement the priority of left-associative operators to force a
874 reduction with operators of otherwise equal priority. */
875 prio = optab[op].prio - ((optab[op].flags & LEFT_ASSOC) != 0);
876 while (prio < optab[top->op].prio)
878 if (CPP_OPTION (pfile, warn_num_sign_change)
879 && optab[top->op].flags & CHECK_PROMOTION)
880 check_promotion (pfile, top);
888 top[-1].value = num_unary_op (pfile, top->value, top->op);
896 top[-1].value = num_binary_op (pfile, top[-1].value,
897 top->value, top->op);
905 = num_inequality_op (pfile, top[-1].value, top->value, top->op);
911 = num_equality_op (pfile, top[-1].value, top->value, top->op);
918 = num_bitwise_op (pfile, top[-1].value, top->value, top->op);
922 top[-1].value = num_mul (pfile, top[-1].value, top->value);
927 top[-1].value = num_div_op (pfile, top[-1].value,
928 top->value, top->op);
933 if (!num_zerop (top->value))
934 pfile->state.skip_eval--;
935 top->value.low = (!num_zerop (top->value)
936 || !num_zerop (top[1].value));
938 top->value.unsignedp = false;
939 top->value.overflow = false;
944 if (num_zerop (top->value))
945 pfile->state.skip_eval--;
946 top->value.low = (!num_zerop (top->value)
947 && !num_zerop (top[1].value));
949 top->value.unsignedp = false;
950 top->value.overflow = false;
954 if (op != CPP_CLOSE_PAREN)
956 cpp_error (pfile, CPP_DL_ERROR, "missing ')' in expression");
960 top->value = top[1].value;
965 if (!num_zerop (top->value))
967 pfile->state.skip_eval--;
968 top->value = top[1].value;
971 top->value = top[2].value;
972 top->value.unsignedp = (top[1].value.unsignedp
973 || top[2].value.unsignedp);
977 cpp_error (pfile, CPP_DL_ERROR, "'?' without following ':'");
985 if (top->value.overflow && !pfile->state.skip_eval)
986 cpp_error (pfile, CPP_DL_PEDWARN,
987 "integer overflow in preprocessor expression");
990 if (op == CPP_CLOSE_PAREN)
992 cpp_error (pfile, CPP_DL_ERROR, "missing '(' in expression");
999 /* Returns the position of the old top of stack after expansion. */
1001 _cpp_expand_op_stack (cpp_reader *pfile)
1003 size_t old_size = (size_t) (pfile->op_limit - pfile->op_stack);
1004 size_t new_size = old_size * 2 + 20;
1006 pfile->op_stack = XRESIZEVEC (struct op, pfile->op_stack, new_size);
1007 pfile->op_limit = pfile->op_stack + new_size;
1009 return pfile->op_stack + old_size;
1012 /* Emits a warning if the effective sign of either operand of OP
1013 changes because of integer promotions. */
1015 check_promotion (cpp_reader *pfile, const struct op *op)
1017 if (op->value.unsignedp == op[-1].value.unsignedp)
1020 if (op->value.unsignedp)
1022 if (!num_positive (op[-1].value, CPP_OPTION (pfile, precision)))
1023 cpp_error (pfile, CPP_DL_WARNING,
1024 "the left operand of \"%s\" changes sign when promoted",
1025 cpp_token_as_text (pfile, op->token));
1027 else if (!num_positive (op->value, CPP_OPTION (pfile, precision)))
1028 cpp_error (pfile, CPP_DL_WARNING,
1029 "the right operand of \"%s\" changes sign when promoted",
1030 cpp_token_as_text (pfile, op->token));
1033 /* Clears the unused high order bits of the number pointed to by PNUM. */
1035 num_trim (cpp_num num, size_t precision)
1037 if (precision > PART_PRECISION)
1039 precision -= PART_PRECISION;
1040 if (precision < PART_PRECISION)
1041 num.high &= ((cpp_num_part) 1 << precision) - 1;
1045 if (precision < PART_PRECISION)
1046 num.low &= ((cpp_num_part) 1 << precision) - 1;
1053 /* True iff A (presumed signed) >= 0. */
1055 num_positive (cpp_num num, size_t precision)
1057 if (precision > PART_PRECISION)
1059 precision -= PART_PRECISION;
1060 return (num.high & (cpp_num_part) 1 << (precision - 1)) == 0;
1063 return (num.low & (cpp_num_part) 1 << (precision - 1)) == 0;
1066 /* Sign extend a number, with PRECISION significant bits and all
1067 others assumed clear, to fill out a cpp_num structure. */
1069 cpp_num_sign_extend (cpp_num num, size_t precision)
1073 if (precision > PART_PRECISION)
1075 precision -= PART_PRECISION;
1076 if (precision < PART_PRECISION
1077 && (num.high & (cpp_num_part) 1 << (precision - 1)))
1078 num.high |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
1080 else if (num.low & (cpp_num_part) 1 << (precision - 1))
1082 if (precision < PART_PRECISION)
1083 num.low |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
1084 num.high = ~(cpp_num_part) 0;
1091 /* Returns the negative of NUM. */
1093 num_negate (cpp_num num, size_t precision)
1098 num.high = ~num.high;
1102 num = num_trim (num, precision);
1103 num.overflow = (!num.unsignedp && num_eq (num, copy) && !num_zerop (num));
1108 /* Returns true if A >= B. */
1110 num_greater_eq (cpp_num pa, cpp_num pb, size_t precision)
1114 unsignedp = pa.unsignedp || pb.unsignedp;
1118 /* Both numbers have signed type. If they are of different
1119 sign, the answer is the sign of A. */
1120 unsignedp = num_positive (pa, precision);
1122 if (unsignedp != num_positive (pb, precision))
1125 /* Otherwise we can do an unsigned comparison. */
1128 return (pa.high > pb.high) || (pa.high == pb.high && pa.low >= pb.low);
1131 /* Returns LHS OP RHS, where OP is a bit-wise operation. */
1133 num_bitwise_op (cpp_reader *pfile ATTRIBUTE_UNUSED,
1134 cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1136 lhs.overflow = false;
1137 lhs.unsignedp = lhs.unsignedp || rhs.unsignedp;
1139 /* As excess precision is zeroed, there is no need to num_trim () as
1140 these operations cannot introduce a set bit there. */
1144 lhs.high &= rhs.high;
1146 else if (op == CPP_OR)
1149 lhs.high |= rhs.high;
1154 lhs.high ^= rhs.high;
1160 /* Returns LHS OP RHS, where OP is an inequality. */
1162 num_inequality_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs,
1165 bool gte = num_greater_eq (lhs, rhs, CPP_OPTION (pfile, precision));
1167 if (op == CPP_GREATER_EQ)
1169 else if (op == CPP_LESS)
1171 else if (op == CPP_GREATER)
1172 lhs.low = gte && !num_eq (lhs, rhs);
1173 else /* CPP_LESS_EQ. */
1174 lhs.low = !gte || num_eq (lhs, rhs);
1177 lhs.overflow = false;
1178 lhs.unsignedp = false;
1182 /* Returns LHS OP RHS, where OP is == or !=. */
1184 num_equality_op (cpp_reader *pfile ATTRIBUTE_UNUSED,
1185 cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1187 /* Work around a 3.0.4 bug; see PR 6950. */
1188 bool eq = num_eq (lhs, rhs);
1189 if (op == CPP_NOT_EQ)
1193 lhs.overflow = false;
1194 lhs.unsignedp = false;
1198 /* Shift NUM, of width PRECISION, right by N bits. */
1200 num_rshift (cpp_num num, size_t precision, size_t n)
1202 cpp_num_part sign_mask;
1203 bool x = num_positive (num, precision);
1205 if (num.unsignedp || x)
1208 sign_mask = ~(cpp_num_part) 0;
1211 num.high = num.low = sign_mask;
1215 if (precision < PART_PRECISION)
1216 num.high = sign_mask, num.low |= sign_mask << precision;
1217 else if (precision < 2 * PART_PRECISION)
1218 num.high |= sign_mask << (precision - PART_PRECISION);
1220 if (n >= PART_PRECISION)
1222 n -= PART_PRECISION;
1224 num.high = sign_mask;
1229 num.low = (num.low >> n) | (num.high << (PART_PRECISION - n));
1230 num.high = (num.high >> n) | (sign_mask << (PART_PRECISION - n));
1234 num = num_trim (num, precision);
1235 num.overflow = false;
1239 /* Shift NUM, of width PRECISION, left by N bits. */
1241 num_lshift (cpp_num num, size_t precision, size_t n)
1245 num.overflow = !num.unsignedp && !num_zerop (num);
1246 num.high = num.low = 0;
1250 cpp_num orig, maybe_orig;
1254 if (m >= PART_PRECISION)
1256 m -= PART_PRECISION;
1262 num.high = (num.high << m) | (num.low >> (PART_PRECISION - m));
1265 num = num_trim (num, precision);
1268 num.overflow = false;
1271 maybe_orig = num_rshift (num, precision, n);
1272 num.overflow = !num_eq (orig, maybe_orig);
1279 /* The four unary operators: +, -, ! and ~. */
1281 num_unary_op (cpp_reader *pfile, cpp_num num, enum cpp_ttype op)
1286 if (CPP_WTRADITIONAL (pfile) && !pfile->state.skip_eval)
1287 cpp_error (pfile, CPP_DL_WARNING,
1288 "traditional C rejects the unary plus operator");
1289 num.overflow = false;
1293 num = num_negate (num, CPP_OPTION (pfile, precision));
1297 num.high = ~num.high;
1299 num = num_trim (num, CPP_OPTION (pfile, precision));
1300 num.overflow = false;
1303 default: /* case CPP_NOT: */
1304 num.low = num_zerop (num);
1306 num.overflow = false;
1307 num.unsignedp = false;
1314 /* The various binary operators. */
1316 num_binary_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1319 size_t precision = CPP_OPTION (pfile, precision);
1327 if (!rhs.unsignedp && !num_positive (rhs, precision))
1329 /* A negative shift is a positive shift the other way. */
1330 if (op == CPP_LSHIFT)
1334 rhs = num_negate (rhs, precision);
1337 n = ~0; /* Maximal. */
1340 if (op == CPP_LSHIFT)
1341 lhs = num_lshift (lhs, precision, n);
1343 lhs = num_rshift (lhs, precision, n);
1348 rhs = num_negate (rhs, precision);
1350 result.low = lhs.low + rhs.low;
1351 result.high = lhs.high + rhs.high;
1352 if (result.low < lhs.low)
1354 result.unsignedp = lhs.unsignedp || rhs.unsignedp;
1355 result.overflow = false;
1357 result = num_trim (result, precision);
1358 if (!result.unsignedp)
1360 bool lhsp = num_positive (lhs, precision);
1361 result.overflow = (lhsp == num_positive (rhs, precision)
1362 && lhsp != num_positive (result, precision));
1367 default: /* case CPP_COMMA: */
1368 if (CPP_PEDANTIC (pfile) && (!CPP_OPTION (pfile, c99)
1369 || !pfile->state.skip_eval))
1370 cpp_error (pfile, CPP_DL_PEDWARN,
1371 "comma operator in operand of #if");
1379 /* Multiplies two unsigned cpp_num_parts to give a cpp_num. This
1382 num_part_mul (cpp_num_part lhs, cpp_num_part rhs)
1385 cpp_num_part middle[2], temp;
1387 result.low = LOW_PART (lhs) * LOW_PART (rhs);
1388 result.high = HIGH_PART (lhs) * HIGH_PART (rhs);
1390 middle[0] = LOW_PART (lhs) * HIGH_PART (rhs);
1391 middle[1] = HIGH_PART (lhs) * LOW_PART (rhs);
1394 result.low += LOW_PART (middle[0]) << (PART_PRECISION / 2);
1395 if (result.low < temp)
1399 result.low += LOW_PART (middle[1]) << (PART_PRECISION / 2);
1400 if (result.low < temp)
1403 result.high += HIGH_PART (middle[0]);
1404 result.high += HIGH_PART (middle[1]);
1405 result.unsignedp = true;
1406 result.overflow = false;
1411 /* Multiply two preprocessing numbers. */
1413 num_mul (cpp_reader *pfile, cpp_num lhs, cpp_num rhs)
1415 cpp_num result, temp;
1416 bool unsignedp = lhs.unsignedp || rhs.unsignedp;
1417 bool overflow, negate = false;
1418 size_t precision = CPP_OPTION (pfile, precision);
1420 /* Prepare for unsigned multiplication. */
1423 if (!num_positive (lhs, precision))
1424 negate = !negate, lhs = num_negate (lhs, precision);
1425 if (!num_positive (rhs, precision))
1426 negate = !negate, rhs = num_negate (rhs, precision);
1429 overflow = lhs.high && rhs.high;
1430 result = num_part_mul (lhs.low, rhs.low);
1432 temp = num_part_mul (lhs.high, rhs.low);
1433 result.high += temp.low;
1437 temp = num_part_mul (lhs.low, rhs.high);
1438 result.high += temp.low;
1442 temp.low = result.low, temp.high = result.high;
1443 result = num_trim (result, precision);
1444 if (!num_eq (result, temp))
1448 result = num_negate (result, precision);
1451 result.overflow = false;
1453 result.overflow = overflow || (num_positive (result, precision) ^ !negate
1454 && !num_zerop (result));
1455 result.unsignedp = unsignedp;
1460 /* Divide two preprocessing numbers, returning the answer or the
1461 remainder depending upon OP. */
1463 num_div_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1465 cpp_num result, sub;
1467 bool unsignedp = lhs.unsignedp || rhs.unsignedp;
1468 bool negate = false, lhs_neg = false;
1469 size_t i, precision = CPP_OPTION (pfile, precision);
1471 /* Prepare for unsigned division. */
1474 if (!num_positive (lhs, precision))
1475 negate = !negate, lhs_neg = true, lhs = num_negate (lhs, precision);
1476 if (!num_positive (rhs, precision))
1477 negate = !negate, rhs = num_negate (rhs, precision);
1480 /* Find the high bit. */
1484 mask = (cpp_num_part) 1 << (i - PART_PRECISION);
1485 for (; ; i--, mask >>= 1)
1486 if (rhs.high & mask)
1491 if (precision > PART_PRECISION)
1492 i = precision - PART_PRECISION - 1;
1495 mask = (cpp_num_part) 1 << i;
1496 for (; ; i--, mask >>= 1)
1502 if (!pfile->state.skip_eval)
1503 cpp_error (pfile, CPP_DL_ERROR, "division by zero in #if");
1507 /* First nonzero bit of RHS is bit I. Do naive division by
1508 shifting the RHS fully left, and subtracting from LHS if LHS is
1509 at least as big, and then repeating but with one less shift.
1510 This is not very efficient, but is easy to understand. */
1512 rhs.unsignedp = true;
1513 lhs.unsignedp = true;
1514 i = precision - i - 1;
1515 sub = num_lshift (rhs, precision, i);
1517 result.high = result.low = 0;
1520 if (num_greater_eq (lhs, sub, precision))
1522 lhs = num_binary_op (pfile, lhs, sub, CPP_MINUS);
1523 if (i >= PART_PRECISION)
1524 result.high |= (cpp_num_part) 1 << (i - PART_PRECISION);
1526 result.low |= (cpp_num_part) 1 << i;
1530 sub.low = (sub.low >> 1) | (sub.high << (PART_PRECISION - 1));
1534 /* We divide so that the remainder has the sign of the LHS. */
1537 result.unsignedp = unsignedp;
1538 result.overflow = false;
1542 result = num_negate (result, precision);
1543 result.overflow = num_positive (result, precision) ^ !negate;
1550 lhs.unsignedp = unsignedp;
1551 lhs.overflow = false;
1553 lhs = num_negate (lhs, precision);