PR middle-end/25568
[official-gcc.git] / libcpp / expr.c
bloba61ff665ec0fa13dbd5556930317b380ab212b1c
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
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; if not, write to the Free Software
18 Foundation, 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA. */
21 #include "config.h"
22 #include "system.h"
23 #include "cpplib.h"
24 #include "internal.h"
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))
31 struct op
33 const cpp_token *token; /* The token forming op (for diagnostics). */
34 cpp_num value; /* The value logically "right" of op. */
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 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; } \
77 while(0)
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. */
82 static unsigned int
83 interpret_float_suffix (const uchar *s, size_t len)
85 size_t f = 0, l = 0, i = 0, d = 0;
87 while (len--)
88 switch (s[len])
90 case 'f': case 'F': f++; break;
91 case 'l': case 'L': l++; break;
92 case 'i': case 'I':
93 case 'j': case 'J': i++; break;
94 case 'd': case 'D':
95 /* Disallow fd, ld suffixes. */
96 if (d && (f || l))
97 return 0;
98 d++;
99 break;
100 default:
101 return 0;
104 if (f + l > 1 || i > 1)
105 return 0;
107 /* Allow dd, df, dl suffixes for decimal float constants. */
108 if (d && ((d + f + l != 2) || i))
109 return 0;
111 return ((i ? CPP_N_IMAGINARY : 0)
112 | (f ? CPP_N_SMALL :
113 l ? CPP_N_LARGE : CPP_N_MEDIUM)
114 | (d ? CPP_N_DFLOAT : 0));
117 /* Subroutine of cpp_classify_number. S points to an integer suffix
118 of length LEN, possibly zero. Returns 0 for an invalid suffix, or a
119 flag vector describing the suffix. */
120 static unsigned int
121 interpret_int_suffix (const uchar *s, size_t len)
123 size_t u, l, i;
125 u = l = i = 0;
127 while (len--)
128 switch (s[len])
130 case 'u': case 'U': u++; break;
131 case 'i': case 'I':
132 case 'j': case 'J': i++; break;
133 case 'l': case 'L': l++;
134 /* If there are two Ls, they must be adjacent and the same case. */
135 if (l == 2 && s[len] != s[len + 1])
136 return 0;
137 break;
138 default:
139 return 0;
142 if (l > 2 || u > 1 || i > 1)
143 return 0;
145 return ((i ? CPP_N_IMAGINARY : 0)
146 | (u ? CPP_N_UNSIGNED : 0)
147 | ((l == 0) ? CPP_N_SMALL
148 : (l == 1) ? CPP_N_MEDIUM : CPP_N_LARGE));
151 /* Categorize numeric constants according to their field (integer,
152 floating point, or invalid), radix (decimal, octal, hexadecimal),
153 and type suffixes. */
154 unsigned int
155 cpp_classify_number (cpp_reader *pfile, const cpp_token *token)
157 const uchar *str = token->val.str.text;
158 const uchar *limit;
159 unsigned int max_digit, result, radix;
160 enum {NOT_FLOAT = 0, AFTER_POINT, AFTER_EXPON} float_flag;
162 /* If the lexer has done its job, length one can only be a single
163 digit. Fast-path this very common case. */
164 if (token->val.str.len == 1)
165 return CPP_N_INTEGER | CPP_N_SMALL | CPP_N_DECIMAL;
167 limit = str + token->val.str.len;
168 float_flag = NOT_FLOAT;
169 max_digit = 0;
170 radix = 10;
172 /* First, interpret the radix. */
173 if (*str == '0')
175 radix = 8;
176 str++;
178 /* Require at least one hex digit to classify it as hex. */
179 if ((*str == 'x' || *str == 'X')
180 && (str[1] == '.' || ISXDIGIT (str[1])))
182 radix = 16;
183 str++;
187 /* Now scan for a well-formed integer or float. */
188 for (;;)
190 unsigned int c = *str++;
192 if (ISDIGIT (c) || (ISXDIGIT (c) && radix == 16))
194 c = hex_value (c);
195 if (c > max_digit)
196 max_digit = c;
198 else if (c == '.')
200 if (float_flag == NOT_FLOAT)
201 float_flag = AFTER_POINT;
202 else
203 SYNTAX_ERROR ("too many decimal points in number");
205 else if ((radix <= 10 && (c == 'e' || c == 'E'))
206 || (radix == 16 && (c == 'p' || c == 'P')))
208 float_flag = AFTER_EXPON;
209 break;
211 else
213 /* Start of suffix. */
214 str--;
215 break;
219 if (float_flag != NOT_FLOAT && radix == 8)
220 radix = 10;
222 if (max_digit >= radix)
223 SYNTAX_ERROR2 ("invalid digit \"%c\" in octal constant", '0' + max_digit);
225 if (float_flag != NOT_FLOAT)
227 if (radix == 16 && CPP_PEDANTIC (pfile) && !CPP_OPTION (pfile, c99))
228 cpp_error (pfile, CPP_DL_PEDWARN,
229 "use of C99 hexadecimal floating constant");
231 if (float_flag == AFTER_EXPON)
233 if (*str == '+' || *str == '-')
234 str++;
236 /* Exponent is decimal, even if string is a hex float. */
237 if (!ISDIGIT (*str))
238 SYNTAX_ERROR ("exponent has no digits");
241 str++;
242 while (ISDIGIT (*str));
244 else if (radix == 16)
245 SYNTAX_ERROR ("hexadecimal floating constants require an exponent");
247 result = interpret_float_suffix (str, limit - str);
248 if (result == 0)
250 cpp_error (pfile, CPP_DL_ERROR,
251 "invalid suffix \"%.*s\" on floating constant",
252 (int) (limit - str), str);
253 return CPP_N_INVALID;
256 /* Traditional C didn't accept any floating suffixes. */
257 if (limit != str
258 && CPP_WTRADITIONAL (pfile)
259 && ! cpp_sys_macro_p (pfile))
260 cpp_error (pfile, CPP_DL_WARNING,
261 "traditional C rejects the \"%.*s\" suffix",
262 (int) (limit - str), str);
264 /* Radix must be 10 for decimal floats. */
265 if ((result & CPP_N_DFLOAT) && radix != 10)
267 cpp_error (pfile, CPP_DL_ERROR,
268 "invalid suffix \"%.*s\" with hexadecimal floating constant",
269 (int) (limit - str), str);
270 return CPP_N_INVALID;
273 result |= CPP_N_FLOATING;
275 else
277 result = interpret_int_suffix (str, limit - str);
278 if (result == 0)
280 cpp_error (pfile, CPP_DL_ERROR,
281 "invalid suffix \"%.*s\" on integer constant",
282 (int) (limit - str), str);
283 return CPP_N_INVALID;
286 /* Traditional C only accepted the 'L' suffix.
287 Suppress warning about 'LL' with -Wno-long-long. */
288 if (CPP_WTRADITIONAL (pfile) && ! cpp_sys_macro_p (pfile))
290 int u_or_i = (result & (CPP_N_UNSIGNED|CPP_N_IMAGINARY));
291 int large = (result & CPP_N_WIDTH) == CPP_N_LARGE;
293 if (u_or_i || (large && CPP_OPTION (pfile, warn_long_long)))
294 cpp_error (pfile, CPP_DL_WARNING,
295 "traditional C rejects the \"%.*s\" suffix",
296 (int) (limit - str), str);
299 if ((result & CPP_N_WIDTH) == CPP_N_LARGE
300 && ! CPP_OPTION (pfile, c99)
301 && CPP_OPTION (pfile, warn_long_long))
302 cpp_error (pfile, CPP_DL_PEDWARN,
303 "use of C99 long long integer constant");
305 result |= CPP_N_INTEGER;
308 if ((result & CPP_N_IMAGINARY) && CPP_PEDANTIC (pfile))
309 cpp_error (pfile, CPP_DL_PEDWARN,
310 "imaginary constants are a GCC extension");
312 if (radix == 10)
313 result |= CPP_N_DECIMAL;
314 else if (radix == 16)
315 result |= CPP_N_HEX;
316 else
317 result |= CPP_N_OCTAL;
319 return result;
321 syntax_error:
322 return CPP_N_INVALID;
325 /* cpp_interpret_integer converts an integer constant into a cpp_num,
326 of precision options->precision.
328 We do not provide any interface for decimal->float conversion,
329 because the preprocessor doesn't need it and we don't want to
330 drag in GCC's floating point emulator. */
331 cpp_num
332 cpp_interpret_integer (cpp_reader *pfile, const cpp_token *token,
333 unsigned int type)
335 const uchar *p, *end;
336 cpp_num result;
338 result.low = 0;
339 result.high = 0;
340 result.unsignedp = !!(type & CPP_N_UNSIGNED);
341 result.overflow = false;
343 p = token->val.str.text;
344 end = p + token->val.str.len;
346 /* Common case of a single digit. */
347 if (token->val.str.len == 1)
348 result.low = p[0] - '0';
349 else
351 cpp_num_part max;
352 size_t precision = CPP_OPTION (pfile, precision);
353 unsigned int base = 10, c = 0;
354 bool overflow = false;
356 if ((type & CPP_N_RADIX) == CPP_N_OCTAL)
358 base = 8;
359 p++;
361 else if ((type & CPP_N_RADIX) == CPP_N_HEX)
363 base = 16;
364 p += 2;
367 /* We can add a digit to numbers strictly less than this without
368 needing the precision and slowness of double integers. */
369 max = ~(cpp_num_part) 0;
370 if (precision < PART_PRECISION)
371 max >>= PART_PRECISION - precision;
372 max = (max - base + 1) / base + 1;
374 for (; p < end; p++)
376 c = *p;
378 if (ISDIGIT (c) || (base == 16 && ISXDIGIT (c)))
379 c = hex_value (c);
380 else
381 break;
383 /* Strict inequality for when max is set to zero. */
384 if (result.low < max)
385 result.low = result.low * base + c;
386 else
388 result = append_digit (result, c, base, precision);
389 overflow |= result.overflow;
390 max = 0;
394 if (overflow)
395 cpp_error (pfile, CPP_DL_PEDWARN,
396 "integer constant is too large for its type");
397 /* If too big to be signed, consider it unsigned. Only warn for
398 decimal numbers. Traditional numbers were always signed (but
399 we still honor an explicit U suffix); but we only have
400 traditional semantics in directives. */
401 else if (!result.unsignedp
402 && !(CPP_OPTION (pfile, traditional)
403 && pfile->state.in_directive)
404 && !num_positive (result, precision))
406 if (base == 10)
407 cpp_error (pfile, CPP_DL_WARNING,
408 "integer constant is so large that it is unsigned");
409 result.unsignedp = true;
413 return result;
416 /* Append DIGIT to NUM, a number of PRECISION bits being read in base BASE. */
417 static cpp_num
418 append_digit (cpp_num num, int digit, int base, size_t precision)
420 cpp_num result;
421 unsigned int shift = 3 + (base == 16);
422 bool overflow;
423 cpp_num_part add_high, add_low;
425 /* Multiply by 8 or 16. Catching this overflow here means we don't
426 need to worry about add_high overflowing. */
427 overflow = !!(num.high >> (PART_PRECISION - shift));
428 result.high = num.high << shift;
429 result.low = num.low << shift;
430 result.high |= num.low >> (PART_PRECISION - shift);
431 result.unsignedp = num.unsignedp;
433 if (base == 10)
435 add_low = num.low << 1;
436 add_high = (num.high << 1) + (num.low >> (PART_PRECISION - 1));
438 else
439 add_high = add_low = 0;
441 if (add_low + digit < add_low)
442 add_high++;
443 add_low += digit;
445 if (result.low + add_low < result.low)
446 add_high++;
447 if (result.high + add_high < result.high)
448 overflow = true;
450 result.low += add_low;
451 result.high += add_high;
452 result.overflow = overflow;
454 /* The above code catches overflow of a cpp_num type. This catches
455 overflow of the (possibly shorter) target precision. */
456 num.low = result.low;
457 num.high = result.high;
458 result = num_trim (result, precision);
459 if (!num_eq (result, num))
460 result.overflow = true;
462 return result;
465 /* Handle meeting "defined" in a preprocessor expression. */
466 static cpp_num
467 parse_defined (cpp_reader *pfile)
469 cpp_num result;
470 int paren = 0;
471 cpp_hashnode *node = 0;
472 const cpp_token *token;
473 cpp_context *initial_context = pfile->context;
475 /* Don't expand macros. */
476 pfile->state.prevent_expansion++;
478 token = cpp_get_token (pfile);
479 if (token->type == CPP_OPEN_PAREN)
481 paren = 1;
482 token = cpp_get_token (pfile);
485 if (token->type == CPP_NAME)
487 node = token->val.node;
488 if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN)
490 cpp_error (pfile, CPP_DL_ERROR, "missing ')' after \"defined\"");
491 node = 0;
494 else
496 cpp_error (pfile, CPP_DL_ERROR,
497 "operator \"defined\" requires an identifier");
498 if (token->flags & NAMED_OP)
500 cpp_token op;
502 op.flags = 0;
503 op.type = token->type;
504 cpp_error (pfile, CPP_DL_ERROR,
505 "(\"%s\" is an alternative token for \"%s\" in C++)",
506 cpp_token_as_text (pfile, token),
507 cpp_token_as_text (pfile, &op));
511 if (node)
513 if (pfile->context != initial_context && CPP_PEDANTIC (pfile))
514 cpp_error (pfile, CPP_DL_WARNING,
515 "this use of \"defined\" may not be portable");
517 _cpp_mark_macro_used (node);
519 /* A possible controlling macro of the form #if !defined ().
520 _cpp_parse_expr checks there was no other junk on the line. */
521 pfile->mi_ind_cmacro = node;
524 pfile->state.prevent_expansion--;
526 result.unsignedp = false;
527 result.high = 0;
528 result.overflow = false;
529 result.low = node && node->type == NT_MACRO;
530 return result;
533 /* Convert a token into a CPP_NUMBER (an interpreted preprocessing
534 number or character constant, or the result of the "defined" or "#"
535 operators). */
536 static cpp_num
537 eval_token (cpp_reader *pfile, const cpp_token *token)
539 cpp_num result;
540 unsigned int temp;
541 int unsignedp = 0;
543 result.unsignedp = false;
544 result.overflow = false;
546 switch (token->type)
548 case CPP_NUMBER:
549 temp = cpp_classify_number (pfile, token);
550 switch (temp & CPP_N_CATEGORY)
552 case CPP_N_FLOATING:
553 cpp_error (pfile, CPP_DL_ERROR,
554 "floating constant in preprocessor expression");
555 break;
556 case CPP_N_INTEGER:
557 if (!(temp & CPP_N_IMAGINARY))
558 return cpp_interpret_integer (pfile, token, temp);
559 cpp_error (pfile, CPP_DL_ERROR,
560 "imaginary number in preprocessor expression");
561 break;
563 case CPP_N_INVALID:
564 /* Error already issued. */
565 break;
567 result.high = result.low = 0;
568 break;
570 case CPP_WCHAR:
571 case CPP_CHAR:
573 cppchar_t cc = cpp_interpret_charconst (pfile, token,
574 &temp, &unsignedp);
576 result.high = 0;
577 result.low = cc;
578 /* Sign-extend the result if necessary. */
579 if (!unsignedp && (cppchar_signed_t) cc < 0)
581 if (PART_PRECISION > BITS_PER_CPPCHAR_T)
582 result.low |= ~(~(cpp_num_part) 0
583 >> (PART_PRECISION - BITS_PER_CPPCHAR_T));
584 result.high = ~(cpp_num_part) 0;
585 result = num_trim (result, CPP_OPTION (pfile, precision));
588 break;
590 case CPP_NAME:
591 if (token->val.node == pfile->spec_nodes.n_defined)
592 return parse_defined (pfile);
593 else if (CPP_OPTION (pfile, cplusplus)
594 && (token->val.node == pfile->spec_nodes.n_true
595 || token->val.node == pfile->spec_nodes.n_false))
597 result.high = 0;
598 result.low = (token->val.node == pfile->spec_nodes.n_true);
600 else
602 result.high = 0;
603 result.low = 0;
604 if (CPP_OPTION (pfile, warn_undef) && !pfile->state.skip_eval)
605 cpp_error (pfile, CPP_DL_WARNING, "\"%s\" is not defined",
606 NODE_NAME (token->val.node));
608 break;
610 default: /* CPP_HASH */
611 _cpp_test_assertion (pfile, &temp);
612 result.high = 0;
613 result.low = temp;
616 result.unsignedp = !!unsignedp;
617 return result;
620 /* Operator precedence and flags table.
622 After an operator is returned from the lexer, if it has priority less
623 than the operator on the top of the stack, we reduce the stack by one
624 operator and repeat the test. Since equal priorities do not reduce,
625 this is naturally right-associative.
627 We handle left-associative operators by decrementing the priority of
628 just-lexed operators by one, but retaining the priority of operators
629 already on the stack.
631 The remaining cases are '(' and ')'. We handle '(' by skipping the
632 reduction phase completely. ')' is given lower priority than
633 everything else, including '(', effectively forcing a reduction of the
634 parenthesized expression. If there is a matching '(', the routine
635 reduce() exits immediately. If the normal exit route sees a ')', then
636 there cannot have been a matching '(' and an error message is output.
638 The parser assumes all shifted operators require a left operand unless
639 the flag NO_L_OPERAND is set. These semantics are automatic; any
640 extra semantics need to be handled with operator-specific code. */
642 /* Flags. If CHECK_PROMOTION, we warn if the effective sign of an
643 operand changes because of integer promotions. */
644 #define NO_L_OPERAND (1 << 0)
645 #define LEFT_ASSOC (1 << 1)
646 #define CHECK_PROMOTION (1 << 2)
648 /* Operator to priority map. Must be in the same order as the first
649 N entries of enum cpp_ttype. */
650 static const struct cpp_operator
652 uchar prio;
653 uchar flags;
654 } optab[] =
656 /* EQ */ {0, 0}, /* Shouldn't happen. */
657 /* NOT */ {16, NO_L_OPERAND},
658 /* GREATER */ {12, LEFT_ASSOC | CHECK_PROMOTION},
659 /* LESS */ {12, LEFT_ASSOC | CHECK_PROMOTION},
660 /* PLUS */ {14, LEFT_ASSOC | CHECK_PROMOTION},
661 /* MINUS */ {14, LEFT_ASSOC | CHECK_PROMOTION},
662 /* MULT */ {15, LEFT_ASSOC | CHECK_PROMOTION},
663 /* DIV */ {15, LEFT_ASSOC | CHECK_PROMOTION},
664 /* MOD */ {15, LEFT_ASSOC | CHECK_PROMOTION},
665 /* AND */ {9, LEFT_ASSOC | CHECK_PROMOTION},
666 /* OR */ {7, LEFT_ASSOC | CHECK_PROMOTION},
667 /* XOR */ {8, LEFT_ASSOC | CHECK_PROMOTION},
668 /* RSHIFT */ {13, LEFT_ASSOC},
669 /* LSHIFT */ {13, LEFT_ASSOC},
671 /* MIN */ {10, LEFT_ASSOC | CHECK_PROMOTION},
672 /* MAX */ {10, LEFT_ASSOC | CHECK_PROMOTION},
674 /* COMPL */ {16, NO_L_OPERAND},
675 /* AND_AND */ {6, LEFT_ASSOC},
676 /* OR_OR */ {5, LEFT_ASSOC},
677 /* QUERY */ {3, 0},
678 /* COLON */ {4, LEFT_ASSOC | CHECK_PROMOTION},
679 /* COMMA */ {2, LEFT_ASSOC},
680 /* OPEN_PAREN */ {1, NO_L_OPERAND},
681 /* CLOSE_PAREN */ {0, 0},
682 /* EOF */ {0, 0},
683 /* EQ_EQ */ {11, LEFT_ASSOC},
684 /* NOT_EQ */ {11, LEFT_ASSOC},
685 /* GREATER_EQ */ {12, LEFT_ASSOC | CHECK_PROMOTION},
686 /* LESS_EQ */ {12, LEFT_ASSOC | CHECK_PROMOTION},
687 /* UPLUS */ {16, NO_L_OPERAND},
688 /* UMINUS */ {16, NO_L_OPERAND}
691 /* Parse and evaluate a C expression, reading from PFILE.
692 Returns the truth value of the expression.
694 The implementation is an operator precedence parser, i.e. a
695 bottom-up parser, using a stack for not-yet-reduced tokens.
697 The stack base is op_stack, and the current stack pointer is 'top'.
698 There is a stack element for each operator (only), and the most
699 recently pushed operator is 'top->op'. An operand (value) is
700 stored in the 'value' field of the stack element of the operator
701 that precedes it. */
702 bool
703 _cpp_parse_expr (cpp_reader *pfile)
705 struct op *top = pfile->op_stack;
706 unsigned int lex_count;
707 bool saw_leading_not, want_value = true;
709 pfile->state.skip_eval = 0;
711 /* Set up detection of #if ! defined(). */
712 pfile->mi_ind_cmacro = 0;
713 saw_leading_not = false;
714 lex_count = 0;
716 /* Lowest priority operator prevents further reductions. */
717 top->op = CPP_EOF;
719 for (;;)
721 struct op op;
723 lex_count++;
724 op.token = cpp_get_token (pfile);
725 op.op = op.token->type;
727 switch (op.op)
729 /* These tokens convert into values. */
730 case CPP_NUMBER:
731 case CPP_CHAR:
732 case CPP_WCHAR:
733 case CPP_NAME:
734 case CPP_HASH:
735 if (!want_value)
736 SYNTAX_ERROR2 ("missing binary operator before token \"%s\"",
737 cpp_token_as_text (pfile, op.token));
738 want_value = false;
739 top->value = eval_token (pfile, op.token);
740 continue;
742 case CPP_NOT:
743 saw_leading_not = lex_count == 1;
744 break;
745 case CPP_PLUS:
746 if (want_value)
747 op.op = CPP_UPLUS;
748 break;
749 case CPP_MINUS:
750 if (want_value)
751 op.op = CPP_UMINUS;
752 break;
754 default:
755 if ((int) op.op <= (int) CPP_EQ || (int) op.op >= (int) CPP_PLUS_EQ)
756 SYNTAX_ERROR2 ("token \"%s\" is not valid in preprocessor expressions",
757 cpp_token_as_text (pfile, op.token));
758 break;
761 /* Check we have a value or operator as appropriate. */
762 if (optab[op.op].flags & NO_L_OPERAND)
764 if (!want_value)
765 SYNTAX_ERROR2 ("missing binary operator before token \"%s\"",
766 cpp_token_as_text (pfile, op.token));
768 else if (want_value)
770 /* We want a number (or expression) and haven't got one.
771 Try to emit a specific diagnostic. */
772 if (op.op == CPP_CLOSE_PAREN && top->op == CPP_OPEN_PAREN)
773 SYNTAX_ERROR ("missing expression between '(' and ')'");
775 if (op.op == CPP_EOF && top->op == CPP_EOF)
776 SYNTAX_ERROR ("#if with no expression");
778 if (top->op != CPP_EOF && top->op != CPP_OPEN_PAREN)
779 SYNTAX_ERROR2 ("operator '%s' has no right operand",
780 cpp_token_as_text (pfile, top->token));
781 else if (op.op == CPP_CLOSE_PAREN || op.op == CPP_EOF)
782 /* Complain about missing paren during reduction. */;
783 else
784 SYNTAX_ERROR2 ("operator '%s' has no left operand",
785 cpp_token_as_text (pfile, op.token));
788 top = reduce (pfile, top, op.op);
789 if (!top)
790 goto syntax_error;
792 if (op.op == CPP_EOF)
793 break;
795 switch (op.op)
797 case CPP_CLOSE_PAREN:
798 continue;
799 case CPP_OR_OR:
800 if (!num_zerop (top->value))
801 pfile->state.skip_eval++;
802 break;
803 case CPP_AND_AND:
804 case CPP_QUERY:
805 if (num_zerop (top->value))
806 pfile->state.skip_eval++;
807 break;
808 case CPP_COLON:
809 if (top->op != CPP_QUERY)
810 SYNTAX_ERROR (" ':' without preceding '?'");
811 if (!num_zerop (top[-1].value)) /* Was '?' condition true? */
812 pfile->state.skip_eval++;
813 else
814 pfile->state.skip_eval--;
815 default:
816 break;
819 want_value = true;
821 /* Check for and handle stack overflow. */
822 if (++top == pfile->op_limit)
823 top = _cpp_expand_op_stack (pfile);
825 top->op = op.op;
826 top->token = op.token;
829 /* The controlling macro expression is only valid if we called lex 3
830 times: <!> <defined expression> and <EOF>. push_conditional ()
831 checks that we are at top-of-file. */
832 if (pfile->mi_ind_cmacro && !(saw_leading_not && lex_count == 3))
833 pfile->mi_ind_cmacro = 0;
835 if (top != pfile->op_stack)
837 cpp_error (pfile, CPP_DL_ICE, "unbalanced stack in #if");
838 syntax_error:
839 return false; /* Return false on syntax error. */
842 return !num_zerop (top->value);
845 /* Reduce the operator / value stack if possible, in preparation for
846 pushing operator OP. Returns NULL on error, otherwise the top of
847 the stack. */
848 static struct op *
849 reduce (cpp_reader *pfile, struct op *top, enum cpp_ttype op)
851 unsigned int prio;
853 if (top->op <= CPP_EQ || top->op > CPP_LAST_CPP_OP + 2)
855 bad_op:
856 cpp_error (pfile, CPP_DL_ICE, "impossible operator '%u'", top->op);
857 return 0;
860 if (op == CPP_OPEN_PAREN)
861 return top;
863 /* Decrement the priority of left-associative operators to force a
864 reduction with operators of otherwise equal priority. */
865 prio = optab[op].prio - ((optab[op].flags & LEFT_ASSOC) != 0);
866 while (prio < optab[top->op].prio)
868 if (CPP_OPTION (pfile, warn_num_sign_change)
869 && optab[top->op].flags & CHECK_PROMOTION)
870 check_promotion (pfile, top);
872 switch (top->op)
874 case CPP_UPLUS:
875 case CPP_UMINUS:
876 case CPP_NOT:
877 case CPP_COMPL:
878 top[-1].value = num_unary_op (pfile, top->value, top->op);
879 break;
881 case CPP_PLUS:
882 case CPP_MINUS:
883 case CPP_RSHIFT:
884 case CPP_LSHIFT:
885 case CPP_MIN:
886 case CPP_MAX:
887 case CPP_COMMA:
888 top[-1].value = num_binary_op (pfile, top[-1].value,
889 top->value, top->op);
890 break;
892 case CPP_GREATER:
893 case CPP_LESS:
894 case CPP_GREATER_EQ:
895 case CPP_LESS_EQ:
896 top[-1].value
897 = num_inequality_op (pfile, top[-1].value, top->value, top->op);
898 break;
900 case CPP_EQ_EQ:
901 case CPP_NOT_EQ:
902 top[-1].value
903 = num_equality_op (pfile, top[-1].value, top->value, top->op);
904 break;
906 case CPP_AND:
907 case CPP_OR:
908 case CPP_XOR:
909 top[-1].value
910 = num_bitwise_op (pfile, top[-1].value, top->value, top->op);
911 break;
913 case CPP_MULT:
914 top[-1].value = num_mul (pfile, top[-1].value, top->value);
915 break;
917 case CPP_DIV:
918 case CPP_MOD:
919 top[-1].value = num_div_op (pfile, top[-1].value,
920 top->value, top->op);
921 break;
923 case CPP_OR_OR:
924 top--;
925 if (!num_zerop (top->value))
926 pfile->state.skip_eval--;
927 top->value.low = (!num_zerop (top->value)
928 || !num_zerop (top[1].value));
929 top->value.high = 0;
930 top->value.unsignedp = false;
931 top->value.overflow = false;
932 continue;
934 case CPP_AND_AND:
935 top--;
936 if (num_zerop (top->value))
937 pfile->state.skip_eval--;
938 top->value.low = (!num_zerop (top->value)
939 && !num_zerop (top[1].value));
940 top->value.high = 0;
941 top->value.unsignedp = false;
942 top->value.overflow = false;
943 continue;
945 case CPP_OPEN_PAREN:
946 if (op != CPP_CLOSE_PAREN)
948 cpp_error (pfile, CPP_DL_ERROR, "missing ')' in expression");
949 return 0;
951 top--;
952 top->value = top[1].value;
953 return top;
955 case CPP_COLON:
956 top -= 2;
957 if (!num_zerop (top->value))
959 pfile->state.skip_eval--;
960 top->value = top[1].value;
962 else
963 top->value = top[2].value;
964 top->value.unsignedp = (top[1].value.unsignedp
965 || top[2].value.unsignedp);
966 continue;
968 case CPP_QUERY:
969 cpp_error (pfile, CPP_DL_ERROR, "'?' without following ':'");
970 return 0;
972 default:
973 goto bad_op;
976 top--;
977 if (top->value.overflow && !pfile->state.skip_eval)
978 cpp_error (pfile, CPP_DL_PEDWARN,
979 "integer overflow in preprocessor expression");
982 if (op == CPP_CLOSE_PAREN)
984 cpp_error (pfile, CPP_DL_ERROR, "missing '(' in expression");
985 return 0;
988 return top;
991 /* Returns the position of the old top of stack after expansion. */
992 struct op *
993 _cpp_expand_op_stack (cpp_reader *pfile)
995 size_t old_size = (size_t) (pfile->op_limit - pfile->op_stack);
996 size_t new_size = old_size * 2 + 20;
998 pfile->op_stack = XRESIZEVEC (struct op, pfile->op_stack, new_size);
999 pfile->op_limit = pfile->op_stack + new_size;
1001 return pfile->op_stack + old_size;
1004 /* Emits a warning if the effective sign of either operand of OP
1005 changes because of integer promotions. */
1006 static void
1007 check_promotion (cpp_reader *pfile, const struct op *op)
1009 if (op->value.unsignedp == op[-1].value.unsignedp)
1010 return;
1012 if (op->value.unsignedp)
1014 if (!num_positive (op[-1].value, CPP_OPTION (pfile, precision)))
1015 cpp_error (pfile, CPP_DL_WARNING,
1016 "the left operand of \"%s\" changes sign when promoted",
1017 cpp_token_as_text (pfile, op->token));
1019 else if (!num_positive (op->value, CPP_OPTION (pfile, precision)))
1020 cpp_error (pfile, CPP_DL_WARNING,
1021 "the right operand of \"%s\" changes sign when promoted",
1022 cpp_token_as_text (pfile, op->token));
1025 /* Clears the unused high order bits of the number pointed to by PNUM. */
1026 static cpp_num
1027 num_trim (cpp_num num, size_t precision)
1029 if (precision > PART_PRECISION)
1031 precision -= PART_PRECISION;
1032 if (precision < PART_PRECISION)
1033 num.high &= ((cpp_num_part) 1 << precision) - 1;
1035 else
1037 if (precision < PART_PRECISION)
1038 num.low &= ((cpp_num_part) 1 << precision) - 1;
1039 num.high = 0;
1042 return num;
1045 /* True iff A (presumed signed) >= 0. */
1046 static bool
1047 num_positive (cpp_num num, size_t precision)
1049 if (precision > PART_PRECISION)
1051 precision -= PART_PRECISION;
1052 return (num.high & (cpp_num_part) 1 << (precision - 1)) == 0;
1055 return (num.low & (cpp_num_part) 1 << (precision - 1)) == 0;
1058 /* Sign extend a number, with PRECISION significant bits and all
1059 others assumed clear, to fill out a cpp_num structure. */
1060 cpp_num
1061 cpp_num_sign_extend (cpp_num num, size_t precision)
1063 if (!num.unsignedp)
1065 if (precision > PART_PRECISION)
1067 precision -= PART_PRECISION;
1068 if (precision < PART_PRECISION
1069 && (num.high & (cpp_num_part) 1 << (precision - 1)))
1070 num.high |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
1072 else if (num.low & (cpp_num_part) 1 << (precision - 1))
1074 if (precision < PART_PRECISION)
1075 num.low |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
1076 num.high = ~(cpp_num_part) 0;
1080 return num;
1083 /* Returns the negative of NUM. */
1084 static cpp_num
1085 num_negate (cpp_num num, size_t precision)
1087 cpp_num copy;
1089 copy = num;
1090 num.high = ~num.high;
1091 num.low = ~num.low;
1092 if (++num.low == 0)
1093 num.high++;
1094 num = num_trim (num, precision);
1095 num.overflow = (!num.unsignedp && num_eq (num, copy) && !num_zerop (num));
1097 return num;
1100 /* Returns true if A >= B. */
1101 static bool
1102 num_greater_eq (cpp_num pa, cpp_num pb, size_t precision)
1104 bool unsignedp;
1106 unsignedp = pa.unsignedp || pb.unsignedp;
1108 if (!unsignedp)
1110 /* Both numbers have signed type. If they are of different
1111 sign, the answer is the sign of A. */
1112 unsignedp = num_positive (pa, precision);
1114 if (unsignedp != num_positive (pb, precision))
1115 return unsignedp;
1117 /* Otherwise we can do an unsigned comparison. */
1120 return (pa.high > pb.high) || (pa.high == pb.high && pa.low >= pb.low);
1123 /* Returns LHS OP RHS, where OP is a bit-wise operation. */
1124 static cpp_num
1125 num_bitwise_op (cpp_reader *pfile ATTRIBUTE_UNUSED,
1126 cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1128 lhs.overflow = false;
1129 lhs.unsignedp = lhs.unsignedp || rhs.unsignedp;
1131 /* As excess precision is zeroed, there is no need to num_trim () as
1132 these operations cannot introduce a set bit there. */
1133 if (op == CPP_AND)
1135 lhs.low &= rhs.low;
1136 lhs.high &= rhs.high;
1138 else if (op == CPP_OR)
1140 lhs.low |= rhs.low;
1141 lhs.high |= rhs.high;
1143 else
1145 lhs.low ^= rhs.low;
1146 lhs.high ^= rhs.high;
1149 return lhs;
1152 /* Returns LHS OP RHS, where OP is an inequality. */
1153 static cpp_num
1154 num_inequality_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs,
1155 enum cpp_ttype op)
1157 bool gte = num_greater_eq (lhs, rhs, CPP_OPTION (pfile, precision));
1159 if (op == CPP_GREATER_EQ)
1160 lhs.low = gte;
1161 else if (op == CPP_LESS)
1162 lhs.low = !gte;
1163 else if (op == CPP_GREATER)
1164 lhs.low = gte && !num_eq (lhs, rhs);
1165 else /* CPP_LESS_EQ. */
1166 lhs.low = !gte || num_eq (lhs, rhs);
1168 lhs.high = 0;
1169 lhs.overflow = false;
1170 lhs.unsignedp = false;
1171 return lhs;
1174 /* Returns LHS OP RHS, where OP is == or !=. */
1175 static cpp_num
1176 num_equality_op (cpp_reader *pfile ATTRIBUTE_UNUSED,
1177 cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1179 /* Work around a 3.0.4 bug; see PR 6950. */
1180 bool eq = num_eq (lhs, rhs);
1181 if (op == CPP_NOT_EQ)
1182 eq = !eq;
1183 lhs.low = eq;
1184 lhs.high = 0;
1185 lhs.overflow = false;
1186 lhs.unsignedp = false;
1187 return lhs;
1190 /* Shift NUM, of width PRECISION, right by N bits. */
1191 static cpp_num
1192 num_rshift (cpp_num num, size_t precision, size_t n)
1194 cpp_num_part sign_mask;
1195 bool x = num_positive (num, precision);
1197 if (num.unsignedp || x)
1198 sign_mask = 0;
1199 else
1200 sign_mask = ~(cpp_num_part) 0;
1202 if (n >= precision)
1203 num.high = num.low = sign_mask;
1204 else
1206 /* Sign-extend. */
1207 if (precision < PART_PRECISION)
1208 num.high = sign_mask, num.low |= sign_mask << precision;
1209 else if (precision < 2 * PART_PRECISION)
1210 num.high |= sign_mask << (precision - PART_PRECISION);
1212 if (n >= PART_PRECISION)
1214 n -= PART_PRECISION;
1215 num.low = num.high;
1216 num.high = sign_mask;
1219 if (n)
1221 num.low = (num.low >> n) | (num.high << (PART_PRECISION - n));
1222 num.high = (num.high >> n) | (sign_mask << (PART_PRECISION - n));
1226 num = num_trim (num, precision);
1227 num.overflow = false;
1228 return num;
1231 /* Shift NUM, of width PRECISION, left by N bits. */
1232 static cpp_num
1233 num_lshift (cpp_num num, size_t precision, size_t n)
1235 if (n >= precision)
1237 num.overflow = !num.unsignedp && !num_zerop (num);
1238 num.high = num.low = 0;
1240 else
1242 cpp_num orig, maybe_orig;
1243 size_t m = n;
1245 orig = num;
1246 if (m >= PART_PRECISION)
1248 m -= PART_PRECISION;
1249 num.high = num.low;
1250 num.low = 0;
1252 if (m)
1254 num.high = (num.high << m) | (num.low >> (PART_PRECISION - m));
1255 num.low <<= m;
1257 num = num_trim (num, precision);
1259 if (num.unsignedp)
1260 num.overflow = false;
1261 else
1263 maybe_orig = num_rshift (num, precision, n);
1264 num.overflow = !num_eq (orig, maybe_orig);
1268 return num;
1271 /* The four unary operators: +, -, ! and ~. */
1272 static cpp_num
1273 num_unary_op (cpp_reader *pfile, cpp_num num, enum cpp_ttype op)
1275 switch (op)
1277 case CPP_UPLUS:
1278 if (CPP_WTRADITIONAL (pfile) && !pfile->state.skip_eval)
1279 cpp_error (pfile, CPP_DL_WARNING,
1280 "traditional C rejects the unary plus operator");
1281 num.overflow = false;
1282 break;
1284 case CPP_UMINUS:
1285 num = num_negate (num, CPP_OPTION (pfile, precision));
1286 break;
1288 case CPP_COMPL:
1289 num.high = ~num.high;
1290 num.low = ~num.low;
1291 num = num_trim (num, CPP_OPTION (pfile, precision));
1292 num.overflow = false;
1293 break;
1295 default: /* case CPP_NOT: */
1296 num.low = num_zerop (num);
1297 num.high = 0;
1298 num.overflow = false;
1299 num.unsignedp = false;
1300 break;
1303 return num;
1306 /* The various binary operators. */
1307 static cpp_num
1308 num_binary_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1310 cpp_num result;
1311 size_t precision = CPP_OPTION (pfile, precision);
1312 bool gte;
1313 size_t n;
1315 switch (op)
1317 /* Shifts. */
1318 case CPP_LSHIFT:
1319 case CPP_RSHIFT:
1320 if (!rhs.unsignedp && !num_positive (rhs, precision))
1322 /* A negative shift is a positive shift the other way. */
1323 if (op == CPP_LSHIFT)
1324 op = CPP_RSHIFT;
1325 else
1326 op = CPP_LSHIFT;
1327 rhs = num_negate (rhs, precision);
1329 if (rhs.high)
1330 n = ~0; /* Maximal. */
1331 else
1332 n = rhs.low;
1333 if (op == CPP_LSHIFT)
1334 lhs = num_lshift (lhs, precision, n);
1335 else
1336 lhs = num_rshift (lhs, precision, n);
1337 break;
1339 /* Min / Max. */
1340 case CPP_MIN:
1341 case CPP_MAX:
1343 bool unsignedp = lhs.unsignedp || rhs.unsignedp;
1345 gte = num_greater_eq (lhs, rhs, precision);
1346 if (op == CPP_MIN)
1347 gte = !gte;
1348 if (!gte)
1349 lhs = rhs;
1350 lhs.unsignedp = unsignedp;
1352 break;
1354 /* Arithmetic. */
1355 case CPP_MINUS:
1356 rhs = num_negate (rhs, precision);
1357 case CPP_PLUS:
1358 result.low = lhs.low + rhs.low;
1359 result.high = lhs.high + rhs.high;
1360 if (result.low < lhs.low)
1361 result.high++;
1362 result.unsignedp = lhs.unsignedp || rhs.unsignedp;
1363 result.overflow = false;
1365 result = num_trim (result, precision);
1366 if (!result.unsignedp)
1368 bool lhsp = num_positive (lhs, precision);
1369 result.overflow = (lhsp == num_positive (rhs, precision)
1370 && lhsp != num_positive (result, precision));
1372 return result;
1374 /* Comma. */
1375 default: /* case CPP_COMMA: */
1376 if (CPP_PEDANTIC (pfile) && (!CPP_OPTION (pfile, c99)
1377 || !pfile->state.skip_eval))
1378 cpp_error (pfile, CPP_DL_PEDWARN,
1379 "comma operator in operand of #if");
1380 lhs = rhs;
1381 break;
1384 return lhs;
1387 /* Multiplies two unsigned cpp_num_parts to give a cpp_num. This
1388 cannot overflow. */
1389 static cpp_num
1390 num_part_mul (cpp_num_part lhs, cpp_num_part rhs)
1392 cpp_num result;
1393 cpp_num_part middle[2], temp;
1395 result.low = LOW_PART (lhs) * LOW_PART (rhs);
1396 result.high = HIGH_PART (lhs) * HIGH_PART (rhs);
1398 middle[0] = LOW_PART (lhs) * HIGH_PART (rhs);
1399 middle[1] = HIGH_PART (lhs) * LOW_PART (rhs);
1401 temp = result.low;
1402 result.low += LOW_PART (middle[0]) << (PART_PRECISION / 2);
1403 if (result.low < temp)
1404 result.high++;
1406 temp = result.low;
1407 result.low += LOW_PART (middle[1]) << (PART_PRECISION / 2);
1408 if (result.low < temp)
1409 result.high++;
1411 result.high += HIGH_PART (middle[0]);
1412 result.high += HIGH_PART (middle[1]);
1413 result.unsignedp = true;
1414 result.overflow = false;
1416 return result;
1419 /* Multiply two preprocessing numbers. */
1420 static cpp_num
1421 num_mul (cpp_reader *pfile, cpp_num lhs, cpp_num rhs)
1423 cpp_num result, temp;
1424 bool unsignedp = lhs.unsignedp || rhs.unsignedp;
1425 bool overflow, negate = false;
1426 size_t precision = CPP_OPTION (pfile, precision);
1428 /* Prepare for unsigned multiplication. */
1429 if (!unsignedp)
1431 if (!num_positive (lhs, precision))
1432 negate = !negate, lhs = num_negate (lhs, precision);
1433 if (!num_positive (rhs, precision))
1434 negate = !negate, rhs = num_negate (rhs, precision);
1437 overflow = lhs.high && rhs.high;
1438 result = num_part_mul (lhs.low, rhs.low);
1440 temp = num_part_mul (lhs.high, rhs.low);
1441 result.high += temp.low;
1442 if (temp.high)
1443 overflow = true;
1445 temp = num_part_mul (lhs.low, rhs.high);
1446 result.high += temp.low;
1447 if (temp.high)
1448 overflow = true;
1450 temp.low = result.low, temp.high = result.high;
1451 result = num_trim (result, precision);
1452 if (!num_eq (result, temp))
1453 overflow = true;
1455 if (negate)
1456 result = num_negate (result, precision);
1458 if (unsignedp)
1459 result.overflow = false;
1460 else
1461 result.overflow = overflow || (num_positive (result, precision) ^ !negate
1462 && !num_zerop (result));
1463 result.unsignedp = unsignedp;
1465 return result;
1468 /* Divide two preprocessing numbers, returning the answer or the
1469 remainder depending upon OP. */
1470 static cpp_num
1471 num_div_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1473 cpp_num result, sub;
1474 cpp_num_part mask;
1475 bool unsignedp = lhs.unsignedp || rhs.unsignedp;
1476 bool negate = false, lhs_neg = false;
1477 size_t i, precision = CPP_OPTION (pfile, precision);
1479 /* Prepare for unsigned division. */
1480 if (!unsignedp)
1482 if (!num_positive (lhs, precision))
1483 negate = !negate, lhs_neg = true, lhs = num_negate (lhs, precision);
1484 if (!num_positive (rhs, precision))
1485 negate = !negate, rhs = num_negate (rhs, precision);
1488 /* Find the high bit. */
1489 if (rhs.high)
1491 i = precision - 1;
1492 mask = (cpp_num_part) 1 << (i - PART_PRECISION);
1493 for (; ; i--, mask >>= 1)
1494 if (rhs.high & mask)
1495 break;
1497 else if (rhs.low)
1499 if (precision > PART_PRECISION)
1500 i = precision - PART_PRECISION - 1;
1501 else
1502 i = precision - 1;
1503 mask = (cpp_num_part) 1 << i;
1504 for (; ; i--, mask >>= 1)
1505 if (rhs.low & mask)
1506 break;
1508 else
1510 if (!pfile->state.skip_eval)
1511 cpp_error (pfile, CPP_DL_ERROR, "division by zero in #if");
1512 return lhs;
1515 /* First nonzero bit of RHS is bit I. Do naive division by
1516 shifting the RHS fully left, and subtracting from LHS if LHS is
1517 at least as big, and then repeating but with one less shift.
1518 This is not very efficient, but is easy to understand. */
1520 rhs.unsignedp = true;
1521 lhs.unsignedp = true;
1522 i = precision - i - 1;
1523 sub = num_lshift (rhs, precision, i);
1525 result.high = result.low = 0;
1526 for (;;)
1528 if (num_greater_eq (lhs, sub, precision))
1530 lhs = num_binary_op (pfile, lhs, sub, CPP_MINUS);
1531 if (i >= PART_PRECISION)
1532 result.high |= (cpp_num_part) 1 << (i - PART_PRECISION);
1533 else
1534 result.low |= (cpp_num_part) 1 << i;
1536 if (i-- == 0)
1537 break;
1538 sub.low = (sub.low >> 1) | (sub.high << (PART_PRECISION - 1));
1539 sub.high >>= 1;
1542 /* We divide so that the remainder has the sign of the LHS. */
1543 if (op == CPP_DIV)
1545 result.unsignedp = unsignedp;
1546 result.overflow = false;
1547 if (!unsignedp)
1549 if (negate)
1550 result = num_negate (result, precision);
1551 result.overflow = num_positive (result, precision) ^ !negate;
1554 return result;
1557 /* CPP_MOD. */
1558 lhs.unsignedp = unsignedp;
1559 lhs.overflow = false;
1560 if (lhs_neg)
1561 lhs = num_negate (lhs, precision);
1563 return lhs;