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 Suppress warning about 'LL' with -Wno-long-long. */
275 if (CPP_WTRADITIONAL (pfile
) && ! cpp_sys_macro_p (pfile
))
277 int u_or_i
= (result
& (CPP_N_UNSIGNED
|CPP_N_IMAGINARY
));
278 int large
= (result
& CPP_N_WIDTH
) == CPP_N_LARGE
;
280 if (u_or_i
|| (large
&& CPP_OPTION (pfile
, warn_long_long
)))
281 cpp_error (pfile
, DL_WARNING
,
282 "traditional C rejects the \"%.*s\" suffix",
283 (int) (limit
- str
), str
);
286 if ((result
& CPP_N_WIDTH
) == CPP_N_LARGE
287 && ! CPP_OPTION (pfile
, c99
)
288 && CPP_OPTION (pfile
, warn_long_long
))
289 cpp_error (pfile
, DL_PEDWARN
, "use of C99 long long integer constant");
291 result
|= CPP_N_INTEGER
;
294 if ((result
& CPP_N_IMAGINARY
) && CPP_PEDANTIC (pfile
))
295 cpp_error (pfile
, DL_PEDWARN
, "imaginary constants are a GCC extension");
298 result
|= CPP_N_DECIMAL
;
299 else if (radix
== 16)
302 result
|= CPP_N_OCTAL
;
307 return CPP_N_INVALID
;
310 /* cpp_interpret_integer converts an integer constant into a cpp_num,
311 of precision options->precision.
313 We do not provide any interface for decimal->float conversion,
314 because the preprocessor doesn't need it and the floating point
315 handling in GCC proper is too ugly to speak of. */
317 cpp_interpret_integer (pfile
, token
, type
)
319 const cpp_token
*token
;
322 const uchar
*p
, *end
;
327 result
.unsignedp
= !!(type
& CPP_N_UNSIGNED
);
328 result
.overflow
= false;
330 p
= token
->val
.str
.text
;
331 end
= p
+ token
->val
.str
.len
;
333 /* Common case of a single digit. */
334 if (token
->val
.str
.len
== 1)
335 result
.low
= p
[0] - '0';
339 size_t precision
= CPP_OPTION (pfile
, precision
);
340 unsigned int base
= 10, c
= 0;
341 bool overflow
= false;
343 if ((type
& CPP_N_RADIX
) == CPP_N_OCTAL
)
348 else if ((type
& CPP_N_RADIX
) == CPP_N_HEX
)
354 /* We can add a digit to numbers strictly less than this without
355 needing the precision and slowness of double integers. */
356 max
= ~(cpp_num_part
) 0;
357 if (precision
< PART_PRECISION
)
358 max
>>= PART_PRECISION
- precision
;
359 max
= (max
- base
+ 1) / base
+ 1;
365 if (ISDIGIT (c
) || (base
== 16 && ISXDIGIT (c
)))
370 /* Strict inequality for when max is set to zero. */
371 if (result
.low
< max
)
372 result
.low
= result
.low
* base
+ c
;
375 result
= append_digit (result
, c
, base
, precision
);
376 overflow
|= result
.overflow
;
382 cpp_error (pfile
, DL_PEDWARN
,
383 "integer constant is too large for its type");
384 /* If too big to be signed, consider it unsigned. Only warn for
385 decimal numbers. Traditional numbers were always signed (but
386 we still honor an explicit U suffix); but we only have
387 traditional semantics in directives. */
388 else if (!result
.unsignedp
389 && !(CPP_OPTION (pfile
, traditional
)
390 && pfile
->state
.in_directive
)
391 && !num_positive (result
, precision
))
394 cpp_error (pfile
, DL_WARNING
,
395 "integer constant is so large that it is unsigned");
396 result
.unsignedp
= true;
403 /* Append DIGIT to NUM, a number of PRECISION bits being read in base
406 append_digit (num
, digit
, base
, precision
)
412 unsigned int shift
= 3 + (base
== 16);
414 cpp_num_part add_high
, add_low
;
416 /* Multiply by 8 or 16. Catching this overflow here means we don't
417 need to worry about add_high overflowing. */
418 overflow
= !!(num
.high
>> (PART_PRECISION
- shift
));
419 result
.high
= num
.high
<< shift
;
420 result
.low
= num
.low
<< shift
;
421 result
.high
|= num
.low
>> (PART_PRECISION
- shift
);
425 add_low
= num
.low
<< 1;
426 add_high
= (num
.high
<< 1) + (num
.low
>> (PART_PRECISION
- 1));
429 add_high
= add_low
= 0;
431 if (add_low
+ digit
< add_low
)
435 if (result
.low
+ add_low
< result
.low
)
437 if (result
.high
+ add_high
< result
.high
)
440 result
.low
+= add_low
;
441 result
.high
+= add_high
;
443 /* The above code catches overflow of a cpp_num type. This catches
444 overflow of the (possibly shorter) target precision. */
445 num
.low
= result
.low
;
446 num
.high
= result
.high
;
447 result
= num_trim (result
, precision
);
448 if (!num_eq (result
, num
))
451 result
.unsignedp
= num
.unsignedp
;
452 result
.overflow
= overflow
;
456 /* Handle meeting "defined" in a preprocessor expression. */
458 parse_defined (pfile
)
463 cpp_hashnode
*node
= 0;
464 const cpp_token
*token
;
465 cpp_context
*initial_context
= pfile
->context
;
467 /* Don't expand macros. */
468 pfile
->state
.prevent_expansion
++;
470 token
= cpp_get_token (pfile
);
471 if (token
->type
== CPP_OPEN_PAREN
)
474 token
= cpp_get_token (pfile
);
477 if (token
->type
== CPP_NAME
)
479 node
= token
->val
.node
;
480 if (paren
&& cpp_get_token (pfile
)->type
!= CPP_CLOSE_PAREN
)
482 cpp_error (pfile
, DL_ERROR
, "missing ')' after \"defined\"");
488 cpp_error (pfile
, DL_ERROR
,
489 "operator \"defined\" requires an identifier");
490 if (token
->flags
& NAMED_OP
)
495 op
.type
= token
->type
;
496 cpp_error (pfile
, DL_ERROR
,
497 "(\"%s\" is an alternative token for \"%s\" in C++)",
498 cpp_token_as_text (pfile
, token
),
499 cpp_token_as_text (pfile
, &op
));
505 if (pfile
->context
!= initial_context
)
506 cpp_error (pfile
, DL_WARNING
,
507 "this use of \"defined\" may not be portable");
509 _cpp_mark_macro_used (node
);
511 /* A possible controlling macro of the form #if !defined ().
512 _cpp_parse_expr checks there was no other junk on the line. */
513 pfile
->mi_ind_cmacro
= node
;
516 pfile
->state
.prevent_expansion
--;
518 result
.unsignedp
= false;
520 result
.overflow
= false;
521 result
.low
= node
&& node
->type
== NT_MACRO
;
525 /* Convert a token into a CPP_NUMBER (an interpreted preprocessing
526 number or character constant, or the result of the "defined" or "#"
529 eval_token (pfile
, token
)
531 const cpp_token
*token
;
540 temp
= cpp_classify_number (pfile
, token
);
541 switch (temp
& CPP_N_CATEGORY
)
544 cpp_error (pfile
, DL_ERROR
,
545 "floating constant in preprocessor expression");
548 if (!(temp
& CPP_N_IMAGINARY
))
549 return cpp_interpret_integer (pfile
, token
, temp
);
550 cpp_error (pfile
, DL_ERROR
,
551 "imaginary number in preprocessor expression");
555 /* Error already issued. */
558 result
.high
= result
.low
= 0;
564 cppchar_t cc
= cpp_interpret_charconst (pfile
, token
,
569 /* Sign-extend the result if necessary. */
570 if (!unsignedp
&& (cppchar_signed_t
) cc
< 0)
572 if (PART_PRECISION
> BITS_PER_CPPCHAR_T
)
573 result
.low
|= ~(~(cpp_num_part
) 0
574 >> (PART_PRECISION
- BITS_PER_CPPCHAR_T
));
575 result
.high
= ~(cpp_num_part
) 0;
576 result
= num_trim (result
, CPP_OPTION (pfile
, precision
));
582 if (token
->val
.node
== pfile
->spec_nodes
.n_defined
)
583 return parse_defined (pfile
);
584 else if (CPP_OPTION (pfile
, cplusplus
)
585 && (token
->val
.node
== pfile
->spec_nodes
.n_true
586 || token
->val
.node
== pfile
->spec_nodes
.n_false
))
589 result
.low
= (token
->val
.node
== pfile
->spec_nodes
.n_true
);
591 /* Warn about use of true or false in #if when pedantic
592 and stdbool.h has not been included. */
593 if (CPP_PEDANTIC (pfile
)
594 && ! cpp_defined (pfile
, DSC("__bool_true_false_are_defined")))
595 cpp_error (pfile
, DL_PEDWARN
,
596 "ISO C++ does not permit \"%s\" in #if",
597 NODE_NAME (token
->val
.node
));
603 if (CPP_OPTION (pfile
, warn_undef
) && !pfile
->state
.skip_eval
)
604 cpp_error (pfile
, DL_WARNING
, "\"%s\" is not defined",
605 NODE_NAME (token
->val
.node
));
609 default: /* CPP_HASH */
610 _cpp_test_assertion (pfile
, &temp
);
615 result
.unsignedp
= !!unsignedp
;
616 result
.overflow
= false;
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 parenthesised 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 operator
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
},
678 /* COLON */ {4, LEFT_ASSOC
| CHECK_PROMOTION
},
679 /* COMMA */ {2, LEFT_ASSOC
},
680 /* OPEN_PAREN */ {1, NO_L_OPERAND
},
681 /* CLOSE_PAREN */ {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
703 _cpp_parse_expr (pfile
)
706 struct op
*top
= pfile
->op_stack
;
707 unsigned int lex_count
;
708 bool saw_leading_not
, want_value
= true;
710 pfile
->state
.skip_eval
= 0;
712 /* Set up detection of #if ! defined(). */
713 pfile
->mi_ind_cmacro
= 0;
714 saw_leading_not
= false;
717 /* Lowest priority operator prevents further reductions. */
725 op
.token
= cpp_get_token (pfile
);
726 op
.op
= op
.token
->type
;
730 /* These tokens convert into values. */
737 SYNTAX_ERROR2 ("missing binary operator before token \"%s\"",
738 cpp_token_as_text (pfile
, op
.token
));
740 top
->value
= eval_token (pfile
, op
.token
);
744 saw_leading_not
= lex_count
== 1;
755 if (ISGRAPH (op
.token
->val
.c
))
756 SYNTAX_ERROR2 ("invalid character '%c' in #if", op
.token
->val
.c
);
758 SYNTAX_ERROR2 ("invalid character '\\%03o' in #if",
762 if ((int) op
.op
<= (int) CPP_EQ
|| (int) op
.op
>= (int) CPP_PLUS_EQ
)
763 SYNTAX_ERROR2 ("token \"%s\" is not valid in preprocessor expressions",
764 cpp_token_as_text (pfile
, op
.token
));
768 /* Check we have a value or operator as appropriate. */
769 if (optab
[op
.op
].flags
& NO_L_OPERAND
)
772 SYNTAX_ERROR2 ("missing binary operator before token \"%s\"",
773 cpp_token_as_text (pfile
, op
.token
));
777 /* Ordering here is subtle and intended to favor the
778 missing parenthesis diagnostics over alternatives. */
779 if (op
.op
== CPP_CLOSE_PAREN
)
781 if (top
->op
== CPP_OPEN_PAREN
)
782 SYNTAX_ERROR ("void expression between '(' and ')'");
784 else if (top
->op
== CPP_EOF
)
785 SYNTAX_ERROR ("#if with no expression");
786 if (top
->op
!= CPP_EOF
&& top
->op
!= CPP_OPEN_PAREN
)
787 SYNTAX_ERROR2 ("operator '%s' has no right operand",
788 cpp_token_as_text (pfile
, top
->token
));
791 top
= reduce (pfile
, top
, op
.op
);
795 if (op
.op
== CPP_EOF
)
800 case CPP_CLOSE_PAREN
:
803 if (!num_zerop (top
->value
))
804 pfile
->state
.skip_eval
++;
808 if (num_zerop (top
->value
))
809 pfile
->state
.skip_eval
++;
812 if (top
->op
!= CPP_QUERY
)
813 SYNTAX_ERROR (" ':' without preceding '?'");
814 if (!num_zerop (top
[-1].value
)) /* Was '?' condition true? */
815 pfile
->state
.skip_eval
++;
817 pfile
->state
.skip_eval
--;
824 /* Check for and handle stack overflow. */
825 if (++top
== pfile
->op_limit
)
826 top
= _cpp_expand_op_stack (pfile
);
829 top
->token
= op
.token
;
832 /* The controlling macro expression is only valid if we called lex 3
833 times: <!> <defined expression> and <EOF>. push_conditional ()
834 checks that we are at top-of-file. */
835 if (pfile
->mi_ind_cmacro
&& !(saw_leading_not
&& lex_count
== 3))
836 pfile
->mi_ind_cmacro
= 0;
838 if (top
!= pfile
->op_stack
)
840 cpp_error (pfile
, DL_ICE
, "unbalanced stack in #if");
842 return false; /* Return false on syntax error. */
845 return !num_zerop (top
->value
);
848 /* Reduce the operator / value stack if possible, in preparation for
849 pushing operator OP. Returns NULL on error, otherwise the top of
852 reduce (pfile
, top
, op
)
859 if (top
->op
<= CPP_EQ
|| top
->op
> CPP_LAST_CPP_OP
+ 2)
862 cpp_error (pfile
, DL_ICE
, "impossible operator '%u'", top
->op
);
866 if (op
== CPP_OPEN_PAREN
)
869 /* Decrement the priority of left-associative operators to force a
870 reduction with operators of otherwise equal priority. */
871 prio
= optab
[op
].prio
- ((optab
[op
].flags
& LEFT_ASSOC
) != 0);
872 while (prio
< optab
[top
->op
].prio
)
874 if (CPP_OPTION (pfile
, warn_num_sign_change
)
875 && optab
[top
->op
].flags
& CHECK_PROMOTION
)
876 check_promotion (pfile
, top
);
884 top
[-1].value
= num_unary_op (pfile
, top
->value
, top
->op
);
894 top
[-1].value
= num_binary_op (pfile
, top
[-1].value
,
895 top
->value
, top
->op
);
903 = num_inequality_op (pfile
, top
[-1].value
, top
->value
, top
->op
);
909 = num_equality_op (pfile
, top
[-1].value
, top
->value
, top
->op
);
916 = num_bitwise_op (pfile
, top
[-1].value
, top
->value
, top
->op
);
920 top
[-1].value
= num_mul (pfile
, top
[-1].value
, top
->value
);
925 top
[-1].value
= num_div_op (pfile
, top
[-1].value
,
926 top
->value
, top
->op
);
931 if (!num_zerop (top
->value
))
932 pfile
->state
.skip_eval
--;
933 top
->value
.low
= (!num_zerop (top
->value
)
934 || !num_zerop (top
[1].value
));
936 top
->value
.unsignedp
= false;
937 top
->value
.overflow
= false;
942 if (num_zerop (top
->value
))
943 pfile
->state
.skip_eval
--;
944 top
->value
.low
= (!num_zerop (top
->value
)
945 && !num_zerop (top
[1].value
));
947 top
->value
.unsignedp
= false;
948 top
->value
.overflow
= false;
952 if (op
!= CPP_CLOSE_PAREN
)
954 cpp_error (pfile
, DL_ERROR
, "missing ')' in expression");
958 top
->value
= top
[1].value
;
963 if (!num_zerop (top
->value
))
965 pfile
->state
.skip_eval
--;
966 top
->value
= top
[1].value
;
969 top
->value
= top
[2].value
;
970 top
->value
.unsignedp
= (top
[1].value
.unsignedp
971 || top
[2].value
.unsignedp
);
975 cpp_error (pfile
, DL_ERROR
, "'?' without following ':'");
983 if (top
->value
.overflow
&& !pfile
->state
.skip_eval
)
984 cpp_error (pfile
, DL_PEDWARN
,
985 "integer overflow in preprocessor expression");
988 if (op
== CPP_CLOSE_PAREN
)
990 cpp_error (pfile
, DL_ERROR
, "missing '(' in expression");
997 /* Returns the position of the old top of stack after expansion. */
999 _cpp_expand_op_stack (pfile
)
1002 size_t old_size
= (size_t) (pfile
->op_limit
- pfile
->op_stack
);
1003 size_t new_size
= old_size
* 2 + 20;
1005 pfile
->op_stack
= (struct op
*) xrealloc (pfile
->op_stack
,
1006 new_size
* sizeof (struct op
));
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 (pfile
, op
)
1017 const struct op
*op
;
1019 if (op
->value
.unsignedp
== op
[-1].value
.unsignedp
)
1022 if (op
->value
.unsignedp
)
1024 if (!num_positive (op
[-1].value
, CPP_OPTION (pfile
, precision
)))
1025 cpp_error (pfile
, DL_WARNING
,
1026 "the left operand of \"%s\" changes sign when promoted",
1027 cpp_token_as_text (pfile
, op
->token
));
1029 else if (!num_positive (op
->value
, CPP_OPTION (pfile
, precision
)))
1030 cpp_error (pfile
, DL_WARNING
,
1031 "the right operand of \"%s\" changes sign when promoted",
1032 cpp_token_as_text (pfile
, op
->token
));
1035 /* Clears the unused high order bits of the number pointed to by PNUM. */
1037 num_trim (num
, precision
)
1041 if (precision
> PART_PRECISION
)
1043 precision
-= PART_PRECISION
;
1044 if (precision
< PART_PRECISION
)
1045 num
.high
&= ((cpp_num_part
) 1 << precision
) - 1;
1049 if (precision
< PART_PRECISION
)
1050 num
.low
&= ((cpp_num_part
) 1 << precision
) - 1;
1057 /* True iff A (presumed signed) >= 0. */
1059 num_positive (num
, precision
)
1063 if (precision
> PART_PRECISION
)
1065 precision
-= PART_PRECISION
;
1066 return (num
.high
& (cpp_num_part
) 1 << (precision
- 1)) == 0;
1069 return (num
.low
& (cpp_num_part
) 1 << (precision
- 1)) == 0;
1072 /* Sign extend a number, with PRECISION significant bits and all
1073 others assumed clear, to fill out a cpp_num structure. */
1075 cpp_num_sign_extend (num
, precision
)
1081 if (precision
> PART_PRECISION
)
1083 precision
-= PART_PRECISION
;
1084 if (precision
< PART_PRECISION
1085 && (num
.high
& (cpp_num_part
) 1 << (precision
- 1)))
1086 num
.high
|= ~(~(cpp_num_part
) 0 >> (PART_PRECISION
- precision
));
1088 else if (num
.low
& (cpp_num_part
) 1 << (precision
- 1))
1090 if (precision
< PART_PRECISION
)
1091 num
.low
|= ~(~(cpp_num_part
) 0 >> (PART_PRECISION
- precision
));
1092 num
.high
= ~(cpp_num_part
) 0;
1099 /* Returns the negative of NUM. */
1101 num_negate (num
, precision
)
1108 num
.high
= ~num
.high
;
1112 num
= num_trim (num
, precision
);
1113 num
.overflow
= (!num
.unsignedp
&& num_eq (num
, copy
) && !num_zerop (num
));
1118 /* Returns true if A >= B. */
1120 num_greater_eq (pa
, pb
, precision
)
1126 unsignedp
= pa
.unsignedp
|| pb
.unsignedp
;
1130 /* Both numbers have signed type. If they are of different
1131 sign, the answer is the sign of A. */
1132 unsignedp
= num_positive (pa
, precision
);
1134 if (unsignedp
!= num_positive (pb
, precision
))
1137 /* Otherwise we can do an unsigned comparison. */
1140 return (pa
.high
> pb
.high
) || (pa
.high
== pb
.high
&& pa
.low
>= pb
.low
);
1143 /* Returns LHS OP RHS, where OP is a bit-wise operation. */
1145 num_bitwise_op (pfile
, lhs
, rhs
, op
)
1146 cpp_reader
*pfile ATTRIBUTE_UNUSED
;
1150 lhs
.overflow
= false;
1151 lhs
.unsignedp
= lhs
.unsignedp
|| rhs
.unsignedp
;
1153 /* As excess precision is zeroed, there is no need to num_trim () as
1154 these operations cannot introduce a set bit there. */
1158 lhs
.high
&= rhs
.high
;
1160 else if (op
== CPP_OR
)
1163 lhs
.high
|= rhs
.high
;
1168 lhs
.high
^= rhs
.high
;
1174 /* Returns LHS OP RHS, where OP is an inequality. */
1176 num_inequality_op (pfile
, lhs
, rhs
, op
)
1181 bool gte
= num_greater_eq (lhs
, rhs
, CPP_OPTION (pfile
, precision
));
1183 if (op
== CPP_GREATER_EQ
)
1185 else if (op
== CPP_LESS
)
1187 else if (op
== CPP_GREATER
)
1188 lhs
.low
= gte
&& !num_eq (lhs
, rhs
);
1189 else /* CPP_LESS_EQ. */
1190 lhs
.low
= !gte
|| num_eq (lhs
, rhs
);
1193 lhs
.overflow
= false;
1194 lhs
.unsignedp
= false;
1198 /* Returns LHS OP RHS, where OP is == or !=. */
1200 num_equality_op (pfile
, lhs
, rhs
, op
)
1201 cpp_reader
*pfile ATTRIBUTE_UNUSED
;
1205 /* Work around a 3.0.4 bug; see PR 6950. */
1206 bool eq
= num_eq (lhs
, rhs
);
1207 if (op
== CPP_NOT_EQ
)
1211 lhs
.overflow
= false;
1212 lhs
.unsignedp
= false;
1216 /* Shift NUM, of width PRECISION, right by N bits. */
1218 num_rshift (num
, precision
, n
)
1220 size_t precision
, n
;
1222 cpp_num_part sign_mask
;
1224 if (num
.unsignedp
|| num_positive (num
, precision
))
1227 sign_mask
= ~(cpp_num_part
) 0;
1230 num
.high
= num
.low
= sign_mask
;
1234 if (precision
< PART_PRECISION
)
1235 num
.high
= sign_mask
, num
.low
|= sign_mask
<< precision
;
1236 else if (precision
< 2 * PART_PRECISION
)
1237 num
.high
|= sign_mask
<< (precision
- PART_PRECISION
);
1239 if (n
>= PART_PRECISION
)
1241 n
-= PART_PRECISION
;
1243 num
.high
= sign_mask
;
1248 num
.low
= (num
.low
>> n
) | (num
.high
<< (PART_PRECISION
- n
));
1249 num
.high
= (num
.high
>> n
) | (sign_mask
<< (PART_PRECISION
- n
));
1253 num
= num_trim (num
, precision
);
1254 num
.overflow
= false;
1258 /* Shift NUM, of width PRECISION, left by N bits. */
1260 num_lshift (num
, precision
, n
)
1262 size_t precision
, n
;
1266 num
.overflow
= !num
.unsignedp
&& !num_zerop (num
);
1267 num
.high
= num
.low
= 0;
1271 cpp_num orig
, maybe_orig
;
1275 if (m
>= PART_PRECISION
)
1277 m
-= PART_PRECISION
;
1283 num
.high
= (num
.high
<< m
) | (num
.low
>> (PART_PRECISION
- m
));
1286 num
= num_trim (num
, precision
);
1289 num
.overflow
= false;
1292 maybe_orig
= num_rshift (num
, precision
, n
);
1293 num
.overflow
= !num_eq (orig
, maybe_orig
);
1300 /* The four unary operators: +, -, ! and ~. */
1302 num_unary_op (pfile
, num
, op
)
1310 if (CPP_WTRADITIONAL (pfile
) && !pfile
->state
.skip_eval
)
1311 cpp_error (pfile
, DL_WARNING
,
1312 "traditional C rejects the unary plus operator");
1313 num
.overflow
= false;
1317 num
= num_negate (num
, CPP_OPTION (pfile
, precision
));
1321 num
.high
= ~num
.high
;
1323 num
= num_trim (num
, CPP_OPTION (pfile
, precision
));
1324 num
.overflow
= false;
1327 default: /* case CPP_NOT: */
1328 num
.low
= num_zerop (num
);
1330 num
.overflow
= false;
1331 num
.unsignedp
= false;
1338 /* The various binary operators. */
1340 num_binary_op (pfile
, lhs
, rhs
, op
)
1346 size_t precision
= CPP_OPTION (pfile
, precision
);
1355 if (!rhs
.unsignedp
&& !num_positive (rhs
, precision
))
1357 /* A negative shift is a positive shift the other way. */
1358 if (op
== CPP_LSHIFT
)
1362 rhs
= num_negate (rhs
, precision
);
1365 n
= ~0; /* Maximal. */
1368 if (op
== CPP_LSHIFT
)
1369 lhs
= num_lshift (lhs
, precision
, n
);
1371 lhs
= num_rshift (lhs
, precision
, n
);
1378 bool unsignedp
= lhs
.unsignedp
|| rhs
.unsignedp
;
1380 gte
= num_greater_eq (lhs
, rhs
, precision
);
1385 lhs
.unsignedp
= unsignedp
;
1391 rhs
= num_negate (rhs
, precision
);
1393 result
.low
= lhs
.low
+ rhs
.low
;
1394 result
.high
= lhs
.high
+ rhs
.high
;
1395 if (result
.low
< lhs
.low
)
1398 result
= num_trim (result
, precision
);
1399 result
.unsignedp
= lhs
.unsignedp
|| rhs
.unsignedp
;
1400 if (result
.unsignedp
)
1401 result
.overflow
= false;
1404 bool lhsp
= num_positive (lhs
, precision
);
1405 result
.overflow
= (lhsp
== num_positive (rhs
, precision
)
1406 && lhsp
!= num_positive (result
, precision
));
1411 default: /* case CPP_COMMA: */
1412 if (CPP_PEDANTIC (pfile
) && !pfile
->state
.skip_eval
)
1413 cpp_error (pfile
, DL_PEDWARN
,
1414 "comma operator in operand of #if");
1422 /* Multiplies two unsigned cpp_num_parts to give a cpp_num. This
1425 num_part_mul (lhs
, rhs
)
1426 cpp_num_part lhs
, rhs
;
1429 cpp_num_part middle
[2], temp
;
1431 result
.low
= LOW_PART (lhs
) * LOW_PART (rhs
);
1432 result
.high
= HIGH_PART (lhs
) * HIGH_PART (rhs
);
1434 middle
[0] = LOW_PART (lhs
) * HIGH_PART (rhs
);
1435 middle
[1] = HIGH_PART (lhs
) * LOW_PART (rhs
);
1438 result
.low
+= LOW_PART (middle
[0]) << (PART_PRECISION
/ 2);
1439 if (result
.low
< temp
)
1443 result
.low
+= LOW_PART (middle
[1]) << (PART_PRECISION
/ 2);
1444 if (result
.low
< temp
)
1447 result
.high
+= HIGH_PART (middle
[0]);
1448 result
.high
+= HIGH_PART (middle
[1]);
1453 /* Multiply two preprocessing numbers. */
1455 num_mul (pfile
, lhs
, rhs
)
1459 cpp_num result
, temp
;
1460 bool unsignedp
= lhs
.unsignedp
|| rhs
.unsignedp
;
1461 bool overflow
, negate
= false;
1462 size_t precision
= CPP_OPTION (pfile
, precision
);
1464 /* Prepare for unsigned multiplication. */
1467 if (!num_positive (lhs
, precision
))
1468 negate
= !negate
, lhs
= num_negate (lhs
, precision
);
1469 if (!num_positive (rhs
, precision
))
1470 negate
= !negate
, rhs
= num_negate (rhs
, precision
);
1473 overflow
= lhs
.high
&& rhs
.high
;
1474 result
= num_part_mul (lhs
.low
, rhs
.low
);
1476 temp
= num_part_mul (lhs
.high
, rhs
.low
);
1477 result
.high
+= temp
.low
;
1481 temp
= num_part_mul (lhs
.low
, rhs
.high
);
1482 result
.high
+= temp
.low
;
1486 temp
.low
= result
.low
, temp
.high
= result
.high
;
1487 result
= num_trim (result
, precision
);
1488 if (!num_eq (result
, temp
))
1492 result
= num_negate (result
, precision
);
1495 result
.overflow
= false;
1497 result
.overflow
= overflow
|| (num_positive (result
, precision
) ^ !negate
1498 && !num_zerop (result
));
1499 result
.unsignedp
= unsignedp
;
1504 /* Divide two preprocessing numbers, returning the answer or the
1505 remainder depending upon OP. */
1507 num_div_op (pfile
, lhs
, rhs
, op
)
1512 cpp_num result
, sub
;
1514 bool unsignedp
= lhs
.unsignedp
|| rhs
.unsignedp
;
1515 bool negate
= false, lhs_neg
= false;
1516 size_t i
, precision
= CPP_OPTION (pfile
, precision
);
1518 /* Prepare for unsigned division. */
1521 if (!num_positive (lhs
, precision
))
1522 negate
= !negate
, lhs_neg
= true, lhs
= num_negate (lhs
, precision
);
1523 if (!num_positive (rhs
, precision
))
1524 negate
= !negate
, rhs
= num_negate (rhs
, precision
);
1527 /* Find the high bit. */
1531 mask
= (cpp_num_part
) 1 << (i
- PART_PRECISION
);
1532 for (; ; i
--, mask
>>= 1)
1533 if (rhs
.high
& mask
)
1538 if (precision
> PART_PRECISION
)
1539 i
= precision
- PART_PRECISION
- 1;
1542 mask
= (cpp_num_part
) 1 << i
;
1543 for (; ; i
--, mask
>>= 1)
1549 if (!pfile
->state
.skip_eval
)
1550 cpp_error (pfile
, DL_ERROR
, "division by zero in #if");
1554 /* First non-zero bit of RHS is bit I. Do naive division by
1555 shifting the RHS fully left, and subtracting from LHS if LHS is
1556 at least as big, and then repeating but with one less shift.
1557 This is not very efficient, but is easy to understand. */
1559 rhs
.unsignedp
= true;
1560 lhs
.unsignedp
= true;
1561 i
= precision
- i
- 1;
1562 sub
= num_lshift (rhs
, precision
, i
);
1564 result
.high
= result
.low
= 0;
1567 if (num_greater_eq (lhs
, sub
, precision
))
1569 lhs
= num_binary_op (pfile
, lhs
, sub
, CPP_MINUS
);
1570 if (i
>= PART_PRECISION
)
1571 result
.high
|= (cpp_num_part
) 1 << (i
- PART_PRECISION
);
1573 result
.low
|= (cpp_num_part
) 1 << i
;
1577 sub
.low
= (sub
.low
>> 1) | (sub
.high
<< (PART_PRECISION
- 1));
1581 /* We divide so that the remainder has the sign of the LHS. */
1584 result
.unsignedp
= unsignedp
;
1586 result
.overflow
= false;
1590 result
= num_negate (result
, precision
);
1591 result
.overflow
= num_positive (result
, precision
) ^ !negate
;
1598 lhs
.unsignedp
= unsignedp
;
1599 lhs
.overflow
= false;
1601 lhs
= num_negate (lhs
, precision
);