1 /* Parse C expressions for cpplib.
2    Copyright (C) 1987-2016 Free Software Foundation, Inc.
3    Contributed by Per Bothner, 1994.
4 
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
8 later version.
9 
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.
14 
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/>.  */
18 
19 #include "config.h"
20 #include "system.h"
21 #include "cpplib.h"
22 #include "internal.h"
23 
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))
28 
29 struct op
30 {
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.         */
34   enum cpp_ttype op;
35 };
36 
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);
44 
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,
50 				  enum cpp_ttype);
51 static cpp_num num_equality_op (cpp_reader *, cpp_num, cpp_num,
52 				enum cpp_ttype);
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,
55 			   source_location);
56 static cpp_num num_lshift (cpp_num, size_t, size_t);
57 static cpp_num num_rshift (cpp_num, size_t, size_t);
58 
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 *);
66 
67 static cpp_num parse_has_include (cpp_reader *, enum include_type);
68 
69 /* Token type abuse to create unary plus and minus operators.  */
70 #define CPP_UPLUS ((enum cpp_ttype) (CPP_LAST_CPP_OP + 1))
71 #define CPP_UMINUS ((enum cpp_ttype) (CPP_LAST_CPP_OP + 2))
72 
73 /* With -O2, gcc appears to produce nice code, moving the error
74    message load and subsequent jump completely out of the main path.  */
75 #define SYNTAX_ERROR(msgid) \
76   do { cpp_error (pfile, CPP_DL_ERROR, msgid); goto syntax_error; } while(0)
77 #define SYNTAX_ERROR2(msgid, arg) \
78   do { cpp_error (pfile, CPP_DL_ERROR, msgid, arg); goto syntax_error; } \
79   while(0)
80 #define SYNTAX_ERROR_AT(loc, msgid) \
81   do { cpp_error_with_line (pfile, CPP_DL_ERROR, (loc), 0, msgid); goto syntax_error; } \
82   while(0)
83 #define SYNTAX_ERROR2_AT(loc, msgid, arg)					\
84   do { cpp_error_with_line (pfile, CPP_DL_ERROR, (loc), 0, msgid, arg); goto syntax_error; } \
85   while(0)
86 
87 /* Subroutine of cpp_classify_number.  S points to a float suffix of
88    length LEN, possibly zero.  Returns 0 for an invalid suffix, or a
89    flag vector describing the suffix.  */
90 static unsigned int
interpret_float_suffix(cpp_reader * pfile,const uchar * s,size_t len)91 interpret_float_suffix (cpp_reader *pfile, const uchar *s, size_t len)
92 {
93   size_t flags;
94   size_t f, d, l, w, q, i;
95 
96   flags = 0;
97   f = d = l = w = q = i = 0;
98 
99   /* Process decimal float suffixes, which are two letters starting
100      with d or D.  Order and case are significant.  */
101   if (len == 2 && (*s == 'd' || *s == 'D'))
102     {
103       bool uppercase = (*s == 'D');
104       switch (s[1])
105       {
106       case 'f': return (!uppercase ? (CPP_N_DFLOAT | CPP_N_SMALL): 0); break;
107       case 'F': return (uppercase ? (CPP_N_DFLOAT | CPP_N_SMALL) : 0); break;
108       case 'd': return (!uppercase ? (CPP_N_DFLOAT | CPP_N_MEDIUM): 0); break;
109       case 'D': return (uppercase ? (CPP_N_DFLOAT | CPP_N_MEDIUM) : 0); break;
110       case 'l': return (!uppercase ? (CPP_N_DFLOAT | CPP_N_LARGE) : 0); break;
111       case 'L': return (uppercase ? (CPP_N_DFLOAT | CPP_N_LARGE) : 0); break;
112       default:
113 	/* Additional two-character suffixes beginning with D are not
114 	   for decimal float constants.  */
115 	break;
116       }
117     }
118 
119   if (CPP_OPTION (pfile, ext_numeric_literals))
120     {
121       /* Recognize a fixed-point suffix.  */
122       if (len != 0)
123 	switch (s[len-1])
124 	  {
125 	  case 'k': case 'K': flags = CPP_N_ACCUM; break;
126 	  case 'r': case 'R': flags = CPP_N_FRACT; break;
127 	  default: break;
128 	  }
129 
130       /* Continue processing a fixed-point suffix.  The suffix is case
131 	 insensitive except for ll or LL.  Order is significant.  */
132       if (flags)
133 	{
134 	  if (len == 1)
135 	    return flags;
136 	  len--;
137 
138 	  if (*s == 'u' || *s == 'U')
139 	    {
140 	      flags |= CPP_N_UNSIGNED;
141 	      if (len == 1)
142 		return flags;
143 	      len--;
144 	      s++;
145             }
146 
147 	  switch (*s)
148 	  {
149 	  case 'h': case 'H':
150 	    if (len == 1)
151 	      return flags |= CPP_N_SMALL;
152 	    break;
153 	  case 'l':
154 	    if (len == 1)
155 	      return flags |= CPP_N_MEDIUM;
156 	    if (len == 2 && s[1] == 'l')
157 	      return flags |= CPP_N_LARGE;
158 	    break;
159 	  case 'L':
160 	    if (len == 1)
161 	      return flags |= CPP_N_MEDIUM;
162 	    if (len == 2 && s[1] == 'L')
163 	      return flags |= CPP_N_LARGE;
164 	    break;
165 	  default:
166 	    break;
167 	  }
168 	  /* Anything left at this point is invalid.  */
169 	  return 0;
170 	}
171     }
172 
173   /* In any remaining valid suffix, the case and order don't matter.  */
174   while (len--)
175     switch (s[len])
176       {
177       case 'f': case 'F': f++; break;
178       case 'd': case 'D': d++; break;
179       case 'l': case 'L': l++; break;
180       case 'w': case 'W': w++; break;
181       case 'q': case 'Q': q++; break;
182       case 'i': case 'I':
183       case 'j': case 'J': i++; break;
184       default:
185 	return 0;
186       }
187 
188   if (f + d + l + w + q > 1 || i > 1)
189     return 0;
190 
191   if (i && !CPP_OPTION (pfile, ext_numeric_literals))
192     return 0;
193 
194   if ((w || q) && !CPP_OPTION (pfile, ext_numeric_literals))
195     return 0;
196 
197   return ((i ? CPP_N_IMAGINARY : 0)
198 	  | (f ? CPP_N_SMALL :
199 	     d ? CPP_N_MEDIUM :
200 	     l ? CPP_N_LARGE :
201 	     w ? CPP_N_MD_W :
202 	     q ? CPP_N_MD_Q : CPP_N_DEFAULT));
203 }
204 
205 /* Return the classification flags for a float suffix.  */
206 unsigned int
cpp_interpret_float_suffix(cpp_reader * pfile,const char * s,size_t len)207 cpp_interpret_float_suffix (cpp_reader *pfile, const char *s, size_t len)
208 {
209   return interpret_float_suffix (pfile, (const unsigned char *)s, len);
210 }
211 
212 /* Subroutine of cpp_classify_number.  S points to an integer suffix
213    of length LEN, possibly zero. Returns 0 for an invalid suffix, or a
214    flag vector describing the suffix.  */
215 static unsigned int
interpret_int_suffix(cpp_reader * pfile,const uchar * s,size_t len)216 interpret_int_suffix (cpp_reader *pfile, const uchar *s, size_t len)
217 {
218   size_t u, l, i;
219 
220   u = l = i = 0;
221 
222   while (len--)
223     switch (s[len])
224       {
225       case 'u': case 'U':	u++; break;
226       case 'i': case 'I':
227       case 'j': case 'J':	i++; break;
228       case 'l': case 'L':	l++;
229 	/* If there are two Ls, they must be adjacent and the same case.  */
230 	if (l == 2 && s[len] != s[len + 1])
231 	  return 0;
232 	break;
233       default:
234 	return 0;
235       }
236 
237   if (l > 2 || u > 1 || i > 1)
238     return 0;
239 
240   if (i && !CPP_OPTION (pfile, ext_numeric_literals))
241     return 0;
242 
243   return ((i ? CPP_N_IMAGINARY : 0)
244 	  | (u ? CPP_N_UNSIGNED : 0)
245 	  | ((l == 0) ? CPP_N_SMALL
246 	     : (l == 1) ? CPP_N_MEDIUM : CPP_N_LARGE));
247 }
248 
249 /* Return the classification flags for an int suffix.  */
250 unsigned int
cpp_interpret_int_suffix(cpp_reader * pfile,const char * s,size_t len)251 cpp_interpret_int_suffix (cpp_reader *pfile, const char *s, size_t len)
252 {
253   return interpret_int_suffix (pfile, (const unsigned char *)s, len);
254 }
255 
256 /* Return the string type corresponding to the the input user-defined string
257    literal type.  If the input type is not a user-defined string literal
258    type return the input type.  */
259 enum cpp_ttype
cpp_userdef_string_remove_type(enum cpp_ttype type)260 cpp_userdef_string_remove_type (enum cpp_ttype type)
261 {
262   if (type == CPP_STRING_USERDEF)
263     return CPP_STRING;
264   else if (type == CPP_WSTRING_USERDEF)
265     return CPP_WSTRING;
266   else if (type == CPP_STRING16_USERDEF)
267     return CPP_STRING16;
268   else if (type == CPP_STRING32_USERDEF)
269     return CPP_STRING32;
270   else if (type == CPP_UTF8STRING_USERDEF)
271     return CPP_UTF8STRING;
272   else
273     return type;
274 }
275 
276 /* Return the user-defined string literal type corresponding to the input
277    string type.  If the input type is not a string type return the input
278    type.  */
279 enum cpp_ttype
cpp_userdef_string_add_type(enum cpp_ttype type)280 cpp_userdef_string_add_type (enum cpp_ttype type)
281 {
282   if (type == CPP_STRING)
283     return CPP_STRING_USERDEF;
284   else if (type == CPP_WSTRING)
285     return CPP_WSTRING_USERDEF;
286   else if (type == CPP_STRING16)
287     return CPP_STRING16_USERDEF;
288   else if (type == CPP_STRING32)
289     return CPP_STRING32_USERDEF;
290   else if (type == CPP_UTF8STRING)
291     return CPP_UTF8STRING_USERDEF;
292   else
293     return type;
294 }
295 
296 /* Return the char type corresponding to the the input user-defined char
297    literal type.  If the input type is not a user-defined char literal
298    type return the input type.  */
299 enum cpp_ttype
cpp_userdef_char_remove_type(enum cpp_ttype type)300 cpp_userdef_char_remove_type (enum cpp_ttype type)
301 {
302   if (type == CPP_CHAR_USERDEF)
303     return CPP_CHAR;
304   else if (type == CPP_WCHAR_USERDEF)
305     return CPP_WCHAR;
306   else if (type == CPP_CHAR16_USERDEF)
307     return CPP_CHAR16;
308   else if (type == CPP_CHAR32_USERDEF)
309     return CPP_CHAR32;
310   else if (type == CPP_UTF8CHAR_USERDEF)
311     return CPP_UTF8CHAR;
312   else
313     return type;
314 }
315 
316 /* Return the user-defined char literal type corresponding to the input
317    char type.  If the input type is not a char type return the input
318    type.  */
319 enum cpp_ttype
cpp_userdef_char_add_type(enum cpp_ttype type)320 cpp_userdef_char_add_type (enum cpp_ttype type)
321 {
322   if (type == CPP_CHAR)
323     return CPP_CHAR_USERDEF;
324   else if (type == CPP_WCHAR)
325     return CPP_WCHAR_USERDEF;
326   else if (type == CPP_CHAR16)
327     return CPP_CHAR16_USERDEF;
328   else if (type == CPP_CHAR32)
329     return CPP_CHAR32_USERDEF;
330   else if (type == CPP_UTF8CHAR)
331     return CPP_UTF8CHAR_USERDEF;
332   else
333     return type;
334 }
335 
336 /* Return true if the token type is a user-defined string literal.  */
337 bool
cpp_userdef_string_p(enum cpp_ttype type)338 cpp_userdef_string_p (enum cpp_ttype type)
339 {
340   if (type == CPP_STRING_USERDEF
341    || type == CPP_WSTRING_USERDEF
342    || type == CPP_STRING16_USERDEF
343    || type == CPP_STRING32_USERDEF
344    || type == CPP_UTF8STRING_USERDEF)
345     return true;
346   else
347     return false;
348 }
349 
350 /* Return true if the token type is a user-defined char literal.  */
351 bool
cpp_userdef_char_p(enum cpp_ttype type)352 cpp_userdef_char_p (enum cpp_ttype type)
353 {
354   if (type == CPP_CHAR_USERDEF
355    || type == CPP_WCHAR_USERDEF
356    || type == CPP_CHAR16_USERDEF
357    || type == CPP_CHAR32_USERDEF
358    || type == CPP_UTF8CHAR_USERDEF)
359     return true;
360   else
361     return false;
362 }
363 
364 /* Extract the suffix from a user-defined literal string or char.  */
365 const char *
cpp_get_userdef_suffix(const cpp_token * tok)366 cpp_get_userdef_suffix (const cpp_token *tok)
367 {
368   unsigned int len = tok->val.str.len;
369   const char *text = (const char *)tok->val.str.text;
370   char delim;
371   unsigned int i;
372   for (i = 0; i < len; ++i)
373     if (text[i] == '\'' || text[i] == '"')
374       break;
375   if (i == len)
376     return text + len;
377   delim = text[i];
378   for (i = len; i > 0; --i)
379     if (text[i - 1] == delim)
380       break;
381   return text + i;
382 }
383 
384 /* Categorize numeric constants according to their field (integer,
385    floating point, or invalid), radix (decimal, octal, hexadecimal),
386    and type suffixes.
387 
388    TOKEN is the token that represents the numeric constant to
389    classify.
390 
391    In C++0X if UD_SUFFIX is non null it will be assigned
392    any unrecognized suffix for a user-defined literal.
393 
394    VIRTUAL_LOCATION is the virtual location for TOKEN.  */
395 unsigned int
cpp_classify_number(cpp_reader * pfile,const cpp_token * token,const char ** ud_suffix,source_location virtual_location)396 cpp_classify_number (cpp_reader *pfile, const cpp_token *token,
397 		     const char **ud_suffix, source_location virtual_location)
398 {
399   const uchar *str = token->val.str.text;
400   const uchar *limit;
401   unsigned int max_digit, result, radix;
402   enum {NOT_FLOAT = 0, AFTER_POINT, AFTER_EXPON} float_flag;
403   bool seen_digit;
404   bool seen_digit_sep;
405 
406   if (ud_suffix)
407     *ud_suffix = NULL;
408 
409   /* If the lexer has done its job, length one can only be a single
410      digit.  Fast-path this very common case.  */
411   if (token->val.str.len == 1)
412     return CPP_N_INTEGER | CPP_N_SMALL | CPP_N_DECIMAL;
413 
414   limit = str + token->val.str.len;
415   float_flag = NOT_FLOAT;
416   max_digit = 0;
417   radix = 10;
418   seen_digit = false;
419   seen_digit_sep = false;
420 
421   /* First, interpret the radix.  */
422   if (*str == '0')
423     {
424       radix = 8;
425       str++;
426 
427       /* Require at least one hex digit to classify it as hex.  */
428       if (*str == 'x' || *str == 'X')
429 	{
430 	  if (str[1] == '.' || ISXDIGIT (str[1]))
431 	    {
432 	      radix = 16;
433 	      str++;
434 	    }
435 	  else if (DIGIT_SEP (str[1]))
436 	    SYNTAX_ERROR_AT (virtual_location,
437 			     "digit separator after base indicator");
438 	}
439       else if (*str == 'b' || *str == 'B')
440 	{
441 	  if (str[1] == '0' || str[1] == '1')
442 	    {
443 	      radix = 2;
444 	      str++;
445 	    }
446 	  else if (DIGIT_SEP (str[1]))
447 	    SYNTAX_ERROR_AT (virtual_location,
448 			     "digit separator after base indicator");
449 	}
450     }
451 
452   /* Now scan for a well-formed integer or float.  */
453   for (;;)
454     {
455       unsigned int c = *str++;
456 
457       if (ISDIGIT (c) || (ISXDIGIT (c) && radix == 16))
458 	{
459 	  seen_digit_sep = false;
460 	  seen_digit = true;
461 	  c = hex_value (c);
462 	  if (c > max_digit)
463 	    max_digit = c;
464 	}
465       else if (DIGIT_SEP (c))
466 	{
467 	  if (seen_digit_sep)
468 	    SYNTAX_ERROR_AT (virtual_location, "adjacent digit separators");
469 	  seen_digit_sep = true;
470 	}
471       else if (c == '.')
472 	{
473 	  if (seen_digit_sep || DIGIT_SEP (*str))
474 	    SYNTAX_ERROR_AT (virtual_location,
475 			     "digit separator adjacent to decimal point");
476 	  seen_digit_sep = false;
477 	  if (float_flag == NOT_FLOAT)
478 	    float_flag = AFTER_POINT;
479 	  else
480 	    SYNTAX_ERROR_AT (virtual_location,
481 			     "too many decimal points in number");
482 	}
483       else if ((radix <= 10 && (c == 'e' || c == 'E'))
484 	       || (radix == 16 && (c == 'p' || c == 'P')))
485 	{
486 	  if (seen_digit_sep || DIGIT_SEP (*str))
487 	    SYNTAX_ERROR_AT (virtual_location,
488 			     "digit separator adjacent to exponent");
489 	  float_flag = AFTER_EXPON;
490 	  break;
491 	}
492       else
493 	{
494 	  /* Start of suffix.  */
495 	  str--;
496 	  break;
497 	}
498     }
499 
500   if (seen_digit_sep && float_flag != AFTER_EXPON)
501     SYNTAX_ERROR_AT (virtual_location,
502 		     "digit separator outside digit sequence");
503 
504   /* The suffix may be for decimal fixed-point constants without exponent.  */
505   if (radix != 16 && float_flag == NOT_FLOAT)
506     {
507       result = interpret_float_suffix (pfile, str, limit - str);
508       if ((result & CPP_N_FRACT) || (result & CPP_N_ACCUM))
509 	{
510 	  result |= CPP_N_FLOATING;
511 	  /* We need to restore the radix to 10, if the radix is 8.  */
512 	  if (radix == 8)
513 	    radix = 10;
514 
515 	  if (CPP_PEDANTIC (pfile))
516 	    cpp_error_with_line (pfile, CPP_DL_PEDWARN, virtual_location, 0,
517 				 "fixed-point constants are a GCC extension");
518 	  goto syntax_ok;
519 	}
520       else
521 	result = 0;
522     }
523 
524   if (float_flag != NOT_FLOAT && radix == 8)
525     radix = 10;
526 
527   if (max_digit >= radix)
528     {
529       if (radix == 2)
530 	SYNTAX_ERROR2_AT (virtual_location,
531 			  "invalid digit \"%c\" in binary constant", '0' + max_digit);
532       else
533 	SYNTAX_ERROR2_AT (virtual_location,
534 			  "invalid digit \"%c\" in octal constant", '0' + max_digit);
535     }
536 
537   if (float_flag != NOT_FLOAT)
538     {
539       if (radix == 2)
540 	{
541 	  cpp_error_with_line (pfile, CPP_DL_ERROR, virtual_location, 0,
542 			       "invalid prefix \"0b\" for floating constant");
543 	  return CPP_N_INVALID;
544 	}
545 
546       if (radix == 16 && !seen_digit)
547 	SYNTAX_ERROR_AT (virtual_location,
548 			 "no digits in hexadecimal floating constant");
549 
550       if (radix == 16 && CPP_PEDANTIC (pfile)
551 	  && !CPP_OPTION (pfile, extended_numbers))
552 	{
553 	  if (CPP_OPTION (pfile, cplusplus))
554 	    cpp_error_with_line (pfile, CPP_DL_PEDWARN, virtual_location, 0,
555 				 "use of C++1z hexadecimal floating constant");
556 	  else
557 	    cpp_error_with_line (pfile, CPP_DL_PEDWARN, virtual_location, 0,
558 				 "use of C99 hexadecimal floating constant");
559 	}
560 
561       if (float_flag == AFTER_EXPON)
562 	{
563 	  if (*str == '+' || *str == '-')
564 	    str++;
565 
566 	  /* Exponent is decimal, even if string is a hex float.  */
567 	  if (!ISDIGIT (*str))
568 	    {
569 	      if (DIGIT_SEP (*str))
570 		SYNTAX_ERROR_AT (virtual_location,
571 				 "digit separator adjacent to exponent");
572 	      else
573 		SYNTAX_ERROR_AT (virtual_location, "exponent has no digits");
574 	    }
575 	  do
576 	    {
577 	      seen_digit_sep = DIGIT_SEP (*str);
578 	      str++;
579 	    }
580 	  while (ISDIGIT (*str) || DIGIT_SEP (*str));
581 	}
582       else if (radix == 16)
583 	SYNTAX_ERROR_AT (virtual_location,
584 			 "hexadecimal floating constants require an exponent");
585 
586       if (seen_digit_sep)
587 	SYNTAX_ERROR_AT (virtual_location,
588 			 "digit separator outside digit sequence");
589 
590       result = interpret_float_suffix (pfile, str, limit - str);
591       if (result == 0)
592 	{
593 	  if (CPP_OPTION (pfile, user_literals))
594 	    {
595 	      if (ud_suffix)
596 		*ud_suffix = (const char *) str;
597 	      result = CPP_N_LARGE | CPP_N_USERDEF;
598 	    }
599 	  else
600 	    {
601 	      cpp_error_with_line (pfile, CPP_DL_ERROR, virtual_location, 0,
602 				   "invalid suffix \"%.*s\" on floating constant",
603 				   (int) (limit - str), str);
604 	      return CPP_N_INVALID;
605 	    }
606 	}
607 
608       /* Traditional C didn't accept any floating suffixes.  */
609       if (limit != str
610 	  && CPP_WTRADITIONAL (pfile)
611 	  && ! cpp_sys_macro_p (pfile))
612 	cpp_warning_with_line (pfile, CPP_W_TRADITIONAL, virtual_location, 0,
613 			       "traditional C rejects the \"%.*s\" suffix",
614 			       (int) (limit - str), str);
615 
616       /* A suffix for double is a GCC extension via decimal float support.
617 	 If the suffix also specifies an imaginary value we'll catch that
618 	 later.  */
619       if ((result == CPP_N_MEDIUM) && CPP_PEDANTIC (pfile))
620 	cpp_error_with_line (pfile, CPP_DL_PEDWARN, virtual_location, 0,
621 			     "suffix for double constant is a GCC extension");
622 
623       /* Radix must be 10 for decimal floats.  */
624       if ((result & CPP_N_DFLOAT) && radix != 10)
625         {
626           cpp_error_with_line (pfile, CPP_DL_ERROR, virtual_location, 0,
627 			       "invalid suffix \"%.*s\" with hexadecimal floating constant",
628 			       (int) (limit - str), str);
629           return CPP_N_INVALID;
630         }
631 
632       if ((result & (CPP_N_FRACT | CPP_N_ACCUM)) && CPP_PEDANTIC (pfile))
633 	cpp_error_with_line (pfile, CPP_DL_PEDWARN, virtual_location, 0,
634 			     "fixed-point constants are a GCC extension");
635 
636       if ((result & CPP_N_DFLOAT) && CPP_PEDANTIC (pfile))
637 	cpp_error_with_line (pfile, CPP_DL_PEDWARN, virtual_location, 0,
638 			     "decimal float constants are a GCC extension");
639 
640       result |= CPP_N_FLOATING;
641     }
642   else
643     {
644       result = interpret_int_suffix (pfile, str, limit - str);
645       if (result == 0)
646 	{
647 	  if (CPP_OPTION (pfile, user_literals))
648 	    {
649 	      if (ud_suffix)
650 		*ud_suffix = (const char *) str;
651 	      result = CPP_N_UNSIGNED | CPP_N_LARGE | CPP_N_USERDEF;
652 	    }
653 	  else
654 	    {
655 	      cpp_error_with_line (pfile, CPP_DL_ERROR, virtual_location, 0,
656 				   "invalid suffix \"%.*s\" on integer constant",
657 				   (int) (limit - str), str);
658 	      return CPP_N_INVALID;
659 	    }
660 	}
661 
662       /* Traditional C only accepted the 'L' suffix.
663          Suppress warning about 'LL' with -Wno-long-long.  */
664       if (CPP_WTRADITIONAL (pfile) && ! cpp_sys_macro_p (pfile))
665 	{
666 	  int u_or_i = (result & (CPP_N_UNSIGNED|CPP_N_IMAGINARY));
667 	  int large = (result & CPP_N_WIDTH) == CPP_N_LARGE
668 		       && CPP_OPTION (pfile, cpp_warn_long_long);
669 
670 	  if (u_or_i || large)
671 	    cpp_warning_with_line (pfile, large ? CPP_W_LONG_LONG : CPP_W_TRADITIONAL,
672 				   virtual_location, 0,
673 				   "traditional C rejects the \"%.*s\" suffix",
674 				   (int) (limit - str), str);
675 	}
676 
677       if ((result & CPP_N_WIDTH) == CPP_N_LARGE
678 	  && CPP_OPTION (pfile, cpp_warn_long_long))
679         {
680           const char *message = CPP_OPTION (pfile, cplusplus)
681 				? N_("use of C++11 long long integer constant")
682 		                : N_("use of C99 long long integer constant");
683 
684 	  if (CPP_OPTION (pfile, c99))
685             cpp_warning_with_line (pfile, CPP_W_LONG_LONG, virtual_location,
686 				   0, message);
687           else
688             cpp_pedwarning_with_line (pfile, CPP_W_LONG_LONG,
689 				      virtual_location, 0, message);
690         }
691 
692       result |= CPP_N_INTEGER;
693     }
694 
695  syntax_ok:
696   if ((result & CPP_N_IMAGINARY) && CPP_PEDANTIC (pfile))
697     cpp_error_with_line (pfile, CPP_DL_PEDWARN, virtual_location, 0,
698 			 "imaginary constants are a GCC extension");
699   if (radix == 2
700       && !CPP_OPTION (pfile, binary_constants)
701       && CPP_PEDANTIC (pfile))
702     cpp_error_with_line (pfile, CPP_DL_PEDWARN, virtual_location, 0,
703 			 CPP_OPTION (pfile, cplusplus)
704 			 ? N_("binary constants are a C++14 feature "
705 			      "or GCC extension")
706 			 : N_("binary constants are a GCC extension"));
707 
708   if (radix == 10)
709     result |= CPP_N_DECIMAL;
710   else if (radix == 16)
711     result |= CPP_N_HEX;
712   else if (radix == 2)
713     result |= CPP_N_BINARY;
714   else
715     result |= CPP_N_OCTAL;
716 
717   return result;
718 
719  syntax_error:
720   return CPP_N_INVALID;
721 }
722 
723 /* cpp_interpret_integer converts an integer constant into a cpp_num,
724    of precision options->precision.
725 
726    We do not provide any interface for decimal->float conversion,
727    because the preprocessor doesn't need it and we don't want to
728    drag in GCC's floating point emulator.  */
729 cpp_num
cpp_interpret_integer(cpp_reader * pfile,const cpp_token * token,unsigned int type)730 cpp_interpret_integer (cpp_reader *pfile, const cpp_token *token,
731 		       unsigned int type)
732 {
733   const uchar *p, *end;
734   cpp_num result;
735 
736   result.low = 0;
737   result.high = 0;
738   result.unsignedp = !!(type & CPP_N_UNSIGNED);
739   result.overflow = false;
740 
741   p = token->val.str.text;
742   end = p + token->val.str.len;
743 
744   /* Common case of a single digit.  */
745   if (token->val.str.len == 1)
746     result.low = p[0] - '0';
747   else
748     {
749       cpp_num_part max;
750       size_t precision = CPP_OPTION (pfile, precision);
751       unsigned int base = 10, c = 0;
752       bool overflow = false;
753 
754       if ((type & CPP_N_RADIX) == CPP_N_OCTAL)
755 	{
756 	  base = 8;
757 	  p++;
758 	}
759       else if ((type & CPP_N_RADIX) == CPP_N_HEX)
760 	{
761 	  base = 16;
762 	  p += 2;
763 	}
764       else if ((type & CPP_N_RADIX) == CPP_N_BINARY)
765 	{
766 	  base = 2;
767 	  p += 2;
768 	}
769 
770       /* We can add a digit to numbers strictly less than this without
771 	 needing the precision and slowness of double integers.  */
772       max = ~(cpp_num_part) 0;
773       if (precision < PART_PRECISION)
774 	max >>= PART_PRECISION - precision;
775       max = (max - base + 1) / base + 1;
776 
777       for (; p < end; p++)
778 	{
779 	  c = *p;
780 
781 	  if (ISDIGIT (c) || (base == 16 && ISXDIGIT (c)))
782 	    c = hex_value (c);
783 	  else if (DIGIT_SEP (c))
784 	    continue;
785 	  else
786 	    break;
787 
788 	  /* Strict inequality for when max is set to zero.  */
789 	  if (result.low < max)
790 	    result.low = result.low * base + c;
791 	  else
792 	    {
793 	      result = append_digit (result, c, base, precision);
794 	      overflow |= result.overflow;
795 	      max = 0;
796 	    }
797 	}
798 
799       if (overflow && !(type & CPP_N_USERDEF))
800 	cpp_error (pfile, CPP_DL_PEDWARN,
801 		   "integer constant is too large for its type");
802       /* If too big to be signed, consider it unsigned.  Only warn for
803 	 decimal numbers.  Traditional numbers were always signed (but
804 	 we still honor an explicit U suffix); but we only have
805 	 traditional semantics in directives.  */
806       else if (!result.unsignedp
807 	       && !(CPP_OPTION (pfile, traditional)
808 		    && pfile->state.in_directive)
809 	       && !num_positive (result, precision))
810 	{
811 	  /* This is for constants within the range of uintmax_t but
812 	     not that of intmax_t.  For such decimal constants, a
813 	     diagnostic is required for C99 as the selected type must
814 	     be signed and not having a type is a constraint violation
815 	     (DR#298, TC3), so this must be a pedwarn.  For C90,
816 	     unsigned long is specified to be used for a constant that
817 	     does not fit in signed long; if uintmax_t has the same
818 	     range as unsigned long this means only a warning is
819 	     appropriate here.  C90 permits the preprocessor to use a
820 	     wider range than unsigned long in the compiler, so if
821 	     uintmax_t is wider than unsigned long no diagnostic is
822 	     required for such constants in preprocessor #if
823 	     expressions and the compiler will pedwarn for such
824 	     constants outside the range of unsigned long that reach
825 	     the compiler so a diagnostic is not required there
826 	     either; thus, pedwarn for C99 but use a plain warning for
827 	     C90.  */
828 	  if (base == 10)
829 	    cpp_error (pfile, (CPP_OPTION (pfile, c99)
830 			       ? CPP_DL_PEDWARN
831 			       : CPP_DL_WARNING),
832 		       "integer constant is so large that it is unsigned");
833 	  result.unsignedp = true;
834 	}
835     }
836 
837   return result;
838 }
839 
840 /* Append DIGIT to NUM, a number of PRECISION bits being read in base BASE.  */
841 static cpp_num
append_digit(cpp_num num,int digit,int base,size_t precision)842 append_digit (cpp_num num, int digit, int base, size_t precision)
843 {
844   cpp_num result;
845   unsigned int shift;
846   bool overflow;
847   cpp_num_part add_high, add_low;
848 
849   /* Multiply by 2, 8 or 16.  Catching this overflow here means we don't
850      need to worry about add_high overflowing.  */
851   switch (base)
852     {
853     case 2:
854       shift = 1;
855       break;
856 
857     case 16:
858       shift = 4;
859       break;
860 
861     default:
862       shift = 3;
863     }
864   overflow = !!(num.high >> (PART_PRECISION - shift));
865   result.high = num.high << shift;
866   result.low = num.low << shift;
867   result.high |= num.low >> (PART_PRECISION - shift);
868   result.unsignedp = num.unsignedp;
869 
870   if (base == 10)
871     {
872       add_low = num.low << 1;
873       add_high = (num.high << 1) + (num.low >> (PART_PRECISION - 1));
874     }
875   else
876     add_high = add_low = 0;
877 
878   if (add_low + digit < add_low)
879     add_high++;
880   add_low += digit;
881 
882   if (result.low + add_low < result.low)
883     add_high++;
884   if (result.high + add_high < result.high)
885     overflow = true;
886 
887   result.low += add_low;
888   result.high += add_high;
889   result.overflow = overflow;
890 
891   /* The above code catches overflow of a cpp_num type.  This catches
892      overflow of the (possibly shorter) target precision.  */
893   num.low = result.low;
894   num.high = result.high;
895   result = num_trim (result, precision);
896   if (!num_eq (result, num))
897     result.overflow = true;
898 
899   return result;
900 }
901 
902 /* Handle meeting "defined" in a preprocessor expression.  */
903 static cpp_num
parse_defined(cpp_reader * pfile)904 parse_defined (cpp_reader *pfile)
905 {
906   cpp_num result;
907   int paren = 0;
908   cpp_hashnode *node = 0;
909   const cpp_token *token;
910   cpp_context *initial_context = pfile->context;
911 
912   /* Don't expand macros.  */
913   pfile->state.prevent_expansion++;
914 
915   token = cpp_get_token (pfile);
916   if (token->type == CPP_OPEN_PAREN)
917     {
918       paren = 1;
919       token = cpp_get_token (pfile);
920     }
921 
922   if (token->type == CPP_NAME)
923     {
924       node = token->val.node.node;
925       if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN)
926 	{
927 	  cpp_error (pfile, CPP_DL_ERROR, "missing ')' after \"defined\"");
928 	  node = 0;
929 	}
930     }
931   else
932     {
933       cpp_error (pfile, CPP_DL_ERROR,
934 		 "operator \"defined\" requires an identifier");
935       if (token->flags & NAMED_OP)
936 	{
937 	  cpp_token op;
938 
939 	  op.flags = 0;
940 	  op.type = token->type;
941 	  cpp_error (pfile, CPP_DL_ERROR,
942 		     "(\"%s\" is an alternative token for \"%s\" in C++)",
943 		     cpp_token_as_text (pfile, token),
944 		     cpp_token_as_text (pfile, &op));
945 	}
946     }
947 
948   if (node)
949     {
950       if (pfile->context != initial_context && CPP_PEDANTIC (pfile))
951 	cpp_error (pfile, CPP_DL_WARNING,
952 		   "this use of \"defined\" may not be portable");
953 
954       _cpp_mark_macro_used (node);
955       if (!(node->flags & NODE_USED))
956 	{
957 	  node->flags |= NODE_USED;
958 	  if (node->type == NT_MACRO)
959 	    {
960 	      if ((node->flags & NODE_BUILTIN)
961 		  && pfile->cb.user_builtin_macro)
962 		pfile->cb.user_builtin_macro (pfile, node);
963 	      if (pfile->cb.used_define)
964 		pfile->cb.used_define (pfile, pfile->directive_line, node);
965 	    }
966 	  else
967 	    {
968 	      if (pfile->cb.used_undef)
969 		pfile->cb.used_undef (pfile, pfile->directive_line, node);
970 	    }
971 	}
972 
973       /* A possible controlling macro of the form #if !defined ().
974 	 _cpp_parse_expr checks there was no other junk on the line.  */
975       pfile->mi_ind_cmacro = node;
976     }
977 
978   pfile->state.prevent_expansion--;
979 
980   /* Do not treat conditional macros as being defined.  This is due to the
981      powerpc and spu ports using conditional macros for 'vector', 'bool', and
982      'pixel' to act as conditional keywords.  This messes up tests like #ifndef
983      bool.  */
984   result.unsignedp = false;
985   result.high = 0;
986   result.overflow = false;
987   result.low = (node && node->type == NT_MACRO
988 		&& (node->flags & NODE_CONDITIONAL) == 0);
989   return result;
990 }
991 
992 /* Convert a token into a CPP_NUMBER (an interpreted preprocessing
993    number or character constant, or the result of the "defined" or "#"
994    operators).  */
995 static cpp_num
eval_token(cpp_reader * pfile,const cpp_token * token,source_location virtual_location)996 eval_token (cpp_reader *pfile, const cpp_token *token,
997 	    source_location virtual_location)
998 {
999   cpp_num result;
1000   unsigned int temp;
1001   int unsignedp = 0;
1002 
1003   result.unsignedp = false;
1004   result.overflow = false;
1005 
1006   switch (token->type)
1007     {
1008     case CPP_NUMBER:
1009       temp = cpp_classify_number (pfile, token, NULL, virtual_location);
1010       if (temp & CPP_N_USERDEF)
1011 	cpp_error (pfile, CPP_DL_ERROR,
1012 		   "user-defined literal in preprocessor expression");
1013       switch (temp & CPP_N_CATEGORY)
1014 	{
1015 	case CPP_N_FLOATING:
1016 	  cpp_error_with_line (pfile, CPP_DL_ERROR, virtual_location, 0,
1017 			       "floating constant in preprocessor expression");
1018 	  break;
1019 	case CPP_N_INTEGER:
1020 	  if (!(temp & CPP_N_IMAGINARY))
1021 	    return cpp_interpret_integer (pfile, token, temp);
1022 	  cpp_error_with_line (pfile, CPP_DL_ERROR, virtual_location, 0,
1023 			       "imaginary number in preprocessor expression");
1024 	  break;
1025 
1026 	case CPP_N_INVALID:
1027 	  /* Error already issued.  */
1028 	  break;
1029 	}
1030       result.high = result.low = 0;
1031       break;
1032 
1033     case CPP_WCHAR:
1034     case CPP_CHAR:
1035     case CPP_CHAR16:
1036     case CPP_CHAR32:
1037     case CPP_UTF8CHAR:
1038       {
1039 	cppchar_t cc = cpp_interpret_charconst (pfile, token,
1040 						&temp, &unsignedp);
1041 
1042 	result.high = 0;
1043 	result.low = cc;
1044 	/* Sign-extend the result if necessary.  */
1045 	if (!unsignedp && (cppchar_signed_t) cc < 0)
1046 	  {
1047 	    if (PART_PRECISION > BITS_PER_CPPCHAR_T)
1048 	      result.low |= ~(~(cpp_num_part) 0
1049 			      >> (PART_PRECISION - BITS_PER_CPPCHAR_T));
1050 	    result.high = ~(cpp_num_part) 0;
1051 	    result = num_trim (result, CPP_OPTION (pfile, precision));
1052 	  }
1053       }
1054       break;
1055 
1056     case CPP_NAME:
1057       if (token->val.node.node == pfile->spec_nodes.n_defined)
1058 	return parse_defined (pfile);
1059       else if (token->val.node.node == pfile->spec_nodes.n__has_include__)
1060 	return parse_has_include (pfile, IT_INCLUDE);
1061       else if (token->val.node.node == pfile->spec_nodes.n__has_include_next__)
1062 	return parse_has_include (pfile, IT_INCLUDE_NEXT);
1063       else if (CPP_OPTION (pfile, cplusplus)
1064 	       && (token->val.node.node == pfile->spec_nodes.n_true
1065 		   || token->val.node.node == pfile->spec_nodes.n_false))
1066 	{
1067 	  result.high = 0;
1068 	  result.low = (token->val.node.node == pfile->spec_nodes.n_true);
1069 	}
1070       else
1071 	{
1072 	  result.high = 0;
1073 	  result.low = 0;
1074 	  if (CPP_OPTION (pfile, warn_undef) && !pfile->state.skip_eval)
1075 	    cpp_warning_with_line (pfile, CPP_W_UNDEF, virtual_location, 0,
1076 				   "\"%s\" is not defined",
1077 				   NODE_NAME (token->val.node.node));
1078 	}
1079       break;
1080 
1081     case CPP_HASH:
1082       if (!pfile->state.skipping)
1083 	{
1084 	  /* A pedantic warning takes precedence over a deprecated
1085 	     warning here.  */
1086 	  if (CPP_PEDANTIC (pfile))
1087 	    cpp_error_with_line (pfile, CPP_DL_PEDWARN,
1088 				 virtual_location, 0,
1089 				 "assertions are a GCC extension");
1090 	  else if (CPP_OPTION (pfile, cpp_warn_deprecated))
1091 	    cpp_warning_with_line (pfile, CPP_W_DEPRECATED, virtual_location, 0,
1092 				   "assertions are a deprecated extension");
1093 	}
1094       _cpp_test_assertion (pfile, &temp);
1095       result.high = 0;
1096       result.low = temp;
1097       break;
1098 
1099     default:
1100       abort ();
1101     }
1102 
1103   result.unsignedp = !!unsignedp;
1104   return result;
1105 }
1106 
1107 /* Operator precedence and flags table.
1108 
1109 After an operator is returned from the lexer, if it has priority less
1110 than the operator on the top of the stack, we reduce the stack by one
1111 operator and repeat the test.  Since equal priorities do not reduce,
1112 this is naturally right-associative.
1113 
1114 We handle left-associative operators by decrementing the priority of
1115 just-lexed operators by one, but retaining the priority of operators
1116 already on the stack.
1117 
1118 The remaining cases are '(' and ')'.  We handle '(' by skipping the
1119 reduction phase completely.  ')' is given lower priority than
1120 everything else, including '(', effectively forcing a reduction of the
1121 parenthesized expression.  If there is a matching '(', the routine
1122 reduce() exits immediately.  If the normal exit route sees a ')', then
1123 there cannot have been a matching '(' and an error message is output.
1124 
1125 The parser assumes all shifted operators require a left operand unless
1126 the flag NO_L_OPERAND is set.  These semantics are automatic; any
1127 extra semantics need to be handled with operator-specific code.  */
1128 
1129 /* Flags.  If CHECK_PROMOTION, we warn if the effective sign of an
1130    operand changes because of integer promotions.  */
1131 #define NO_L_OPERAND	(1 << 0)
1132 #define LEFT_ASSOC	(1 << 1)
1133 #define CHECK_PROMOTION	(1 << 2)
1134 
1135 /* Operator to priority map.  Must be in the same order as the first
1136    N entries of enum cpp_ttype.  */
1137 static const struct cpp_operator
1138 {
1139   uchar prio;
1140   uchar flags;
1141 } optab[] =
1142 {
1143   /* EQ */		{0, 0},	/* Shouldn't happen.  */
1144   /* NOT */		{16, NO_L_OPERAND},
1145   /* GREATER */		{12, LEFT_ASSOC | CHECK_PROMOTION},
1146   /* LESS */		{12, LEFT_ASSOC | CHECK_PROMOTION},
1147   /* PLUS */		{14, LEFT_ASSOC | CHECK_PROMOTION},
1148   /* MINUS */		{14, LEFT_ASSOC | CHECK_PROMOTION},
1149   /* MULT */		{15, LEFT_ASSOC | CHECK_PROMOTION},
1150   /* DIV */		{15, LEFT_ASSOC | CHECK_PROMOTION},
1151   /* MOD */		{15, LEFT_ASSOC | CHECK_PROMOTION},
1152   /* AND */		{9, LEFT_ASSOC | CHECK_PROMOTION},
1153   /* OR */		{7, LEFT_ASSOC | CHECK_PROMOTION},
1154   /* XOR */		{8, LEFT_ASSOC | CHECK_PROMOTION},
1155   /* RSHIFT */		{13, LEFT_ASSOC},
1156   /* LSHIFT */		{13, LEFT_ASSOC},
1157 
1158   /* COMPL */		{16, NO_L_OPERAND},
1159   /* AND_AND */		{6, LEFT_ASSOC},
1160   /* OR_OR */		{5, LEFT_ASSOC},
1161   /* Note that QUERY, COLON, and COMMA must have the same precedence.
1162      However, there are some special cases for these in reduce().  */
1163   /* QUERY */		{4, 0},
1164   /* COLON */		{4, LEFT_ASSOC | CHECK_PROMOTION},
1165   /* COMMA */		{4, LEFT_ASSOC},
1166   /* OPEN_PAREN */	{1, NO_L_OPERAND},
1167   /* CLOSE_PAREN */	{0, 0},
1168   /* EOF */		{0, 0},
1169   /* EQ_EQ */		{11, LEFT_ASSOC},
1170   /* NOT_EQ */		{11, LEFT_ASSOC},
1171   /* GREATER_EQ */	{12, LEFT_ASSOC | CHECK_PROMOTION},
1172   /* LESS_EQ */		{12, LEFT_ASSOC | CHECK_PROMOTION},
1173   /* UPLUS */		{16, NO_L_OPERAND},
1174   /* UMINUS */		{16, NO_L_OPERAND}
1175 };
1176 
1177 /* Parse and evaluate a C expression, reading from PFILE.
1178    Returns the truth value of the expression.
1179 
1180    The implementation is an operator precedence parser, i.e. a
1181    bottom-up parser, using a stack for not-yet-reduced tokens.
1182 
1183    The stack base is op_stack, and the current stack pointer is 'top'.
1184    There is a stack element for each operator (only), and the most
1185    recently pushed operator is 'top->op'.  An operand (value) is
1186    stored in the 'value' field of the stack element of the operator
1187    that precedes it.  */
1188 bool
_cpp_parse_expr(cpp_reader * pfile,bool is_if)1189 _cpp_parse_expr (cpp_reader *pfile, bool is_if)
1190 {
1191   struct op *top = pfile->op_stack;
1192   unsigned int lex_count;
1193   bool saw_leading_not, want_value = true;
1194   source_location virtual_location = 0;
1195 
1196   pfile->state.skip_eval = 0;
1197 
1198   /* Set up detection of #if ! defined().  */
1199   pfile->mi_ind_cmacro = 0;
1200   saw_leading_not = false;
1201   lex_count = 0;
1202 
1203   /* Lowest priority operator prevents further reductions.  */
1204   top->op = CPP_EOF;
1205 
1206   for (;;)
1207     {
1208       struct op op;
1209 
1210       lex_count++;
1211       op.token = cpp_get_token_with_location (pfile, &virtual_location);
1212       op.op = op.token->type;
1213       op.loc = virtual_location;
1214 
1215       switch (op.op)
1216 	{
1217 	  /* These tokens convert into values.  */
1218 	case CPP_NUMBER:
1219 	case CPP_CHAR:
1220 	case CPP_WCHAR:
1221 	case CPP_CHAR16:
1222 	case CPP_CHAR32:
1223 	case CPP_UTF8CHAR:
1224 	case CPP_NAME:
1225 	case CPP_HASH:
1226 	  if (!want_value)
1227 	    SYNTAX_ERROR2_AT (op.loc,
1228 			      "missing binary operator before token \"%s\"",
1229 			      cpp_token_as_text (pfile, op.token));
1230 	  want_value = false;
1231 	  top->value = eval_token (pfile, op.token, op.loc);
1232 	  continue;
1233 
1234 	case CPP_NOT:
1235 	  saw_leading_not = lex_count == 1;
1236 	  break;
1237 	case CPP_PLUS:
1238 	  if (want_value)
1239 	    op.op = CPP_UPLUS;
1240 	  break;
1241 	case CPP_MINUS:
1242 	  if (want_value)
1243 	    op.op = CPP_UMINUS;
1244 	  break;
1245 
1246 	default:
1247 	  if ((int) op.op <= (int) CPP_EQ || (int) op.op >= (int) CPP_PLUS_EQ)
1248 	    SYNTAX_ERROR2_AT (op.loc,
1249 			      "token \"%s\" is not valid in preprocessor expressions",
1250 			      cpp_token_as_text (pfile, op.token));
1251 	  break;
1252 	}
1253 
1254       /* Check we have a value or operator as appropriate.  */
1255       if (optab[op.op].flags & NO_L_OPERAND)
1256 	{
1257 	  if (!want_value)
1258 	    SYNTAX_ERROR2_AT (op.loc,
1259 			      "missing binary operator before token \"%s\"",
1260 			      cpp_token_as_text (pfile, op.token));
1261 	}
1262       else if (want_value)
1263 	{
1264 	  /* We want a number (or expression) and haven't got one.
1265 	     Try to emit a specific diagnostic.  */
1266 	  if (op.op == CPP_CLOSE_PAREN && top->op == CPP_OPEN_PAREN)
1267 	    SYNTAX_ERROR_AT (op.loc,
1268 			     "missing expression between '(' and ')'");
1269 
1270 	  if (op.op == CPP_EOF && top->op == CPP_EOF)
1271  	    SYNTAX_ERROR2_AT (op.loc,
1272 			      "%s with no expression", is_if ? "#if" : "#elif");
1273 
1274  	  if (top->op != CPP_EOF && top->op != CPP_OPEN_PAREN)
1275  	    SYNTAX_ERROR2_AT (op.loc,
1276 			      "operator '%s' has no right operand",
1277 			      cpp_token_as_text (pfile, top->token));
1278 	  else if (op.op == CPP_CLOSE_PAREN || op.op == CPP_EOF)
1279 	    /* Complain about missing paren during reduction.  */;
1280 	  else
1281 	    SYNTAX_ERROR2_AT (op.loc,
1282 			      "operator '%s' has no left operand",
1283 			      cpp_token_as_text (pfile, op.token));
1284 	}
1285 
1286       top = reduce (pfile, top, op.op);
1287       if (!top)
1288 	goto syntax_error;
1289 
1290       if (op.op == CPP_EOF)
1291 	break;
1292 
1293       switch (op.op)
1294 	{
1295 	case CPP_CLOSE_PAREN:
1296 	  continue;
1297 	case CPP_OR_OR:
1298 	  if (!num_zerop (top->value))
1299 	    pfile->state.skip_eval++;
1300 	  break;
1301 	case CPP_AND_AND:
1302 	case CPP_QUERY:
1303 	  if (num_zerop (top->value))
1304 	    pfile->state.skip_eval++;
1305 	  break;
1306 	case CPP_COLON:
1307 	  if (top->op != CPP_QUERY)
1308 	    SYNTAX_ERROR_AT (op.loc,
1309 			     " ':' without preceding '?'");
1310 	  if (!num_zerop (top[-1].value)) /* Was '?' condition true?  */
1311 	    pfile->state.skip_eval++;
1312 	  else
1313 	    pfile->state.skip_eval--;
1314 	default:
1315 	  break;
1316 	}
1317 
1318       want_value = true;
1319 
1320       /* Check for and handle stack overflow.  */
1321       if (++top == pfile->op_limit)
1322 	top = _cpp_expand_op_stack (pfile);
1323 
1324       top->op = op.op;
1325       top->token = op.token;
1326       top->loc = op.loc;
1327     }
1328 
1329   /* The controlling macro expression is only valid if we called lex 3
1330      times: <!> <defined expression> and <EOF>.  push_conditional ()
1331      checks that we are at top-of-file.  */
1332   if (pfile->mi_ind_cmacro && !(saw_leading_not && lex_count == 3))
1333     pfile->mi_ind_cmacro = 0;
1334 
1335   if (top != pfile->op_stack)
1336     {
1337       cpp_error_with_line (pfile, CPP_DL_ICE, top->loc, 0,
1338 			   "unbalanced stack in %s",
1339 			   is_if ? "#if" : "#elif");
1340     syntax_error:
1341       return false;  /* Return false on syntax error.  */
1342     }
1343 
1344   return !num_zerop (top->value);
1345 }
1346 
1347 /* Reduce the operator / value stack if possible, in preparation for
1348    pushing operator OP.  Returns NULL on error, otherwise the top of
1349    the stack.  */
1350 static struct op *
reduce(cpp_reader * pfile,struct op * top,enum cpp_ttype op)1351 reduce (cpp_reader *pfile, struct op *top, enum cpp_ttype op)
1352 {
1353   unsigned int prio;
1354 
1355   if (top->op <= CPP_EQ || top->op > CPP_LAST_CPP_OP + 2)
1356     {
1357     bad_op:
1358       cpp_error (pfile, CPP_DL_ICE, "impossible operator '%u'", top->op);
1359       return 0;
1360     }
1361 
1362   if (op == CPP_OPEN_PAREN)
1363     return top;
1364 
1365   /* Decrement the priority of left-associative operators to force a
1366      reduction with operators of otherwise equal priority.  */
1367   prio = optab[op].prio - ((optab[op].flags & LEFT_ASSOC) != 0);
1368   while (prio < optab[top->op].prio)
1369     {
1370       if (CPP_OPTION (pfile, warn_num_sign_change)
1371 	  && optab[top->op].flags & CHECK_PROMOTION)
1372 	check_promotion (pfile, top);
1373 
1374       switch (top->op)
1375 	{
1376 	case CPP_UPLUS:
1377 	case CPP_UMINUS:
1378 	case CPP_NOT:
1379 	case CPP_COMPL:
1380 	  top[-1].value = num_unary_op (pfile, top->value, top->op);
1381 	  top[-1].loc = top->loc;
1382 	  break;
1383 
1384 	case CPP_PLUS:
1385 	case CPP_MINUS:
1386 	case CPP_RSHIFT:
1387 	case CPP_LSHIFT:
1388 	case CPP_COMMA:
1389 	  top[-1].value = num_binary_op (pfile, top[-1].value,
1390 					 top->value, top->op);
1391 	  top[-1].loc = top->loc;
1392 	  break;
1393 
1394 	case CPP_GREATER:
1395 	case CPP_LESS:
1396 	case CPP_GREATER_EQ:
1397 	case CPP_LESS_EQ:
1398 	  top[-1].value
1399 	    = num_inequality_op (pfile, top[-1].value, top->value, top->op);
1400 	  top[-1].loc = top->loc;
1401 	  break;
1402 
1403 	case CPP_EQ_EQ:
1404 	case CPP_NOT_EQ:
1405 	  top[-1].value
1406 	    = num_equality_op (pfile, top[-1].value, top->value, top->op);
1407 	  top[-1].loc = top->loc;
1408 	  break;
1409 
1410 	case CPP_AND:
1411 	case CPP_OR:
1412 	case CPP_XOR:
1413 	  top[-1].value
1414 	    = num_bitwise_op (pfile, top[-1].value, top->value, top->op);
1415 	  top[-1].loc = top->loc;
1416 	  break;
1417 
1418 	case CPP_MULT:
1419 	  top[-1].value = num_mul (pfile, top[-1].value, top->value);
1420 	  top[-1].loc = top->loc;
1421 	  break;
1422 
1423 	case CPP_DIV:
1424 	case CPP_MOD:
1425 	  top[-1].value = num_div_op (pfile, top[-1].value,
1426 				      top->value, top->op, top->loc);
1427 	  top[-1].loc = top->loc;
1428 	  break;
1429 
1430 	case CPP_OR_OR:
1431 	  top--;
1432 	  if (!num_zerop (top->value))
1433 	    pfile->state.skip_eval--;
1434 	  top->value.low = (!num_zerop (top->value)
1435 			    || !num_zerop (top[1].value));
1436 	  top->value.high = 0;
1437 	  top->value.unsignedp = false;
1438 	  top->value.overflow = false;
1439 	  top->loc = top[1].loc;
1440 	  continue;
1441 
1442 	case CPP_AND_AND:
1443 	  top--;
1444 	  if (num_zerop (top->value))
1445 	    pfile->state.skip_eval--;
1446 	  top->value.low = (!num_zerop (top->value)
1447 			    && !num_zerop (top[1].value));
1448 	  top->value.high = 0;
1449 	  top->value.unsignedp = false;
1450 	  top->value.overflow = false;
1451 	  top->loc = top[1].loc;
1452 	  continue;
1453 
1454 	case CPP_OPEN_PAREN:
1455 	  if (op != CPP_CLOSE_PAREN)
1456 	    {
1457 	      cpp_error_with_line (pfile, CPP_DL_ERROR,
1458 				   top->token->src_loc,
1459 				   0, "missing ')' in expression");
1460 	      return 0;
1461 	    }
1462 	  top--;
1463 	  top->value = top[1].value;
1464 	  top->loc = top[1].loc;
1465 	  return top;
1466 
1467 	case CPP_COLON:
1468 	  top -= 2;
1469 	  if (!num_zerop (top->value))
1470 	    {
1471 	      pfile->state.skip_eval--;
1472 	      top->value = top[1].value;
1473 	      top->loc = top[1].loc;
1474 	    }
1475 	  else
1476 	    {
1477 	      top->value = top[2].value;
1478 	      top->loc = top[2].loc;
1479 	    }
1480 	  top->value.unsignedp = (top[1].value.unsignedp
1481 				  || top[2].value.unsignedp);
1482 	  continue;
1483 
1484 	case CPP_QUERY:
1485 	  /* COMMA and COLON should not reduce a QUERY operator.  */
1486 	  if (op == CPP_COMMA || op == CPP_COLON)
1487 	    return top;
1488 	  cpp_error (pfile, CPP_DL_ERROR, "'?' without following ':'");
1489 	  return 0;
1490 
1491 	default:
1492 	  goto bad_op;
1493 	}
1494 
1495       top--;
1496       if (top->value.overflow && !pfile->state.skip_eval)
1497 	cpp_error (pfile, CPP_DL_PEDWARN,
1498 		   "integer overflow in preprocessor expression");
1499     }
1500 
1501   if (op == CPP_CLOSE_PAREN)
1502     {
1503       cpp_error (pfile, CPP_DL_ERROR, "missing '(' in expression");
1504       return 0;
1505     }
1506 
1507   return top;
1508 }
1509 
1510 /* Returns the position of the old top of stack after expansion.  */
1511 struct op *
_cpp_expand_op_stack(cpp_reader * pfile)1512 _cpp_expand_op_stack (cpp_reader *pfile)
1513 {
1514   size_t old_size = (size_t) (pfile->op_limit - pfile->op_stack);
1515   size_t new_size = old_size * 2 + 20;
1516 
1517   pfile->op_stack = XRESIZEVEC (struct op, pfile->op_stack, new_size);
1518   pfile->op_limit = pfile->op_stack + new_size;
1519 
1520   return pfile->op_stack + old_size;
1521 }
1522 
1523 /* Emits a warning if the effective sign of either operand of OP
1524    changes because of integer promotions.  */
1525 static void
check_promotion(cpp_reader * pfile,const struct op * op)1526 check_promotion (cpp_reader *pfile, const struct op *op)
1527 {
1528   if (op->value.unsignedp == op[-1].value.unsignedp)
1529     return;
1530 
1531   if (op->value.unsignedp)
1532     {
1533       if (!num_positive (op[-1].value, CPP_OPTION (pfile, precision)))
1534 	cpp_error_with_line (pfile, CPP_DL_WARNING, op[-1].loc, 0,
1535 			     "the left operand of \"%s\" changes sign when promoted",
1536 			     cpp_token_as_text (pfile, op->token));
1537     }
1538   else if (!num_positive (op->value, CPP_OPTION (pfile, precision)))
1539     cpp_error_with_line (pfile, CPP_DL_WARNING, op->loc, 0,
1540 	       "the right operand of \"%s\" changes sign when promoted",
1541 	       cpp_token_as_text (pfile, op->token));
1542 }
1543 
1544 /* Clears the unused high order bits of the number pointed to by PNUM.  */
1545 static cpp_num
num_trim(cpp_num num,size_t precision)1546 num_trim (cpp_num num, size_t precision)
1547 {
1548   if (precision > PART_PRECISION)
1549     {
1550       precision -= PART_PRECISION;
1551       if (precision < PART_PRECISION)
1552 	num.high &= ((cpp_num_part) 1 << precision) - 1;
1553     }
1554   else
1555     {
1556       if (precision < PART_PRECISION)
1557 	num.low &= ((cpp_num_part) 1 << precision) - 1;
1558       num.high = 0;
1559     }
1560 
1561   return num;
1562 }
1563 
1564 /* True iff A (presumed signed) >= 0.  */
1565 static bool
num_positive(cpp_num num,size_t precision)1566 num_positive (cpp_num num, size_t precision)
1567 {
1568   if (precision > PART_PRECISION)
1569     {
1570       precision -= PART_PRECISION;
1571       return (num.high & (cpp_num_part) 1 << (precision - 1)) == 0;
1572     }
1573 
1574   return (num.low & (cpp_num_part) 1 << (precision - 1)) == 0;
1575 }
1576 
1577 /* Sign extend a number, with PRECISION significant bits and all
1578    others assumed clear, to fill out a cpp_num structure.  */
1579 cpp_num
cpp_num_sign_extend(cpp_num num,size_t precision)1580 cpp_num_sign_extend (cpp_num num, size_t precision)
1581 {
1582   if (!num.unsignedp)
1583     {
1584       if (precision > PART_PRECISION)
1585 	{
1586 	  precision -= PART_PRECISION;
1587 	  if (precision < PART_PRECISION
1588 	      && (num.high & (cpp_num_part) 1 << (precision - 1)))
1589 	    num.high |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
1590 	}
1591       else if (num.low & (cpp_num_part) 1 << (precision - 1))
1592 	{
1593 	  if (precision < PART_PRECISION)
1594 	    num.low |= ~(~(cpp_num_part) 0 >> (PART_PRECISION - precision));
1595 	  num.high = ~(cpp_num_part) 0;
1596 	}
1597     }
1598 
1599   return num;
1600 }
1601 
1602 /* Returns the negative of NUM.  */
1603 static cpp_num
num_negate(cpp_num num,size_t precision)1604 num_negate (cpp_num num, size_t precision)
1605 {
1606   cpp_num copy;
1607 
1608   copy = num;
1609   num.high = ~num.high;
1610   num.low = ~num.low;
1611   if (++num.low == 0)
1612     num.high++;
1613   num = num_trim (num, precision);
1614   num.overflow = (!num.unsignedp && num_eq (num, copy) && !num_zerop (num));
1615 
1616   return num;
1617 }
1618 
1619 /* Returns true if A >= B.  */
1620 static bool
num_greater_eq(cpp_num pa,cpp_num pb,size_t precision)1621 num_greater_eq (cpp_num pa, cpp_num pb, size_t precision)
1622 {
1623   bool unsignedp;
1624 
1625   unsignedp = pa.unsignedp || pb.unsignedp;
1626 
1627   if (!unsignedp)
1628     {
1629       /* Both numbers have signed type.  If they are of different
1630        sign, the answer is the sign of A.  */
1631       unsignedp = num_positive (pa, precision);
1632 
1633       if (unsignedp != num_positive (pb, precision))
1634 	return unsignedp;
1635 
1636       /* Otherwise we can do an unsigned comparison.  */
1637     }
1638 
1639   return (pa.high > pb.high) || (pa.high == pb.high && pa.low >= pb.low);
1640 }
1641 
1642 /* Returns LHS OP RHS, where OP is a bit-wise operation.  */
1643 static cpp_num
num_bitwise_op(cpp_reader * pfile ATTRIBUTE_UNUSED,cpp_num lhs,cpp_num rhs,enum cpp_ttype op)1644 num_bitwise_op (cpp_reader *pfile ATTRIBUTE_UNUSED,
1645 		cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1646 {
1647   lhs.overflow = false;
1648   lhs.unsignedp = lhs.unsignedp || rhs.unsignedp;
1649 
1650   /* As excess precision is zeroed, there is no need to num_trim () as
1651      these operations cannot introduce a set bit there.  */
1652   if (op == CPP_AND)
1653     {
1654       lhs.low &= rhs.low;
1655       lhs.high &= rhs.high;
1656     }
1657   else if (op == CPP_OR)
1658     {
1659       lhs.low |= rhs.low;
1660       lhs.high |= rhs.high;
1661     }
1662   else
1663     {
1664       lhs.low ^= rhs.low;
1665       lhs.high ^= rhs.high;
1666     }
1667 
1668   return lhs;
1669 }
1670 
1671 /* Returns LHS OP RHS, where OP is an inequality.  */
1672 static cpp_num
num_inequality_op(cpp_reader * pfile,cpp_num lhs,cpp_num rhs,enum cpp_ttype op)1673 num_inequality_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs,
1674 		   enum cpp_ttype op)
1675 {
1676   bool gte = num_greater_eq (lhs, rhs, CPP_OPTION (pfile, precision));
1677 
1678   if (op == CPP_GREATER_EQ)
1679     lhs.low = gte;
1680   else if (op == CPP_LESS)
1681     lhs.low = !gte;
1682   else if (op == CPP_GREATER)
1683     lhs.low = gte && !num_eq (lhs, rhs);
1684   else /* CPP_LESS_EQ.  */
1685     lhs.low = !gte || num_eq (lhs, rhs);
1686 
1687   lhs.high = 0;
1688   lhs.overflow = false;
1689   lhs.unsignedp = false;
1690   return lhs;
1691 }
1692 
1693 /* Returns LHS OP RHS, where OP is == or !=.  */
1694 static cpp_num
num_equality_op(cpp_reader * pfile ATTRIBUTE_UNUSED,cpp_num lhs,cpp_num rhs,enum cpp_ttype op)1695 num_equality_op (cpp_reader *pfile ATTRIBUTE_UNUSED,
1696 		 cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1697 {
1698   /* Work around a 3.0.4 bug; see PR 6950.  */
1699   bool eq = num_eq (lhs, rhs);
1700   if (op == CPP_NOT_EQ)
1701     eq = !eq;
1702   lhs.low = eq;
1703   lhs.high = 0;
1704   lhs.overflow = false;
1705   lhs.unsignedp = false;
1706   return lhs;
1707 }
1708 
1709 /* Shift NUM, of width PRECISION, right by N bits.  */
1710 static cpp_num
num_rshift(cpp_num num,size_t precision,size_t n)1711 num_rshift (cpp_num num, size_t precision, size_t n)
1712 {
1713   cpp_num_part sign_mask;
1714   bool x = num_positive (num, precision);
1715 
1716   if (num.unsignedp || x)
1717     sign_mask = 0;
1718   else
1719     sign_mask = ~(cpp_num_part) 0;
1720 
1721   if (n >= precision)
1722     num.high = num.low = sign_mask;
1723   else
1724     {
1725       /* Sign-extend.  */
1726       if (precision < PART_PRECISION)
1727 	num.high = sign_mask, num.low |= sign_mask << precision;
1728       else if (precision < 2 * PART_PRECISION)
1729 	num.high |= sign_mask << (precision - PART_PRECISION);
1730 
1731       if (n >= PART_PRECISION)
1732 	{
1733 	  n -= PART_PRECISION;
1734 	  num.low = num.high;
1735 	  num.high = sign_mask;
1736 	}
1737 
1738       if (n)
1739 	{
1740 	  num.low = (num.low >> n) | (num.high << (PART_PRECISION - n));
1741 	  num.high = (num.high >> n) | (sign_mask << (PART_PRECISION - n));
1742 	}
1743     }
1744 
1745   num = num_trim (num, precision);
1746   num.overflow = false;
1747   return num;
1748 }
1749 
1750 /* Shift NUM, of width PRECISION, left by N bits.  */
1751 static cpp_num
num_lshift(cpp_num num,size_t precision,size_t n)1752 num_lshift (cpp_num num, size_t precision, size_t n)
1753 {
1754   if (n >= precision)
1755     {
1756       num.overflow = !num.unsignedp && !num_zerop (num);
1757       num.high = num.low = 0;
1758     }
1759   else
1760     {
1761       cpp_num orig, maybe_orig;
1762       size_t m = n;
1763 
1764       orig = num;
1765       if (m >= PART_PRECISION)
1766 	{
1767 	  m -= PART_PRECISION;
1768 	  num.high = num.low;
1769 	  num.low = 0;
1770 	}
1771       if (m)
1772 	{
1773 	  num.high = (num.high << m) | (num.low >> (PART_PRECISION - m));
1774 	  num.low <<= m;
1775 	}
1776       num = num_trim (num, precision);
1777 
1778       if (num.unsignedp)
1779 	num.overflow = false;
1780       else
1781 	{
1782 	  maybe_orig = num_rshift (num, precision, n);
1783 	  num.overflow = !num_eq (orig, maybe_orig);
1784 	}
1785     }
1786 
1787   return num;
1788 }
1789 
1790 /* The four unary operators: +, -, ! and ~.  */
1791 static cpp_num
num_unary_op(cpp_reader * pfile,cpp_num num,enum cpp_ttype op)1792 num_unary_op (cpp_reader *pfile, cpp_num num, enum cpp_ttype op)
1793 {
1794   switch (op)
1795     {
1796     case CPP_UPLUS:
1797       if (CPP_WTRADITIONAL (pfile) && !pfile->state.skip_eval)
1798 	cpp_warning (pfile, CPP_W_TRADITIONAL,
1799 		     "traditional C rejects the unary plus operator");
1800       num.overflow = false;
1801       break;
1802 
1803     case CPP_UMINUS:
1804       num = num_negate (num, CPP_OPTION (pfile, precision));
1805       break;
1806 
1807     case CPP_COMPL:
1808       num.high = ~num.high;
1809       num.low = ~num.low;
1810       num = num_trim (num, CPP_OPTION (pfile, precision));
1811       num.overflow = false;
1812       break;
1813 
1814     default: /* case CPP_NOT: */
1815       num.low = num_zerop (num);
1816       num.high = 0;
1817       num.overflow = false;
1818       num.unsignedp = false;
1819       break;
1820     }
1821 
1822   return num;
1823 }
1824 
1825 /* The various binary operators.  */
1826 static cpp_num
num_binary_op(cpp_reader * pfile,cpp_num lhs,cpp_num rhs,enum cpp_ttype op)1827 num_binary_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
1828 {
1829   cpp_num result;
1830   size_t precision = CPP_OPTION (pfile, precision);
1831   size_t n;
1832 
1833   switch (op)
1834     {
1835       /* Shifts.  */
1836     case CPP_LSHIFT:
1837     case CPP_RSHIFT:
1838       if (!rhs.unsignedp && !num_positive (rhs, precision))
1839 	{
1840 	  /* A negative shift is a positive shift the other way.  */
1841 	  if (op == CPP_LSHIFT)
1842 	    op = CPP_RSHIFT;
1843 	  else
1844 	    op = CPP_LSHIFT;
1845 	  rhs = num_negate (rhs, precision);
1846 	}
1847       if (rhs.high)
1848 	n = ~0;			/* Maximal.  */
1849       else
1850 	n = rhs.low;
1851       if (op == CPP_LSHIFT)
1852 	lhs = num_lshift (lhs, precision, n);
1853       else
1854 	lhs = num_rshift (lhs, precision, n);
1855       break;
1856 
1857       /* Arithmetic.  */
1858     case CPP_MINUS:
1859       result.low = lhs.low - rhs.low;
1860       result.high = lhs.high - rhs.high;
1861       if (result.low > lhs.low)
1862 	result.high--;
1863       result.unsignedp = lhs.unsignedp || rhs.unsignedp;
1864       result.overflow = false;
1865 
1866       result = num_trim (result, precision);
1867       if (!result.unsignedp)
1868 	{
1869 	  bool lhsp = num_positive (lhs, precision);
1870 	  result.overflow = (lhsp != num_positive (rhs, precision)
1871 			     && lhsp != num_positive (result, precision));
1872 	}
1873       return result;
1874 
1875     case CPP_PLUS:
1876       result.low = lhs.low + rhs.low;
1877       result.high = lhs.high + rhs.high;
1878       if (result.low < lhs.low)
1879 	result.high++;
1880       result.unsignedp = lhs.unsignedp || rhs.unsignedp;
1881       result.overflow = false;
1882 
1883       result = num_trim (result, precision);
1884       if (!result.unsignedp)
1885 	{
1886 	  bool lhsp = num_positive (lhs, precision);
1887 	  result.overflow = (lhsp == num_positive (rhs, precision)
1888 			     && lhsp != num_positive (result, precision));
1889 	}
1890       return result;
1891 
1892       /* Comma.  */
1893     default: /* case CPP_COMMA: */
1894       if (CPP_PEDANTIC (pfile) && (!CPP_OPTION (pfile, c99)
1895 				   || !pfile->state.skip_eval))
1896 	cpp_pedwarning (pfile, CPP_W_PEDANTIC,
1897 			"comma operator in operand of #if");
1898       lhs = rhs;
1899       break;
1900     }
1901 
1902   return lhs;
1903 }
1904 
1905 /* Multiplies two unsigned cpp_num_parts to give a cpp_num.  This
1906    cannot overflow.  */
1907 static cpp_num
num_part_mul(cpp_num_part lhs,cpp_num_part rhs)1908 num_part_mul (cpp_num_part lhs, cpp_num_part rhs)
1909 {
1910   cpp_num result;
1911   cpp_num_part middle[2], temp;
1912 
1913   result.low = LOW_PART (lhs) * LOW_PART (rhs);
1914   result.high = HIGH_PART (lhs) * HIGH_PART (rhs);
1915 
1916   middle[0] = LOW_PART (lhs) * HIGH_PART (rhs);
1917   middle[1] = HIGH_PART (lhs) * LOW_PART (rhs);
1918 
1919   temp = result.low;
1920   result.low += LOW_PART (middle[0]) << (PART_PRECISION / 2);
1921   if (result.low < temp)
1922     result.high++;
1923 
1924   temp = result.low;
1925   result.low += LOW_PART (middle[1]) << (PART_PRECISION / 2);
1926   if (result.low < temp)
1927     result.high++;
1928 
1929   result.high += HIGH_PART (middle[0]);
1930   result.high += HIGH_PART (middle[1]);
1931   result.unsignedp = true;
1932   result.overflow = false;
1933 
1934   return result;
1935 }
1936 
1937 /* Multiply two preprocessing numbers.  */
1938 static cpp_num
num_mul(cpp_reader * pfile,cpp_num lhs,cpp_num rhs)1939 num_mul (cpp_reader *pfile, cpp_num lhs, cpp_num rhs)
1940 {
1941   cpp_num result, temp;
1942   bool unsignedp = lhs.unsignedp || rhs.unsignedp;
1943   bool overflow, negate = false;
1944   size_t precision = CPP_OPTION (pfile, precision);
1945 
1946   /* Prepare for unsigned multiplication.  */
1947   if (!unsignedp)
1948     {
1949       if (!num_positive (lhs, precision))
1950 	negate = !negate, lhs = num_negate (lhs, precision);
1951       if (!num_positive (rhs, precision))
1952 	negate = !negate, rhs = num_negate (rhs, precision);
1953     }
1954 
1955   overflow = lhs.high && rhs.high;
1956   result = num_part_mul (lhs.low, rhs.low);
1957 
1958   temp = num_part_mul (lhs.high, rhs.low);
1959   result.high += temp.low;
1960   if (temp.high)
1961     overflow = true;
1962 
1963   temp = num_part_mul (lhs.low, rhs.high);
1964   result.high += temp.low;
1965   if (temp.high)
1966     overflow = true;
1967 
1968   temp.low = result.low, temp.high = result.high;
1969   result = num_trim (result, precision);
1970   if (!num_eq (result, temp))
1971     overflow = true;
1972 
1973   if (negate)
1974     result = num_negate (result, precision);
1975 
1976   if (unsignedp)
1977     result.overflow = false;
1978   else
1979     result.overflow = overflow || (num_positive (result, precision) ^ !negate
1980 				   && !num_zerop (result));
1981   result.unsignedp = unsignedp;
1982 
1983   return result;
1984 }
1985 
1986 /* Divide two preprocessing numbers, LHS and RHS, returning the answer
1987    or the remainder depending upon OP. LOCATION is the source location
1988    of this operator (for diagnostics).  */
1989 
1990 static cpp_num
num_div_op(cpp_reader * pfile,cpp_num lhs,cpp_num rhs,enum cpp_ttype op,source_location location)1991 num_div_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op,
1992 	    source_location location)
1993 {
1994   cpp_num result, sub;
1995   cpp_num_part mask;
1996   bool unsignedp = lhs.unsignedp || rhs.unsignedp;
1997   bool negate = false, lhs_neg = false;
1998   size_t i, precision = CPP_OPTION (pfile, precision);
1999 
2000   /* Prepare for unsigned division.  */
2001   if (!unsignedp)
2002     {
2003       if (!num_positive (lhs, precision))
2004 	negate = !negate, lhs_neg = true, lhs = num_negate (lhs, precision);
2005       if (!num_positive (rhs, precision))
2006 	negate = !negate, rhs = num_negate (rhs, precision);
2007     }
2008 
2009   /* Find the high bit.  */
2010   if (rhs.high)
2011     {
2012       i = precision - 1;
2013       mask = (cpp_num_part) 1 << (i - PART_PRECISION);
2014       for (; ; i--, mask >>= 1)
2015 	if (rhs.high & mask)
2016 	  break;
2017     }
2018   else if (rhs.low)
2019     {
2020       if (precision > PART_PRECISION)
2021 	i = precision - PART_PRECISION - 1;
2022       else
2023 	i = precision - 1;
2024       mask = (cpp_num_part) 1 << i;
2025       for (; ; i--, mask >>= 1)
2026 	if (rhs.low & mask)
2027 	  break;
2028     }
2029   else
2030     {
2031       if (!pfile->state.skip_eval)
2032 	cpp_error_with_line (pfile, CPP_DL_ERROR, location, 0,
2033 			     "division by zero in #if");
2034       return lhs;
2035     }
2036 
2037   /* First nonzero bit of RHS is bit I.  Do naive division by
2038      shifting the RHS fully left, and subtracting from LHS if LHS is
2039      at least as big, and then repeating but with one less shift.
2040      This is not very efficient, but is easy to understand.  */
2041 
2042   rhs.unsignedp = true;
2043   lhs.unsignedp = true;
2044   i = precision - i - 1;
2045   sub = num_lshift (rhs, precision, i);
2046 
2047   result.high = result.low = 0;
2048   for (;;)
2049     {
2050       if (num_greater_eq (lhs, sub, precision))
2051 	{
2052 	  lhs = num_binary_op (pfile, lhs, sub, CPP_MINUS);
2053 	  if (i >= PART_PRECISION)
2054 	    result.high |= (cpp_num_part) 1 << (i - PART_PRECISION);
2055 	  else
2056 	    result.low |= (cpp_num_part) 1 << i;
2057 	}
2058       if (i-- == 0)
2059 	break;
2060       sub.low = (sub.low >> 1) | (sub.high << (PART_PRECISION - 1));
2061       sub.high >>= 1;
2062     }
2063 
2064   /* We divide so that the remainder has the sign of the LHS.  */
2065   if (op == CPP_DIV)
2066     {
2067       result.unsignedp = unsignedp;
2068       result.overflow = false;
2069       if (!unsignedp)
2070 	{
2071 	  if (negate)
2072 	    result = num_negate (result, precision);
2073 	  result.overflow = (num_positive (result, precision) ^ !negate
2074 			     && !num_zerop (result));
2075 	}
2076 
2077       return result;
2078     }
2079 
2080   /* CPP_MOD.  */
2081   lhs.unsignedp = unsignedp;
2082   lhs.overflow = false;
2083   if (lhs_neg)
2084     lhs = num_negate (lhs, precision);
2085 
2086   return lhs;
2087 }
2088 
2089 /* Handle meeting "__has_include__" in a preprocessor expression.  */
2090 static cpp_num
parse_has_include(cpp_reader * pfile,enum include_type type)2091 parse_has_include (cpp_reader *pfile, enum include_type type)
2092 {
2093   cpp_num result;
2094   bool paren = false;
2095   cpp_hashnode *node = 0;
2096   const cpp_token *token;
2097   bool bracket = false;
2098   char *fname = 0;
2099 
2100   result.unsignedp = false;
2101   result.high = 0;
2102   result.overflow = false;
2103   result.low = 0;
2104 
2105   pfile->state.in__has_include__++;
2106 
2107   token = cpp_get_token (pfile);
2108   if (token->type == CPP_OPEN_PAREN)
2109     {
2110       paren = true;
2111       token = cpp_get_token (pfile);
2112     }
2113 
2114   if (token->type == CPP_STRING || token->type == CPP_HEADER_NAME)
2115     {
2116       if (token->type == CPP_HEADER_NAME)
2117 	bracket = true;
2118       fname = XNEWVEC (char, token->val.str.len - 1);
2119       memcpy (fname, token->val.str.text + 1, token->val.str.len - 2);
2120       fname[token->val.str.len - 2] = '\0';
2121       node = token->val.node.node;
2122     }
2123   else if (token->type == CPP_LESS)
2124     {
2125       bracket = true;
2126       fname = _cpp_bracket_include (pfile);
2127     }
2128   else
2129     cpp_error (pfile, CPP_DL_ERROR,
2130 	       "operator \"__has_include__\" requires a header string");
2131 
2132   if (fname)
2133     {
2134       int angle_brackets = (bracket ? 1 : 0);
2135 
2136       if (_cpp_has_header (pfile, fname, angle_brackets, type))
2137 	result.low = 1;
2138       else
2139 	result.low = 0;
2140 
2141       XDELETEVEC (fname);
2142     }
2143 
2144   if (paren && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN)
2145     cpp_error (pfile, CPP_DL_ERROR,
2146 	       "missing ')' after \"__has_include__\"");
2147 
2148   /* A possible controlling macro of the form #if !__has_include__ ().
2149      _cpp_parse_expr checks there was no other junk on the line.  */
2150   if (node)
2151     pfile->mi_ind_cmacro = node;
2152 
2153   pfile->state.in__has_include__--;
2154 
2155   return result;
2156 }
2157