]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/c-family/c-cppbuiltin.c
testsuite: Support { target c++20 } in tests.
[thirdparty/gcc.git] / gcc / c-family / c-cppbuiltin.c
CommitLineData
cb60f38d 1/* Define builtin-in macros for the C family front ends.
8d9254fc 2 Copyright (C) 2002-2020 Free Software Foundation, Inc.
cb60f38d
NB
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
9dcd6f09 8Software Foundation; either version 3, or (at your option) any later
cb60f38d
NB
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14for more details.
15
16You should have received a copy of the GNU General Public License
9dcd6f09
NC
17along with GCC; see the file COPYING3. If not see
18<http://www.gnu.org/licenses/>. */
cb60f38d
NB
19
20#include "config.h"
21#include "system.h"
22#include "coretypes.h"
2adfab87 23#include "target.h"
2adfab87 24#include "c-common.h"
4d0cdd0c 25#include "memmodel.h"
2adfab87 26#include "tm_p.h" /* For TARGET_CPU_CPP_BUILTINS & friends. */
d8a2d370 27#include "stringpool.h"
2adfab87 28#include "stor-layout.h"
cb60f38d 29#include "flags.h"
cb60f38d 30#include "c-pragma.h"
a4b7d13c 31#include "output.h" /* For user_label_prefix. */
f4ce02c5 32#include "debug.h" /* For dwarf2out_do_cfi_asm. */
677f3fa8 33#include "common/common-target.h"
82a1c2fe 34#include "cppbuiltin.h"
cb60f38d 35
4e2e315f
NB
36#ifndef TARGET_OS_CPP_BUILTINS
37# define TARGET_OS_CPP_BUILTINS()
38#endif
39
40#ifndef TARGET_OBJFMT_CPP_BUILTINS
41# define TARGET_OBJFMT_CPP_BUILTINS()
42#endif
43
cb60f38d
NB
44#ifndef REGISTER_PREFIX
45#define REGISTER_PREFIX ""
46#endif
47
21282b1e 48/* Non-static as some targets don't use it. */
35b1a6fa
AJ
49static void builtin_define_with_hex_fp_value (const char *, tree,
50 int, const char *,
264c41ed 51 const char *,
35b1a6fa 52 const char *);
85291069 53static void builtin_define_stdint_macros (void);
207bf79d
JM
54static void builtin_define_constants (const char *, tree);
55static void builtin_define_type_max (const char *, tree);
56static void builtin_define_type_minmax (const char *, const char *, tree);
c65248cb 57static void builtin_define_type_width (const char *, tree, tree);
b8698a0f 58static void builtin_define_float_constants (const char *,
1b1562a5 59 const char *,
264c41ed
CD
60 const char *,
61 const char *,
35b1a6fa 62 tree);
cb60f38d 63
0069111f
MM
64/* Return true if MODE provides a fast multiply/add (FMA) builtin function.
65 Originally this function used the fma optab, but that doesn't work with
66 -save-temps, so just rely on the HAVE_fma macros for the standard floating
67 point types. */
68
69static bool
ef4bddc2 70mode_has_fma (machine_mode mode)
0069111f
MM
71{
72 switch (mode)
73 {
74#ifdef HAVE_fmasf4
4e10a5a7 75 case E_SFmode:
0069111f
MM
76 return !!HAVE_fmasf4;
77#endif
78
79#ifdef HAVE_fmadf4
4e10a5a7 80 case E_DFmode:
0069111f
MM
81 return !!HAVE_fmadf4;
82#endif
83
ee5fd23a
MM
84#ifdef HAVE_fmakf4 /* PowerPC if long double != __float128. */
85 case E_KFmode:
86 return !!HAVE_fmakf4;
87#endif
88
0069111f 89#ifdef HAVE_fmaxf4
4e10a5a7 90 case E_XFmode:
0069111f
MM
91 return !!HAVE_fmaxf4;
92#endif
93
94#ifdef HAVE_fmatf4
4e10a5a7 95 case E_TFmode:
0069111f
MM
96 return !!HAVE_fmatf4;
97#endif
98
99 default:
100 break;
101 }
102
103 return false;
104}
105
024a85ae 106/* Define NAME with value TYPE size_unit. */
7049e4eb 107void
024a85ae
AK
108builtin_define_type_sizeof (const char *name, tree type)
109{
110 builtin_define_with_int_value (name,
ae7e9ddd 111 tree_to_uhwi (TYPE_SIZE_UNIT (type)));
024a85ae
AK
112}
113
264c41ed
CD
114/* Define the float.h constants for TYPE using NAME_PREFIX, FP_SUFFIX,
115 and FP_CAST. */
cb60f38d 116static void
b8698a0f
L
117builtin_define_float_constants (const char *name_prefix,
118 const char *fp_suffix,
119 const char *fp_cast,
1b1562a5 120 const char *fma_suffix,
264c41ed 121 tree type)
cb60f38d
NB
122{
123 /* Used to convert radix-based values to base 10 values in several cases.
124
125 In the max_exp -> max_10_exp conversion for 128-bit IEEE, we need at
126 least 6 significant digits for correct results. Using the fraction
127 formed by (log(2)*1e6)/(log(10)*1e6) overflows a 32-bit integer as an
128 intermediate; perhaps someone can find a better approximation, in the
129 mean time, I suspect using doubles won't harm the bootstrap here. */
130
131 const double log10_2 = .30102999566398119521;
132 double log10_b;
133 const struct real_format *fmt;
c65699ef 134 const struct real_format *widefmt;
cb60f38d
NB
135
136 char name[64], buf[128];
137 int dig, min_10_exp, max_10_exp;
138 int decimal_dig;
2778d766 139 int type_decimal_dig;
cb60f38d 140
70a01792 141 fmt = REAL_MODE_FORMAT (TYPE_MODE (type));
9a8ce21f 142 gcc_assert (fmt->b != 10);
c65699ef
JM
143 widefmt = REAL_MODE_FORMAT (TYPE_MODE (long_double_type_node));
144 gcc_assert (widefmt->b != 10);
145 for (int i = 0; i < NUM_FLOATN_NX_TYPES; i++)
146 {
147 tree wtype = FLOATN_NX_TYPE_NODE (i);
148 if (wtype != NULL_TREE)
149 {
150 const struct real_format *wfmt
151 = REAL_MODE_FORMAT (TYPE_MODE (wtype));
152 gcc_assert (wfmt->b != 10);
153 if (wfmt->p > widefmt->p)
154 widefmt = wfmt;
155 }
156 }
cb60f38d
NB
157
158 /* The radix of the exponent representation. */
159 if (type == float_type_node)
160 builtin_define_with_int_value ("__FLT_RADIX__", fmt->b);
4d8a8a0a 161 log10_b = log10_2;
cb60f38d
NB
162
163 /* The number of radix digits, p, in the floating-point significand. */
164 sprintf (name, "__%s_MANT_DIG__", name_prefix);
165 builtin_define_with_int_value (name, fmt->p);
166
167 /* The number of decimal digits, q, such that any floating-point number
168 with q decimal digits can be rounded into a floating-point number with
169 p radix b digits and back again without change to the q decimal digits,
170
171 p log10 b if b is a power of 10
35b1a6fa 172 floor((p - 1) log10 b) otherwise
cb60f38d
NB
173 */
174 dig = (fmt->p - 1) * log10_b;
175 sprintf (name, "__%s_DIG__", name_prefix);
176 builtin_define_with_int_value (name, dig);
177
178 /* The minimum negative int x such that b**(x-1) is a normalized float. */
179 sprintf (name, "__%s_MIN_EXP__", name_prefix);
180 sprintf (buf, "(%d)", fmt->emin);
181 builtin_define_with_value (name, buf, 0);
182
183 /* The minimum negative int x such that 10**x is a normalized float,
184
185 ceil (log10 (b ** (emin - 1)))
186 = ceil (log10 (b) * (emin - 1))
187
188 Recall that emin is negative, so the integer truncation calculates
189 the ceiling, not the floor, in this case. */
190 min_10_exp = (fmt->emin - 1) * log10_b;
191 sprintf (name, "__%s_MIN_10_EXP__", name_prefix);
192 sprintf (buf, "(%d)", min_10_exp);
193 builtin_define_with_value (name, buf, 0);
194
195 /* The maximum int x such that b**(x-1) is a representable float. */
196 sprintf (name, "__%s_MAX_EXP__", name_prefix);
197 builtin_define_with_int_value (name, fmt->emax);
198
199 /* The maximum int x such that 10**x is in the range of representable
200 finite floating-point numbers,
201
202 floor (log10((1 - b**-p) * b**emax))
203 = floor (log10(1 - b**-p) + log10(b**emax))
204 = floor (log10(1 - b**-p) + log10(b)*emax)
205
206 The safest thing to do here is to just compute this number. But since
207 we don't link cc1 with libm, we cannot. We could implement log10 here
208 a series expansion, but that seems too much effort because:
209
210 Note that the first term, for all extant p, is a number exceedingly close
211 to zero, but slightly negative. Note that the second term is an integer
212 scaling an irrational number, and that because of the floor we are only
213 interested in its integral portion.
214
215 In order for the first term to have any effect on the integral portion
216 of the second term, the second term has to be exceedingly close to an
217 integer itself (e.g. 123.000000000001 or something). Getting a result
218 that close to an integer requires that the irrational multiplicand have
219 a long series of zeros in its expansion, which doesn't occur in the
220 first 20 digits or so of log10(b).
221
222 Hand-waving aside, crunching all of the sets of constants above by hand
223 does not yield a case for which the first term is significant, which
224 in the end is all that matters. */
225 max_10_exp = fmt->emax * log10_b;
226 sprintf (name, "__%s_MAX_10_EXP__", name_prefix);
227 builtin_define_with_int_value (name, max_10_exp);
228
229 /* The number of decimal digits, n, such that any floating-point number
230 can be rounded to n decimal digits and back again without change to
35b1a6fa 231 the value.
cb60f38d
NB
232
233 p * log10(b) if b is a power of 10
234 ceil(1 + p * log10(b)) otherwise
235
236 The only macro we care about is this number for the widest supported
237 floating type, but we want this value for rendering constants below. */
238 {
8ce94e44 239 double d_decimal_dig
c65699ef 240 = 1 + (fmt->p < widefmt->p ? widefmt->p : fmt->p) * log10_b;
cb60f38d
NB
241 decimal_dig = d_decimal_dig;
242 if (decimal_dig < d_decimal_dig)
243 decimal_dig++;
244 }
2778d766
JM
245 /* Similar, for this type rather than long double. */
246 {
247 double type_d_decimal_dig = 1 + fmt->p * log10_b;
248 type_decimal_dig = type_d_decimal_dig;
249 if (type_decimal_dig < type_d_decimal_dig)
250 type_decimal_dig++;
251 }
97fcf744
JM
252 /* Define __DECIMAL_DIG__ to the value for long double to be
253 compatible with C99 and C11; see DR#501 and N2108. */
cb60f38d 254 if (type == long_double_type_node)
97fcf744 255 builtin_define_with_int_value ("__DECIMAL_DIG__", type_decimal_dig);
c65699ef
JM
256 sprintf (name, "__%s_DECIMAL_DIG__", name_prefix);
257 builtin_define_with_int_value (name, type_decimal_dig);
cb60f38d
NB
258
259 /* Since, for the supported formats, B is always a power of 2, we
260 construct the following numbers directly as a hexadecimal
261 constants. */
00be2a5f 262 get_max_float (fmt, buf, sizeof (buf), false);
b8698a0f 263
cb60f38d 264 sprintf (name, "__%s_MAX__", name_prefix);
264c41ed 265 builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix, fp_cast);
cb60f38d 266
00be2a5f
JM
267 get_max_float (fmt, buf, sizeof (buf), true);
268
269 sprintf (name, "__%s_NORM_MAX__", name_prefix);
270 builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix, fp_cast);
271
cb60f38d
NB
272 /* The minimum normalized positive floating-point number,
273 b**(emin-1). */
274 sprintf (name, "__%s_MIN__", name_prefix);
4d8a8a0a 275 sprintf (buf, "0x1p%d", fmt->emin - 1);
264c41ed 276 builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix, fp_cast);
cb60f38d
NB
277
278 /* The difference between 1 and the least value greater than 1 that is
279 representable in the given floating point type, b**(1-p). */
280 sprintf (name, "__%s_EPSILON__", name_prefix);
59d7d767
GK
281 if (fmt->pnan < fmt->p)
282 /* This is an IBM extended double format, so 1.0 + any double is
283 representable precisely. */
4d8a8a0a 284 sprintf (buf, "0x1p%d", fmt->emin - fmt->p);
c22cacf3 285 else
4d8a8a0a 286 sprintf (buf, "0x1p%d", 1 - fmt->p);
264c41ed 287 builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix, fp_cast);
cb60f38d 288
179b5a55
MG
289 /* For C++ std::numeric_limits<T>::denorm_min and C11 *_TRUE_MIN.
290 The minimum denormalized positive floating-point number, b**(emin-p).
291 The minimum normalized positive floating-point number for formats
292 that don't support denormals. */
cb60f38d 293 sprintf (name, "__%s_DENORM_MIN__", name_prefix);
179b5a55
MG
294 sprintf (buf, "0x1p%d", fmt->emin - (fmt->has_denorm ? fmt->p : 1));
295 builtin_define_with_hex_fp_value (name, type, decimal_dig,
296 buf, fp_suffix, fp_cast);
cb60f38d 297
264c41ed
CD
298 sprintf (name, "__%s_HAS_DENORM__", name_prefix);
299 builtin_define_with_value (name, fmt->has_denorm ? "1" : "0", 0);
300
cb60f38d
NB
301 /* For C++ std::numeric_limits<T>::has_infinity. */
302 sprintf (name, "__%s_HAS_INFINITY__", name_prefix);
35b1a6fa 303 builtin_define_with_int_value (name,
cb60f38d
NB
304 MODE_HAS_INFINITIES (TYPE_MODE (type)));
305 /* For C++ std::numeric_limits<T>::has_quiet_NaN. We do not have a
306 predicate to distinguish a target that has both quiet and
307 signalling NaNs from a target that has only quiet NaNs or only
308 signalling NaNs, so we assume that a target that has any kind of
309 NaN has quiet NaNs. */
310 sprintf (name, "__%s_HAS_QUIET_NAN__", name_prefix);
311 builtin_define_with_int_value (name, MODE_HAS_NANS (TYPE_MODE (type)));
1b1562a5
MM
312
313 /* Note whether we have fast FMA. */
c65699ef 314 if (mode_has_fma (TYPE_MODE (type)) && fma_suffix != NULL)
1b1562a5
MM
315 {
316 sprintf (name, "__FP_FAST_FMA%s", fma_suffix);
317 builtin_define_with_int_value (name, 1);
318 }
cb60f38d
NB
319}
320
9a8ce21f
JG
321/* Define __DECx__ constants for TYPE using NAME_PREFIX and SUFFIX. */
322static void
b8698a0f
L
323builtin_define_decimal_float_constants (const char *name_prefix,
324 const char *suffix,
9a8ce21f
JG
325 tree type)
326{
327 const struct real_format *fmt;
328 char name[64], buf[128], *p;
329 int digits;
330
331 fmt = REAL_MODE_FORMAT (TYPE_MODE (type));
332
333 /* The number of radix digits, p, in the significand. */
334 sprintf (name, "__%s_MANT_DIG__", name_prefix);
335 builtin_define_with_int_value (name, fmt->p);
336
337 /* The minimum negative int x such that b**(x-1) is a normalized float. */
338 sprintf (name, "__%s_MIN_EXP__", name_prefix);
339 sprintf (buf, "(%d)", fmt->emin);
340 builtin_define_with_value (name, buf, 0);
341
342 /* The maximum int x such that b**(x-1) is a representable float. */
343 sprintf (name, "__%s_MAX_EXP__", name_prefix);
344 builtin_define_with_int_value (name, fmt->emax);
345
346 /* Compute the minimum representable value. */
347 sprintf (name, "__%s_MIN__", name_prefix);
c52ec948 348 sprintf (buf, "1E%d%s", fmt->emin - 1, suffix);
b8698a0f 349 builtin_define_with_value (name, buf, 0);
9a8ce21f
JG
350
351 /* Compute the maximum representable value. */
352 sprintf (name, "__%s_MAX__", name_prefix);
353 p = buf;
354 for (digits = fmt->p; digits; digits--)
355 {
356 *p++ = '9';
357 if (digits == fmt->p)
358 *p++ = '.';
359 }
360 *p = 0;
c52ec948
JJ
361 /* fmt->p plus 1, to account for the decimal point and fmt->emax
362 minus 1 because the digits are nines, not 1.0. */
b8698a0f 363 sprintf (&buf[fmt->p + 1], "E%d%s", fmt->emax - 1, suffix);
9a8ce21f
JG
364 builtin_define_with_value (name, buf, 0);
365
366 /* Compute epsilon (the difference between 1 and least value greater
367 than 1 representable). */
368 sprintf (name, "__%s_EPSILON__", name_prefix);
369 sprintf (buf, "1E-%d%s", fmt->p - 1, suffix);
370 builtin_define_with_value (name, buf, 0);
371
c52ec948
JJ
372 /* Minimum subnormal positive decimal value. */
373 sprintf (name, "__%s_SUBNORMAL_MIN__", name_prefix);
9a8ce21f
JG
374 p = buf;
375 for (digits = fmt->p; digits > 1; digits--)
376 {
377 *p++ = '0';
378 if (digits == fmt->p)
379 *p++ = '.';
380 }
381 *p = 0;
b8698a0f 382 sprintf (&buf[fmt->p], "1E%d%s", fmt->emin - 1, suffix);
9a8ce21f
JG
383 builtin_define_with_value (name, buf, 0);
384}
385
0f996086
CF
386/* Define fixed-point constants for TYPE using NAME_PREFIX and SUFFIX. */
387
388static void
389builtin_define_fixed_point_constants (const char *name_prefix,
390 const char *suffix,
391 tree type)
392{
393 char name[64], buf[256], *new_buf;
394 int i, mod;
395
396 sprintf (name, "__%s_FBIT__", name_prefix);
397 builtin_define_with_int_value (name, TYPE_FBIT (type));
398
399 sprintf (name, "__%s_IBIT__", name_prefix);
400 builtin_define_with_int_value (name, TYPE_IBIT (type));
401
402 /* If there is no suffix, defines are for fixed-point modes.
403 We just return. */
404 if (strcmp (suffix, "") == 0)
405 return;
406
407 if (TYPE_UNSIGNED (type))
408 {
409 sprintf (name, "__%s_MIN__", name_prefix);
410 sprintf (buf, "0.0%s", suffix);
411 builtin_define_with_value (name, buf, 0);
412 }
413 else
414 {
415 sprintf (name, "__%s_MIN__", name_prefix);
416 if (ALL_ACCUM_MODE_P (TYPE_MODE (type)))
417 sprintf (buf, "(-0X1P%d%s-0X1P%d%s)", TYPE_IBIT (type) - 1, suffix,
418 TYPE_IBIT (type) - 1, suffix);
419 else
420 sprintf (buf, "(-0.5%s-0.5%s)", suffix, suffix);
421 builtin_define_with_value (name, buf, 0);
422 }
423
424 sprintf (name, "__%s_MAX__", name_prefix);
425 sprintf (buf, "0X");
426 new_buf = buf + 2;
427 mod = (TYPE_FBIT (type) + TYPE_IBIT (type)) % 4;
428 if (mod)
429 sprintf (new_buf++, "%x", (1 << mod) - 1);
430 for (i = 0; i < (TYPE_FBIT (type) + TYPE_IBIT (type)) / 4; i++)
431 sprintf (new_buf++, "F");
432 sprintf (new_buf, "P-%d%s", TYPE_FBIT (type), suffix);
433 builtin_define_with_value (name, buf, 0);
434
435 sprintf (name, "__%s_EPSILON__", name_prefix);
436 sprintf (buf, "0x1P-%d%s", TYPE_FBIT (type), suffix);
437 builtin_define_with_value (name, buf, 0);
438}
439
207bf79d 440/* Define macros used by <stdint.h>. */
85291069
JM
441static void
442builtin_define_stdint_macros (void)
443{
207bf79d
JM
444 builtin_define_type_max ("__INTMAX_MAX__", intmax_type_node);
445 builtin_define_constants ("__INTMAX_C", intmax_type_node);
446 builtin_define_type_max ("__UINTMAX_MAX__", uintmax_type_node);
447 builtin_define_constants ("__UINTMAX_C", uintmax_type_node);
c65248cb
JM
448 builtin_define_type_width ("__INTMAX_WIDTH__", intmax_type_node,
449 uintmax_type_node);
207bf79d 450 if (sig_atomic_type_node)
c65248cb
JM
451 {
452 builtin_define_type_minmax ("__SIG_ATOMIC_MIN__", "__SIG_ATOMIC_MAX__",
453 sig_atomic_type_node);
454 builtin_define_type_width ("__SIG_ATOMIC_WIDTH__", sig_atomic_type_node,
455 NULL_TREE);
456 }
207bf79d
JM
457 if (int8_type_node)
458 builtin_define_type_max ("__INT8_MAX__", int8_type_node);
459 if (int16_type_node)
460 builtin_define_type_max ("__INT16_MAX__", int16_type_node);
461 if (int32_type_node)
462 builtin_define_type_max ("__INT32_MAX__", int32_type_node);
463 if (int64_type_node)
464 builtin_define_type_max ("__INT64_MAX__", int64_type_node);
465 if (uint8_type_node)
466 builtin_define_type_max ("__UINT8_MAX__", uint8_type_node);
ac868f29
EB
467 if (c_uint16_type_node)
468 builtin_define_type_max ("__UINT16_MAX__", c_uint16_type_node);
207bf79d
JM
469 if (c_uint32_type_node)
470 builtin_define_type_max ("__UINT32_MAX__", c_uint32_type_node);
471 if (c_uint64_type_node)
472 builtin_define_type_max ("__UINT64_MAX__", c_uint64_type_node);
473 if (int_least8_type_node)
474 {
475 builtin_define_type_max ("__INT_LEAST8_MAX__", int_least8_type_node);
476 builtin_define_constants ("__INT8_C", int_least8_type_node);
c65248cb
JM
477 builtin_define_type_width ("__INT_LEAST8_WIDTH__", int_least8_type_node,
478 uint_least8_type_node);
207bf79d
JM
479 }
480 if (int_least16_type_node)
481 {
482 builtin_define_type_max ("__INT_LEAST16_MAX__", int_least16_type_node);
483 builtin_define_constants ("__INT16_C", int_least16_type_node);
c65248cb
JM
484 builtin_define_type_width ("__INT_LEAST16_WIDTH__",
485 int_least16_type_node,
486 uint_least16_type_node);
207bf79d
JM
487 }
488 if (int_least32_type_node)
489 {
490 builtin_define_type_max ("__INT_LEAST32_MAX__", int_least32_type_node);
491 builtin_define_constants ("__INT32_C", int_least32_type_node);
c65248cb
JM
492 builtin_define_type_width ("__INT_LEAST32_WIDTH__",
493 int_least32_type_node,
494 uint_least32_type_node);
207bf79d
JM
495 }
496 if (int_least64_type_node)
497 {
498 builtin_define_type_max ("__INT_LEAST64_MAX__", int_least64_type_node);
499 builtin_define_constants ("__INT64_C", int_least64_type_node);
c65248cb
JM
500 builtin_define_type_width ("__INT_LEAST64_WIDTH__",
501 int_least64_type_node,
502 uint_least64_type_node);
207bf79d
JM
503 }
504 if (uint_least8_type_node)
505 {
506 builtin_define_type_max ("__UINT_LEAST8_MAX__", uint_least8_type_node);
507 builtin_define_constants ("__UINT8_C", uint_least8_type_node);
508 }
509 if (uint_least16_type_node)
510 {
511 builtin_define_type_max ("__UINT_LEAST16_MAX__", uint_least16_type_node);
512 builtin_define_constants ("__UINT16_C", uint_least16_type_node);
513 }
514 if (uint_least32_type_node)
515 {
516 builtin_define_type_max ("__UINT_LEAST32_MAX__", uint_least32_type_node);
517 builtin_define_constants ("__UINT32_C", uint_least32_type_node);
518 }
519 if (uint_least64_type_node)
520 {
521 builtin_define_type_max ("__UINT_LEAST64_MAX__", uint_least64_type_node);
522 builtin_define_constants ("__UINT64_C", uint_least64_type_node);
523 }
524 if (int_fast8_type_node)
c65248cb
JM
525 {
526 builtin_define_type_max ("__INT_FAST8_MAX__", int_fast8_type_node);
527 builtin_define_type_width ("__INT_FAST8_WIDTH__", int_fast8_type_node,
528 uint_fast8_type_node);
529 }
207bf79d 530 if (int_fast16_type_node)
c65248cb
JM
531 {
532 builtin_define_type_max ("__INT_FAST16_MAX__", int_fast16_type_node);
533 builtin_define_type_width ("__INT_FAST16_WIDTH__", int_fast16_type_node,
534 uint_fast16_type_node);
535 }
207bf79d 536 if (int_fast32_type_node)
c65248cb
JM
537 {
538 builtin_define_type_max ("__INT_FAST32_MAX__", int_fast32_type_node);
539 builtin_define_type_width ("__INT_FAST32_WIDTH__", int_fast32_type_node,
540 uint_fast32_type_node);
541 }
207bf79d 542 if (int_fast64_type_node)
c65248cb
JM
543 {
544 builtin_define_type_max ("__INT_FAST64_MAX__", int_fast64_type_node);
545 builtin_define_type_width ("__INT_FAST64_WIDTH__", int_fast64_type_node,
546 uint_fast64_type_node);
547 }
207bf79d
JM
548 if (uint_fast8_type_node)
549 builtin_define_type_max ("__UINT_FAST8_MAX__", uint_fast8_type_node);
550 if (uint_fast16_type_node)
551 builtin_define_type_max ("__UINT_FAST16_MAX__", uint_fast16_type_node);
552 if (uint_fast32_type_node)
553 builtin_define_type_max ("__UINT_FAST32_MAX__", uint_fast32_type_node);
554 if (uint_fast64_type_node)
555 builtin_define_type_max ("__UINT_FAST64_MAX__", uint_fast64_type_node);
556 if (intptr_type_node)
c65248cb
JM
557 {
558 builtin_define_type_max ("__INTPTR_MAX__", intptr_type_node);
559 builtin_define_type_width ("__INTPTR_WIDTH__", intptr_type_node,
560 uintptr_type_node);
561 }
207bf79d
JM
562 if (uintptr_type_node)
563 builtin_define_type_max ("__UINTPTR_MAX__", uintptr_type_node);
85291069
JM
564}
565
ab442df7
MM
566/* Adjust the optimization macros when a #pragma GCC optimization is done to
567 reflect the current level. */
568void
569c_cpp_builtins_optimize_pragma (cpp_reader *pfile, tree prev_tree,
570 tree cur_tree)
571{
572 struct cl_optimization *prev = TREE_OPTIMIZATION (prev_tree);
573 struct cl_optimization *cur = TREE_OPTIMIZATION (cur_tree);
574 bool prev_fast_math;
575 bool cur_fast_math;
576
577 /* -undef turns off target-specific built-ins. */
578 if (flag_undef)
579 return;
580
581 /* Other target-independent built-ins determined by command-line
582 options. */
e3339d0f 583 if (!prev->x_optimize_size && cur->x_optimize_size)
ab442df7 584 cpp_define (pfile, "__OPTIMIZE_SIZE__");
e3339d0f 585 else if (prev->x_optimize_size && !cur->x_optimize_size)
ab442df7
MM
586 cpp_undef (pfile, "__OPTIMIZE_SIZE__");
587
e3339d0f 588 if (!prev->x_optimize && cur->x_optimize)
ab442df7 589 cpp_define (pfile, "__OPTIMIZE__");
e3339d0f 590 else if (prev->x_optimize && !cur->x_optimize)
ab442df7
MM
591 cpp_undef (pfile, "__OPTIMIZE__");
592
593 prev_fast_math = fast_math_flags_struct_set_p (prev);
594 cur_fast_math = fast_math_flags_struct_set_p (cur);
595 if (!prev_fast_math && cur_fast_math)
596 cpp_define (pfile, "__FAST_MATH__");
597 else if (prev_fast_math && !cur_fast_math)
598 cpp_undef (pfile, "__FAST_MATH__");
599
e3339d0f 600 if (!prev->x_flag_signaling_nans && cur->x_flag_signaling_nans)
ab442df7 601 cpp_define (pfile, "__SUPPORT_SNAN__");
e3339d0f 602 else if (prev->x_flag_signaling_nans && !cur->x_flag_signaling_nans)
ab442df7
MM
603 cpp_undef (pfile, "__SUPPORT_SNAN__");
604
2079956a
JM
605 if (!prev->x_flag_errno_math && cur->x_flag_errno_math)
606 cpp_undef (pfile, "__NO_MATH_ERRNO__");
607 else if (prev->x_flag_errno_math && !cur->x_flag_errno_math)
608 cpp_define (pfile, "__NO_MATH_ERRNO__");
609
e3339d0f 610 if (!prev->x_flag_finite_math_only && cur->x_flag_finite_math_only)
ab442df7
MM
611 {
612 cpp_undef (pfile, "__FINITE_MATH_ONLY__");
613 cpp_define (pfile, "__FINITE_MATH_ONLY__=1");
614 }
0e3fdb48 615 else if (prev->x_flag_finite_math_only && !cur->x_flag_finite_math_only)
ab442df7
MM
616 {
617 cpp_undef (pfile, "__FINITE_MATH_ONLY__");
618 cpp_define (pfile, "__FINITE_MATH_ONLY__=0");
619 }
620}
621
622
62bad7cd
AM
623/* This function will emit cpp macros to indicate the presence of various lock
624 free atomic operations. */
625
626static void
627cpp_atomic_builtins (cpp_reader *pfile)
628{
629 /* Set a flag for each size of object that compare and swap exists for up to
630 a 16 byte object. */
631#define SWAP_LIMIT 17
632 bool have_swap[SWAP_LIMIT];
633 unsigned int psize;
634
635 /* Clear the map of sizes compare_and swap exists for. */
636 memset (have_swap, 0, sizeof (have_swap));
637
638 /* Tell source code if the compiler makes sync_compare_and_swap
639 builtins available. */
640#ifndef HAVE_sync_compare_and_swapqi
641#define HAVE_sync_compare_and_swapqi 0
642#endif
643#ifndef HAVE_atomic_compare_and_swapqi
644#define HAVE_atomic_compare_and_swapqi 0
645#endif
646
647 if (HAVE_sync_compare_and_swapqi || HAVE_atomic_compare_and_swapqi)
648 {
649 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
650 have_swap[1] = true;
651 }
652
653#ifndef HAVE_sync_compare_and_swaphi
654#define HAVE_sync_compare_and_swaphi 0
655#endif
656#ifndef HAVE_atomic_compare_and_swaphi
657#define HAVE_atomic_compare_and_swaphi 0
658#endif
659 if (HAVE_sync_compare_and_swaphi || HAVE_atomic_compare_and_swaphi)
660 {
661 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
662 have_swap[2] = true;
663 }
664
665#ifndef HAVE_sync_compare_and_swapsi
666#define HAVE_sync_compare_and_swapsi 0
667#endif
668#ifndef HAVE_atomic_compare_and_swapsi
669#define HAVE_atomic_compare_and_swapsi 0
670#endif
671 if (HAVE_sync_compare_and_swapsi || HAVE_atomic_compare_and_swapsi)
672 {
673 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
674 have_swap[4] = true;
675 }
676
677#ifndef HAVE_sync_compare_and_swapdi
678#define HAVE_sync_compare_and_swapdi 0
679#endif
680#ifndef HAVE_atomic_compare_and_swapdi
681#define HAVE_atomic_compare_and_swapdi 0
682#endif
683 if (HAVE_sync_compare_and_swapdi || HAVE_atomic_compare_and_swapdi)
684 {
685 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
686 have_swap[8] = true;
687 }
688
689#ifndef HAVE_sync_compare_and_swapti
690#define HAVE_sync_compare_and_swapti 0
691#endif
692#ifndef HAVE_atomic_compare_and_swapti
693#define HAVE_atomic_compare_and_swapti 0
694#endif
695 if (HAVE_sync_compare_and_swapti || HAVE_atomic_compare_and_swapti)
696 {
697 cpp_define (pfile, "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16");
698 have_swap[16] = true;
699 }
700
48b0b196 701 /* Tell the source code about various types. These map to the C++11 and C11
62bad7cd
AM
702 macros where 2 indicates lock-free always, and 1 indicates sometimes
703 lock free. */
ae7e9ddd 704#define SIZEOF_NODE(T) (tree_to_uhwi (TYPE_SIZE_UNIT (T)))
62bad7cd
AM
705#define SWAP_INDEX(T) ((SIZEOF_NODE (T) < SWAP_LIMIT) ? SIZEOF_NODE (T) : 0)
706 builtin_define_with_int_value ("__GCC_ATOMIC_BOOL_LOCK_FREE",
707 (have_swap[SWAP_INDEX (boolean_type_node)]? 2 : 1));
708 builtin_define_with_int_value ("__GCC_ATOMIC_CHAR_LOCK_FREE",
709 (have_swap[SWAP_INDEX (signed_char_type_node)]? 2 : 1));
2d91f79d
TH
710 if (flag_char8_t)
711 builtin_define_with_int_value ("__GCC_ATOMIC_CHAR8_T_LOCK_FREE",
712 (have_swap[SWAP_INDEX (char8_type_node)]? 2 : 1));
62bad7cd
AM
713 builtin_define_with_int_value ("__GCC_ATOMIC_CHAR16_T_LOCK_FREE",
714 (have_swap[SWAP_INDEX (char16_type_node)]? 2 : 1));
715 builtin_define_with_int_value ("__GCC_ATOMIC_CHAR32_T_LOCK_FREE",
716 (have_swap[SWAP_INDEX (char32_type_node)]? 2 : 1));
717 builtin_define_with_int_value ("__GCC_ATOMIC_WCHAR_T_LOCK_FREE",
718 (have_swap[SWAP_INDEX (wchar_type_node)]? 2 : 1));
719 builtin_define_with_int_value ("__GCC_ATOMIC_SHORT_LOCK_FREE",
720 (have_swap[SWAP_INDEX (short_integer_type_node)]? 2 : 1));
721 builtin_define_with_int_value ("__GCC_ATOMIC_INT_LOCK_FREE",
722 (have_swap[SWAP_INDEX (integer_type_node)]? 2 : 1));
723 builtin_define_with_int_value ("__GCC_ATOMIC_LONG_LOCK_FREE",
724 (have_swap[SWAP_INDEX (long_integer_type_node)]? 2 : 1));
725 builtin_define_with_int_value ("__GCC_ATOMIC_LLONG_LOCK_FREE",
726 (have_swap[SWAP_INDEX (long_long_integer_type_node)]? 2 : 1));
727
57c5ab1b
RH
728 /* If we're dealing with a "set" value that doesn't exactly correspond
729 to a boolean truth value, let the library work around that. */
730 builtin_define_with_int_value ("__GCC_ATOMIC_TEST_AND_SET_TRUEVAL",
731 targetm.atomic_test_and_set_trueval);
732
62bad7cd
AM
733 /* ptr_type_node can't be used here since ptr_mode is only set when
734 toplev calls backend_init which is not done with -E or pch. */
5b8300ea 735 psize = POINTER_SIZE_UNITS;
62bad7cd
AM
736 if (psize >= SWAP_LIMIT)
737 psize = 0;
738 builtin_define_with_int_value ("__GCC_ATOMIC_POINTER_LOCK_FREE",
739 (have_swap[psize]? 2 : 1));
740}
741
56d8ffc1
JG
742/* Return TRUE if the implicit excess precision in which the back-end will
743 compute floating-point calculations is not more than the explicit
744 excess precision that the front-end will apply under
745 -fexcess-precision=[standard|fast].
746
747 More intuitively, return TRUE if the excess precision proposed by the
748 front-end is the excess precision that will actually be used. */
749
750static bool
751c_cpp_flt_eval_method_iec_559 (void)
752{
753 enum excess_precision_type front_end_ept
df375b03 754 = (flag_excess_precision == EXCESS_PRECISION_STANDARD
56d8ffc1
JG
755 ? EXCESS_PRECISION_TYPE_STANDARD
756 : EXCESS_PRECISION_TYPE_FAST);
757
758 enum flt_eval_method back_end
759 = targetm.c.excess_precision (EXCESS_PRECISION_TYPE_IMPLICIT);
760
761 enum flt_eval_method front_end
762 = targetm.c.excess_precision (front_end_ept);
763
764 return excess_precision_mode_join (front_end, back_end) == front_end;
765}
766
9193fb05
JM
767/* Return the value for __GCC_IEC_559. */
768static int
769cpp_iec_559_value (void)
770{
771 /* The default is support for IEEE 754-2008. */
772 int ret = 2;
773
774 /* float and double must be binary32 and binary64. If they are but
775 with reversed NaN convention, at most IEEE 754-1985 is
776 supported. */
777 const struct real_format *ffmt
778 = REAL_MODE_FORMAT (TYPE_MODE (float_type_node));
779 const struct real_format *dfmt
780 = REAL_MODE_FORMAT (TYPE_MODE (double_type_node));
781 if (!ffmt->qnan_msb_set || !dfmt->qnan_msb_set)
782 ret = 1;
783 if (ffmt->b != 2
784 || ffmt->p != 24
785 || ffmt->pnan != 24
786 || ffmt->emin != -125
787 || ffmt->emax != 128
788 || ffmt->signbit_rw != 31
789 || ffmt->round_towards_zero
790 || !ffmt->has_sign_dependent_rounding
791 || !ffmt->has_nans
792 || !ffmt->has_inf
793 || !ffmt->has_denorm
794 || !ffmt->has_signed_zero
795 || dfmt->b != 2
796 || dfmt->p != 53
797 || dfmt->pnan != 53
798 || dfmt->emin != -1021
799 || dfmt->emax != 1024
800 || dfmt->signbit_rw != 63
801 || dfmt->round_towards_zero
802 || !dfmt->has_sign_dependent_rounding
803 || !dfmt->has_nans
804 || !dfmt->has_inf
805 || !dfmt->has_denorm
806 || !dfmt->has_signed_zero)
807 ret = 0;
808
56d8ffc1
JG
809 /* In strict C standards conformance mode, consider a back-end providing
810 more implicit excess precision than the explicit excess precision
811 the front-end options would require to mean a lack of IEEE 754
812 support. For C++, and outside strict conformance mode, do not consider
813 this to mean a lack of IEEE 754 support. */
814
9193fb05
JM
815 if (flag_iso
816 && !c_dialect_cxx ()
56d8ffc1 817 && !c_cpp_flt_eval_method_iec_559 ())
9193fb05 818 ret = 0;
56d8ffc1 819
6dbe0958
JM
820 if (flag_iso
821 && !c_dialect_cxx ()
822 && flag_fp_contract_mode == FP_CONTRACT_FAST)
823 ret = 0;
9193fb05
JM
824
825 /* Various options are contrary to IEEE 754 semantics. */
826 if (flag_unsafe_math_optimizations
827 || flag_associative_math
828 || flag_reciprocal_math
829 || flag_finite_math_only
830 || !flag_signed_zeros
831 || flag_single_precision_constant)
832 ret = 0;
833
834 /* If the target does not support IEEE 754 exceptions and rounding
835 modes, consider IEEE 754 support to be absent. */
836 if (!targetm.float_exceptions_rounding_supported_p ())
837 ret = 0;
838
839 return ret;
840}
841
842/* Return the value for __GCC_IEC_559_COMPLEX. */
843static int
844cpp_iec_559_complex_value (void)
845{
846 /* The value is no bigger than that of __GCC_IEC_559. */
847 int ret = cpp_iec_559_value ();
848
849 /* Some options are contrary to the required default state of the
850 CX_LIMITED_RANGE pragma. */
851 if (flag_complex_method != 2)
852 ret = 0;
853
854 return ret;
855}
856
cb60f38d
NB
857/* Hook that registers front end and target-specific built-ins. */
858void
35b1a6fa 859c_cpp_builtins (cpp_reader *pfile)
cb60f38d 860{
78a7c317
DD
861 int i;
862
cb60f38d
NB
863 /* -undef turns off target-specific built-ins. */
864 if (flag_undef)
865 return;
866
82a1c2fe
FXC
867 define_language_independent_builtin_macros (pfile);
868
869 if (c_dialect_cxx ())
870 {
871 int major;
872 parse_basever (&major, NULL, NULL);
873 cpp_define_formatted (pfile, "__GNUG__=%d", major);
874 }
cb60f38d
NB
875
876 /* For stddef.h. They require macros defined in c-common.c. */
877 c_stddef_cpp_builtins ();
878
37fa72e9 879 if (c_dialect_cxx ())
cb60f38d 880 {
c22cacf3 881 if (flag_weak && SUPPORTS_ONE_ONLY)
cb60f38d
NB
882 cpp_define (pfile, "__GXX_WEAK__=1");
883 else
884 cpp_define (pfile, "__GXX_WEAK__=0");
a15f7cb8 885
cb60f38d
NB
886 if (warn_deprecated)
887 cpp_define (pfile, "__DEPRECATED");
a15f7cb8 888
ba551ec2 889 if (flag_rtti)
42fd12b1
ESR
890 {
891 cpp_define (pfile, "__GXX_RTTI");
43f1814c 892 cpp_define (pfile, "__cpp_rtti=199711L");
42fd12b1 893 }
a15f7cb8 894
604b2bfc 895 if (cxx_dialect >= cxx11)
c573f4d5 896 cpp_define (pfile, "__GXX_EXPERIMENTAL_CXX0X__");
a15f7cb8
ESR
897
898 /* Binary literals have been allowed in g++ before C++11
899 and were standardized for C++14. */
900 if (!pedantic || cxx_dialect > cxx11)
43f1814c 901 cpp_define (pfile, "__cpp_binary_literals=201304L");
94a073b2 902
2aaeea19
JM
903 /* Similarly for hexadecimal floating point literals and C++17. */
904 if (!pedantic || cpp_get_options (parse_in)->extended_numbers)
43f1814c 905 cpp_define (pfile, "__cpp_hex_float=201603L");
2aaeea19 906
94a073b2
JM
907 /* Arrays of runtime bound were removed from C++14, but we still
908 support GNU VLAs. Let's define this macro to a low number
909 (corresponding to the initial test release of GNU C++) if we won't
910 complain about use of VLAs. */
911 if (c_dialect_cxx ()
912 && (pedantic ? warn_vla == 0 : warn_vla <= 0))
43f1814c 913 cpp_define (pfile, "__cpp_runtime_arrays=198712L");
94a073b2 914
a15f7cb8
ESR
915 if (cxx_dialect >= cxx11)
916 {
329524f5 917 /* Set feature test macros for C++11. */
13b380a3 918 if (cxx_dialect <= cxx14)
43f1814c
NS
919 cpp_define (pfile, "__cpp_unicode_characters=200704L");
920 cpp_define (pfile, "__cpp_raw_strings=200710L");
921 cpp_define (pfile, "__cpp_unicode_literals=200710L");
922 cpp_define (pfile, "__cpp_user_defined_literals=200809L");
923 cpp_define (pfile, "__cpp_lambdas=200907L");
acaa5911 924 if (cxx_dialect == cxx11)
43f1814c 925 cpp_define (pfile, "__cpp_constexpr=200704L");
9aa36ae5 926 if (cxx_dialect <= cxx14)
43f1814c 927 cpp_define (pfile, "__cpp_range_based_for=200907L");
329524f5 928 if (cxx_dialect <= cxx14)
43f1814c
NS
929 cpp_define (pfile, "__cpp_static_assert=200410L");
930 cpp_define (pfile, "__cpp_decltype=200707L");
931 cpp_define (pfile, "__cpp_attributes=200809L");
932 cpp_define (pfile, "__cpp_rvalue_reference=200610L");
933 cpp_define (pfile, "__cpp_rvalue_references=200610L");
934 cpp_define (pfile, "__cpp_variadic_templates=200704L");
935 cpp_define (pfile, "__cpp_initializer_lists=200806L");
936 cpp_define (pfile, "__cpp_delegating_constructors=200604L");
937 cpp_define (pfile, "__cpp_nsdmi=200809L");
2bc78e3c 938 if (!flag_new_inheriting_ctors)
43f1814c 939 cpp_define (pfile, "__cpp_inheriting_constructors=200802L");
2bc78e3c 940 else
43f1814c
NS
941 cpp_define (pfile, "__cpp_inheriting_constructors=201511L");
942 cpp_define (pfile, "__cpp_ref_qualifiers=200710L");
943 cpp_define (pfile, "__cpp_alias_templates=200704L");
a15f7cb8
ESR
944 }
945 if (cxx_dialect > cxx11)
946 {
329524f5 947 /* Set feature test macros for C++14. */
43f1814c 948 cpp_define (pfile, "__cpp_return_type_deduction=201304L");
761df906
JJ
949 if (cxx_dialect <= cxx17)
950 {
951 cpp_define (pfile, "__cpp_init_captures=201304L");
952 cpp_define (pfile, "__cpp_generic_lambdas=201304L");
953 }
98e5a19a 954 if (cxx_dialect <= cxx14)
43f1814c
NS
955 cpp_define (pfile, "__cpp_constexpr=201304L");
956 cpp_define (pfile, "__cpp_decltype_auto=201304L");
957 cpp_define (pfile, "__cpp_aggregate_nsdmi=201304L");
958 cpp_define (pfile, "__cpp_variable_templates=201304L");
959 cpp_define (pfile, "__cpp_digit_separators=201309L");
a15f7cb8 960 }
329524f5
PC
961 if (cxx_dialect > cxx14)
962 {
b5ff4f5c 963 /* Set feature test macros for C++17. */
43f1814c
NS
964 cpp_define (pfile, "__cpp_unicode_characters=201411L");
965 cpp_define (pfile, "__cpp_static_assert=201411L");
966 cpp_define (pfile, "__cpp_namespace_attributes=201411L");
967 cpp_define (pfile, "__cpp_enumerator_attributes=201411L");
968 cpp_define (pfile, "__cpp_nested_namespace_definitions=201411L");
969 cpp_define (pfile, "__cpp_fold_expressions=201603L");
970 cpp_define (pfile, "__cpp_nontype_template_args=201411L");
971 cpp_define (pfile, "__cpp_range_based_for=201603L");
7906797e
MP
972 if (cxx_dialect <= cxx17)
973 cpp_define (pfile, "__cpp_constexpr=201603L");
43f1814c
NS
974 cpp_define (pfile, "__cpp_if_constexpr=201606L");
975 cpp_define (pfile, "__cpp_capture_star_this=201603L");
976 cpp_define (pfile, "__cpp_inline_variables=201606L");
977 cpp_define (pfile, "__cpp_aggregate_bases=201603L");
1a291106
JM
978 if (cxx_dialect <= cxx17)
979 cpp_define (pfile, "__cpp_deduction_guides=201703L");
43f1814c 980 cpp_define (pfile, "__cpp_noexcept_function_type=201510L");
a30d0196
JJ
981 /* Old macro, superseded by
982 __cpp_nontype_template_parameter_auto. */
43f1814c
NS
983 cpp_define (pfile, "__cpp_template_auto=201606L");
984 cpp_define (pfile, "__cpp_structured_bindings=201606L");
985 cpp_define (pfile, "__cpp_variadic_using=201611L");
986 cpp_define (pfile, "__cpp_guaranteed_copy_elision=201606L");
987 cpp_define (pfile, "__cpp_nontype_template_parameter_auto=201606L");
329524f5 988 }
b5ff4f5c
MP
989 if (cxx_dialect > cxx17)
990 {
991 /* Set feature test macros for C++2a. */
761df906
JJ
992 cpp_define (pfile, "__cpp_init_captures=201803L");
993 cpp_define (pfile, "__cpp_generic_lambdas=201707L");
994 cpp_define (pfile, "__cpp_designated_initializers=201707L");
7906797e 995 cpp_define (pfile, "__cpp_constexpr=201907L");
761df906 996 cpp_define (pfile, "__cpp_constexpr_in_decltype=201711L");
43f1814c 997 cpp_define (pfile, "__cpp_conditional_explicit=201806L");
abd6d8cc 998 /* cpp_define (pfile, "__cpp_consteval=201811L"); */
43f1814c 999 cpp_define (pfile, "__cpp_constinit=201907L");
1a291106 1000 cpp_define (pfile, "__cpp_deduction_guides=201907L");
43f1814c
NS
1001 cpp_define (pfile, "__cpp_nontype_template_parameter_class=201806L");
1002 cpp_define (pfile, "__cpp_impl_destroying_delete=201806L");
1003 cpp_define (pfile, "__cpp_constexpr_dynamic_alloc=201907L");
b7689b96 1004 cpp_define (pfile, "__cpp_impl_three_way_comparison=201907L");
43aae289 1005 cpp_define (pfile, "__cpp_aggregate_paren_init=201902L");
b5ff4f5c 1006 }
971e17ff 1007 if (flag_concepts)
cb57504a
JM
1008 {
1009 if (cxx_dialect >= cxx2a)
43f1814c 1010 cpp_define (pfile, "__cpp_concepts=201907L");
cb57504a 1011 else
43f1814c 1012 cpp_define (pfile, "__cpp_concepts=201507L");
cb57504a 1013 }
49789fd0 1014 if (flag_coroutines)
ee26baf4 1015 cpp_define (pfile, "__cpp_impl_coroutine=201902L"); /* n4861, DIS */
b8fd7909
JM
1016 if (flag_tm)
1017 /* Use a value smaller than the 201505 specified in
1018 the TS, since we don't yet support atomic_cancel. */
43f1814c 1019 cpp_define (pfile, "__cpp_transactional_memory=201500L");
a7fa8d18 1020 if (flag_sized_deallocation)
43f1814c 1021 cpp_define (pfile, "__cpp_sized_deallocation=201309L");
2e1c20b1 1022 if (aligned_new_threshold)
af63ba4b 1023 {
43f1814c 1024 cpp_define (pfile, "__cpp_aligned_new=201606L");
af63ba4b 1025 cpp_define_formatted (pfile, "__STDCPP_DEFAULT_NEW_ALIGNMENT__=%d",
2e1c20b1 1026 aligned_new_threshold);
af63ba4b 1027 }
67a5ad7c 1028 if (flag_new_ttp)
43f1814c 1029 cpp_define (pfile, "__cpp_template_template_args=201611L");
019bf9ad 1030 if (flag_threadsafe_statics)
43f1814c 1031 cpp_define (pfile, "__cpp_threadsafe_static_init=200806L");
2d91f79d 1032 if (flag_char8_t)
43f1814c 1033 cpp_define (pfile, "__cpp_char8_t=201811L");
cb60f38d 1034 }
6cd77c3f
RH
1035 /* Note that we define this for C as well, so that we know if
1036 __attribute__((cleanup)) will interface with EH. */
2288bdbb 1037 if (flag_exceptions)
42fd12b1
ESR
1038 {
1039 cpp_define (pfile, "__EXCEPTIONS");
1040 if (c_dialect_cxx ())
43f1814c 1041 cpp_define (pfile, "__cpp_exceptions=199711L");
42fd12b1 1042 }
cb60f38d 1043
e0a21ab9 1044 /* Represents the C++ ABI version, always defined so it can be used while
cb60f38d 1045 preprocessing C and assembler. */
57702a80 1046 if (flag_abi_version == 0)
785f21af
JM
1047 /* We should have set this to something real in c_common_post_options. */
1048 gcc_unreachable ();
57702a80 1049 else if (flag_abi_version == 1)
1f838355 1050 /* Due to a historical accident, this version had the value
57702a80
MM
1051 "102". */
1052 builtin_define_with_int_value ("__GXX_ABI_VERSION", 102);
1053 else
e0a21ab9 1054 /* Newer versions have values 1002, 1003, .... */
c22cacf3 1055 builtin_define_with_int_value ("__GXX_ABI_VERSION",
57702a80 1056 1000 + flag_abi_version);
cb60f38d
NB
1057
1058 /* libgcc needs to know this. */
677f3fa8 1059 if (targetm_common.except_unwind_info (&global_options) == UI_SJLJ)
cb60f38d
NB
1060 cpp_define (pfile, "__USING_SJLJ_EXCEPTIONS__");
1061
207bf79d
JM
1062 /* limits.h and stdint.h need to know these. */
1063 builtin_define_type_max ("__SCHAR_MAX__", signed_char_type_node);
1064 builtin_define_type_max ("__SHRT_MAX__", short_integer_type_node);
1065 builtin_define_type_max ("__INT_MAX__", integer_type_node);
1066 builtin_define_type_max ("__LONG_MAX__", long_integer_type_node);
1067 builtin_define_type_max ("__LONG_LONG_MAX__", long_long_integer_type_node);
1068 builtin_define_type_minmax ("__WCHAR_MIN__", "__WCHAR_MAX__",
1069 underlying_wchar_type_node);
1070 builtin_define_type_minmax ("__WINT_MIN__", "__WINT_MAX__", wint_type_node);
1071 builtin_define_type_max ("__PTRDIFF_MAX__", ptrdiff_type_node);
1072 builtin_define_type_max ("__SIZE_MAX__", size_type_node);
cb60f38d 1073
c65248cb
JM
1074 /* These are needed for TS 18661-1. */
1075 builtin_define_type_width ("__SCHAR_WIDTH__", signed_char_type_node,
1076 unsigned_char_type_node);
1077 builtin_define_type_width ("__SHRT_WIDTH__", short_integer_type_node,
1078 short_unsigned_type_node);
1079 builtin_define_type_width ("__INT_WIDTH__", integer_type_node,
1080 unsigned_type_node);
1081 builtin_define_type_width ("__LONG_WIDTH__", long_integer_type_node,
1082 long_unsigned_type_node);
1083 builtin_define_type_width ("__LONG_LONG_WIDTH__",
1084 long_long_integer_type_node,
1085 long_long_unsigned_type_node);
1086 builtin_define_type_width ("__WCHAR_WIDTH__", underlying_wchar_type_node,
1087 NULL_TREE);
1088 builtin_define_type_width ("__WINT_WIDTH__", wint_type_node, NULL_TREE);
1089 builtin_define_type_width ("__PTRDIFF_WIDTH__", ptrdiff_type_node, NULL_TREE);
1090 builtin_define_type_width ("__SIZE_WIDTH__", size_type_node, NULL_TREE);
1091
e1217ac7
DD
1092 if (c_dialect_cxx ())
1093 for (i = 0; i < NUM_INT_N_ENTS; i ++)
1094 if (int_n_enabled_p[i])
1095 {
1096 char buf[35+20+20];
1097
1098 /* These are used to configure the C++ library. */
1099
1100 if (!flag_iso || int_n_data[i].bitsize == POINTER_SIZE)
1101 {
1102 sprintf (buf, "__GLIBCXX_TYPE_INT_N_%d=__int%d", i, int_n_data[i].bitsize);
1103 cpp_define (parse_in, buf);
1104
1105 sprintf (buf, "__GLIBCXX_BITSIZE_INT_N_%d=%d", i, int_n_data[i].bitsize);
1106 cpp_define (parse_in, buf);
1107 }
1108 }
78a7c317 1109
207bf79d 1110 /* stdint.h and the testsuite need to know these. */
85291069
JM
1111 builtin_define_stdint_macros ();
1112
9193fb05
JM
1113 /* Provide information for library headers to determine whether to
1114 define macros such as __STDC_IEC_559__ and
1115 __STDC_IEC_559_COMPLEX__. */
1116 builtin_define_with_int_value ("__GCC_IEC_559", cpp_iec_559_value ());
1117 builtin_define_with_int_value ("__GCC_IEC_559_COMPLEX",
1118 cpp_iec_559_complex_value ());
1119
56d8ffc1
JG
1120 /* float.h needs these to correctly set FLT_EVAL_METHOD
1121
1122 We define two values:
1123
1124 __FLT_EVAL_METHOD__
1125 Which, depending on the value given for
1126 -fpermitted-flt-eval-methods, may be limited to only those values
1127 for FLT_EVAL_METHOD defined in C99/C11.
1128
1129 __FLT_EVAL_METHOD_TS_18661_3__
1130 Which always permits the values for FLT_EVAL_METHOD defined in
1131 ISO/IEC TS 18661-3. */
cb60f38d 1132 builtin_define_with_int_value ("__FLT_EVAL_METHOD__",
56d8ffc1
JG
1133 c_flt_eval_method (true));
1134 builtin_define_with_int_value ("__FLT_EVAL_METHOD_TS_18661_3__",
1135 c_flt_eval_method (false));
cb60f38d 1136
9a8ce21f
JG
1137 /* And decfloat.h needs this. */
1138 builtin_define_with_int_value ("__DEC_EVAL_METHOD__",
1139 TARGET_DEC_EVAL_METHOD);
1140
1b1562a5 1141 builtin_define_float_constants ("FLT", "F", "%s", "F", float_type_node);
6ec637a4
JJ
1142 /* Cast the double precision constants. This is needed when single
1143 precision constants are specified or when pragma FLOAT_CONST_DECIMAL64
1144 is used. The correct result is computed by the compiler when using
bb0a9581
NF
1145 macros that include a cast. We use a different cast for C++ to avoid
1146 problems with -Wold-style-cast. */
1147 builtin_define_float_constants ("DBL", "L",
1148 (c_dialect_cxx ()
1149 ? "double(%s)"
1150 : "((double)%s)"),
1151 "", double_type_node);
1b1562a5
MM
1152 builtin_define_float_constants ("LDBL", "L", "%s", "L",
1153 long_double_type_node);
cb60f38d 1154
c65699ef
JM
1155 for (int i = 0; i < NUM_FLOATN_NX_TYPES; i++)
1156 {
1157 if (FLOATN_NX_TYPE_NODE (i) == NULL_TREE)
1158 continue;
1159 char prefix[20], csuffix[20];
1160 sprintf (prefix, "FLT%d%s", floatn_nx_types[i].n,
1161 floatn_nx_types[i].extended ? "X" : "");
1162 sprintf (csuffix, "F%d%s", floatn_nx_types[i].n,
1163 floatn_nx_types[i].extended ? "x" : "");
53723269
JJ
1164 builtin_define_float_constants (prefix, ggc_strdup (csuffix), "%s",
1165 csuffix, FLOATN_NX_TYPE_NODE (i));
c65699ef
JM
1166 }
1167
27dfdc0f
JM
1168 /* For float.h. */
1169 if (targetm.decimal_float_supported_p ())
1170 {
1171 builtin_define_decimal_float_constants ("DEC32", "DF",
1172 dfloat32_type_node);
1173 builtin_define_decimal_float_constants ("DEC64", "DD",
1174 dfloat64_type_node);
1175 builtin_define_decimal_float_constants ("DEC128", "DL",
1176 dfloat128_type_node);
1177 }
9a8ce21f 1178
0f996086
CF
1179 /* For fixed-point fibt, ibit, max, min, and epsilon. */
1180 if (targetm.fixed_point_supported_p ())
1181 {
1182 builtin_define_fixed_point_constants ("SFRACT", "HR",
1183 short_fract_type_node);
1184 builtin_define_fixed_point_constants ("USFRACT", "UHR",
1185 unsigned_short_fract_type_node);
1186 builtin_define_fixed_point_constants ("FRACT", "R",
1187 fract_type_node);
1188 builtin_define_fixed_point_constants ("UFRACT", "UR",
1189 unsigned_fract_type_node);
1190 builtin_define_fixed_point_constants ("LFRACT", "LR",
1191 long_fract_type_node);
1192 builtin_define_fixed_point_constants ("ULFRACT", "ULR",
1193 unsigned_long_fract_type_node);
1194 builtin_define_fixed_point_constants ("LLFRACT", "LLR",
1195 long_long_fract_type_node);
1196 builtin_define_fixed_point_constants ("ULLFRACT", "ULLR",
1197 unsigned_long_long_fract_type_node);
1198 builtin_define_fixed_point_constants ("SACCUM", "HK",
1199 short_accum_type_node);
1200 builtin_define_fixed_point_constants ("USACCUM", "UHK",
1201 unsigned_short_accum_type_node);
1202 builtin_define_fixed_point_constants ("ACCUM", "K",
1203 accum_type_node);
1204 builtin_define_fixed_point_constants ("UACCUM", "UK",
1205 unsigned_accum_type_node);
1206 builtin_define_fixed_point_constants ("LACCUM", "LK",
1207 long_accum_type_node);
1208 builtin_define_fixed_point_constants ("ULACCUM", "ULK",
1209 unsigned_long_accum_type_node);
1210 builtin_define_fixed_point_constants ("LLACCUM", "LLK",
1211 long_long_accum_type_node);
1212 builtin_define_fixed_point_constants ("ULLACCUM", "ULLK",
1213 unsigned_long_long_accum_type_node);
1214
1215 builtin_define_fixed_point_constants ("QQ", "", qq_type_node);
1216 builtin_define_fixed_point_constants ("HQ", "", hq_type_node);
1217 builtin_define_fixed_point_constants ("SQ", "", sq_type_node);
1218 builtin_define_fixed_point_constants ("DQ", "", dq_type_node);
1219 builtin_define_fixed_point_constants ("TQ", "", tq_type_node);
1220 builtin_define_fixed_point_constants ("UQQ", "", uqq_type_node);
1221 builtin_define_fixed_point_constants ("UHQ", "", uhq_type_node);
1222 builtin_define_fixed_point_constants ("USQ", "", usq_type_node);
1223 builtin_define_fixed_point_constants ("UDQ", "", udq_type_node);
1224 builtin_define_fixed_point_constants ("UTQ", "", utq_type_node);
1225 builtin_define_fixed_point_constants ("HA", "", ha_type_node);
1226 builtin_define_fixed_point_constants ("SA", "", sa_type_node);
1227 builtin_define_fixed_point_constants ("DA", "", da_type_node);
1228 builtin_define_fixed_point_constants ("TA", "", ta_type_node);
1229 builtin_define_fixed_point_constants ("UHA", "", uha_type_node);
1230 builtin_define_fixed_point_constants ("USA", "", usa_type_node);
1231 builtin_define_fixed_point_constants ("UDA", "", uda_type_node);
1232 builtin_define_fixed_point_constants ("UTA", "", uta_type_node);
1233 }
1234
10e48e39
RO
1235 /* For libgcc-internal use only. */
1236 if (flag_building_libgcc)
53d68b9f 1237 {
66bb34c0 1238 /* Properties of floating-point modes for libgcc2.c. */
5c20c4af
RS
1239 opt_scalar_float_mode mode_iter;
1240 FOR_EACH_MODE_IN_CLASS (mode_iter, MODE_FLOAT)
66bb34c0 1241 {
5c20c4af 1242 scalar_float_mode mode = mode_iter.require ();
66bb34c0
JM
1243 const char *name = GET_MODE_NAME (mode);
1244 char *macro_name
1245 = (char *) alloca (strlen (name)
1246 + sizeof ("__LIBGCC__MANT_DIG__"));
1247 sprintf (macro_name, "__LIBGCC_%s_MANT_DIG__", name);
1248 builtin_define_with_int_value (macro_name,
1249 REAL_MODE_FORMAT (mode)->p);
8cc4b7a2
JM
1250 if (!targetm.scalar_mode_supported_p (mode)
1251 || !targetm.libgcc_floating_mode_supported_p (mode))
1252 continue;
1253 macro_name = (char *) alloca (strlen (name)
1254 + sizeof ("__LIBGCC_HAS__MODE__"));
1255 sprintf (macro_name, "__LIBGCC_HAS_%s_MODE__", name);
1256 cpp_define (pfile, macro_name);
dd69f047
JM
1257 macro_name = (char *) alloca (strlen (name)
1258 + sizeof ("__LIBGCC__FUNC_EXT__"));
1259 sprintf (macro_name, "__LIBGCC_%s_FUNC_EXT__", name);
6dc198e3 1260 char suffix[20] = "";
dd69f047 1261 if (mode == TYPE_MODE (double_type_node))
6dc198e3 1262 ; /* Empty suffix correct. */
dd69f047 1263 else if (mode == TYPE_MODE (float_type_node))
6dc198e3 1264 suffix[0] = 'f';
dd69f047 1265 else if (mode == TYPE_MODE (long_double_type_node))
6dc198e3 1266 suffix[0] = 'l';
dd69f047 1267 else
6dc198e3
JM
1268 {
1269 bool found_suffix = false;
1270 for (int i = 0; i < NUM_FLOATN_NX_TYPES; i++)
1271 if (FLOATN_NX_TYPE_NODE (i) != NULL_TREE
1272 && mode == TYPE_MODE (FLOATN_NX_TYPE_NODE (i)))
1273 {
1274 sprintf (suffix, "f%d%s", floatn_nx_types[i].n,
1275 floatn_nx_types[i].extended ? "x" : "");
1276 found_suffix = true;
1277 break;
1278 }
1279 gcc_assert (found_suffix);
1280 }
dd69f047 1281 builtin_define_with_value (macro_name, suffix, 0);
56d8ffc1
JG
1282
1283 /* The way __LIBGCC_*_EXCESS_PRECISION__ is used is about
1284 eliminating excess precision from results assigned to
1285 variables - meaning it should be about the implicit excess
1286 precision only. */
9a79452d 1287 bool excess_precision = false;
56d8ffc1
JG
1288 machine_mode float16_type_mode = (float16_type_node
1289 ? TYPE_MODE (float16_type_node)
1290 : VOIDmode);
1291 switch (targetm.c.excess_precision
1292 (EXCESS_PRECISION_TYPE_IMPLICIT))
1293 {
1294 case FLT_EVAL_METHOD_UNPREDICTABLE:
1295 case FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE:
1296 excess_precision = (mode == float16_type_mode
1297 || mode == TYPE_MODE (float_type_node)
1298 || mode == TYPE_MODE (double_type_node));
1299 break;
1300
1301 case FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE:
1302 excess_precision = (mode == float16_type_mode
1303 || mode == TYPE_MODE (float_type_node));
1304 break;
1305 case FLT_EVAL_METHOD_PROMOTE_TO_FLOAT:
1306 excess_precision = mode == float16_type_mode;
1307 break;
1308 case FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16:
1309 excess_precision = false;
1310 break;
1311 default:
1312 gcc_unreachable ();
1313 }
9a79452d
JM
1314 macro_name = (char *) alloca (strlen (name)
1315 + sizeof ("__LIBGCC__EXCESS_"
1316 "PRECISION__"));
1317 sprintf (macro_name, "__LIBGCC_%s_EXCESS_PRECISION__", name);
1318 builtin_define_with_int_value (macro_name, excess_precision);
66bb34c0
JM
1319 }
1320
53d68b9f
JM
1321 /* For libgcc crtstuff.c and libgcc2.c. */
1322 builtin_define_with_int_value ("__LIBGCC_EH_TABLES_CAN_BE_READ_ONLY__",
1323 EH_TABLES_CAN_BE_READ_ONLY);
1324#ifdef EH_FRAME_SECTION_NAME
1325 builtin_define_with_value ("__LIBGCC_EH_FRAME_SECTION_NAME__",
1326 EH_FRAME_SECTION_NAME, 1);
53d68b9f
JM
1327#endif
1328#ifdef CTORS_SECTION_ASM_OP
1329 builtin_define_with_value ("__LIBGCC_CTORS_SECTION_ASM_OP__",
1330 CTORS_SECTION_ASM_OP, 1);
1331#endif
1332#ifdef DTORS_SECTION_ASM_OP
1333 builtin_define_with_value ("__LIBGCC_DTORS_SECTION_ASM_OP__",
1334 DTORS_SECTION_ASM_OP, 1);
1335#endif
1336#ifdef TEXT_SECTION_ASM_OP
1337 builtin_define_with_value ("__LIBGCC_TEXT_SECTION_ASM_OP__",
1338 TEXT_SECTION_ASM_OP, 1);
1339#endif
1340#ifdef INIT_SECTION_ASM_OP
1341 builtin_define_with_value ("__LIBGCC_INIT_SECTION_ASM_OP__",
1342 INIT_SECTION_ASM_OP, 1);
1343#endif
1344#ifdef INIT_ARRAY_SECTION_ASM_OP
1345 /* Despite the name of this target macro, the expansion is not
1346 actually used, and may be empty rather than a string
1347 constant. */
1348 cpp_define (pfile, "__LIBGCC_INIT_ARRAY_SECTION_ASM_OP__");
1349#endif
1350
1351 /* For libgcc enable-execute-stack.c. */
1352 builtin_define_with_int_value ("__LIBGCC_TRAMPOLINE_SIZE__",
1353 TRAMPOLINE_SIZE);
1354
1355 /* For libgcc generic-morestack.c and unwinder code. */
581edfa3
TS
1356 if (STACK_GROWS_DOWNWARD)
1357 cpp_define (pfile, "__LIBGCC_STACK_GROWS_DOWNWARD__");
53d68b9f
JM
1358
1359 /* For libgcc unwinder code. */
1360#ifdef DONT_USE_BUILTIN_SETJMP
1361 cpp_define (pfile, "__LIBGCC_DONT_USE_BUILTIN_SETJMP__");
1362#endif
1363#ifdef DWARF_ALT_FRAME_RETURN_COLUMN
1364 builtin_define_with_int_value ("__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__",
1365 DWARF_ALT_FRAME_RETURN_COLUMN);
1366#endif
1367 builtin_define_with_int_value ("__LIBGCC_DWARF_FRAME_REGISTERS__",
1368 DWARF_FRAME_REGISTERS);
1369#ifdef EH_RETURN_STACKADJ_RTX
1370 cpp_define (pfile, "__LIBGCC_EH_RETURN_STACKADJ_RTX__");
1371#endif
1372#ifdef JMP_BUF_SIZE
1373 builtin_define_with_int_value ("__LIBGCC_JMP_BUF_SIZE__",
1374 JMP_BUF_SIZE);
1375#endif
1376 builtin_define_with_int_value ("__LIBGCC_STACK_POINTER_REGNUM__",
1377 STACK_POINTER_REGNUM);
1378
1379 /* For libgcov. */
1380 builtin_define_with_int_value ("__LIBGCC_VTABLE_USES_DESCRIPTORS__",
1381 TARGET_VTABLE_USES_DESCRIPTORS);
1382 }
10e48e39 1383
cb60f38d
NB
1384 /* For use in assembly language. */
1385 builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0);
1386 builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0);
1387
1388 /* Misc. */
da1c7394
ILT
1389 if (flag_gnu89_inline)
1390 cpp_define (pfile, "__GNUC_GNU_INLINE__");
1391 else
1392 cpp_define (pfile, "__GNUC_STDC_INLINE__");
1393
e90acd93 1394 if (flag_no_inline)
cb60f38d 1395 cpp_define (pfile, "__NO_INLINE__");
cb60f38d
NB
1396
1397 if (flag_iso)
1398 cpp_define (pfile, "__STRICT_ANSI__");
1399
1400 if (!flag_signed_char)
1401 cpp_define (pfile, "__CHAR_UNSIGNED__");
1402
8df83eae 1403 if (c_dialect_cxx () && TYPE_UNSIGNED (wchar_type_node))
cb60f38d
NB
1404 cpp_define (pfile, "__WCHAR_UNSIGNED__");
1405
62bad7cd 1406 cpp_atomic_builtins (pfile);
425fc685
RE
1407
1408 /* Show support for __builtin_speculation_safe_value () if the target
1409 has been updated to fully support it. */
1410 if (targetm.have_speculation_safe_value (false))
1411 cpp_define (pfile, "__HAVE_SPECULATION_SAFE_VALUE");
1412
d4ea4622 1413#ifdef DWARF2_UNWIND_INFO
058514b3 1414 if (dwarf2out_do_cfi_asm ())
d4ea4622
RH
1415 cpp_define (pfile, "__GCC_HAVE_DWARF2_CFI_ASM");
1416#endif
1417
cb60f38d 1418 /* Make the choice of ObjC runtime visible to source code. */
37fa72e9 1419 if (c_dialect_objc () && flag_next_runtime)
cb60f38d
NB
1420 cpp_define (pfile, "__NEXT_RUNTIME__");
1421
84b8b0e0 1422 /* Show the availability of some target pragmas. */
c54d7dc9 1423 cpp_define (pfile, "__PRAGMA_REDEFINE_EXTNAME");
84b8b0e0 1424
0ffb94cd
JW
1425 /* Make the choice of the stack protector runtime visible to source code.
1426 The macro names and values here were chosen for compatibility with an
1427 earlier implementation, i.e. ProPolice. */
5434dc07
MD
1428 if (flag_stack_protect == 4)
1429 cpp_define (pfile, "__SSP_EXPLICIT__=4");
f6bc1c4a
HS
1430 if (flag_stack_protect == 3)
1431 cpp_define (pfile, "__SSP_STRONG__=3");
7d69de61
RH
1432 if (flag_stack_protect == 2)
1433 cpp_define (pfile, "__SSP_ALL__=2");
1434 else if (flag_stack_protect == 1)
1435 cpp_define (pfile, "__SSP__=1");
1436
41dbbb37 1437 if (flag_openacc)
e464fc90 1438 cpp_define (pfile, "_OPENACC=201711");
41dbbb37 1439
953ff289 1440 if (flag_openmp)
d9a6bd32 1441 cpp_define (pfile, "_OPENMP=201511");
953ff289 1442
78a7c317
DD
1443 for (i = 0; i < NUM_INT_N_ENTS; i ++)
1444 if (int_n_enabled_p[i])
1445 {
1446 char buf[15+20];
1447 sprintf(buf, "__SIZEOF_INT%d__", int_n_data[i].bitsize);
1448 builtin_define_type_sizeof (buf,
1449 int_n_trees[i].signed_type);
1450 }
024a85ae
AK
1451 builtin_define_type_sizeof ("__SIZEOF_WCHAR_T__", wchar_type_node);
1452 builtin_define_type_sizeof ("__SIZEOF_WINT_T__", wint_type_node);
1453 builtin_define_type_sizeof ("__SIZEOF_PTRDIFF_T__",
1454 unsigned_ptrdiff_type_node);
024a85ae 1455
cb60f38d
NB
1456 /* A straightforward target hook doesn't work, because of problems
1457 linking that hook's body when part of non-C front ends. */
1458# define preprocessing_asm_p() (cpp_get_options (pfile)->lang == CLK_ASM)
1459# define preprocessing_trad_p() (cpp_get_options (pfile)->traditional)
1460# define builtin_define(TXT) cpp_define (pfile, TXT)
1461# define builtin_assert(TXT) cpp_assert (pfile, TXT)
1462 TARGET_CPU_CPP_BUILTINS ();
1463 TARGET_OS_CPP_BUILTINS ();
4e2e315f 1464 TARGET_OBJFMT_CPP_BUILTINS ();
63c5b495
MM
1465
1466 /* Support the __declspec keyword by turning them into attributes.
1467 Note that the current way we do this may result in a collision
1468 with predefined attributes later on. This can be solved by using
1469 one attribute, say __declspec__, and passing args to it. The
1470 problem with that approach is that args are not accumulated: each
1471 new appearance would clobber any existing args. */
1472 if (TARGET_DECLSPEC)
1473 builtin_define ("__declspec(x)=__attribute__((x))");
79b87c74 1474
589dd995
JJ
1475 /* If decimal floating point is supported, tell the user if the
1476 alternate format (BID) is used instead of the standard (DPD)
1477 format. */
1478 if (ENABLE_DECIMAL_FLOAT && ENABLE_DECIMAL_BID_FORMAT)
1479 cpp_define (pfile, "__DECIMAL_BID_FORMAT__");
cb60f38d
NB
1480}
1481
1482/* Pass an object-like macro. If it doesn't lie in the user's
1483 namespace, defines it unconditionally. Otherwise define a version
1484 with two leading underscores, and another version with two leading
1485 and trailing underscores, and define the original only if an ISO
1486 standard was not nominated.
1487
1488 e.g. passing "unix" defines "__unix", "__unix__" and possibly
1489 "unix". Passing "_mips" defines "__mips", "__mips__" and possibly
1490 "_mips". */
21282b1e 1491void
35b1a6fa 1492builtin_define_std (const char *macro)
cb60f38d
NB
1493{
1494 size_t len = strlen (macro);
cceb1885 1495 char *buff = (char *) alloca (len + 5);
cb60f38d
NB
1496 char *p = buff + 2;
1497 char *q = p + len;
1498
1499 /* prepend __ (or maybe just _) if in user's namespace. */
1500 memcpy (p, macro, len + 1);
1501 if (!( *p == '_' && (p[1] == '_' || ISUPPER (p[1]))))
1502 {
1503 if (*p != '_')
1504 *--p = '_';
1505 if (p[1] != '_')
1506 *--p = '_';
1507 }
1508 cpp_define (parse_in, p);
1509
1510 /* If it was in user's namespace... */
1511 if (p != buff + 2)
1512 {
1513 /* Define the macro with leading and following __. */
1514 if (q[-1] != '_')
1515 *q++ = '_';
1516 if (q[-2] != '_')
1517 *q++ = '_';
1518 *q = '\0';
1519 cpp_define (parse_in, p);
1520
1521 /* Finally, define the original macro if permitted. */
1522 if (!flag_iso)
1523 cpp_define (parse_in, macro);
1524 }
1525}
1526
1527/* Pass an object-like macro and a value to define it to. The third
1528 parameter says whether or not to turn the value into a string
1529 constant. */
1530void
35b1a6fa 1531builtin_define_with_value (const char *macro, const char *expansion, int is_str)
cb60f38d
NB
1532{
1533 char *buf;
1534 size_t mlen = strlen (macro);
1535 size_t elen = strlen (expansion);
1536 size_t extra = 2; /* space for an = and a NUL */
1537
1538 if (is_str)
53d68b9f
JM
1539 {
1540 char *quoted_expansion = (char *) alloca (elen * 4 + 1);
1541 const char *p;
1542 char *q;
1543 extra += 2; /* space for two quote marks */
1544 for (p = expansion, q = quoted_expansion; *p; p++)
1545 {
1546 switch (*p)
1547 {
1548 case '\n':
1549 *q++ = '\\';
1550 *q++ = 'n';
1551 break;
1552
1553 case '\t':
1554 *q++ = '\\';
1555 *q++ = 't';
1556 break;
1557
1558 case '\\':
1559 *q++ = '\\';
1560 *q++ = '\\';
1561 break;
1562
1563 case '"':
1564 *q++ = '\\';
1565 *q++ = '"';
1566 break;
1567
1568 default:
1569 if (ISPRINT ((unsigned char) *p))
1570 *q++ = *p;
1571 else
1572 {
1573 sprintf (q, "\\%03o", (unsigned char) *p);
1574 q += 4;
1575 }
1576 }
1577 }
1578 *q = '\0';
1579 expansion = quoted_expansion;
1580 elen = q - expansion;
1581 }
cb60f38d 1582
cceb1885 1583 buf = (char *) alloca (mlen + elen + extra);
cb60f38d
NB
1584 if (is_str)
1585 sprintf (buf, "%s=\"%s\"", macro, expansion);
1586 else
1587 sprintf (buf, "%s=%s", macro, expansion);
1588
1589 cpp_define (parse_in, buf);
1590}
1591
cb60f38d
NB
1592
1593/* Pass an object-like macro and an integer value to define it to. */
7049e4eb 1594void
35b1a6fa 1595builtin_define_with_int_value (const char *macro, HOST_WIDE_INT value)
cb60f38d
NB
1596{
1597 char *buf;
1598 size_t mlen = strlen (macro);
1599 size_t vlen = 18;
1600 size_t extra = 2; /* space for = and NUL. */
1601
cceb1885 1602 buf = (char *) alloca (mlen + vlen + extra);
cb60f38d
NB
1603 memcpy (buf, macro, mlen);
1604 buf[mlen] = '=';
1605 sprintf (buf + mlen + 1, HOST_WIDE_INT_PRINT_DEC, value);
1606
1607 cpp_define (parse_in, buf);
1608}
1609
8e680db5
JJ
1610/* builtin_define_with_hex_fp_value is very expensive, so the following
1611 array and function allows it to be done lazily when __DBL_MAX__
1612 etc. is first used. */
1613
5bca794b 1614struct GTY(()) lazy_hex_fp_value_struct
8e680db5
JJ
1615{
1616 const char *hex_str;
ef4bddc2 1617 machine_mode mode;
8e680db5
JJ
1618 int digits;
1619 const char *fp_suffix;
5bca794b 1620};
53723269
JJ
1621/* Number of the expensive to compute macros we should evaluate lazily.
1622 Each builtin_define_float_constants invocation calls
00be2a5f 1623 builtin_define_with_hex_fp_value 5 times and builtin_define_float_constants
53723269
JJ
1624 is called for FLT, DBL, LDBL and up to NUM_FLOATN_NX_TYPES times for
1625 FLTNN*. */
00be2a5f 1626#define LAZY_HEX_FP_VALUES_CNT (5 * (3 + NUM_FLOATN_NX_TYPES))
53723269
JJ
1627static GTY(()) struct lazy_hex_fp_value_struct
1628 lazy_hex_fp_values[LAZY_HEX_FP_VALUES_CNT];
800c0e98 1629static GTY(()) unsigned lazy_hex_fp_value_count;
8e680db5 1630
800c0e98
NS
1631static void
1632lazy_hex_fp_value (cpp_reader *, cpp_macro *macro, unsigned num)
8e680db5
JJ
1633{
1634 REAL_VALUE_TYPE real;
1635 char dec_str[64], buf1[256];
8e680db5 1636
800c0e98
NS
1637 gcc_checking_assert (num < lazy_hex_fp_value_count);
1638
1639 real_from_string (&real, lazy_hex_fp_values[num].hex_str);
8e680db5 1640 real_to_decimal_for_mode (dec_str, &real, sizeof (dec_str),
800c0e98
NS
1641 lazy_hex_fp_values[num].digits, 0,
1642 lazy_hex_fp_values[num].mode);
1643
1644 size_t len
1645 = sprintf (buf1, "%s%s", dec_str, lazy_hex_fp_values[num].fp_suffix);
1646 gcc_assert (len < sizeof (buf1));
1647 for (unsigned idx = 0; idx < macro->count; idx++)
1648 if (macro->exp.tokens[idx].type == CPP_NUMBER)
1649 {
1650 macro->exp.tokens[idx].val.str.len = len;
1651 macro->exp.tokens[idx].val.str.text
1652 = (const unsigned char *) ggc_strdup (buf1);
1653 return;
1654 }
1655
1656 /* We must have replaced a token. */
1657 gcc_unreachable ();
8e680db5
JJ
1658}
1659
cb60f38d
NB
1660/* Pass an object-like macro a hexadecimal floating-point value. */
1661static void
35b1a6fa 1662builtin_define_with_hex_fp_value (const char *macro,
3e479de3 1663 tree type, int digits,
b8698a0f 1664 const char *hex_str,
264c41ed
CD
1665 const char *fp_suffix,
1666 const char *fp_cast)
cb60f38d
NB
1667{
1668 REAL_VALUE_TYPE real;
2004617a 1669 char dec_str[64], buf[256], buf1[128], buf2[64];
cb60f38d 1670
8e680db5 1671 /* This is very expensive, so if possible expand them lazily. */
53723269 1672 if (lazy_hex_fp_value_count < LAZY_HEX_FP_VALUES_CNT
8e680db5 1673 && flag_dump_macros == 0
5f76ab15 1674 && flag_dump_go_spec == NULL
8e680db5
JJ
1675 && !cpp_get_options (parse_in)->traditional)
1676 {
8e680db5 1677 if (lazy_hex_fp_value_count == 0)
800c0e98 1678 cpp_get_callbacks (parse_in)->user_lazy_macro = lazy_hex_fp_value;
8e680db5
JJ
1679 sprintf (buf2, fp_cast, "1.1");
1680 sprintf (buf1, "%s=%s", macro, buf2);
1681 cpp_define (parse_in, buf1);
800c0e98 1682 struct cpp_hashnode *node = C_CPP_HASHNODE (get_identifier (macro));
5bca794b
JJ
1683 lazy_hex_fp_values[lazy_hex_fp_value_count].hex_str
1684 = ggc_strdup (hex_str);
8e680db5
JJ
1685 lazy_hex_fp_values[lazy_hex_fp_value_count].mode = TYPE_MODE (type);
1686 lazy_hex_fp_values[lazy_hex_fp_value_count].digits = digits;
1687 lazy_hex_fp_values[lazy_hex_fp_value_count].fp_suffix = fp_suffix;
800c0e98 1688 cpp_define_lazily (parse_in, node, lazy_hex_fp_value_count++);
8e680db5
JJ
1689 return;
1690 }
1691
cb60f38d
NB
1692 /* Hex values are really cool and convenient, except that they're
1693 not supported in strict ISO C90 mode. First, the "p-" sequence
1694 is not valid as part of a preprocessor number. Second, we get a
1695 pedwarn from the preprocessor, which has no context, so we can't
1696 suppress the warning with __extension__.
1697
35b1a6fa 1698 So instead what we do is construct the number in hex (because
cb60f38d
NB
1699 it's easy to get the exact correct value), parse it as a real,
1700 then print it back out as decimal. */
1701
1702 real_from_string (&real, hex_str);
3e479de3
UW
1703 real_to_decimal_for_mode (dec_str, &real, sizeof (dec_str), digits, 0,
1704 TYPE_MODE (type));
cb60f38d 1705
264c41ed
CD
1706 /* Assemble the macro in the following fashion
1707 macro = fp_cast [dec_str fp_suffix] */
2004617a
QZ
1708 sprintf (buf2, "%s%s", dec_str, fp_suffix);
1709 sprintf (buf1, fp_cast, buf2);
1710 sprintf (buf, "%s=%s", macro, buf1);
b8698a0f 1711
2004617a 1712 cpp_define (parse_in, buf);
cb60f38d
NB
1713}
1714
207bf79d
JM
1715/* Return a string constant for the suffix for a value of type TYPE
1716 promoted according to the integer promotions. The type must be one
1717 of the standard integer type nodes. */
1718
1719static const char *
1720type_suffix (tree type)
1721{
1722 static const char *const suffixes[] = { "", "U", "L", "UL", "LL", "ULL" };
1723 int unsigned_suffix;
1724 int is_long;
78a7c317 1725 int tp = TYPE_PRECISION (type);
207bf79d
JM
1726
1727 if (type == long_long_integer_type_node
78a7c317
DD
1728 || type == long_long_unsigned_type_node
1729 || tp > TYPE_PRECISION (long_integer_type_node))
207bf79d
JM
1730 is_long = 2;
1731 else if (type == long_integer_type_node
78a7c317
DD
1732 || type == long_unsigned_type_node
1733 || tp > TYPE_PRECISION (integer_type_node))
207bf79d
JM
1734 is_long = 1;
1735 else if (type == integer_type_node
1736 || type == unsigned_type_node
1737 || type == short_integer_type_node
1738 || type == short_unsigned_type_node
1739 || type == signed_char_type_node
1740 || type == unsigned_char_type_node
1741 /* ??? "char" is not a signed or unsigned integer type and
1742 so is not permitted for the standard typedefs, but some
1743 systems use it anyway. */
1744 || type == char_type_node)
1745 is_long = 0;
1746 else
1747 gcc_unreachable ();
1748
1749 unsigned_suffix = TYPE_UNSIGNED (type);
1750 if (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
1751 unsigned_suffix = 0;
1752 return suffixes[is_long * 2 + unsigned_suffix];
1753}
1754
1755/* Define MACRO as a <stdint.h> constant-suffix macro for TYPE. */
1756static void
1757builtin_define_constants (const char *macro, tree type)
1758{
1759 const char *suffix;
1760 char *buf;
1761
1762 suffix = type_suffix (type);
1763
1764 if (suffix[0] == 0)
1765 {
1766 buf = (char *) alloca (strlen (macro) + 6);
1767 sprintf (buf, "%s(c)=c", macro);
1768 }
1769 else
1770 {
1771 buf = (char *) alloca (strlen (macro) + 9 + strlen (suffix) + 1);
1772 sprintf (buf, "%s(c)=c ## %s", macro, suffix);
1773 }
1774
1775 cpp_define (parse_in, buf);
1776}
1777
1778/* Define MAX for TYPE based on the precision of the type. */
1779
1780static void
1781builtin_define_type_max (const char *macro, tree type)
1782{
1783 builtin_define_type_minmax (NULL, macro, type);
1784}
1785
ca49b74e
DD
1786/* Given a value with COUNT LSBs set, fill BUF with a hexidecimal
1787 representation of that value. For example, a COUNT of 10 would
1788 return "0x3ff". */
1789
1790static void
1791print_bits_of_hex (char *buf, int bufsz, int count)
1792{
1793 gcc_assert (bufsz > 3);
1794 *buf++ = '0';
1795 *buf++ = 'x';
1796 bufsz -= 2;
1797
1798 gcc_assert (count > 0);
1799
1800 switch (count % 4) {
1801 case 0:
1802 break;
1803 case 1:
1804 *buf++ = '1';
1805 bufsz --;
1806 count -= 1;
1807 break;
1808 case 2:
1809 *buf++ = '3';
1810 bufsz --;
1811 count -= 2;
1812 break;
1813 case 3:
1814 *buf++ = '7';
1815 bufsz --;
1816 count -= 3;
1817 break;
1818 }
1819 while (count >= 4)
1820 {
1821 gcc_assert (bufsz > 1);
1822 *buf++ = 'f';
1823 bufsz --;
1824 count -= 4;
1825 }
1826 gcc_assert (bufsz > 0);
1827 *buf++ = 0;
1828}
1829
207bf79d
JM
1830/* Define MIN_MACRO (if not NULL) and MAX_MACRO for TYPE based on the
1831 precision of the type. */
cb60f38d
NB
1832
1833static void
207bf79d
JM
1834builtin_define_type_minmax (const char *min_macro, const char *max_macro,
1835 tree type)
cb60f38d 1836{
ca49b74e
DD
1837#define PBOH_SZ (MAX_BITSIZE_MODE_ANY_INT/4+4)
1838 char value[PBOH_SZ];
1839
1840 const char *suffix;
cb60f38d 1841 char *buf;
ca49b74e 1842 int bits;
cb60f38d 1843
ca49b74e
DD
1844 bits = TYPE_PRECISION (type) + (TYPE_UNSIGNED (type) ? 0 : -1);
1845
1846 print_bits_of_hex (value, PBOH_SZ, bits);
cb60f38d 1847
207bf79d 1848 suffix = type_suffix (type);
cb60f38d 1849
207bf79d 1850 buf = (char *) alloca (strlen (max_macro) + 1 + strlen (value)
cceb1885 1851 + strlen (suffix) + 1);
207bf79d 1852 sprintf (buf, "%s=%s%s", max_macro, value, suffix);
cb60f38d
NB
1853
1854 cpp_define (parse_in, buf);
207bf79d
JM
1855
1856 if (min_macro)
1857 {
1858 if (TYPE_UNSIGNED (type))
1859 {
1860 buf = (char *) alloca (strlen (min_macro) + 2 + strlen (suffix) + 1);
1861 sprintf (buf, "%s=0%s", min_macro, suffix);
1862 }
1863 else
1864 {
1865 buf = (char *) alloca (strlen (min_macro) + 3
1866 + strlen (max_macro) + 6);
1867 sprintf (buf, "%s=(-%s - 1)", min_macro, max_macro);
1868 }
1869 cpp_define (parse_in, buf);
1870 }
cb60f38d 1871}
5bca794b 1872
c65248cb
JM
1873/* Define WIDTH_MACRO for the width of TYPE. If TYPE2 is not NULL,
1874 both types must have the same width. */
1875
1876static void
1877builtin_define_type_width (const char *width_macro, tree type, tree type2)
1878{
1879 if (type2 != NULL_TREE)
1880 gcc_assert (TYPE_PRECISION (type) == TYPE_PRECISION (type2));
1881 builtin_define_with_int_value (width_macro, TYPE_PRECISION (type));
1882}
1883
5bca794b 1884#include "gt-c-family-c-cppbuiltin.h"