1 /* Parse C expressions for cpplib.
2 Copyright (C) 1987-2023 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 location_t 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
*, location_t
);
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 (of CPP_N_* bits) describing the suffix. */
89 interpret_float_suffix (cpp_reader
*pfile
, const uchar
*s
, size_t len
)
91 size_t orig_len
= len
;
92 const uchar
*orig_s
= s
;
94 size_t f
, d
, l
, w
, q
, i
, fn
, fnx
, fn_bits
, bf16
;
97 f
= d
= l
= w
= q
= i
= fn
= fnx
= fn_bits
= bf16
= 0;
99 /* The following decimal float suffixes, from TR 24732:2009, TS
100 18661-2:2015 and C23, are supported:
104 dl, DL - _Decimal128.
106 The dN and DN suffixes for _DecimalN, and dNx and DNx for
107 _DecimalNx, defined in TS 18661-3:2015, are not supported.
109 Fixed-point suffixes, from TR 18037:2008, are supported. They
110 consist of three parts, in order:
112 (i) An optional u or U, for unsigned types.
114 (ii) An optional h or H, for short types, or l or L, for long
115 types, or ll or LL, for long long types. Use of ll or LL is a
118 (iii) r or R, for _Fract types, or k or K, for _Accum types.
120 Otherwise the suffix is for a binary or standard floating-point
121 type. Such a suffix, or the absence of a suffix, may be preceded
122 or followed by i, I, j or J, to indicate an imaginary number with
123 the corresponding complex type. The following suffixes for
124 binary or standard floating-point types are supported:
126 f, F - float (ISO C and C++).
127 l, L - long double (ISO C and C++).
128 d, D - double, even with the FLOAT_CONST_DECIMAL64 pragma in
129 operation (from TR 24732:2009; the pragma and the suffix
130 are not included in TS 18661-2:2015).
131 w, W - machine-specific type such as __float80 (GNU extension).
132 q, Q - machine-specific type such as __float128 (GNU extension).
133 fN, FN - _FloatN (TS 18661-3:2015).
134 fNx, FNx - _FloatNx (TS 18661-3:2015).
135 bf16, BF16 - std::bfloat16_t (ISO C++23). */
137 /* Process decimal float suffixes, which are two letters starting
138 with d or D. Order and case are significant. */
139 if (len
== 2 && (*s
== 'd' || *s
== 'D'))
141 bool uppercase
= (*s
== 'D');
144 case 'f': return (!uppercase
? (CPP_N_DFLOAT
| CPP_N_SMALL
): 0); break;
145 case 'F': return (uppercase
? (CPP_N_DFLOAT
| CPP_N_SMALL
) : 0); break;
146 case 'd': return (!uppercase
? (CPP_N_DFLOAT
| CPP_N_MEDIUM
): 0); break;
147 case 'D': return (uppercase
? (CPP_N_DFLOAT
| CPP_N_MEDIUM
) : 0); break;
148 case 'l': return (!uppercase
? (CPP_N_DFLOAT
| CPP_N_LARGE
) : 0); break;
149 case 'L': return (uppercase
? (CPP_N_DFLOAT
| CPP_N_LARGE
) : 0); break;
151 /* Additional two-character suffixes beginning with D are not
152 for decimal float constants. */
157 if (CPP_OPTION (pfile
, ext_numeric_literals
))
159 /* Recognize a fixed-point suffix. */
163 case 'k': case 'K': flags
= CPP_N_ACCUM
; break;
164 case 'r': case 'R': flags
= CPP_N_FRACT
; break;
168 /* Continue processing a fixed-point suffix. The suffix is case
169 insensitive except for ll or LL. Order is significant. */
176 if (*s
== 'u' || *s
== 'U')
178 flags
|= CPP_N_UNSIGNED
;
189 return flags
|= CPP_N_SMALL
;
193 return flags
|= CPP_N_MEDIUM
;
194 if (len
== 2 && s
[1] == 'l')
195 return flags
|= CPP_N_LARGE
;
199 return flags
|= CPP_N_MEDIUM
;
200 if (len
== 2 && s
[1] == 'L')
201 return flags
|= CPP_N_LARGE
;
206 /* Anything left at this point is invalid. */
211 /* In any remaining valid suffix, the case and order don't matter. */
227 && fn_bits
< CPP_FLOATN_MAX
)
229 fn_bits
= fn_bits
* 10 + (s
[1] - '0');
233 if (len
> 0 && s
[1] == 'x')
245 /* Except for bf16 / BF16 where case is significant. */
246 && s
[1] == (s
[0] == 'b' ? 'f' : 'F')
256 case 'd': case 'D': d
++; break;
257 case 'l': case 'L': l
++; break;
258 case 'w': case 'W': w
++; break;
259 case 'q': case 'Q': q
++; break;
261 case 'j': case 'J': i
++; break;
268 /* Reject any case of multiple suffixes specifying types, multiple
269 suffixes specifying an imaginary constant, _FloatN or _FloatNx
270 suffixes for invalid values of N, and _FloatN suffixes for values
271 of N larger than can be represented in the return value. The
272 caller is responsible for rejecting _FloatN suffixes where
273 _FloatN is not supported on the chosen target. */
274 if (f
+ d
+ l
+ w
+ q
+ fn
+ fnx
+ bf16
> 1 || i
> 1)
276 if (fn_bits
> CPP_FLOATN_MAX
)
278 if (fnx
&& fn_bits
!= 32 && fn_bits
!= 64 && fn_bits
!= 128)
280 if (fn
&& fn_bits
!= 16 && fn_bits
% 32 != 0)
282 if (fn
&& fn_bits
== 96)
287 if (!CPP_OPTION (pfile
, ext_numeric_literals
))
290 /* In C++14 and up these suffixes are in the standard library, so treat
291 them as user-defined literals. */
292 if (CPP_OPTION (pfile
, cplusplus
)
293 && CPP_OPTION (pfile
, lang
) > CLK_CXX11
297 && (orig_s
[1] == 'f' || orig_s
[1] == 'l'))))
301 if ((w
|| q
) && !CPP_OPTION (pfile
, ext_numeric_literals
))
304 return ((i
? CPP_N_IMAGINARY
: 0)
310 fn
? CPP_N_FLOATN
| (fn_bits
<< CPP_FLOATN_SHIFT
) :
311 fnx
? CPP_N_FLOATNX
| (fn_bits
<< CPP_FLOATN_SHIFT
) :
312 bf16
? CPP_N_BFLOAT16
:
316 /* Return the classification flags for a float suffix. */
318 cpp_interpret_float_suffix (cpp_reader
*pfile
, const char *s
, size_t len
)
320 return interpret_float_suffix (pfile
, (const unsigned char *)s
, len
);
323 /* Subroutine of cpp_classify_number. S points to an integer suffix
324 of length LEN, possibly zero. Returns 0 for an invalid suffix, or a
325 flag vector describing the suffix. */
327 interpret_int_suffix (cpp_reader
*pfile
, const uchar
*s
, size_t len
)
329 size_t orig_len
= len
;
330 size_t u
, l
, i
, z
, wb
;
332 u
= l
= i
= z
= wb
= 0;
337 case 'z': case 'Z': z
++; break;
338 case 'u': case 'U': u
++; break;
340 case 'j': case 'J': i
++; break;
341 case 'l': case 'L': l
++;
342 /* If there are two Ls, they must be adjacent and the same case. */
343 if (l
== 2 && s
[len
] != s
[len
+ 1])
347 if (len
== 0 || s
[len
- 1] != 'w')
353 if (len
== 0 || s
[len
- 1] != 'W')
362 if (l
> 2 || u
> 1 || i
> 1 || z
> 1 || wb
> 1)
369 if (!CPP_OPTION (pfile
, cplusplus
))
375 if (CPP_OPTION (pfile
, cplusplus
))
377 if (l
> 0 || i
> 0 || z
> 0)
383 if (!CPP_OPTION (pfile
, ext_numeric_literals
))
386 /* In C++14 and up these suffixes are in the standard library, so treat
387 them as user-defined literals. */
388 if (CPP_OPTION (pfile
, cplusplus
)
389 && CPP_OPTION (pfile
, lang
) > CLK_CXX11
391 && (orig_len
== 1 || (orig_len
== 2 && s
[1] == 'l')))
395 return ((i
? CPP_N_IMAGINARY
: 0)
396 | (u
? CPP_N_UNSIGNED
: 0)
397 | ((l
== 0) ? CPP_N_SMALL
398 : (l
== 1) ? CPP_N_MEDIUM
: CPP_N_LARGE
)
399 | (z
? CPP_N_SIZE_T
: 0)
400 | (wb
? CPP_N_BITINT
: 0));
403 /* Return the classification flags for an int suffix. */
405 cpp_interpret_int_suffix (cpp_reader
*pfile
, const char *s
, size_t len
)
407 return interpret_int_suffix (pfile
, (const unsigned char *)s
, len
);
410 /* Return the string type corresponding to the the input user-defined string
411 literal type. If the input type is not a user-defined string literal
412 type return the input type. */
414 cpp_userdef_string_remove_type (enum cpp_ttype type
)
416 if (type
== CPP_STRING_USERDEF
)
418 else if (type
== CPP_WSTRING_USERDEF
)
420 else if (type
== CPP_STRING16_USERDEF
)
422 else if (type
== CPP_STRING32_USERDEF
)
424 else if (type
== CPP_UTF8STRING_USERDEF
)
425 return CPP_UTF8STRING
;
430 /* Return the user-defined string literal type corresponding to the input
431 string type. If the input type is not a string type return the input
434 cpp_userdef_string_add_type (enum cpp_ttype type
)
436 if (type
== CPP_STRING
)
437 return CPP_STRING_USERDEF
;
438 else if (type
== CPP_WSTRING
)
439 return CPP_WSTRING_USERDEF
;
440 else if (type
== CPP_STRING16
)
441 return CPP_STRING16_USERDEF
;
442 else if (type
== CPP_STRING32
)
443 return CPP_STRING32_USERDEF
;
444 else if (type
== CPP_UTF8STRING
)
445 return CPP_UTF8STRING_USERDEF
;
450 /* Return the char type corresponding to the the input user-defined char
451 literal type. If the input type is not a user-defined char literal
452 type return the input type. */
454 cpp_userdef_char_remove_type (enum cpp_ttype type
)
456 if (type
== CPP_CHAR_USERDEF
)
458 else if (type
== CPP_WCHAR_USERDEF
)
460 else if (type
== CPP_CHAR16_USERDEF
)
462 else if (type
== CPP_CHAR32_USERDEF
)
464 else if (type
== CPP_UTF8CHAR_USERDEF
)
470 /* Return the user-defined char literal type corresponding to the input
471 char type. If the input type is not a char type return the input
474 cpp_userdef_char_add_type (enum cpp_ttype type
)
476 if (type
== CPP_CHAR
)
477 return CPP_CHAR_USERDEF
;
478 else if (type
== CPP_WCHAR
)
479 return CPP_WCHAR_USERDEF
;
480 else if (type
== CPP_CHAR16
)
481 return CPP_CHAR16_USERDEF
;
482 else if (type
== CPP_CHAR32
)
483 return CPP_CHAR32_USERDEF
;
484 else if (type
== CPP_UTF8CHAR
)
485 return CPP_UTF8CHAR_USERDEF
;
490 /* Return true if the token type is a user-defined string literal. */
492 cpp_userdef_string_p (enum cpp_ttype type
)
494 if (type
== CPP_STRING_USERDEF
495 || type
== CPP_WSTRING_USERDEF
496 || type
== CPP_STRING16_USERDEF
497 || type
== CPP_STRING32_USERDEF
498 || type
== CPP_UTF8STRING_USERDEF
)
504 /* Return true if the token type is a user-defined char literal. */
506 cpp_userdef_char_p (enum cpp_ttype type
)
508 if (type
== CPP_CHAR_USERDEF
509 || type
== CPP_WCHAR_USERDEF
510 || type
== CPP_CHAR16_USERDEF
511 || type
== CPP_CHAR32_USERDEF
512 || type
== CPP_UTF8CHAR_USERDEF
)
518 /* Extract the suffix from a user-defined literal string or char. */
520 cpp_get_userdef_suffix (const cpp_token
*tok
)
522 unsigned int len
= tok
->val
.str
.len
;
523 const char *text
= (const char *)tok
->val
.str
.text
;
526 for (i
= 0; i
< len
; ++i
)
527 if (text
[i
] == '\'' || text
[i
] == '"')
532 for (i
= len
; i
> 0; --i
)
533 if (text
[i
- 1] == delim
)
538 /* Categorize numeric constants according to their field (integer,
539 floating point, or invalid), radix (decimal, octal, hexadecimal),
542 TOKEN is the token that represents the numeric constant to
545 In C++0X if UD_SUFFIX is non null it will be assigned
546 any unrecognized suffix for a user-defined literal.
548 VIRTUAL_LOCATION is the virtual location for TOKEN. */
550 cpp_classify_number (cpp_reader
*pfile
, const cpp_token
*token
,
551 const char **ud_suffix
, location_t virtual_location
)
553 const uchar
*str
= token
->val
.str
.text
;
555 unsigned int max_digit
, result
, radix
;
556 enum {NOT_FLOAT
= 0, AFTER_POINT
, AFTER_EXPON
} float_flag
;
563 /* If the lexer has done its job, length one can only be a single
564 digit. Fast-path this very common case. */
565 if (token
->val
.str
.len
== 1)
566 return CPP_N_INTEGER
| CPP_N_SMALL
| CPP_N_DECIMAL
;
568 limit
= str
+ token
->val
.str
.len
;
569 float_flag
= NOT_FLOAT
;
573 seen_digit_sep
= false;
575 /* First, interpret the radix. */
581 /* Require at least one hex digit to classify it as hex. */
582 if (*str
== 'x' || *str
== 'X')
584 if (str
[1] == '.' || ISXDIGIT (str
[1]))
589 else if (DIGIT_SEP (str
[1]))
590 SYNTAX_ERROR_AT (virtual_location
,
591 "digit separator after base indicator");
593 else if (*str
== 'b' || *str
== 'B')
595 if (str
[1] == '0' || str
[1] == '1')
600 else if (DIGIT_SEP (str
[1]))
601 SYNTAX_ERROR_AT (virtual_location
,
602 "digit separator after base indicator");
606 /* Now scan for a well-formed integer or float. */
609 unsigned int c
= *str
++;
611 if (ISDIGIT (c
) || (ISXDIGIT (c
) && radix
== 16))
613 seen_digit_sep
= false;
619 else if (DIGIT_SEP (c
))
620 seen_digit_sep
= true;
623 if (seen_digit_sep
|| DIGIT_SEP (*str
))
624 SYNTAX_ERROR_AT (virtual_location
,
625 "digit separator adjacent to decimal point");
626 seen_digit_sep
= false;
627 if (float_flag
== NOT_FLOAT
)
628 float_flag
= AFTER_POINT
;
630 SYNTAX_ERROR_AT (virtual_location
,
631 "too many decimal points in number");
633 else if ((radix
<= 10 && (c
== 'e' || c
== 'E'))
634 || (radix
== 16 && (c
== 'p' || c
== 'P')))
636 if (seen_digit_sep
|| DIGIT_SEP (*str
))
637 SYNTAX_ERROR_AT (virtual_location
,
638 "digit separator adjacent to exponent");
639 float_flag
= AFTER_EXPON
;
644 /* Start of suffix. */
650 if (seen_digit_sep
&& float_flag
!= AFTER_EXPON
)
651 SYNTAX_ERROR_AT (virtual_location
,
652 "digit separator outside digit sequence");
654 /* The suffix may be for decimal fixed-point constants without exponent. */
655 if (radix
!= 16 && float_flag
== NOT_FLOAT
)
657 result
= interpret_float_suffix (pfile
, str
, limit
- str
);
658 if ((result
& CPP_N_FRACT
) || (result
& CPP_N_ACCUM
))
660 result
|= CPP_N_FLOATING
;
661 /* We need to restore the radix to 10, if the radix is 8. */
665 if (CPP_PEDANTIC (pfile
))
666 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
667 "fixed-point constants are a GCC extension");
674 if (float_flag
!= NOT_FLOAT
&& radix
== 8)
677 if (max_digit
>= radix
)
680 SYNTAX_ERROR2_AT (virtual_location
,
681 "invalid digit \"%c\" in binary constant", '0' + max_digit
);
683 SYNTAX_ERROR2_AT (virtual_location
,
684 "invalid digit \"%c\" in octal constant", '0' + max_digit
);
687 if (float_flag
!= NOT_FLOAT
)
691 cpp_error_with_line (pfile
, CPP_DL_ERROR
, virtual_location
, 0,
692 "invalid prefix \"0b\" for floating constant");
693 return CPP_N_INVALID
;
696 if (radix
== 16 && !seen_digit
)
697 SYNTAX_ERROR_AT (virtual_location
,
698 "no digits in hexadecimal floating constant");
700 if (radix
== 16 && CPP_PEDANTIC (pfile
)
701 && !CPP_OPTION (pfile
, extended_numbers
))
703 if (CPP_OPTION (pfile
, cplusplus
))
704 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
705 "use of C++17 hexadecimal floating constant");
707 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
708 "use of C99 hexadecimal floating constant");
711 if (float_flag
== AFTER_EXPON
)
713 if (*str
== '+' || *str
== '-')
716 /* Exponent is decimal, even if string is a hex float. */
719 if (DIGIT_SEP (*str
))
720 SYNTAX_ERROR_AT (virtual_location
,
721 "digit separator adjacent to exponent");
723 SYNTAX_ERROR_AT (virtual_location
, "exponent has no digits");
727 seen_digit_sep
= DIGIT_SEP (*str
);
730 while (ISDIGIT (*str
) || DIGIT_SEP (*str
));
732 else if (radix
== 16)
733 SYNTAX_ERROR_AT (virtual_location
,
734 "hexadecimal floating constants require an exponent");
737 SYNTAX_ERROR_AT (virtual_location
,
738 "digit separator outside digit sequence");
740 result
= interpret_float_suffix (pfile
, str
, limit
- str
);
743 if (CPP_OPTION (pfile
, user_literals
))
746 *ud_suffix
= (const char *) str
;
747 result
= CPP_N_LARGE
| CPP_N_USERDEF
;
751 cpp_error_with_line (pfile
, CPP_DL_ERROR
, virtual_location
, 0,
752 "invalid suffix \"%.*s\" on floating constant",
753 (int) (limit
- str
), str
);
754 return CPP_N_INVALID
;
758 /* Traditional C didn't accept any floating suffixes. */
760 && CPP_WTRADITIONAL (pfile
)
761 && ! cpp_sys_macro_p (pfile
))
762 cpp_warning_with_line (pfile
, CPP_W_TRADITIONAL
, virtual_location
, 0,
763 "traditional C rejects the \"%.*s\" suffix",
764 (int) (limit
- str
), str
);
766 /* A suffix for double is a GCC extension via decimal float support.
767 If the suffix also specifies an imaginary value we'll catch that
769 if ((result
== CPP_N_MEDIUM
) && CPP_PEDANTIC (pfile
))
770 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
771 "suffix for double constant is a GCC extension");
773 /* Radix must be 10 for decimal floats. */
774 if ((result
& CPP_N_DFLOAT
) && radix
!= 10)
776 cpp_error_with_line (pfile
, CPP_DL_ERROR
, virtual_location
, 0,
777 "invalid suffix \"%.*s\" with hexadecimal floating constant",
778 (int) (limit
- str
), str
);
779 return CPP_N_INVALID
;
782 if ((result
& (CPP_N_FRACT
| CPP_N_ACCUM
)) && CPP_PEDANTIC (pfile
))
783 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
784 "fixed-point constants are a GCC extension");
786 if (result
& CPP_N_DFLOAT
)
788 if (CPP_PEDANTIC (pfile
) && !CPP_OPTION (pfile
, dfp_constants
))
789 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
790 "decimal float constants are a C23 feature");
791 else if (CPP_OPTION (pfile
, cpp_warn_c11_c23_compat
) > 0)
792 cpp_warning_with_line (pfile
, CPP_W_C11_C23_COMPAT
,
794 "decimal float constants are a C23 feature");
797 result
|= CPP_N_FLOATING
;
801 result
= interpret_int_suffix (pfile
, str
, limit
- str
);
804 if (CPP_OPTION (pfile
, user_literals
))
807 *ud_suffix
= (const char *) str
;
808 result
= CPP_N_UNSIGNED
| CPP_N_LARGE
| CPP_N_USERDEF
;
812 cpp_error_with_line (pfile
, CPP_DL_ERROR
, virtual_location
, 0,
813 "invalid suffix \"%.*s\" on integer constant",
814 (int) (limit
- str
), str
);
815 return CPP_N_INVALID
;
819 /* Traditional C only accepted the 'L' suffix.
820 Suppress warning about 'LL' with -Wno-long-long. */
821 if (CPP_WTRADITIONAL (pfile
) && ! cpp_sys_macro_p (pfile
))
823 int u_or_i
= (result
& (CPP_N_UNSIGNED
|CPP_N_IMAGINARY
));
824 int large
= (result
& CPP_N_WIDTH
) == CPP_N_LARGE
825 && CPP_OPTION (pfile
, cpp_warn_long_long
);
828 cpp_warning_with_line (pfile
, large
? CPP_W_LONG_LONG
: CPP_W_TRADITIONAL
,
830 "traditional C rejects the \"%.*s\" suffix",
831 (int) (limit
- str
), str
);
834 if ((result
& CPP_N_WIDTH
) == CPP_N_LARGE
835 && CPP_OPTION (pfile
, cpp_warn_long_long
))
837 const char *message
= CPP_OPTION (pfile
, cplusplus
)
838 ? N_("use of C++11 long long integer constant")
839 : N_("use of C99 long long integer constant");
841 if (CPP_OPTION (pfile
, c99
))
842 cpp_warning_with_line (pfile
, CPP_W_LONG_LONG
, virtual_location
,
845 cpp_pedwarning_with_line (pfile
, CPP_W_LONG_LONG
,
846 virtual_location
, 0, message
);
849 if ((result
& CPP_N_SIZE_T
) == CPP_N_SIZE_T
850 && !CPP_OPTION (pfile
, size_t_literals
))
852 const char *message
= (result
& CPP_N_UNSIGNED
) == CPP_N_UNSIGNED
853 ? N_("use of C++23 %<size_t%> integer constant")
854 : N_("use of C++23 %<make_signed_t<size_t>%> integer constant");
855 cpp_warning_with_line (pfile
, CPP_W_SIZE_T_LITERALS
,
856 virtual_location
, 0, message
);
859 if ((result
& CPP_N_BITINT
) != 0
860 && CPP_OPTION (pfile
, cpp_warn_c11_c23_compat
) != 0)
862 if (CPP_OPTION (pfile
, cpp_warn_c11_c23_compat
) > 0)
864 const char *message
= N_("ISO C does not support literal "
865 "%<wb%> suffixes before C23");
866 if (CPP_PEDANTIC (pfile
) && !CPP_OPTION (pfile
, true_false
))
867 cpp_pedwarning_with_line (pfile
, CPP_W_C11_C23_COMPAT
,
868 virtual_location
, 0, message
);
870 cpp_warning_with_line (pfile
, CPP_W_C11_C23_COMPAT
,
871 virtual_location
, 0, message
);
873 else if (CPP_PEDANTIC (pfile
) && !CPP_OPTION (pfile
, true_false
))
875 const char *message
= N_("ISO C does not support literal "
876 "%<wb%> suffixes before C23");
877 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
882 result
|= CPP_N_INTEGER
;
886 if ((result
& CPP_N_IMAGINARY
) && CPP_PEDANTIC (pfile
))
887 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
888 "imaginary constants are a GCC extension");
891 if (!CPP_OPTION (pfile
, binary_constants
)
892 && CPP_PEDANTIC (pfile
))
893 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
, virtual_location
, 0,
894 CPP_OPTION (pfile
, cplusplus
)
895 ? N_("binary constants are a C++14 feature "
897 : N_("binary constants are a C23 feature "
898 "or GCC extension"));
899 else if (CPP_OPTION (pfile
, cpp_warn_c11_c23_compat
) > 0)
900 cpp_warning_with_line (pfile
, CPP_W_C11_C23_COMPAT
,
902 "binary constants are a C23 feature");
906 result
|= CPP_N_DECIMAL
;
907 else if (radix
== 16)
910 result
|= CPP_N_BINARY
;
912 result
|= CPP_N_OCTAL
;
917 return CPP_N_INVALID
;
920 /* cpp_interpret_integer converts an integer constant into a cpp_num,
921 of precision options->precision.
923 We do not provide any interface for decimal->float conversion,
924 because the preprocessor doesn't need it and we don't want to
925 drag in GCC's floating point emulator. */
927 cpp_interpret_integer (cpp_reader
*pfile
, const cpp_token
*token
,
930 const uchar
*p
, *end
;
935 result
.unsignedp
= !!(type
& CPP_N_UNSIGNED
);
936 result
.overflow
= false;
938 p
= token
->val
.str
.text
;
939 end
= p
+ token
->val
.str
.len
;
941 /* Common case of a single digit. */
942 if (token
->val
.str
.len
== 1)
943 result
.low
= p
[0] - '0';
947 size_t precision
= CPP_OPTION (pfile
, precision
);
948 unsigned int base
= 10, c
= 0;
949 bool overflow
= false;
951 if ((type
& CPP_N_RADIX
) == CPP_N_OCTAL
)
956 else if ((type
& CPP_N_RADIX
) == CPP_N_HEX
)
961 else if ((type
& CPP_N_RADIX
) == CPP_N_BINARY
)
967 /* We can add a digit to numbers strictly less than this without
968 needing the precision and slowness of double integers. */
969 max
= ~(cpp_num_part
) 0;
970 if (precision
< PART_PRECISION
)
971 max
>>= PART_PRECISION
- precision
;
972 max
= (max
- base
+ 1) / base
+ 1;
978 if (ISDIGIT (c
) || (base
== 16 && ISXDIGIT (c
)))
980 else if (DIGIT_SEP (c
))
985 /* Strict inequality for when max is set to zero. */
986 if (result
.low
< max
)
987 result
.low
= result
.low
* base
+ c
;
990 result
= append_digit (result
, c
, base
, precision
);
991 overflow
|= result
.overflow
;
996 if (overflow
&& !(type
& CPP_N_USERDEF
))
997 cpp_error (pfile
, CPP_DL_PEDWARN
,
998 "integer constant is too large for its type");
999 /* If too big to be signed, consider it unsigned. Only warn for
1000 decimal numbers. Traditional numbers were always signed (but
1001 we still honor an explicit U suffix); but we only have
1002 traditional semantics in directives. */
1003 else if (!result
.unsignedp
1004 && !(CPP_OPTION (pfile
, traditional
)
1005 && pfile
->state
.in_directive
)
1006 && !num_positive (result
, precision
))
1008 /* This is for constants within the range of uintmax_t but
1009 not that of intmax_t. For such decimal constants, a
1010 diagnostic is required for C99 as the selected type must
1011 be signed and not having a type is a constraint violation
1012 (DR#298, TC3), so this must be a pedwarn. For C90,
1013 unsigned long is specified to be used for a constant that
1014 does not fit in signed long; if uintmax_t has the same
1015 range as unsigned long this means only a warning is
1016 appropriate here. C90 permits the preprocessor to use a
1017 wider range than unsigned long in the compiler, so if
1018 uintmax_t is wider than unsigned long no diagnostic is
1019 required for such constants in preprocessor #if
1020 expressions and the compiler will pedwarn for such
1021 constants outside the range of unsigned long that reach
1022 the compiler so a diagnostic is not required there
1023 either; thus, pedwarn for C99 but use a plain warning for
1026 cpp_error (pfile
, (CPP_OPTION (pfile
, c99
)
1029 "integer constant is so large that it is unsigned");
1030 result
.unsignedp
= true;
1037 /* Append DIGIT to NUM, a number of PRECISION bits being read in base BASE. */
1039 append_digit (cpp_num num
, int digit
, int base
, size_t precision
)
1044 cpp_num_part add_high
, add_low
;
1046 /* Multiply by 2, 8 or 16. Catching this overflow here means we don't
1047 need to worry about add_high overflowing. */
1061 overflow
= !!(num
.high
>> (PART_PRECISION
- shift
));
1062 result
.high
= num
.high
<< shift
;
1063 result
.low
= num
.low
<< shift
;
1064 result
.high
|= num
.low
>> (PART_PRECISION
- shift
);
1065 result
.unsignedp
= num
.unsignedp
;
1069 add_low
= num
.low
<< 1;
1070 add_high
= (num
.high
<< 1) + (num
.low
>> (PART_PRECISION
- 1));
1073 add_high
= add_low
= 0;
1075 if (add_low
+ digit
< add_low
)
1079 if (result
.low
+ add_low
< result
.low
)
1081 if (result
.high
+ add_high
< result
.high
)
1084 result
.low
+= add_low
;
1085 result
.high
+= add_high
;
1086 result
.overflow
= overflow
;
1088 /* The above code catches overflow of a cpp_num type. This catches
1089 overflow of the (possibly shorter) target precision. */
1090 num
.low
= result
.low
;
1091 num
.high
= result
.high
;
1092 result
= num_trim (result
, precision
);
1093 if (!num_eq (result
, num
))
1094 result
.overflow
= true;
1099 /* Handle meeting "defined" in a preprocessor expression. */
1101 parse_defined (cpp_reader
*pfile
)
1105 cpp_hashnode
*node
= 0;
1106 const cpp_token
*token
;
1107 cpp_context
*initial_context
= pfile
->context
;
1109 /* Don't expand macros. */
1110 pfile
->state
.prevent_expansion
++;
1112 token
= cpp_get_token (pfile
);
1113 if (token
->type
== CPP_OPEN_PAREN
)
1116 token
= cpp_get_token (pfile
);
1119 if (token
->type
== CPP_NAME
)
1121 node
= token
->val
.node
.node
;
1122 if (paren
&& cpp_get_token (pfile
)->type
!= CPP_CLOSE_PAREN
)
1124 cpp_error (pfile
, CPP_DL_ERROR
, "missing ')' after \"defined\"");
1130 cpp_error (pfile
, CPP_DL_ERROR
,
1131 "operator \"defined\" requires an identifier");
1132 if (token
->flags
& NAMED_OP
)
1137 op
.type
= token
->type
;
1138 cpp_error (pfile
, CPP_DL_ERROR
,
1139 "(\"%s\" is an alternative token for \"%s\" in C++)",
1140 cpp_token_as_text (pfile
, token
),
1141 cpp_token_as_text (pfile
, &op
));
1145 bool is_defined
= false;
1148 if ((pfile
->context
!= initial_context
1149 || initial_context
!= &pfile
->base_context
)
1150 && CPP_OPTION (pfile
, warn_expansion_to_defined
))
1151 cpp_pedwarning (pfile
, CPP_W_EXPANSION_TO_DEFINED
,
1152 "this use of \"defined\" may not be portable");
1153 is_defined
= _cpp_defined_macro_p (node
);
1154 if (!_cpp_maybe_notify_macro_use (pfile
, node
, token
->src_loc
))
1155 /* It wasn't a macro after all. */
1157 _cpp_mark_macro_used (node
);
1159 /* A possible controlling macro of the form #if !defined ().
1160 _cpp_parse_expr checks there was no other junk on the line. */
1161 pfile
->mi_ind_cmacro
= node
;
1164 pfile
->state
.prevent_expansion
--;
1166 /* Do not treat conditional macros as being defined. This is due to the
1167 powerpc port using conditional macros for 'vector', 'bool', and 'pixel'
1168 to act as conditional keywords. This messes up tests like #ifndef
1170 result
.unsignedp
= false;
1172 result
.overflow
= false;
1173 result
.low
= is_defined
;
1177 /* Convert a token into a CPP_NUMBER (an interpreted preprocessing
1178 number or character constant, or the result of the "defined" or "#"
1181 eval_token (cpp_reader
*pfile
, const cpp_token
*token
,
1182 location_t virtual_location
)
1188 result
.unsignedp
= false;
1189 result
.overflow
= false;
1191 switch (token
->type
)
1194 temp
= cpp_classify_number (pfile
, token
, NULL
, virtual_location
);
1195 if (temp
& CPP_N_USERDEF
)
1196 cpp_error (pfile
, CPP_DL_ERROR
,
1197 "user-defined literal in preprocessor expression");
1198 switch (temp
& CPP_N_CATEGORY
)
1200 case CPP_N_FLOATING
:
1201 cpp_error_with_line (pfile
, CPP_DL_ERROR
, virtual_location
, 0,
1202 "floating constant in preprocessor expression");
1205 if (!(temp
& CPP_N_IMAGINARY
))
1206 return cpp_interpret_integer (pfile
, token
, temp
);
1207 cpp_error_with_line (pfile
, CPP_DL_ERROR
, virtual_location
, 0,
1208 "imaginary number in preprocessor expression");
1212 /* Error already issued. */
1215 result
.high
= result
.low
= 0;
1224 cppchar_t cc
= cpp_interpret_charconst (pfile
, token
,
1229 /* Sign-extend the result if necessary. */
1230 if (!unsignedp
&& (cppchar_signed_t
) cc
< 0)
1232 if (PART_PRECISION
> BITS_PER_CPPCHAR_T
)
1233 result
.low
|= ~(~(cpp_num_part
) 0
1234 >> (PART_PRECISION
- BITS_PER_CPPCHAR_T
));
1235 result
.high
= ~(cpp_num_part
) 0;
1236 result
= num_trim (result
, CPP_OPTION (pfile
, precision
));
1242 if (token
->val
.node
.node
== pfile
->spec_nodes
.n_defined
)
1243 return parse_defined (pfile
);
1244 else if (CPP_OPTION (pfile
, true_false
)
1245 && (token
->val
.node
.node
== pfile
->spec_nodes
.n_true
1246 || token
->val
.node
.node
== pfile
->spec_nodes
.n_false
))
1249 result
.low
= (token
->val
.node
.node
== pfile
->spec_nodes
.n_true
);
1255 if (CPP_OPTION (pfile
, warn_undef
) && !pfile
->state
.skip_eval
)
1256 cpp_warning_with_line (pfile
, CPP_W_UNDEF
, virtual_location
, 0,
1257 "\"%s\" is not defined, evaluates to 0",
1258 NODE_NAME (token
->val
.node
.node
));
1263 if (!pfile
->state
.skipping
)
1265 /* A pedantic warning takes precedence over a deprecated
1267 if (CPP_PEDANTIC (pfile
))
1268 cpp_error_with_line (pfile
, CPP_DL_PEDWARN
,
1269 virtual_location
, 0,
1270 "assertions are a GCC extension");
1271 else if (CPP_OPTION (pfile
, cpp_warn_deprecated
))
1272 cpp_warning_with_line (pfile
, CPP_W_DEPRECATED
, virtual_location
, 0,
1273 "assertions are a deprecated extension");
1275 _cpp_test_assertion (pfile
, &temp
);
1284 result
.unsignedp
= !!unsignedp
;
1288 /* Operator precedence and flags table.
1290 After an operator is returned from the lexer, if it has priority less
1291 than the operator on the top of the stack, we reduce the stack by one
1292 operator and repeat the test. Since equal priorities do not reduce,
1293 this is naturally right-associative.
1295 We handle left-associative operators by decrementing the priority of
1296 just-lexed operators by one, but retaining the priority of operators
1297 already on the stack.
1299 The remaining cases are '(' and ')'. We handle '(' by skipping the
1300 reduction phase completely. ')' is given lower priority than
1301 everything else, including '(', effectively forcing a reduction of the
1302 parenthesized expression. If there is a matching '(', the routine
1303 reduce() exits immediately. If the normal exit route sees a ')', then
1304 there cannot have been a matching '(' and an error message is output.
1306 The parser assumes all shifted operators require a left operand unless
1307 the flag NO_L_OPERAND is set. These semantics are automatic; any
1308 extra semantics need to be handled with operator-specific code. */
1310 /* Flags. If CHECK_PROMOTION, we warn if the effective sign of an
1311 operand changes because of integer promotions. */
1312 #define NO_L_OPERAND (1 << 0)
1313 #define LEFT_ASSOC (1 << 1)
1314 #define CHECK_PROMOTION (1 << 2)
1316 /* Operator to priority map. Must be in the same order as the first
1317 N entries of enum cpp_ttype. */
1318 static const struct cpp_operator
1324 /* EQ */ {0, 0}, /* Shouldn't happen. */
1325 /* NOT */ {16, NO_L_OPERAND
},
1326 /* GREATER */ {12, LEFT_ASSOC
| CHECK_PROMOTION
},
1327 /* LESS */ {12, LEFT_ASSOC
| CHECK_PROMOTION
},
1328 /* PLUS */ {14, LEFT_ASSOC
| CHECK_PROMOTION
},
1329 /* MINUS */ {14, LEFT_ASSOC
| CHECK_PROMOTION
},
1330 /* MULT */ {15, LEFT_ASSOC
| CHECK_PROMOTION
},
1331 /* DIV */ {15, LEFT_ASSOC
| CHECK_PROMOTION
},
1332 /* MOD */ {15, LEFT_ASSOC
| CHECK_PROMOTION
},
1333 /* AND */ {9, LEFT_ASSOC
| CHECK_PROMOTION
},
1334 /* OR */ {7, LEFT_ASSOC
| CHECK_PROMOTION
},
1335 /* XOR */ {8, LEFT_ASSOC
| CHECK_PROMOTION
},
1336 /* RSHIFT */ {13, LEFT_ASSOC
},
1337 /* LSHIFT */ {13, LEFT_ASSOC
},
1339 /* COMPL */ {16, NO_L_OPERAND
},
1340 /* AND_AND */ {6, LEFT_ASSOC
},
1341 /* OR_OR */ {5, LEFT_ASSOC
},
1342 /* Note that QUERY, COLON, and COMMA must have the same precedence.
1343 However, there are some special cases for these in reduce(). */
1345 /* COLON */ {4, LEFT_ASSOC
| CHECK_PROMOTION
},
1346 /* COMMA */ {4, LEFT_ASSOC
},
1347 /* OPEN_PAREN */ {1, NO_L_OPERAND
},
1348 /* CLOSE_PAREN */ {0, 0},
1350 /* EQ_EQ */ {11, LEFT_ASSOC
},
1351 /* NOT_EQ */ {11, LEFT_ASSOC
},
1352 /* GREATER_EQ */ {12, LEFT_ASSOC
| CHECK_PROMOTION
},
1353 /* LESS_EQ */ {12, LEFT_ASSOC
| CHECK_PROMOTION
},
1354 /* UPLUS */ {16, NO_L_OPERAND
},
1355 /* UMINUS */ {16, NO_L_OPERAND
}
1358 /* Parse and evaluate a C expression, reading from PFILE.
1359 Returns the truth value of the expression.
1361 The implementation is an operator precedence parser, i.e. a
1362 bottom-up parser, using a stack for not-yet-reduced tokens.
1364 The stack base is op_stack, and the current stack pointer is 'top'.
1365 There is a stack element for each operator (only), and the most
1366 recently pushed operator is 'top->op'. An operand (value) is
1367 stored in the 'value' field of the stack element of the operator
1368 that precedes it. */
1370 _cpp_parse_expr (cpp_reader
*pfile
, bool is_if
)
1372 struct op
*top
= pfile
->op_stack
;
1373 unsigned int lex_count
;
1374 bool saw_leading_not
, want_value
= true;
1375 location_t virtual_location
= 0;
1377 pfile
->state
.skip_eval
= 0;
1379 /* Set up detection of #if ! defined(). */
1380 pfile
->mi_ind_cmacro
= 0;
1381 saw_leading_not
= false;
1384 /* Lowest priority operator prevents further reductions. */
1392 op
.token
= cpp_get_token_with_location (pfile
, &virtual_location
);
1393 op
.op
= op
.token
->type
;
1394 op
.loc
= virtual_location
;
1398 /* These tokens convert into values. */
1408 SYNTAX_ERROR2_AT (op
.loc
,
1409 "missing binary operator before token \"%s\"",
1410 cpp_token_as_text (pfile
, op
.token
));
1412 top
->value
= eval_token (pfile
, op
.token
, op
.loc
);
1416 saw_leading_not
= lex_count
== 1;
1432 if ((int) op
.op
<= (int) CPP_EQ
|| (int) op
.op
>= (int) CPP_PLUS_EQ
)
1433 SYNTAX_ERROR2_AT (op
.loc
,
1434 "token \"%s\" is not valid in preprocessor expressions",
1435 cpp_token_as_text (pfile
, op
.token
));
1439 /* Check we have a value or operator as appropriate. */
1440 if (optab
[op
.op
].flags
& NO_L_OPERAND
)
1443 SYNTAX_ERROR2_AT (op
.loc
,
1444 "missing binary operator before token \"%s\"",
1445 cpp_token_as_text (pfile
, op
.token
));
1447 else if (want_value
)
1449 /* We want a number (or expression) and haven't got one.
1450 Try to emit a specific diagnostic. */
1451 if (op
.op
== CPP_CLOSE_PAREN
&& top
->op
== CPP_OPEN_PAREN
)
1452 SYNTAX_ERROR_AT (op
.loc
,
1453 "missing expression between '(' and ')'");
1455 if (op
.op
== CPP_EOF
&& top
->op
== CPP_EOF
)
1456 SYNTAX_ERROR2_AT (op
.loc
,
1457 "%s with no expression", is_if
? "#if" : "#elif");
1459 if (top
->op
!= CPP_EOF
&& top
->op
!= CPP_OPEN_PAREN
)
1460 SYNTAX_ERROR2_AT (op
.loc
,
1461 "operator '%s' has no right operand",
1462 cpp_token_as_text (pfile
, top
->token
));
1463 else if (op
.op
== CPP_CLOSE_PAREN
|| op
.op
== CPP_EOF
)
1464 /* Complain about missing paren during reduction. */;
1466 SYNTAX_ERROR2_AT (op
.loc
,
1467 "operator '%s' has no left operand",
1468 cpp_token_as_text (pfile
, op
.token
));
1471 top
= reduce (pfile
, top
, op
.op
);
1475 if (op
.op
== CPP_EOF
)
1480 case CPP_CLOSE_PAREN
:
1483 if (!num_zerop (top
->value
))
1484 pfile
->state
.skip_eval
++;
1488 if (num_zerop (top
->value
))
1489 pfile
->state
.skip_eval
++;
1492 if (top
->op
!= CPP_QUERY
)
1493 SYNTAX_ERROR_AT (op
.loc
,
1494 " ':' without preceding '?'");
1495 if (!num_zerop (top
[-1].value
)) /* Was '?' condition true? */
1496 pfile
->state
.skip_eval
++;
1498 pfile
->state
.skip_eval
--;
1505 /* Check for and handle stack overflow. */
1506 if (++top
== pfile
->op_limit
)
1507 top
= _cpp_expand_op_stack (pfile
);
1510 top
->token
= op
.token
;
1514 /* The controlling macro expression is only valid if we called lex 3
1515 times: <!> <defined expression> and <EOF>. push_conditional ()
1516 checks that we are at top-of-file. */
1517 if (pfile
->mi_ind_cmacro
&& !(saw_leading_not
&& lex_count
== 3))
1518 pfile
->mi_ind_cmacro
= 0;
1520 if (top
!= pfile
->op_stack
)
1522 cpp_error_with_line (pfile
, CPP_DL_ICE
, top
->loc
, 0,
1523 "unbalanced stack in %s",
1524 is_if
? "#if" : "#elif");
1526 return false; /* Return false on syntax error. */
1529 return !num_zerop (top
->value
);
1532 /* Reduce the operator / value stack if possible, in preparation for
1533 pushing operator OP. Returns NULL on error, otherwise the top of
1536 reduce (cpp_reader
*pfile
, struct op
*top
, enum cpp_ttype op
)
1540 if (top
->op
<= CPP_EQ
|| top
->op
> CPP_LAST_CPP_OP
+ 2)
1543 cpp_error (pfile
, CPP_DL_ICE
, "impossible operator '%u'", top
->op
);
1547 if (op
== CPP_OPEN_PAREN
)
1550 /* Decrement the priority of left-associative operators to force a
1551 reduction with operators of otherwise equal priority. */
1552 prio
= optab
[op
].prio
- ((optab
[op
].flags
& LEFT_ASSOC
) != 0);
1553 while (prio
< optab
[top
->op
].prio
)
1555 if (CPP_OPTION (pfile
, warn_num_sign_change
)
1556 && optab
[top
->op
].flags
& CHECK_PROMOTION
)
1557 check_promotion (pfile
, top
);
1565 top
[-1].value
= num_unary_op (pfile
, top
->value
, top
->op
);
1566 top
[-1].loc
= top
->loc
;
1574 top
[-1].value
= num_binary_op (pfile
, top
[-1].value
,
1575 top
->value
, top
->op
);
1576 top
[-1].loc
= top
->loc
;
1581 case CPP_GREATER_EQ
:
1584 = num_inequality_op (pfile
, top
[-1].value
, top
->value
, top
->op
);
1585 top
[-1].loc
= top
->loc
;
1591 = num_equality_op (pfile
, top
[-1].value
, top
->value
, top
->op
);
1592 top
[-1].loc
= top
->loc
;
1599 = num_bitwise_op (pfile
, top
[-1].value
, top
->value
, top
->op
);
1600 top
[-1].loc
= top
->loc
;
1604 top
[-1].value
= num_mul (pfile
, top
[-1].value
, top
->value
);
1605 top
[-1].loc
= top
->loc
;
1610 top
[-1].value
= num_div_op (pfile
, top
[-1].value
,
1611 top
->value
, top
->op
, top
->loc
);
1612 top
[-1].loc
= top
->loc
;
1617 if (!num_zerop (top
->value
))
1618 pfile
->state
.skip_eval
--;
1619 top
->value
.low
= (!num_zerop (top
->value
)
1620 || !num_zerop (top
[1].value
));
1621 top
->value
.high
= 0;
1622 top
->value
.unsignedp
= false;
1623 top
->value
.overflow
= false;
1624 top
->loc
= top
[1].loc
;
1629 if (num_zerop (top
->value
))
1630 pfile
->state
.skip_eval
--;
1631 top
->value
.low
= (!num_zerop (top
->value
)
1632 && !num_zerop (top
[1].value
));
1633 top
->value
.high
= 0;
1634 top
->value
.unsignedp
= false;
1635 top
->value
.overflow
= false;
1636 top
->loc
= top
[1].loc
;
1639 case CPP_OPEN_PAREN
:
1640 if (op
!= CPP_CLOSE_PAREN
)
1642 cpp_error_with_line (pfile
, CPP_DL_ERROR
,
1643 top
->token
->src_loc
,
1644 0, "missing ')' in expression");
1648 top
->value
= top
[1].value
;
1649 top
->loc
= top
[1].loc
;
1654 if (!num_zerop (top
->value
))
1656 pfile
->state
.skip_eval
--;
1657 top
->value
= top
[1].value
;
1658 top
->loc
= top
[1].loc
;
1662 top
->value
= top
[2].value
;
1663 top
->loc
= top
[2].loc
;
1665 top
->value
.unsignedp
= (top
[1].value
.unsignedp
1666 || top
[2].value
.unsignedp
);
1670 /* COMMA and COLON should not reduce a QUERY operator. */
1671 if (op
== CPP_COMMA
|| op
== CPP_COLON
)
1673 cpp_error (pfile
, CPP_DL_ERROR
, "'?' without following ':'");
1681 if (top
->value
.overflow
&& !pfile
->state
.skip_eval
)
1682 cpp_error (pfile
, CPP_DL_PEDWARN
,
1683 "integer overflow in preprocessor expression");
1686 if (op
== CPP_CLOSE_PAREN
)
1688 cpp_error (pfile
, CPP_DL_ERROR
, "missing '(' in expression");
1695 /* Returns the position of the old top of stack after expansion. */
1697 _cpp_expand_op_stack (cpp_reader
*pfile
)
1699 size_t old_size
= (size_t) (pfile
->op_limit
- pfile
->op_stack
);
1700 size_t new_size
= old_size
* 2 + 20;
1702 pfile
->op_stack
= XRESIZEVEC (struct op
, pfile
->op_stack
, new_size
);
1703 pfile
->op_limit
= pfile
->op_stack
+ new_size
;
1705 return pfile
->op_stack
+ old_size
;
1708 /* Emits a warning if the effective sign of either operand of OP
1709 changes because of integer promotions. */
1711 check_promotion (cpp_reader
*pfile
, const struct op
*op
)
1713 if (op
->value
.unsignedp
== op
[-1].value
.unsignedp
)
1716 if (op
->value
.unsignedp
)
1718 if (!num_positive (op
[-1].value
, CPP_OPTION (pfile
, precision
)))
1719 cpp_error_with_line (pfile
, CPP_DL_WARNING
, op
[-1].loc
, 0,
1720 "the left operand of \"%s\" changes sign when promoted",
1721 cpp_token_as_text (pfile
, op
->token
));
1723 else if (!num_positive (op
->value
, CPP_OPTION (pfile
, precision
)))
1724 cpp_error_with_line (pfile
, CPP_DL_WARNING
, op
->loc
, 0,
1725 "the right operand of \"%s\" changes sign when promoted",
1726 cpp_token_as_text (pfile
, op
->token
));
1729 /* Clears the unused high order bits of the number pointed to by PNUM. */
1731 num_trim (cpp_num num
, size_t precision
)
1733 if (precision
> PART_PRECISION
)
1735 precision
-= PART_PRECISION
;
1736 if (precision
< PART_PRECISION
)
1737 num
.high
&= ((cpp_num_part
) 1 << precision
) - 1;
1741 if (precision
< PART_PRECISION
)
1742 num
.low
&= ((cpp_num_part
) 1 << precision
) - 1;
1749 /* True iff A (presumed signed) >= 0. */
1751 num_positive (cpp_num num
, size_t precision
)
1753 if (precision
> PART_PRECISION
)
1755 precision
-= PART_PRECISION
;
1756 return (num
.high
& (cpp_num_part
) 1 << (precision
- 1)) == 0;
1759 return (num
.low
& (cpp_num_part
) 1 << (precision
- 1)) == 0;
1762 /* Sign extend a number, with PRECISION significant bits and all
1763 others assumed clear, to fill out a cpp_num structure. */
1765 cpp_num_sign_extend (cpp_num num
, size_t precision
)
1769 if (precision
> PART_PRECISION
)
1771 precision
-= PART_PRECISION
;
1772 if (precision
< PART_PRECISION
1773 && (num
.high
& (cpp_num_part
) 1 << (precision
- 1)))
1774 num
.high
|= ~(~(cpp_num_part
) 0 >> (PART_PRECISION
- precision
));
1776 else if (num
.low
& (cpp_num_part
) 1 << (precision
- 1))
1778 if (precision
< PART_PRECISION
)
1779 num
.low
|= ~(~(cpp_num_part
) 0 >> (PART_PRECISION
- precision
));
1780 num
.high
= ~(cpp_num_part
) 0;
1787 /* Returns the negative of NUM. */
1789 num_negate (cpp_num num
, size_t precision
)
1794 num
.high
= ~num
.high
;
1798 num
= num_trim (num
, precision
);
1799 num
.overflow
= (!num
.unsignedp
&& num_eq (num
, copy
) && !num_zerop (num
));
1804 /* Returns true if A >= B. */
1806 num_greater_eq (cpp_num pa
, cpp_num pb
, size_t precision
)
1810 unsignedp
= pa
.unsignedp
|| pb
.unsignedp
;
1814 /* Both numbers have signed type. If they are of different
1815 sign, the answer is the sign of A. */
1816 unsignedp
= num_positive (pa
, precision
);
1818 if (unsignedp
!= num_positive (pb
, precision
))
1821 /* Otherwise we can do an unsigned comparison. */
1824 return (pa
.high
> pb
.high
) || (pa
.high
== pb
.high
&& pa
.low
>= pb
.low
);
1827 /* Returns LHS OP RHS, where OP is a bit-wise operation. */
1829 num_bitwise_op (cpp_reader
*pfile ATTRIBUTE_UNUSED
,
1830 cpp_num lhs
, cpp_num rhs
, enum cpp_ttype op
)
1832 lhs
.overflow
= false;
1833 lhs
.unsignedp
= lhs
.unsignedp
|| rhs
.unsignedp
;
1835 /* As excess precision is zeroed, there is no need to num_trim () as
1836 these operations cannot introduce a set bit there. */
1840 lhs
.high
&= rhs
.high
;
1842 else if (op
== CPP_OR
)
1845 lhs
.high
|= rhs
.high
;
1850 lhs
.high
^= rhs
.high
;
1856 /* Returns LHS OP RHS, where OP is an inequality. */
1858 num_inequality_op (cpp_reader
*pfile
, cpp_num lhs
, cpp_num rhs
,
1861 bool gte
= num_greater_eq (lhs
, rhs
, CPP_OPTION (pfile
, precision
));
1863 if (op
== CPP_GREATER_EQ
)
1865 else if (op
== CPP_LESS
)
1867 else if (op
== CPP_GREATER
)
1868 lhs
.low
= gte
&& !num_eq (lhs
, rhs
);
1869 else /* CPP_LESS_EQ. */
1870 lhs
.low
= !gte
|| num_eq (lhs
, rhs
);
1873 lhs
.overflow
= false;
1874 lhs
.unsignedp
= false;
1878 /* Returns LHS OP RHS, where OP is == or !=. */
1880 num_equality_op (cpp_reader
*pfile ATTRIBUTE_UNUSED
,
1881 cpp_num lhs
, cpp_num rhs
, enum cpp_ttype op
)
1883 /* Work around a 3.0.4 bug; see PR 6950. */
1884 bool eq
= num_eq (lhs
, rhs
);
1885 if (op
== CPP_NOT_EQ
)
1889 lhs
.overflow
= false;
1890 lhs
.unsignedp
= false;
1894 /* Shift NUM, of width PRECISION, right by N bits. */
1896 num_rshift (cpp_num num
, size_t precision
, size_t n
)
1898 cpp_num_part sign_mask
;
1899 bool x
= num_positive (num
, precision
);
1901 if (num
.unsignedp
|| x
)
1904 sign_mask
= ~(cpp_num_part
) 0;
1907 num
.high
= num
.low
= sign_mask
;
1911 if (precision
< PART_PRECISION
)
1912 num
.high
= sign_mask
, num
.low
|= sign_mask
<< precision
;
1913 else if (precision
< 2 * PART_PRECISION
)
1914 num
.high
|= sign_mask
<< (precision
- PART_PRECISION
);
1916 if (n
>= PART_PRECISION
)
1918 n
-= PART_PRECISION
;
1920 num
.high
= sign_mask
;
1925 num
.low
= (num
.low
>> n
) | (num
.high
<< (PART_PRECISION
- n
));
1926 num
.high
= (num
.high
>> n
) | (sign_mask
<< (PART_PRECISION
- n
));
1930 num
= num_trim (num
, precision
);
1931 num
.overflow
= false;
1935 /* Shift NUM, of width PRECISION, left by N bits. */
1937 num_lshift (cpp_num num
, size_t precision
, size_t n
)
1941 num
.overflow
= !num
.unsignedp
&& !num_zerop (num
);
1942 num
.high
= num
.low
= 0;
1946 cpp_num orig
, maybe_orig
;
1950 if (m
>= PART_PRECISION
)
1952 m
-= PART_PRECISION
;
1958 num
.high
= (num
.high
<< m
) | (num
.low
>> (PART_PRECISION
- m
));
1961 num
= num_trim (num
, precision
);
1964 num
.overflow
= false;
1967 maybe_orig
= num_rshift (num
, precision
, n
);
1968 num
.overflow
= !num_eq (orig
, maybe_orig
);
1975 /* The four unary operators: +, -, ! and ~. */
1977 num_unary_op (cpp_reader
*pfile
, cpp_num num
, enum cpp_ttype op
)
1982 if (CPP_WTRADITIONAL (pfile
) && !pfile
->state
.skip_eval
)
1983 cpp_warning (pfile
, CPP_W_TRADITIONAL
,
1984 "traditional C rejects the unary plus operator");
1985 num
.overflow
= false;
1989 num
= num_negate (num
, CPP_OPTION (pfile
, precision
));
1993 num
.high
= ~num
.high
;
1995 num
= num_trim (num
, CPP_OPTION (pfile
, precision
));
1996 num
.overflow
= false;
1999 default: /* case CPP_NOT: */
2000 num
.low
= num_zerop (num
);
2002 num
.overflow
= false;
2003 num
.unsignedp
= false;
2010 /* The various binary operators. */
2012 num_binary_op (cpp_reader
*pfile
, cpp_num lhs
, cpp_num rhs
, enum cpp_ttype op
)
2015 size_t precision
= CPP_OPTION (pfile
, precision
);
2023 if (!rhs
.unsignedp
&& !num_positive (rhs
, precision
))
2025 /* A negative shift is a positive shift the other way. */
2026 if (op
== CPP_LSHIFT
)
2030 rhs
= num_negate (rhs
, precision
);
2033 n
= ~0; /* Maximal. */
2036 if (op
== CPP_LSHIFT
)
2037 lhs
= num_lshift (lhs
, precision
, n
);
2039 lhs
= num_rshift (lhs
, precision
, n
);
2044 result
.low
= lhs
.low
- rhs
.low
;
2045 result
.high
= lhs
.high
- rhs
.high
;
2046 if (result
.low
> lhs
.low
)
2048 result
.unsignedp
= lhs
.unsignedp
|| rhs
.unsignedp
;
2049 result
.overflow
= false;
2051 result
= num_trim (result
, precision
);
2052 if (!result
.unsignedp
)
2054 bool lhsp
= num_positive (lhs
, precision
);
2055 result
.overflow
= (lhsp
!= num_positive (rhs
, precision
)
2056 && lhsp
!= num_positive (result
, precision
));
2061 result
.low
= lhs
.low
+ rhs
.low
;
2062 result
.high
= lhs
.high
+ rhs
.high
;
2063 if (result
.low
< lhs
.low
)
2065 result
.unsignedp
= lhs
.unsignedp
|| rhs
.unsignedp
;
2066 result
.overflow
= false;
2068 result
= num_trim (result
, precision
);
2069 if (!result
.unsignedp
)
2071 bool lhsp
= num_positive (lhs
, precision
);
2072 result
.overflow
= (lhsp
== num_positive (rhs
, precision
)
2073 && lhsp
!= num_positive (result
, precision
));
2078 default: /* case CPP_COMMA: */
2079 if (CPP_PEDANTIC (pfile
) && (!CPP_OPTION (pfile
, c99
)
2080 || !pfile
->state
.skip_eval
))
2081 cpp_pedwarning (pfile
, CPP_W_PEDANTIC
,
2082 "comma operator in operand of #if");
2090 /* Multiplies two unsigned cpp_num_parts to give a cpp_num. This
2093 num_part_mul (cpp_num_part lhs
, cpp_num_part rhs
)
2096 cpp_num_part middle
[2], temp
;
2098 result
.low
= LOW_PART (lhs
) * LOW_PART (rhs
);
2099 result
.high
= HIGH_PART (lhs
) * HIGH_PART (rhs
);
2101 middle
[0] = LOW_PART (lhs
) * HIGH_PART (rhs
);
2102 middle
[1] = HIGH_PART (lhs
) * LOW_PART (rhs
);
2105 result
.low
+= LOW_PART (middle
[0]) << (PART_PRECISION
/ 2);
2106 if (result
.low
< temp
)
2110 result
.low
+= LOW_PART (middle
[1]) << (PART_PRECISION
/ 2);
2111 if (result
.low
< temp
)
2114 result
.high
+= HIGH_PART (middle
[0]);
2115 result
.high
+= HIGH_PART (middle
[1]);
2116 result
.unsignedp
= true;
2117 result
.overflow
= false;
2122 /* Multiply two preprocessing numbers. */
2124 num_mul (cpp_reader
*pfile
, cpp_num lhs
, cpp_num rhs
)
2126 cpp_num result
, temp
;
2127 bool unsignedp
= lhs
.unsignedp
|| rhs
.unsignedp
;
2128 bool overflow
, negate
= false;
2129 size_t precision
= CPP_OPTION (pfile
, precision
);
2131 /* Prepare for unsigned multiplication. */
2134 if (!num_positive (lhs
, precision
))
2135 negate
= !negate
, lhs
= num_negate (lhs
, precision
);
2136 if (!num_positive (rhs
, precision
))
2137 negate
= !negate
, rhs
= num_negate (rhs
, precision
);
2140 overflow
= lhs
.high
&& rhs
.high
;
2141 result
= num_part_mul (lhs
.low
, rhs
.low
);
2143 temp
= num_part_mul (lhs
.high
, rhs
.low
);
2144 result
.high
+= temp
.low
;
2148 temp
= num_part_mul (lhs
.low
, rhs
.high
);
2149 result
.high
+= temp
.low
;
2153 temp
.low
= result
.low
, temp
.high
= result
.high
;
2154 result
= num_trim (result
, precision
);
2155 if (!num_eq (result
, temp
))
2159 result
= num_negate (result
, precision
);
2162 result
.overflow
= false;
2164 result
.overflow
= overflow
|| (num_positive (result
, precision
) ^ !negate
2165 && !num_zerop (result
));
2166 result
.unsignedp
= unsignedp
;
2171 /* Divide two preprocessing numbers, LHS and RHS, returning the answer
2172 or the remainder depending upon OP. LOCATION is the source location
2173 of this operator (for diagnostics). */
2176 num_div_op (cpp_reader
*pfile
, cpp_num lhs
, cpp_num rhs
, enum cpp_ttype op
,
2177 location_t location
)
2179 cpp_num result
, sub
;
2181 bool unsignedp
= lhs
.unsignedp
|| rhs
.unsignedp
;
2182 bool negate
= false, lhs_neg
= false;
2183 size_t i
, precision
= CPP_OPTION (pfile
, precision
);
2185 /* Prepare for unsigned division. */
2188 if (!num_positive (lhs
, precision
))
2189 negate
= !negate
, lhs_neg
= true, lhs
= num_negate (lhs
, precision
);
2190 if (!num_positive (rhs
, precision
))
2191 negate
= !negate
, rhs
= num_negate (rhs
, precision
);
2194 /* Find the high bit. */
2198 mask
= (cpp_num_part
) 1 << (i
- PART_PRECISION
);
2199 for (; ; i
--, mask
>>= 1)
2200 if (rhs
.high
& mask
)
2205 if (precision
> PART_PRECISION
)
2206 i
= precision
- PART_PRECISION
- 1;
2209 mask
= (cpp_num_part
) 1 << i
;
2210 for (; ; i
--, mask
>>= 1)
2216 if (!pfile
->state
.skip_eval
)
2217 cpp_error_with_line (pfile
, CPP_DL_ERROR
, location
, 0,
2218 "division by zero in #if");
2219 lhs
.unsignedp
= unsignedp
;
2223 /* First nonzero bit of RHS is bit I. Do naive division by
2224 shifting the RHS fully left, and subtracting from LHS if LHS is
2225 at least as big, and then repeating but with one less shift.
2226 This is not very efficient, but is easy to understand. */
2228 rhs
.unsignedp
= true;
2229 lhs
.unsignedp
= true;
2230 i
= precision
- i
- 1;
2231 sub
= num_lshift (rhs
, precision
, i
);
2233 result
.high
= result
.low
= 0;
2236 if (num_greater_eq (lhs
, sub
, precision
))
2238 lhs
= num_binary_op (pfile
, lhs
, sub
, CPP_MINUS
);
2239 if (i
>= PART_PRECISION
)
2240 result
.high
|= (cpp_num_part
) 1 << (i
- PART_PRECISION
);
2242 result
.low
|= (cpp_num_part
) 1 << i
;
2246 sub
.low
= (sub
.low
>> 1) | (sub
.high
<< (PART_PRECISION
- 1));
2250 /* We divide so that the remainder has the sign of the LHS. */
2253 result
.unsignedp
= unsignedp
;
2254 result
.overflow
= false;
2258 result
= num_negate (result
, precision
);
2259 result
.overflow
= (num_positive (result
, precision
) ^ !negate
2260 && !num_zerop (result
));
2267 lhs
.unsignedp
= unsignedp
;
2268 lhs
.overflow
= false;
2270 lhs
= num_negate (lhs
, precision
);