1 /* Parse C expressions for cpplib.
2 Copyright (C) 1987-2013 Free Software Foundation, Inc.
3 Contributed by Per Bothner, 1994.
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the
7 Free Software Foundation; either version 3, or (at your option) any
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; see the file COPYING3. If not see
17 <http://www.gnu.org/licenses/>. */
24 #define PART_PRECISION (sizeof (cpp_num_part) * CHAR_BIT)
25 #define HALF_MASK (~(cpp_num_part) 0 >> (PART_PRECISION / 2))
26 #define LOW_PART(num_part) (num_part & HALF_MASK)
27 #define HIGH_PART(num_part) (num_part >> (PART_PRECISION / 2))
31 const cpp_token
*token
; /* The token forming op (for diagnostics). */
32 cpp_num value
; /* The value logically "right" of op. */
33 source_location loc
; /* The location of this value. */
37 /* Some simple utility routines on double integers. */
38 #define num_zerop(num) ((num.low | num.high) == 0)
39 #define num_eq(num1, num2) (num1.low == num2.low && num1.high == num2.high)
40 static bool num_positive (cpp_num
, size_t);
41 static bool num_greater_eq (cpp_num
, cpp_num
, size_t);
42 static cpp_num
num_trim (cpp_num
, size_t);
43 static cpp_num
num_part_mul (cpp_num_part
, cpp_num_part
);
45 static cpp_num
num_unary_op (cpp_reader
*, cpp_num
, enum cpp_ttype
);
46 static cpp_num
num_binary_op (cpp_reader
*, cpp_num
, cpp_num
, enum cpp_ttype
);
47 static cpp_num
num_negate (cpp_num
, size_t);
48 static cpp_num
num_bitwise_op (cpp_reader
*, cpp_num
, cpp_num
, enum cpp_ttype
);
49 static cpp_num
num_inequality_op (cpp_reader
*, cpp_num
, cpp_num
,
51 static cpp_num
num_equality_op (cpp_reader
*, cpp_num
, cpp_num
,
53 static cpp_num
num_mul (cpp_reader
*, cpp_num
, cpp_num
);
54 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
*, source_location
);
62 static struct op
*reduce (cpp_reader
*, struct op
*, enum cpp_ttype
);
63 static unsigned int interpret_float_suffix (cpp_reader
*, const uchar
*, size_t);
64 static unsigned int interpret_int_suffix (cpp_reader
*, 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; } \
78 #define SYNTAX_ERROR_AT(loc, msgid) \
79 do { cpp_error_with_line (pfile, CPP_DL_ERROR, (loc), 0, msgid); goto syntax_error; } \
81 #define SYNTAX_ERROR2_AT(loc, msgid, arg) \
82 do { cpp_error_with_line (pfile, CPP_DL_ERROR, (loc), 0, msgid, arg); goto syntax_error; } \
85 /* Subroutine of cpp_classify_number. S points to a float suffix of
86 length LEN, possibly zero. Returns 0 for an invalid suffix, or a
87 flag vector describing the suffix. */
89 interpret_float_suffix (cpp_reader
*pfile
, const uchar
*s
, size_t len
)
92 size_t f
, d
, l
, w
, q
, i
;
95 f
= d
= l
= w
= q
= i
= 0;
97 /* Process decimal float suffixes, which are two letters starting
98 with d or D. Order and case are significant. */
99 if (len
== 2 && (*s
== 'd' || *s
== 'D'))
101 bool uppercase
= (*s
== 'D');
104 case 'f': return (!uppercase
? (CPP_N_DFLOAT
| CPP_N_SMALL
): 0); break;
105 case 'F': return (uppercase
? (CPP_N_DFLOAT
| CPP_N_SMALL
) : 0); break;
106 case 'd': return (!uppercase
? (CPP_N_DFLOAT
| CPP_N_MEDIUM
): 0); break;
107 case 'D': return (uppercase
? (CPP_N_DFLOAT
| CPP_N_MEDIUM
) : 0); break;
108 case 'l': return (!uppercase
? (CPP_N_DFLOAT
| CPP_N_LARGE
) : 0); break;
109 case 'L': return (uppercase
? (CPP_N_DFLOAT
| CPP_N_LARGE
) : 0); break;
111 /* Additional two-character suffixes beginning with D are not
112 for decimal float constants. */
117 if (CPP_OPTION (pfile
, ext_numeric_literals
))
119 /* Recognize a fixed-point suffix. */
123 case 'k': case 'K': flags
= CPP_N_ACCUM
; break;
124 case 'r': case 'R': flags
= CPP_N_FRACT
; break;
128 /* Continue processing a fixed-point suffix. The suffix is case
129 insensitive except for ll or LL. Order is significant. */
136 if (*s
== 'u' || *s
== 'U')
138 flags
|= CPP_N_UNSIGNED
;
149 return flags
|= CPP_N_SMALL
;
153 return flags
|= CPP_N_MEDIUM
;
154 if (len
== 2 && s
[1] == 'l')
155 return flags
|= CPP_N_LARGE
;
159 return flags
|= CPP_N_MEDIUM
;
160 if (len
== 2 && s
[1] == 'L')
161 return flags
|= CPP_N_LARGE
;
166 /* Anything left at this point is invalid. */
171 /* In any remaining valid suffix, the case and order don't matter. */
175 case 'f': case 'F': f
++; break;
176 case 'd': case 'D': d
++; break;
177 case 'l': case 'L': l
++; break;
178 case 'w': case 'W': w
++; break;
179 case 'q': case 'Q': q
++; break;
181 case 'j': case 'J': i
++; break;
186 if (f
+ d
+ l
+ w
+ q
> 1 || i
> 1)
189 if (i
&& !CPP_OPTION (pfile
, ext_numeric_literals
))
192 if ((w
|| q
) && !CPP_OPTION (pfile
, ext_numeric_literals
))
195 return ((i
? CPP_N_IMAGINARY
: 0)
200 q
? CPP_N_MD_Q
: CPP_N_DEFAULT
));
203 /* Return the classification flags for a float suffix. */
205 cpp_interpret_float_suffix (cpp_reader
*pfile
, const char *s
, size_t len
)
207 return interpret_float_suffix (pfile
, (const unsigned char *)s
, len
);
210 /* Subroutine of cpp_classify_number. S points to an integer suffix
211 of length LEN, possibly zero. Returns 0 for an invalid suffix, or a
212 flag vector describing the suffix. */
214 interpret_int_suffix (cpp_reader
*pfile
, const uchar
*s
, size_t len
)
223 case 'u': case 'U': u
++; break;
225 case 'j': case 'J': i
++; break;
226 case 'l': case 'L': l
++;
227 /* If there are two Ls, they must be adjacent and the same case. */
228 if (l
== 2 && s
[len
] != s
[len
+ 1])
235 if (l
> 2 || u
> 1 || i
> 1)
238 if (i
&& !CPP_OPTION (pfile
, ext_numeric_literals
))
241 return ((i
? CPP_N_IMAGINARY
: 0)
242 | (u
? CPP_N_UNSIGNED
: 0)
243 | ((l
== 0) ? CPP_N_SMALL
244 : (l
== 1) ? CPP_N_MEDIUM
: CPP_N_LARGE
));
247 /* Return the classification flags for an int suffix. */
249 cpp_interpret_int_suffix (cpp_reader
*pfile
, const char *s
, size_t len
)
251 return interpret_int_suffix (pfile
, (const unsigned char *)s
, len
);
254 /* Return the string type corresponding to the the input user-defined string
255 literal type. If the input type is not a user-defined string literal
256 type return the input type. */
258 cpp_userdef_string_remove_type (enum cpp_ttype type
)
260 if (type
== CPP_STRING_USERDEF
)
262 else if (type
== CPP_WSTRING_USERDEF
)
264 else if (type
== CPP_STRING16_USERDEF
)
266 else if (type
== CPP_STRING32_USERDEF
)
268 else if (type
== CPP_UTF8STRING_USERDEF
)
269 return CPP_UTF8STRING
;
274 /* Return the user-defined string literal type corresponding to the input
275 string type. If the input type is not a string type return the input
278 cpp_userdef_string_add_type (enum cpp_ttype type
)
280 if (type
== CPP_STRING
)
281 return CPP_STRING_USERDEF
;
282 else if (type
== CPP_WSTRING
)
283 return CPP_WSTRING_USERDEF
;
284 else if (type
== CPP_STRING16
)
285 return CPP_STRING16_USERDEF
;
286 else if (type
== CPP_STRING32
)
287 return CPP_STRING32_USERDEF
;
288 else if (type
== CPP_UTF8STRING
)
289 return CPP_UTF8STRING_USERDEF
;
294 /* Return the char type corresponding to the the input user-defined char
295 literal type. If the input type is not a user-defined char literal
296 type return the input type. */
298 cpp_userdef_char_remove_type (enum cpp_ttype type
)
300 if (type
== CPP_CHAR_USERDEF
)
302 else if (type
== CPP_WCHAR_USERDEF
)
304 else if (type
== CPP_CHAR16_USERDEF
)
306 else if (type
== CPP_CHAR32_USERDEF
)
312 /* Return the user-defined char literal type corresponding to the input
313 char type. If the input type is not a char type return the input
316 cpp_userdef_char_add_type (enum cpp_ttype type
)
318 if (type
== CPP_CHAR
)
319 return CPP_CHAR_USERDEF
;
320 else if (type
== CPP_WCHAR
)
321 return CPP_WCHAR_USERDEF
;
322 else if (type
== CPP_CHAR16
)
323 return CPP_CHAR16_USERDEF
;
324 else if (type
== CPP_CHAR32
)
325 return CPP_CHAR32_USERDEF
;
330 /* Return true if the token type is a user-defined string literal. */
332 cpp_userdef_string_p (enum cpp_ttype type
)
334 if (type
== CPP_STRING_USERDEF
335 || type
== CPP_WSTRING_USERDEF
336 || type
== CPP_STRING16_USERDEF
337 || type
== CPP_STRING32_USERDEF
338 || type
== CPP_UTF8STRING_USERDEF
)
344 /* Return true if the token type is a user-defined char literal. */
346 cpp_userdef_char_p (enum cpp_ttype type
)
348 if (type
== CPP_CHAR_USERDEF
349 || type
== CPP_WCHAR_USERDEF
350 || type
== CPP_CHAR16_USERDEF
351 || type
== CPP_CHAR32_USERDEF
)
357 /* Extract the suffix from a user-defined literal string or char. */
359 cpp_get_userdef_suffix (const cpp_token
*tok
)
361 unsigned int len
= tok
->val
.str
.len
;
362 const char *text
= (const char *)tok
->val
.str
.text
;
365 for (i
= 0; i
< len
; ++i
)
366 if (text
[i
] == '\'' || text
[i
] == '"')
371 for (i
= len
; i
> 0; --i
)
372 if (text
[i
- 1] == delim
)
377 /* Categorize numeric constants according to their field (integer,
378 floating point, or invalid), radix (decimal, octal, hexadecimal),
381 TOKEN is the token that represents the numeric constant to
384 In C++0X if UD_SUFFIX is non null it will be assigned
385 any unrecognized suffix for a user-defined literal.
387 VIRTUAL_LOCATION is the virtual location for TOKEN. */
389 cpp_classify_number (cpp_reader
*pfile
, const cpp_token
*token
,
390 const char **ud_suffix
, source_location virtual_location
)
392 const uchar
*str
= token
->val
.str
.text
;
394 unsigned int max_digit
, result
, radix
;
395 enum {NOT_FLOAT
= 0, AFTER_POINT
, AFTER_EXPON
} float_flag
;
401 /* If the lexer has done its job, length one can only be a single
402 digit. Fast-path this very common case. */
403 if (token
->val
.str
.len
== 1)
404 return CPP_N_INTEGER
| CPP_N_SMALL
| CPP_N_DECIMAL
;
406 limit
= str
+ token
->val
.str
.len
;
407 float_flag
= NOT_FLOAT
;
412 /* First, interpret the radix. */
418 /* Require at least one hex digit to classify it as hex. */
419 if ((*str
== 'x' || *str
== 'X')
420 && (str
[1] == '.' || ISXDIGIT (str
[1])))
425 else if ((*str
== 'b' || *str
== 'B') && (str
[1] == '0' || str
[1] == '1'))
432 /* Now scan for a well-formed integer or float. */
435 unsigned int c
= *str
++;
437 if (ISDIGIT (c
) || (ISXDIGIT (c
) && radix
== 16))
446 if (float_flag
== NOT_FLOAT
)
447 float_flag
= AFTER_POINT
;
449 SYNTAX_ERROR_AT (virtual_location
,
450 "too many decimal points in number");
452 else if ((radix
<= 10 && (c
== 'e' || c
== 'E'))
453 || (radix
== 16 && (c
== 'p' || c
== 'P')))
455 float_flag
= AFTER_EXPON
;
460 /* Start of suffix. */
466 /* The suffix may be for decimal fixed-point constants without exponent. */
467 if (radix
!= 16 && float_flag
== NOT_FLOAT
)
469 result
= interpret_float_suffix (pfile
, str
, limit
- str
);
470 if ((result
& CPP_N_FRACT
) || (result
& CPP_N_ACCUM
))
472 result
|= CPP_N_FLOATING
;
473 /* We need to restore the radix to 10, if the radix is 8. */
477 if (CPP_PEDANTIC (pfile
))
478 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
479 "fixed-point constants are a GCC extension");
486 if (float_flag
!= NOT_FLOAT
&& radix
== 8)
489 if (max_digit
>= radix
)
492 SYNTAX_ERROR2_AT (virtual_location
,
493 "invalid digit \"%c\" in binary constant", '0' + max_digit
);
495 SYNTAX_ERROR2_AT (virtual_location
,
496 "invalid digit \"%c\" in octal constant", '0' + max_digit
);
499 if (float_flag
!= NOT_FLOAT
)
503 cpp_error_with_line (pfile
, CPP_DL_ERROR
, virtual_location
, 0,
504 "invalid prefix \"0b\" for floating constant");
505 return CPP_N_INVALID
;
508 if (radix
== 16 && !seen_digit
)
509 SYNTAX_ERROR_AT (virtual_location
,
510 "no digits in hexadecimal floating constant");
512 if (radix
== 16 && CPP_PEDANTIC (pfile
) && !CPP_OPTION (pfile
, c99
))
513 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
514 "use of C99 hexadecimal floating constant");
516 if (float_flag
== AFTER_EXPON
)
518 if (*str
== '+' || *str
== '-')
521 /* Exponent is decimal, even if string is a hex float. */
523 SYNTAX_ERROR_AT (virtual_location
, "exponent has no digits");
527 while (ISDIGIT (*str
));
529 else if (radix
== 16)
530 SYNTAX_ERROR_AT (virtual_location
,
531 "hexadecimal floating constants require an exponent");
533 result
= interpret_float_suffix (pfile
, str
, limit
- str
);
536 if (CPP_OPTION (pfile
, user_literals
))
539 *ud_suffix
= (const char *) str
;
540 result
= CPP_N_LARGE
| CPP_N_USERDEF
;
544 cpp_error_with_line (pfile
, CPP_DL_ERROR
, virtual_location
, 0,
545 "invalid suffix \"%.*s\" on floating constant",
546 (int) (limit
- str
), str
);
547 return CPP_N_INVALID
;
551 /* Traditional C didn't accept any floating suffixes. */
553 && CPP_WTRADITIONAL (pfile
)
554 && ! cpp_sys_macro_p (pfile
))
555 cpp_warning_with_line (pfile
, CPP_W_TRADITIONAL
, virtual_location
, 0,
556 "traditional C rejects the \"%.*s\" suffix",
557 (int) (limit
- str
), str
);
559 /* A suffix for double is a GCC extension via decimal float support.
560 If the suffix also specifies an imaginary value we'll catch that
562 if ((result
== CPP_N_MEDIUM
) && CPP_PEDANTIC (pfile
))
563 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
564 "suffix for double constant is a GCC extension");
566 /* Radix must be 10 for decimal floats. */
567 if ((result
& CPP_N_DFLOAT
) && radix
!= 10)
569 cpp_error_with_line (pfile
, CPP_DL_ERROR
, virtual_location
, 0,
570 "invalid suffix \"%.*s\" with hexadecimal floating constant",
571 (int) (limit
- str
), str
);
572 return CPP_N_INVALID
;
575 if ((result
& (CPP_N_FRACT
| CPP_N_ACCUM
)) && CPP_PEDANTIC (pfile
))
576 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
577 "fixed-point constants are a GCC extension");
579 if ((result
& CPP_N_DFLOAT
) && CPP_PEDANTIC (pfile
))
580 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
581 "decimal float constants are a GCC extension");
583 result
|= CPP_N_FLOATING
;
587 result
= interpret_int_suffix (pfile
, str
, limit
- str
);
590 if (CPP_OPTION (pfile
, user_literals
))
593 *ud_suffix
= (const char *) str
;
594 result
= CPP_N_UNSIGNED
| CPP_N_LARGE
| CPP_N_USERDEF
;
598 cpp_error_with_line (pfile
, CPP_DL_ERROR
, virtual_location
, 0,
599 "invalid suffix \"%.*s\" on integer constant",
600 (int) (limit
- str
), str
);
601 return CPP_N_INVALID
;
605 /* Traditional C only accepted the 'L' suffix.
606 Suppress warning about 'LL' with -Wno-long-long. */
607 if (CPP_WTRADITIONAL (pfile
) && ! cpp_sys_macro_p (pfile
))
609 int u_or_i
= (result
& (CPP_N_UNSIGNED
|CPP_N_IMAGINARY
));
610 int large
= (result
& CPP_N_WIDTH
) == CPP_N_LARGE
611 && CPP_OPTION (pfile
, cpp_warn_long_long
);
614 cpp_warning_with_line (pfile
, large
? CPP_W_LONG_LONG
: CPP_W_TRADITIONAL
,
616 "traditional C rejects the \"%.*s\" suffix",
617 (int) (limit
- str
), str
);
620 if ((result
& CPP_N_WIDTH
) == CPP_N_LARGE
621 && CPP_OPTION (pfile
, cpp_warn_long_long
))
623 const char *message
= CPP_OPTION (pfile
, cplusplus
)
624 ? N_("use of C++0x long long integer constant")
625 : N_("use of C99 long long integer constant");
627 if (CPP_OPTION (pfile
, c99
))
628 cpp_warning_with_line (pfile
, CPP_W_LONG_LONG
, virtual_location
,
631 cpp_pedwarning_with_line (pfile
, CPP_W_LONG_LONG
,
632 virtual_location
, 0, message
);
635 result
|= CPP_N_INTEGER
;
639 if ((result
& CPP_N_IMAGINARY
) && CPP_PEDANTIC (pfile
))
640 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
641 "imaginary constants are a GCC extension");
642 if (radix
== 2 && CPP_PEDANTIC (pfile
))
643 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
644 "binary constants are a GCC extension");
647 result
|= CPP_N_DECIMAL
;
648 else if (radix
== 16)
651 result
|= CPP_N_BINARY
;
653 result
|= CPP_N_OCTAL
;
658 return CPP_N_INVALID
;
661 /* cpp_interpret_integer converts an integer constant into a cpp_num,
662 of precision options->precision.
664 We do not provide any interface for decimal->float conversion,
665 because the preprocessor doesn't need it and we don't want to
666 drag in GCC's floating point emulator. */
668 cpp_interpret_integer (cpp_reader
*pfile
, const cpp_token
*token
,
671 const uchar
*p
, *end
;
676 result
.unsignedp
= !!(type
& CPP_N_UNSIGNED
);
677 result
.overflow
= false;
679 p
= token
->val
.str
.text
;
680 end
= p
+ token
->val
.str
.len
;
682 /* Common case of a single digit. */
683 if (token
->val
.str
.len
== 1)
684 result
.low
= p
[0] - '0';
688 size_t precision
= CPP_OPTION (pfile
, precision
);
689 unsigned int base
= 10, c
= 0;
690 bool overflow
= false;
692 if ((type
& CPP_N_RADIX
) == CPP_N_OCTAL
)
697 else if ((type
& CPP_N_RADIX
) == CPP_N_HEX
)
702 else if ((type
& CPP_N_RADIX
) == CPP_N_BINARY
)
708 /* We can add a digit to numbers strictly less than this without
709 needing the precision and slowness of double integers. */
710 max
= ~(cpp_num_part
) 0;
711 if (precision
< PART_PRECISION
)
712 max
>>= PART_PRECISION
- precision
;
713 max
= (max
- base
+ 1) / base
+ 1;
719 if (ISDIGIT (c
) || (base
== 16 && ISXDIGIT (c
)))
724 /* Strict inequality for when max is set to zero. */
725 if (result
.low
< max
)
726 result
.low
= result
.low
* base
+ c
;
729 result
= append_digit (result
, c
, base
, precision
);
730 overflow
|= result
.overflow
;
735 if (overflow
&& !(type
& CPP_N_USERDEF
))
736 cpp_error (pfile
, CPP_DL_PEDWARN
,
737 "integer constant is too large for its type");
738 /* If too big to be signed, consider it unsigned. Only warn for
739 decimal numbers. Traditional numbers were always signed (but
740 we still honor an explicit U suffix); but we only have
741 traditional semantics in directives. */
742 else if (!result
.unsignedp
743 && !(CPP_OPTION (pfile
, traditional
)
744 && pfile
->state
.in_directive
)
745 && !num_positive (result
, precision
))
747 /* This is for constants within the range of uintmax_t but
748 not that of intmax_t. For such decimal constants, a
749 diagnostic is required for C99 as the selected type must
750 be signed and not having a type is a constraint violation
751 (DR#298, TC3), so this must be a pedwarn. For C90,
752 unsigned long is specified to be used for a constant that
753 does not fit in signed long; if uintmax_t has the same
754 range as unsigned long this means only a warning is
755 appropriate here. C90 permits the preprocessor to use a
756 wider range than unsigned long in the compiler, so if
757 uintmax_t is wider than unsigned long no diagnostic is
758 required for such constants in preprocessor #if
759 expressions and the compiler will pedwarn for such
760 constants outside the range of unsigned long that reach
761 the compiler so a diagnostic is not required there
762 either; thus, pedwarn for C99 but use a plain warning for
765 cpp_error (pfile
, (CPP_OPTION (pfile
, c99
)
768 "integer constant is so large that it is unsigned");
769 result
.unsignedp
= true;
776 /* Append DIGIT to NUM, a number of PRECISION bits being read in base BASE. */
778 append_digit (cpp_num num
, int digit
, int base
, size_t precision
)
783 cpp_num_part add_high
, add_low
;
785 /* Multiply by 2, 8 or 16. Catching this overflow here means we don't
786 need to worry about add_high overflowing. */
800 overflow
= !!(num
.high
>> (PART_PRECISION
- shift
));
801 result
.high
= num
.high
<< shift
;
802 result
.low
= num
.low
<< shift
;
803 result
.high
|= num
.low
>> (PART_PRECISION
- shift
);
804 result
.unsignedp
= num
.unsignedp
;
808 add_low
= num
.low
<< 1;
809 add_high
= (num
.high
<< 1) + (num
.low
>> (PART_PRECISION
- 1));
812 add_high
= add_low
= 0;
814 if (add_low
+ digit
< add_low
)
818 if (result
.low
+ add_low
< result
.low
)
820 if (result
.high
+ add_high
< result
.high
)
823 result
.low
+= add_low
;
824 result
.high
+= add_high
;
825 result
.overflow
= overflow
;
827 /* The above code catches overflow of a cpp_num type. This catches
828 overflow of the (possibly shorter) target precision. */
829 num
.low
= result
.low
;
830 num
.high
= result
.high
;
831 result
= num_trim (result
, precision
);
832 if (!num_eq (result
, num
))
833 result
.overflow
= true;
838 /* Handle meeting "defined" in a preprocessor expression. */
840 parse_defined (cpp_reader
*pfile
)
844 cpp_hashnode
*node
= 0;
845 const cpp_token
*token
;
846 cpp_context
*initial_context
= pfile
->context
;
848 /* Don't expand macros. */
849 pfile
->state
.prevent_expansion
++;
851 token
= cpp_get_token (pfile
);
852 if (token
->type
== CPP_OPEN_PAREN
)
855 token
= cpp_get_token (pfile
);
858 if (token
->type
== CPP_NAME
)
860 node
= token
->val
.node
.node
;
861 if (paren
&& cpp_get_token (pfile
)->type
!= CPP_CLOSE_PAREN
)
863 cpp_error (pfile
, CPP_DL_ERROR
, "missing ')' after \"defined\"");
869 cpp_error (pfile
, CPP_DL_ERROR
,
870 "operator \"defined\" requires an identifier");
871 if (token
->flags
& NAMED_OP
)
876 op
.type
= token
->type
;
877 cpp_error (pfile
, CPP_DL_ERROR
,
878 "(\"%s\" is an alternative token for \"%s\" in C++)",
879 cpp_token_as_text (pfile
, token
),
880 cpp_token_as_text (pfile
, &op
));
886 if (pfile
->context
!= initial_context
&& CPP_PEDANTIC (pfile
))
887 cpp_error (pfile
, CPP_DL_WARNING
,
888 "this use of \"defined\" may not be portable");
890 _cpp_mark_macro_used (node
);
891 if (!(node
->flags
& NODE_USED
))
893 node
->flags
|= NODE_USED
;
894 if (node
->type
== NT_MACRO
)
896 if ((node
->flags
& NODE_BUILTIN
)
897 && pfile
->cb
.user_builtin_macro
)
898 pfile
->cb
.user_builtin_macro (pfile
, node
);
899 if (pfile
->cb
.used_define
)
900 pfile
->cb
.used_define (pfile
, pfile
->directive_line
, node
);
904 if (pfile
->cb
.used_undef
)
905 pfile
->cb
.used_undef (pfile
, pfile
->directive_line
, node
);
909 /* A possible controlling macro of the form #if !defined ().
910 _cpp_parse_expr checks there was no other junk on the line. */
911 pfile
->mi_ind_cmacro
= node
;
914 pfile
->state
.prevent_expansion
--;
916 /* Do not treat conditional macros as being defined. This is due to the
917 powerpc and spu ports using conditional macros for 'vector', 'bool', and
918 'pixel' to act as conditional keywords. This messes up tests like #ifndef
920 result
.unsignedp
= false;
922 result
.overflow
= false;
923 result
.low
= (node
&& node
->type
== NT_MACRO
924 && (node
->flags
& NODE_CONDITIONAL
) == 0);
928 /* Convert a token into a CPP_NUMBER (an interpreted preprocessing
929 number or character constant, or the result of the "defined" or "#"
932 eval_token (cpp_reader
*pfile
, const cpp_token
*token
,
933 source_location virtual_location
)
939 result
.unsignedp
= false;
940 result
.overflow
= false;
945 temp
= cpp_classify_number (pfile
, token
, NULL
, virtual_location
);
946 if (temp
& CPP_N_USERDEF
)
947 cpp_error (pfile
, CPP_DL_ERROR
,
948 "user-defined literal in preprocessor expression");
949 switch (temp
& CPP_N_CATEGORY
)
952 cpp_error_with_line (pfile
, CPP_DL_ERROR
, virtual_location
, 0,
953 "floating constant in preprocessor expression");
956 if (!(temp
& CPP_N_IMAGINARY
))
957 return cpp_interpret_integer (pfile
, token
, temp
);
958 cpp_error_with_line (pfile
, CPP_DL_ERROR
, virtual_location
, 0,
959 "imaginary number in preprocessor expression");
963 /* Error already issued. */
966 result
.high
= result
.low
= 0;
974 cppchar_t cc
= cpp_interpret_charconst (pfile
, token
,
979 /* Sign-extend the result if necessary. */
980 if (!unsignedp
&& (cppchar_signed_t
) cc
< 0)
982 if (PART_PRECISION
> BITS_PER_CPPCHAR_T
)
983 result
.low
|= ~(~(cpp_num_part
) 0
984 >> (PART_PRECISION
- BITS_PER_CPPCHAR_T
));
985 result
.high
= ~(cpp_num_part
) 0;
986 result
= num_trim (result
, CPP_OPTION (pfile
, precision
));
992 if (token
->val
.node
.node
== pfile
->spec_nodes
.n_defined
)
993 return parse_defined (pfile
);
994 else if (CPP_OPTION (pfile
, cplusplus
)
995 && (token
->val
.node
.node
== pfile
->spec_nodes
.n_true
996 || token
->val
.node
.node
== pfile
->spec_nodes
.n_false
))
999 result
.low
= (token
->val
.node
.node
== pfile
->spec_nodes
.n_true
);
1005 if (CPP_OPTION (pfile
, warn_undef
) && !pfile
->state
.skip_eval
)
1006 cpp_warning_with_line (pfile
, CPP_W_UNDEF
, virtual_location
, 0,
1007 "\"%s\" is not defined",
1008 NODE_NAME (token
->val
.node
.node
));
1013 if (!pfile
->state
.skipping
)
1015 /* A pedantic warning takes precedence over a deprecated
1017 if (CPP_PEDANTIC (pfile
))
1018 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
,
1019 virtual_location
, 0,
1020 "assertions are a GCC extension");
1021 else if (CPP_OPTION (pfile
, cpp_warn_deprecated
))
1022 cpp_warning_with_line (pfile
, CPP_W_DEPRECATED
, virtual_location
, 0,
1023 "assertions are a deprecated extension");
1025 _cpp_test_assertion (pfile
, &temp
);
1034 result
.unsignedp
= !!unsignedp
;
1038 /* Operator precedence and flags table.
1040 After an operator is returned from the lexer, if it has priority less
1041 than the operator on the top of the stack, we reduce the stack by one
1042 operator and repeat the test. Since equal priorities do not reduce,
1043 this is naturally right-associative.
1045 We handle left-associative operators by decrementing the priority of
1046 just-lexed operators by one, but retaining the priority of operators
1047 already on the stack.
1049 The remaining cases are '(' and ')'. We handle '(' by skipping the
1050 reduction phase completely. ')' is given lower priority than
1051 everything else, including '(', effectively forcing a reduction of the
1052 parenthesized expression. If there is a matching '(', the routine
1053 reduce() exits immediately. If the normal exit route sees a ')', then
1054 there cannot have been a matching '(' and an error message is output.
1056 The parser assumes all shifted operators require a left operand unless
1057 the flag NO_L_OPERAND is set. These semantics are automatic; any
1058 extra semantics need to be handled with operator-specific code. */
1060 /* Flags. If CHECK_PROMOTION, we warn if the effective sign of an
1061 operand changes because of integer promotions. */
1062 #define NO_L_OPERAND (1 << 0)
1063 #define LEFT_ASSOC (1 << 1)
1064 #define CHECK_PROMOTION (1 << 2)
1066 /* Operator to priority map. Must be in the same order as the first
1067 N entries of enum cpp_ttype. */
1068 static const struct cpp_operator
1074 /* EQ */ {0, 0}, /* Shouldn't happen. */
1075 /* NOT */ {16, NO_L_OPERAND
},
1076 /* GREATER */ {12, LEFT_ASSOC
| CHECK_PROMOTION
},
1077 /* LESS */ {12, LEFT_ASSOC
| CHECK_PROMOTION
},
1078 /* PLUS */ {14, LEFT_ASSOC
| CHECK_PROMOTION
},
1079 /* MINUS */ {14, LEFT_ASSOC
| CHECK_PROMOTION
},
1080 /* MULT */ {15, LEFT_ASSOC
| CHECK_PROMOTION
},
1081 /* DIV */ {15, LEFT_ASSOC
| CHECK_PROMOTION
},
1082 /* MOD */ {15, LEFT_ASSOC
| CHECK_PROMOTION
},
1083 /* AND */ {9, LEFT_ASSOC
| CHECK_PROMOTION
},
1084 /* OR */ {7, LEFT_ASSOC
| CHECK_PROMOTION
},
1085 /* XOR */ {8, LEFT_ASSOC
| CHECK_PROMOTION
},
1086 /* RSHIFT */ {13, LEFT_ASSOC
},
1087 /* LSHIFT */ {13, LEFT_ASSOC
},
1089 /* COMPL */ {16, NO_L_OPERAND
},
1090 /* AND_AND */ {6, LEFT_ASSOC
},
1091 /* OR_OR */ {5, LEFT_ASSOC
},
1092 /* Note that QUERY, COLON, and COMMA must have the same precedence.
1093 However, there are some special cases for these in reduce(). */
1095 /* COLON */ {4, LEFT_ASSOC
| CHECK_PROMOTION
},
1096 /* COMMA */ {4, LEFT_ASSOC
},
1097 /* OPEN_PAREN */ {1, NO_L_OPERAND
},
1098 /* CLOSE_PAREN */ {0, 0},
1100 /* EQ_EQ */ {11, LEFT_ASSOC
},
1101 /* NOT_EQ */ {11, LEFT_ASSOC
},
1102 /* GREATER_EQ */ {12, LEFT_ASSOC
| CHECK_PROMOTION
},
1103 /* LESS_EQ */ {12, LEFT_ASSOC
| CHECK_PROMOTION
},
1104 /* UPLUS */ {16, NO_L_OPERAND
},
1105 /* UMINUS */ {16, NO_L_OPERAND
}
1108 /* Parse and evaluate a C expression, reading from PFILE.
1109 Returns the truth value of the expression.
1111 The implementation is an operator precedence parser, i.e. a
1112 bottom-up parser, using a stack for not-yet-reduced tokens.
1114 The stack base is op_stack, and the current stack pointer is 'top'.
1115 There is a stack element for each operator (only), and the most
1116 recently pushed operator is 'top->op'. An operand (value) is
1117 stored in the 'value' field of the stack element of the operator
1118 that precedes it. */
1120 _cpp_parse_expr (cpp_reader
*pfile
, bool is_if
)
1122 struct op
*top
= pfile
->op_stack
;
1123 unsigned int lex_count
;
1124 bool saw_leading_not
, want_value
= true;
1125 source_location virtual_location
= 0;
1127 pfile
->state
.skip_eval
= 0;
1129 /* Set up detection of #if ! defined(). */
1130 pfile
->mi_ind_cmacro
= 0;
1131 saw_leading_not
= false;
1134 /* Lowest priority operator prevents further reductions. */
1142 op
.token
= cpp_get_token_with_location (pfile
, &virtual_location
);
1143 op
.op
= op
.token
->type
;
1144 op
.loc
= virtual_location
;
1148 /* These tokens convert into values. */
1157 SYNTAX_ERROR2_AT (op
.loc
,
1158 "missing binary operator before token \"%s\"",
1159 cpp_token_as_text (pfile
, op
.token
));
1161 top
->value
= eval_token (pfile
, op
.token
, op
.loc
);
1165 saw_leading_not
= lex_count
== 1;
1177 if ((int) op
.op
<= (int) CPP_EQ
|| (int) op
.op
>= (int) CPP_PLUS_EQ
)
1178 SYNTAX_ERROR2_AT (op
.loc
,
1179 "token \"%s\" is not valid in preprocessor expressions",
1180 cpp_token_as_text (pfile
, op
.token
));
1184 /* Check we have a value or operator as appropriate. */
1185 if (optab
[op
.op
].flags
& NO_L_OPERAND
)
1188 SYNTAX_ERROR2_AT (op
.loc
,
1189 "missing binary operator before token \"%s\"",
1190 cpp_token_as_text (pfile
, op
.token
));
1192 else if (want_value
)
1194 /* We want a number (or expression) and haven't got one.
1195 Try to emit a specific diagnostic. */
1196 if (op
.op
== CPP_CLOSE_PAREN
&& top
->op
== CPP_OPEN_PAREN
)
1197 SYNTAX_ERROR_AT (op
.loc
,
1198 "missing expression between '(' and ')'");
1200 if (op
.op
== CPP_EOF
&& top
->op
== CPP_EOF
)
1201 SYNTAX_ERROR2_AT (op
.loc
,
1202 "%s with no expression", is_if
? "#if" : "#elif");
1204 if (top
->op
!= CPP_EOF
&& top
->op
!= CPP_OPEN_PAREN
)
1205 SYNTAX_ERROR2_AT (op
.loc
,
1206 "operator '%s' has no right operand",
1207 cpp_token_as_text (pfile
, top
->token
));
1208 else if (op
.op
== CPP_CLOSE_PAREN
|| op
.op
== CPP_EOF
)
1209 /* Complain about missing paren during reduction. */;
1211 SYNTAX_ERROR2_AT (op
.loc
,
1212 "operator '%s' has no left operand",
1213 cpp_token_as_text (pfile
, op
.token
));
1216 top
= reduce (pfile
, top
, op
.op
);
1220 if (op
.op
== CPP_EOF
)
1225 case CPP_CLOSE_PAREN
:
1228 if (!num_zerop (top
->value
))
1229 pfile
->state
.skip_eval
++;
1233 if (num_zerop (top
->value
))
1234 pfile
->state
.skip_eval
++;
1237 if (top
->op
!= CPP_QUERY
)
1238 SYNTAX_ERROR_AT (op
.loc
,
1239 " ':' without preceding '?'");
1240 if (!num_zerop (top
[-1].value
)) /* Was '?' condition true? */
1241 pfile
->state
.skip_eval
++;
1243 pfile
->state
.skip_eval
--;
1250 /* Check for and handle stack overflow. */
1251 if (++top
== pfile
->op_limit
)
1252 top
= _cpp_expand_op_stack (pfile
);
1255 top
->token
= op
.token
;
1259 /* The controlling macro expression is only valid if we called lex 3
1260 times: <!> <defined expression> and <EOF>. push_conditional ()
1261 checks that we are at top-of-file. */
1262 if (pfile
->mi_ind_cmacro
&& !(saw_leading_not
&& lex_count
== 3))
1263 pfile
->mi_ind_cmacro
= 0;
1265 if (top
!= pfile
->op_stack
)
1267 cpp_error_with_line (pfile
, CPP_DL_ICE
, top
->loc
, 0,
1268 "unbalanced stack in %s",
1269 is_if
? "#if" : "#elif");
1271 return false; /* Return false on syntax error. */
1274 return !num_zerop (top
->value
);
1277 /* Reduce the operator / value stack if possible, in preparation for
1278 pushing operator OP. Returns NULL on error, otherwise the top of
1281 reduce (cpp_reader
*pfile
, struct op
*top
, enum cpp_ttype op
)
1285 if (top
->op
<= CPP_EQ
|| top
->op
> CPP_LAST_CPP_OP
+ 2)
1288 cpp_error (pfile
, CPP_DL_ICE
, "impossible operator '%u'", top
->op
);
1292 if (op
== CPP_OPEN_PAREN
)
1295 /* Decrement the priority of left-associative operators to force a
1296 reduction with operators of otherwise equal priority. */
1297 prio
= optab
[op
].prio
- ((optab
[op
].flags
& LEFT_ASSOC
) != 0);
1298 while (prio
< optab
[top
->op
].prio
)
1300 if (CPP_OPTION (pfile
, warn_num_sign_change
)
1301 && optab
[top
->op
].flags
& CHECK_PROMOTION
)
1302 check_promotion (pfile
, top
);
1310 top
[-1].value
= num_unary_op (pfile
, top
->value
, top
->op
);
1311 top
[-1].loc
= top
->loc
;
1319 top
[-1].value
= num_binary_op (pfile
, top
[-1].value
,
1320 top
->value
, top
->op
);
1321 top
[-1].loc
= top
->loc
;
1326 case CPP_GREATER_EQ
:
1329 = num_inequality_op (pfile
, top
[-1].value
, top
->value
, top
->op
);
1330 top
[-1].loc
= top
->loc
;
1336 = num_equality_op (pfile
, top
[-1].value
, top
->value
, top
->op
);
1337 top
[-1].loc
= top
->loc
;
1344 = num_bitwise_op (pfile
, top
[-1].value
, top
->value
, top
->op
);
1345 top
[-1].loc
= top
->loc
;
1349 top
[-1].value
= num_mul (pfile
, top
[-1].value
, top
->value
);
1350 top
[-1].loc
= top
->loc
;
1355 top
[-1].value
= num_div_op (pfile
, top
[-1].value
,
1356 top
->value
, top
->op
, top
->loc
);
1357 top
[-1].loc
= top
->loc
;
1362 if (!num_zerop (top
->value
))
1363 pfile
->state
.skip_eval
--;
1364 top
->value
.low
= (!num_zerop (top
->value
)
1365 || !num_zerop (top
[1].value
));
1366 top
->value
.high
= 0;
1367 top
->value
.unsignedp
= false;
1368 top
->value
.overflow
= false;
1369 top
->loc
= top
[1].loc
;
1374 if (num_zerop (top
->value
))
1375 pfile
->state
.skip_eval
--;
1376 top
->value
.low
= (!num_zerop (top
->value
)
1377 && !num_zerop (top
[1].value
));
1378 top
->value
.high
= 0;
1379 top
->value
.unsignedp
= false;
1380 top
->value
.overflow
= false;
1381 top
->loc
= top
[1].loc
;
1384 case CPP_OPEN_PAREN
:
1385 if (op
!= CPP_CLOSE_PAREN
)
1387 cpp_error_with_line (pfile
, CPP_DL_ERROR
,
1388 top
->token
->src_loc
,
1389 0, "missing ')' in expression");
1393 top
->value
= top
[1].value
;
1394 top
->loc
= top
[1].loc
;
1399 if (!num_zerop (top
->value
))
1401 pfile
->state
.skip_eval
--;
1402 top
->value
= top
[1].value
;
1403 top
->loc
= top
[1].loc
;
1407 top
->value
= top
[2].value
;
1408 top
->loc
= top
[2].loc
;
1410 top
->value
.unsignedp
= (top
[1].value
.unsignedp
1411 || top
[2].value
.unsignedp
);
1415 /* COMMA and COLON should not reduce a QUERY operator. */
1416 if (op
== CPP_COMMA
|| op
== CPP_COLON
)
1418 cpp_error (pfile
, CPP_DL_ERROR
, "'?' without following ':'");
1426 if (top
->value
.overflow
&& !pfile
->state
.skip_eval
)
1427 cpp_error (pfile
, CPP_DL_PEDWARN
,
1428 "integer overflow in preprocessor expression");
1431 if (op
== CPP_CLOSE_PAREN
)
1433 cpp_error (pfile
, CPP_DL_ERROR
, "missing '(' in expression");
1440 /* Returns the position of the old top of stack after expansion. */
1442 _cpp_expand_op_stack (cpp_reader
*pfile
)
1444 size_t old_size
= (size_t) (pfile
->op_limit
- pfile
->op_stack
);
1445 size_t new_size
= old_size
* 2 + 20;
1447 pfile
->op_stack
= XRESIZEVEC (struct op
, pfile
->op_stack
, new_size
);
1448 pfile
->op_limit
= pfile
->op_stack
+ new_size
;
1450 return pfile
->op_stack
+ old_size
;
1453 /* Emits a warning if the effective sign of either operand of OP
1454 changes because of integer promotions. */
1456 check_promotion (cpp_reader
*pfile
, const struct op
*op
)
1458 if (op
->value
.unsignedp
== op
[-1].value
.unsignedp
)
1461 if (op
->value
.unsignedp
)
1463 if (!num_positive (op
[-1].value
, CPP_OPTION (pfile
, precision
)))
1464 cpp_error_with_line (pfile
, CPP_DL_WARNING
, op
[-1].loc
, 0,
1465 "the left operand of \"%s\" changes sign when promoted",
1466 cpp_token_as_text (pfile
, op
->token
));
1468 else if (!num_positive (op
->value
, CPP_OPTION (pfile
, precision
)))
1469 cpp_error_with_line (pfile
, CPP_DL_WARNING
, op
->loc
, 0,
1470 "the right operand of \"%s\" changes sign when promoted",
1471 cpp_token_as_text (pfile
, op
->token
));
1474 /* Clears the unused high order bits of the number pointed to by PNUM. */
1476 num_trim (cpp_num num
, size_t precision
)
1478 if (precision
> PART_PRECISION
)
1480 precision
-= PART_PRECISION
;
1481 if (precision
< PART_PRECISION
)
1482 num
.high
&= ((cpp_num_part
) 1 << precision
) - 1;
1486 if (precision
< PART_PRECISION
)
1487 num
.low
&= ((cpp_num_part
) 1 << precision
) - 1;
1494 /* True iff A (presumed signed) >= 0. */
1496 num_positive (cpp_num num
, size_t precision
)
1498 if (precision
> PART_PRECISION
)
1500 precision
-= PART_PRECISION
;
1501 return (num
.high
& (cpp_num_part
) 1 << (precision
- 1)) == 0;
1504 return (num
.low
& (cpp_num_part
) 1 << (precision
- 1)) == 0;
1507 /* Sign extend a number, with PRECISION significant bits and all
1508 others assumed clear, to fill out a cpp_num structure. */
1510 cpp_num_sign_extend (cpp_num num
, size_t precision
)
1514 if (precision
> PART_PRECISION
)
1516 precision
-= PART_PRECISION
;
1517 if (precision
< PART_PRECISION
1518 && (num
.high
& (cpp_num_part
) 1 << (precision
- 1)))
1519 num
.high
|= ~(~(cpp_num_part
) 0 >> (PART_PRECISION
- precision
));
1521 else if (num
.low
& (cpp_num_part
) 1 << (precision
- 1))
1523 if (precision
< PART_PRECISION
)
1524 num
.low
|= ~(~(cpp_num_part
) 0 >> (PART_PRECISION
- precision
));
1525 num
.high
= ~(cpp_num_part
) 0;
1532 /* Returns the negative of NUM. */
1534 num_negate (cpp_num num
, size_t precision
)
1539 num
.high
= ~num
.high
;
1543 num
= num_trim (num
, precision
);
1544 num
.overflow
= (!num
.unsignedp
&& num_eq (num
, copy
) && !num_zerop (num
));
1549 /* Returns true if A >= B. */
1551 num_greater_eq (cpp_num pa
, cpp_num pb
, size_t precision
)
1555 unsignedp
= pa
.unsignedp
|| pb
.unsignedp
;
1559 /* Both numbers have signed type. If they are of different
1560 sign, the answer is the sign of A. */
1561 unsignedp
= num_positive (pa
, precision
);
1563 if (unsignedp
!= num_positive (pb
, precision
))
1566 /* Otherwise we can do an unsigned comparison. */
1569 return (pa
.high
> pb
.high
) || (pa
.high
== pb
.high
&& pa
.low
>= pb
.low
);
1572 /* Returns LHS OP RHS, where OP is a bit-wise operation. */
1574 num_bitwise_op (cpp_reader
*pfile ATTRIBUTE_UNUSED
,
1575 cpp_num lhs
, cpp_num rhs
, enum cpp_ttype op
)
1577 lhs
.overflow
= false;
1578 lhs
.unsignedp
= lhs
.unsignedp
|| rhs
.unsignedp
;
1580 /* As excess precision is zeroed, there is no need to num_trim () as
1581 these operations cannot introduce a set bit there. */
1585 lhs
.high
&= rhs
.high
;
1587 else if (op
== CPP_OR
)
1590 lhs
.high
|= rhs
.high
;
1595 lhs
.high
^= rhs
.high
;
1601 /* Returns LHS OP RHS, where OP is an inequality. */
1603 num_inequality_op (cpp_reader
*pfile
, cpp_num lhs
, cpp_num rhs
,
1606 bool gte
= num_greater_eq (lhs
, rhs
, CPP_OPTION (pfile
, precision
));
1608 if (op
== CPP_GREATER_EQ
)
1610 else if (op
== CPP_LESS
)
1612 else if (op
== CPP_GREATER
)
1613 lhs
.low
= gte
&& !num_eq (lhs
, rhs
);
1614 else /* CPP_LESS_EQ. */
1615 lhs
.low
= !gte
|| num_eq (lhs
, rhs
);
1618 lhs
.overflow
= false;
1619 lhs
.unsignedp
= false;
1623 /* Returns LHS OP RHS, where OP is == or !=. */
1625 num_equality_op (cpp_reader
*pfile ATTRIBUTE_UNUSED
,
1626 cpp_num lhs
, cpp_num rhs
, enum cpp_ttype op
)
1628 /* Work around a 3.0.4 bug; see PR 6950. */
1629 bool eq
= num_eq (lhs
, rhs
);
1630 if (op
== CPP_NOT_EQ
)
1634 lhs
.overflow
= false;
1635 lhs
.unsignedp
= false;
1639 /* Shift NUM, of width PRECISION, right by N bits. */
1641 num_rshift (cpp_num num
, size_t precision
, size_t n
)
1643 cpp_num_part sign_mask
;
1644 bool x
= num_positive (num
, precision
);
1646 if (num
.unsignedp
|| x
)
1649 sign_mask
= ~(cpp_num_part
) 0;
1652 num
.high
= num
.low
= sign_mask
;
1656 if (precision
< PART_PRECISION
)
1657 num
.high
= sign_mask
, num
.low
|= sign_mask
<< precision
;
1658 else if (precision
< 2 * PART_PRECISION
)
1659 num
.high
|= sign_mask
<< (precision
- PART_PRECISION
);
1661 if (n
>= PART_PRECISION
)
1663 n
-= PART_PRECISION
;
1665 num
.high
= sign_mask
;
1670 num
.low
= (num
.low
>> n
) | (num
.high
<< (PART_PRECISION
- n
));
1671 num
.high
= (num
.high
>> n
) | (sign_mask
<< (PART_PRECISION
- n
));
1675 num
= num_trim (num
, precision
);
1676 num
.overflow
= false;
1680 /* Shift NUM, of width PRECISION, left by N bits. */
1682 num_lshift (cpp_num num
, size_t precision
, size_t n
)
1686 num
.overflow
= !num
.unsignedp
&& !num_zerop (num
);
1687 num
.high
= num
.low
= 0;
1691 cpp_num orig
, maybe_orig
;
1695 if (m
>= PART_PRECISION
)
1697 m
-= PART_PRECISION
;
1703 num
.high
= (num
.high
<< m
) | (num
.low
>> (PART_PRECISION
- m
));
1706 num
= num_trim (num
, precision
);
1709 num
.overflow
= false;
1712 maybe_orig
= num_rshift (num
, precision
, n
);
1713 num
.overflow
= !num_eq (orig
, maybe_orig
);
1720 /* The four unary operators: +, -, ! and ~. */
1722 num_unary_op (cpp_reader
*pfile
, cpp_num num
, enum cpp_ttype op
)
1727 if (CPP_WTRADITIONAL (pfile
) && !pfile
->state
.skip_eval
)
1728 cpp_warning (pfile
, CPP_W_TRADITIONAL
,
1729 "traditional C rejects the unary plus operator");
1730 num
.overflow
= false;
1734 num
= num_negate (num
, CPP_OPTION (pfile
, precision
));
1738 num
.high
= ~num
.high
;
1740 num
= num_trim (num
, CPP_OPTION (pfile
, precision
));
1741 num
.overflow
= false;
1744 default: /* case CPP_NOT: */
1745 num
.low
= num_zerop (num
);
1747 num
.overflow
= false;
1748 num
.unsignedp
= false;
1755 /* The various binary operators. */
1757 num_binary_op (cpp_reader
*pfile
, cpp_num lhs
, cpp_num rhs
, enum cpp_ttype op
)
1760 size_t precision
= CPP_OPTION (pfile
, precision
);
1768 if (!rhs
.unsignedp
&& !num_positive (rhs
, precision
))
1770 /* A negative shift is a positive shift the other way. */
1771 if (op
== CPP_LSHIFT
)
1775 rhs
= num_negate (rhs
, precision
);
1778 n
= ~0; /* Maximal. */
1781 if (op
== CPP_LSHIFT
)
1782 lhs
= num_lshift (lhs
, precision
, n
);
1784 lhs
= num_rshift (lhs
, precision
, n
);
1789 rhs
= num_negate (rhs
, precision
);
1791 result
.low
= lhs
.low
+ rhs
.low
;
1792 result
.high
= lhs
.high
+ rhs
.high
;
1793 if (result
.low
< lhs
.low
)
1795 result
.unsignedp
= lhs
.unsignedp
|| rhs
.unsignedp
;
1796 result
.overflow
= false;
1798 result
= num_trim (result
, precision
);
1799 if (!result
.unsignedp
)
1801 bool lhsp
= num_positive (lhs
, precision
);
1802 result
.overflow
= (lhsp
== num_positive (rhs
, precision
)
1803 && lhsp
!= num_positive (result
, precision
));
1808 default: /* case CPP_COMMA: */
1809 if (CPP_PEDANTIC (pfile
) && (!CPP_OPTION (pfile
, c99
)
1810 || !pfile
->state
.skip_eval
))
1811 cpp_error (pfile
, CPP_DL_PEDWARN
,
1812 "comma operator in operand of #if");
1820 /* Multiplies two unsigned cpp_num_parts to give a cpp_num. This
1823 num_part_mul (cpp_num_part lhs
, cpp_num_part rhs
)
1826 cpp_num_part middle
[2], temp
;
1828 result
.low
= LOW_PART (lhs
) * LOW_PART (rhs
);
1829 result
.high
= HIGH_PART (lhs
) * HIGH_PART (rhs
);
1831 middle
[0] = LOW_PART (lhs
) * HIGH_PART (rhs
);
1832 middle
[1] = HIGH_PART (lhs
) * LOW_PART (rhs
);
1835 result
.low
+= LOW_PART (middle
[0]) << (PART_PRECISION
/ 2);
1836 if (result
.low
< temp
)
1840 result
.low
+= LOW_PART (middle
[1]) << (PART_PRECISION
/ 2);
1841 if (result
.low
< temp
)
1844 result
.high
+= HIGH_PART (middle
[0]);
1845 result
.high
+= HIGH_PART (middle
[1]);
1846 result
.unsignedp
= true;
1847 result
.overflow
= false;
1852 /* Multiply two preprocessing numbers. */
1854 num_mul (cpp_reader
*pfile
, cpp_num lhs
, cpp_num rhs
)
1856 cpp_num result
, temp
;
1857 bool unsignedp
= lhs
.unsignedp
|| rhs
.unsignedp
;
1858 bool overflow
, negate
= false;
1859 size_t precision
= CPP_OPTION (pfile
, precision
);
1861 /* Prepare for unsigned multiplication. */
1864 if (!num_positive (lhs
, precision
))
1865 negate
= !negate
, lhs
= num_negate (lhs
, precision
);
1866 if (!num_positive (rhs
, precision
))
1867 negate
= !negate
, rhs
= num_negate (rhs
, precision
);
1870 overflow
= lhs
.high
&& rhs
.high
;
1871 result
= num_part_mul (lhs
.low
, rhs
.low
);
1873 temp
= num_part_mul (lhs
.high
, rhs
.low
);
1874 result
.high
+= temp
.low
;
1878 temp
= num_part_mul (lhs
.low
, rhs
.high
);
1879 result
.high
+= temp
.low
;
1883 temp
.low
= result
.low
, temp
.high
= result
.high
;
1884 result
= num_trim (result
, precision
);
1885 if (!num_eq (result
, temp
))
1889 result
= num_negate (result
, precision
);
1892 result
.overflow
= false;
1894 result
.overflow
= overflow
|| (num_positive (result
, precision
) ^ !negate
1895 && !num_zerop (result
));
1896 result
.unsignedp
= unsignedp
;
1901 /* Divide two preprocessing numbers, LHS and RHS, returning the answer
1902 or the remainder depending upon OP. LOCATION is the source location
1903 of this operator (for diagnostics). */
1906 num_div_op (cpp_reader
*pfile
, cpp_num lhs
, cpp_num rhs
, enum cpp_ttype op
,
1907 source_location location
)
1909 cpp_num result
, sub
;
1911 bool unsignedp
= lhs
.unsignedp
|| rhs
.unsignedp
;
1912 bool negate
= false, lhs_neg
= false;
1913 size_t i
, precision
= CPP_OPTION (pfile
, precision
);
1915 /* Prepare for unsigned division. */
1918 if (!num_positive (lhs
, precision
))
1919 negate
= !negate
, lhs_neg
= true, lhs
= num_negate (lhs
, precision
);
1920 if (!num_positive (rhs
, precision
))
1921 negate
= !negate
, rhs
= num_negate (rhs
, precision
);
1924 /* Find the high bit. */
1928 mask
= (cpp_num_part
) 1 << (i
- PART_PRECISION
);
1929 for (; ; i
--, mask
>>= 1)
1930 if (rhs
.high
& mask
)
1935 if (precision
> PART_PRECISION
)
1936 i
= precision
- PART_PRECISION
- 1;
1939 mask
= (cpp_num_part
) 1 << i
;
1940 for (; ; i
--, mask
>>= 1)
1946 if (!pfile
->state
.skip_eval
)
1947 cpp_error_with_line (pfile
, CPP_DL_ERROR
, location
, 0,
1948 "division by zero in #if");
1952 /* First nonzero bit of RHS is bit I. Do naive division by
1953 shifting the RHS fully left, and subtracting from LHS if LHS is
1954 at least as big, and then repeating but with one less shift.
1955 This is not very efficient, but is easy to understand. */
1957 rhs
.unsignedp
= true;
1958 lhs
.unsignedp
= true;
1959 i
= precision
- i
- 1;
1960 sub
= num_lshift (rhs
, precision
, i
);
1962 result
.high
= result
.low
= 0;
1965 if (num_greater_eq (lhs
, sub
, precision
))
1967 lhs
= num_binary_op (pfile
, lhs
, sub
, CPP_MINUS
);
1968 if (i
>= PART_PRECISION
)
1969 result
.high
|= (cpp_num_part
) 1 << (i
- PART_PRECISION
);
1971 result
.low
|= (cpp_num_part
) 1 << i
;
1975 sub
.low
= (sub
.low
>> 1) | (sub
.high
<< (PART_PRECISION
- 1));
1979 /* We divide so that the remainder has the sign of the LHS. */
1982 result
.unsignedp
= unsignedp
;
1983 result
.overflow
= false;
1987 result
= num_negate (result
, precision
);
1988 result
.overflow
= (num_positive (result
, precision
) ^ !negate
1989 && !num_zerop (result
));
1996 lhs
.unsignedp
= unsignedp
;
1997 lhs
.overflow
= false;
1999 lhs
= num_negate (lhs
, precision
);