Skip to content

Commit 33ad474

Browse files
authored
[Clang] Add predefined macros for integer constants (#123514)
This adds predefined macros for integer constants to implement section 7.18.4 of ISO/IEC 9899:1999 in `<stdint.h>` in a safe way: ``` __INT8_C(c) __INT16_C(c) __INT32_C(c) __INT64_C(c) __INTMAX_C(c) __UINT8_C(c) __UINT16_C(c) __UINT32_C(c) __UINT64_C(c) __UINTMAX_C(c) ``` Which improves compatibility with GCC and makes it trivial to implement section 7.18.4 of ISO/IEC 9899:1999. Clang defines `__INT<N>_C_SUFFIX__`, `__UINT<N>_C_SUFFIX__`, `__INTAX_C_SUFFIX__` and `__UINTMAX_C_SUFFIX__`, but these macros are useless for this purpose. Let's say, for example, that `__INT64_C_SUFFIX__` expands to `L` or `LL`. If the user defines them as a macros, the compiler will produce errors if `INT64_C` is implemented in `<stdint.h>` using `__INT64_C_SUFFIX__`: **minimal-test.c:** ```cpp #if defined(__clang__) & !defined(__INT64_C) # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wreserved-identifier" # define __PSTDC_INT_C_(literal, suffix) literal##suffix # define __PSTDC_INT_C(literal, suffix) __PSTDC_INT_C_(literal, suffix) # define INT64_C(literal) __PSTDC_INT_C(literal, __INT64_C_SUFFIX__) # pragma clang diagnostic pop #elif defined(__GNUC__) # define INT64_C __INT64_C #endif typedef __INT64_TYPE__ int64_t; #define L "Make Clang produce an error" #define LL "Make Clang produce an error" int main(int argc, char **argv) { (void)argc; (void)argv; int64_t v = INT64_C(9223372036854775807); (void)v; return 0; } ``` <img width="697" alt="imagen" src="https://github.com/user-attachments/assets/6df97af6-7cfd-4cf9-85b7-d7c854509325" /> **test.c:** ```cpp #if defined(__clang__) && !defined(__INT8_C) # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wreserved-identifier" # define __PSTDC_INT_C_(literal, suffix) literal##suffix # define __PSTDC_INT_C(literal, suffix) __PSTDC_INT_C_(literal, suffix) # define INT8_C(literal) __PSTDC_INT_C(literal, __INT8_C_SUFFIX__) # define INT16_C(literal) __PSTDC_INT_C(literal, __INT16_C_SUFFIX__) # define INT32_C(literal) __PSTDC_INT_C(literal, __INT32_C_SUFFIX__) # define INT64_C(literal) __PSTDC_INT_C(literal, __INT64_C_SUFFIX__) # define INTMAX_C(literal) __PSTDC_INT_C(literal, __INTMAX_C_SUFFIX__) # define UINT8_C(literal) __PSTDC_INT_C(literal, __UINT8_C_SUFFIX__) # define UINT16_C(literal) __PSTDC_INT_C(literal, __UINT16_C_SUFFIX__) # define UINT32_C(literal) __PSTDC_INT_C(literal, __UINT32_C_SUFFIX__) # define UINT64_C(literal) __PSTDC_INT_C(literal, __UINT64_C_SUFFIX__) # define UINTMAX_C(literal) __PSTDC_INT_C(literal, __UINTMAX_C_SUFFIX__) # pragma clang diagnostic pop #else # define INT8_C __INT8_C # define INT16_C __INT16_C # define INT32_C __INT32_C # define INT64_C __INT64_C # define INTMAX_C __INTMAX_C # define UINT8_C __UINT8_C # define UINT16_C __UINT16_C # define UINT32_C __UINT32_C # define UINT64_C __UINT64_C # define UINTMAX_C __UINTMAX_C #endif typedef __INT8_TYPE__ int8_t; typedef __INT16_TYPE__ int16_t; typedef __INT32_TYPE__ int32_t; typedef __INT64_TYPE__ int64_t; typedef __INTMAX_TYPE__ intmax_t; typedef __UINT8_TYPE__ uint8_t; typedef __UINT16_TYPE__ uint16_t; typedef __UINT32_TYPE__ uint32_t; typedef __UINT64_TYPE__ uint64_t; typedef __UINTMAX_TYPE__ uintmax_t; #define L "Make Clang produce an error" #define LL "Make Clang produce an error" #define U "Make Clang produce an error" #define UL "Make Clang produce an error" #define ULL "Make Clang produce an error" int main(int argc, char **argv) { (void)argc; (void)argv; int8_t a = INT8_C (127); int16_t b = INT16_C (32767); int32_t c = INT32_C (2147483647); int64_t d = INT64_C (9223372036854775807); intmax_t e = INTMAX_C (9223372036854775807); uint8_t f = UINT8_C (255); uint16_t g = UINT16_C (65535); uint32_t h = UINT32_C (4294967295); uint64_t i = UINT64_C (18446744073709551615); uintmax_t j = UINTMAX_C(18446744073709551615); (void)a; (void)b; (void)c; (void)d; (void)e; (void)f; (void)g; (void)h; (void)i; (void)j; return 0; } ```
1 parent 0c78485 commit 33ad474

File tree

14 files changed

+498
-4
lines changed

14 files changed

+498
-4
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,17 @@ Non-comprehensive list of changes in this release
479479
``__builtin_elementwise_sub_sat``, ``__builtin_reduce_min`` (For integral element type),
480480
``__builtin_reduce_max`` (For integral element type).
481481

482+
- The builtin macros ``__INT8_C``, ``__INT16_C``, ``__INT32_C``, ``__INT64_C``,
483+
``__INTMAX_C``, ``__UINT8_C``, ``__UINT16_C``, ``__UINT32_C``, ``__UINT64_C``
484+
and ``__UINTMAX_C`` have been introduced to ease the implementaton of section
485+
7.18.4 of ISO/IEC 9899:1999. These macros are also defined by GCC and should
486+
be used instead of others that expand and paste the suffixes provided by
487+
``__INT8_C_SUFFIX__``, ``__INT16_C_SUFFIX__``, ``__INT32_C_SUFFIX__``,
488+
``__INT64_C_SUFFIX__``, ``__INTMAX_C_SUFFIX__``, ``__UINT8_C_SUFFIX__``,
489+
``__UINT16_C_SUFFIX__``, ``__UINT32_C_SUFFIX__``, ``__UINT64_C_SUFFIX__`` and
490+
``__UINTMAX_C_SUFFIX__``. Pasting suffixes after the expansion of their
491+
respective macros is unsafe, as users can define the suffixes as macros.
492+
482493
- Clang now rejects ``_BitInt`` matrix element types if the bit width is less than ``CHAR_WIDTH`` or
483494
not a power of two, matching preexisting behaviour for vector types.
484495

clang/lib/Frontend/InitPreprocessor.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,8 @@ static void DefineExactWidthIntType(const LangOptions &LangOpts,
253253

254254
StringRef ConstSuffix(TI.getTypeConstantSuffix(Ty));
255255
Builder.defineMacro(Prefix + Twine(TypeWidth) + "_C_SUFFIX__", ConstSuffix);
256+
Builder.defineMacro(Prefix + Twine(TypeWidth) + "_C(c)",
257+
ConstSuffix.size() ? Twine("c##") + ConstSuffix : "c");
256258
}
257259

258260
static void DefineExactWidthIntTypeSize(TargetInfo::IntType Ty,
@@ -1164,12 +1166,16 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
11641166

11651167
DefineType("__INTMAX_TYPE__", TI.getIntMaxType(), Builder);
11661168
DefineFmt(LangOpts, "__INTMAX", TI.getIntMaxType(), TI, Builder);
1167-
Builder.defineMacro("__INTMAX_C_SUFFIX__",
1168-
TI.getTypeConstantSuffix(TI.getIntMaxType()));
1169+
StringRef ConstSuffix(TI.getTypeConstantSuffix(TI.getIntMaxType()));
1170+
Builder.defineMacro("__INTMAX_C_SUFFIX__", ConstSuffix);
1171+
Builder.defineMacro("__INTMAX_C(c)",
1172+
ConstSuffix.size() ? Twine("c##") + ConstSuffix : "c");
11691173
DefineType("__UINTMAX_TYPE__", TI.getUIntMaxType(), Builder);
11701174
DefineFmt(LangOpts, "__UINTMAX", TI.getUIntMaxType(), TI, Builder);
1171-
Builder.defineMacro("__UINTMAX_C_SUFFIX__",
1172-
TI.getTypeConstantSuffix(TI.getUIntMaxType()));
1175+
ConstSuffix = TI.getTypeConstantSuffix(TI.getUIntMaxType());
1176+
Builder.defineMacro("__UINTMAX_C_SUFFIX__", ConstSuffix);
1177+
Builder.defineMacro("__UINTMAX_C(c)",
1178+
ConstSuffix.size() ? Twine("c##") + ConstSuffix : "c");
11731179
DefineType("__PTRDIFF_TYPE__", TI.getPtrDiffType(LangAS::Default), Builder);
11741180
DefineFmt(LangOpts, "__PTRDIFF", TI.getPtrDiffType(LangAS::Default), TI,
11751181
Builder);

clang/test/Preprocessor/init-aarch64.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,26 +135,31 @@
135135
// AARCH64_CXX-NEXT: #define __GLIBCXX_BITSIZE_INT_N_0 128
136136
// AARCH64_CXX-NEXT: #define __GLIBCXX_TYPE_INT_N_0 __int128
137137
// AARCH64-NEXT: #define __HAVE_FUNCTION_MULTI_VERSIONING 1
138+
// AARCH64-NEXT: #define __INT16_C(c) c
138139
// AARCH64-NEXT: #define __INT16_C_SUFFIX__
139140
// AARCH64-NEXT: #define __INT16_FMTd__ "hd"
140141
// AARCH64-NEXT: #define __INT16_FMTi__ "hi"
141142
// AARCH64-NEXT: #define __INT16_MAX__ 32767
142143
// AARCH64-NEXT: #define __INT16_TYPE__ short
144+
// AARCH64-NEXT: #define __INT32_C(c) c
143145
// AARCH64-NEXT: #define __INT32_C_SUFFIX__
144146
// AARCH64-NEXT: #define __INT32_FMTd__ "d"
145147
// AARCH64-NEXT: #define __INT32_FMTi__ "i"
146148
// AARCH64-NEXT: #define __INT32_MAX__ 2147483647
147149
// AARCH64-NEXT: #define __INT32_TYPE__ int
150+
// AARCH64-NEXT: #define __INT64_C(c) c##L
148151
// AARCH64-NEXT: #define __INT64_C_SUFFIX__ L
149152
// AARCH64-NEXT: #define __INT64_FMTd__ "ld"
150153
// AARCH64-NEXT: #define __INT64_FMTi__ "li"
151154
// AARCH64-NEXT: #define __INT64_MAX__ 9223372036854775807L
152155
// AARCH64-NEXT: #define __INT64_TYPE__ long int
156+
// AARCH64-NEXT: #define __INT8_C(c) c
153157
// AARCH64-NEXT: #define __INT8_C_SUFFIX__
154158
// AARCH64-NEXT: #define __INT8_FMTd__ "hhd"
155159
// AARCH64-NEXT: #define __INT8_FMTi__ "hhi"
156160
// AARCH64-NEXT: #define __INT8_MAX__ 127
157161
// AARCH64-NEXT: #define __INT8_TYPE__ signed char
162+
// AARCH64-NEXT: #define __INTMAX_C(c) c##L
158163
// AARCH64-NEXT: #define __INTMAX_C_SUFFIX__ L
159164
// AARCH64-NEXT: #define __INTMAX_FMTd__ "ld"
160165
// AARCH64-NEXT: #define __INTMAX_FMTi__ "li"
@@ -287,34 +292,39 @@
287292
// AARCH64-NEXT: #define __STDC_UTF_32__ 1
288293
// AARCH64_C: #define __STDC_VERSION__ 201710L
289294
// AARCH64-NEXT: #define __STDC__ 1
295+
// AARCH64-NEXT: #define __UINT16_C(c) c
290296
// AARCH64-NEXT: #define __UINT16_C_SUFFIX__
291297
// AARCH64-NEXT: #define __UINT16_FMTX__ "hX"
292298
// AARCH64-NEXT: #define __UINT16_FMTo__ "ho"
293299
// AARCH64-NEXT: #define __UINT16_FMTu__ "hu"
294300
// AARCH64-NEXT: #define __UINT16_FMTx__ "hx"
295301
// AARCH64-NEXT: #define __UINT16_MAX__ 65535
296302
// AARCH64-NEXT: #define __UINT16_TYPE__ unsigned short
303+
// AARCH64-NEXT: #define __UINT32_C(c) c##U
297304
// AARCH64-NEXT: #define __UINT32_C_SUFFIX__ U
298305
// AARCH64-NEXT: #define __UINT32_FMTX__ "X"
299306
// AARCH64-NEXT: #define __UINT32_FMTo__ "o"
300307
// AARCH64-NEXT: #define __UINT32_FMTu__ "u"
301308
// AARCH64-NEXT: #define __UINT32_FMTx__ "x"
302309
// AARCH64-NEXT: #define __UINT32_MAX__ 4294967295U
303310
// AARCH64-NEXT: #define __UINT32_TYPE__ unsigned int
311+
// AARCH64-NEXT: #define __UINT64_C(c) c##UL
304312
// AARCH64-NEXT: #define __UINT64_C_SUFFIX__ UL
305313
// AARCH64-NEXT: #define __UINT64_FMTX__ "lX"
306314
// AARCH64-NEXT: #define __UINT64_FMTo__ "lo"
307315
// AARCH64-NEXT: #define __UINT64_FMTu__ "lu"
308316
// AARCH64-NEXT: #define __UINT64_FMTx__ "lx"
309317
// AARCH64-NEXT: #define __UINT64_MAX__ 18446744073709551615UL
310318
// AARCH64-NEXT: #define __UINT64_TYPE__ long unsigned int
319+
// AARCH64-NEXT: #define __UINT8_C(c) c
311320
// AARCH64-NEXT: #define __UINT8_C_SUFFIX__
312321
// AARCH64-NEXT: #define __UINT8_FMTX__ "hhX"
313322
// AARCH64-NEXT: #define __UINT8_FMTo__ "hho"
314323
// AARCH64-NEXT: #define __UINT8_FMTu__ "hhu"
315324
// AARCH64-NEXT: #define __UINT8_FMTx__ "hhx"
316325
// AARCH64-NEXT: #define __UINT8_MAX__ 255
317326
// AARCH64-NEXT: #define __UINT8_TYPE__ unsigned char
327+
// AARCH64-NEXT: #define __UINTMAX_C(c) c##UL
318328
// AARCH64-NEXT: #define __UINTMAX_C_SUFFIX__ UL
319329
// AARCH64-NEXT: #define __UINTMAX_FMTX__ "lX"
320330
// AARCH64-NEXT: #define __UINTMAX_FMTo__ "lo"
@@ -435,26 +445,31 @@
435445
// AARCH64-DARWIN: #define __FLT_MIN__ 1.17549435e-38F
436446
// AARCH64-DARWIN: #define __FLT_RADIX__ 2
437447
// AARCH64-DARWIN: #define __FUNCTION_MULTI_VERSIONING_SUPPORT_LEVEL 202430
448+
// AARCH64-DARWIN: #define __INT16_C(c) c
438449
// AARCH64-DARWIN: #define __INT16_C_SUFFIX__
439450
// AARCH64-DARWIN: #define __INT16_FMTd__ "hd"
440451
// AARCH64-DARWIN: #define __INT16_FMTi__ "hi"
441452
// AARCH64-DARWIN: #define __INT16_MAX__ 32767
442453
// AARCH64-DARWIN: #define __INT16_TYPE__ short
454+
// AARCH64-DARWIN: #define __INT32_C(c) c
443455
// AARCH64-DARWIN: #define __INT32_C_SUFFIX__
444456
// AARCH64-DARWIN: #define __INT32_FMTd__ "d"
445457
// AARCH64-DARWIN: #define __INT32_FMTi__ "i"
446458
// AARCH64-DARWIN: #define __INT32_MAX__ 2147483647
447459
// AARCH64-DARWIN: #define __INT32_TYPE__ int
460+
// AARCH64-DARWIN: #define __INT64_C(c) c##LL
448461
// AARCH64-DARWIN: #define __INT64_C_SUFFIX__ LL
449462
// AARCH64-DARWIN: #define __INT64_FMTd__ "lld"
450463
// AARCH64-DARWIN: #define __INT64_FMTi__ "lli"
451464
// AARCH64-DARWIN: #define __INT64_MAX__ 9223372036854775807LL
452465
// AARCH64-DARWIN: #define __INT64_TYPE__ long long int
466+
// AARCH64-DARWIN: #define __INT8_C(c) c
453467
// AARCH64-DARWIN: #define __INT8_C_SUFFIX__
454468
// AARCH64-DARWIN: #define __INT8_FMTd__ "hhd"
455469
// AARCH64-DARWIN: #define __INT8_FMTi__ "hhi"
456470
// AARCH64-DARWIN: #define __INT8_MAX__ 127
457471
// AARCH64-DARWIN: #define __INT8_TYPE__ signed char
472+
// AARCH64-DARWIN: #define __INTMAX_C(c) c##L
458473
// AARCH64-DARWIN: #define __INTMAX_C_SUFFIX__ L
459474
// AARCH64-DARWIN: #define __INTMAX_FMTd__ "ld"
460475
// AARCH64-DARWIN: #define __INTMAX_FMTi__ "li"
@@ -538,18 +553,23 @@
538553
// AARCH64-DARWIN: #define __SIZE_MAX__ 18446744073709551615UL
539554
// AARCH64-DARWIN: #define __SIZE_TYPE__ long unsigned int
540555
// AARCH64-DARWIN: #define __SIZE_WIDTH__ 64
556+
// AARCH64-DARWIN: #define __UINT16_C(c) c
541557
// AARCH64-DARWIN: #define __UINT16_C_SUFFIX__
542558
// AARCH64-DARWIN: #define __UINT16_MAX__ 65535
543559
// AARCH64-DARWIN: #define __UINT16_TYPE__ unsigned short
560+
// AARCH64-DARWIN: #define __UINT32_C(c) c##U
544561
// AARCH64-DARWIN: #define __UINT32_C_SUFFIX__ U
545562
// AARCH64-DARWIN: #define __UINT32_MAX__ 4294967295U
546563
// AARCH64-DARWIN: #define __UINT32_TYPE__ unsigned int
564+
// AARCH64-DARWIN: #define __UINT64_C(c) c##ULL
547565
// AARCH64-DARWIN: #define __UINT64_C_SUFFIX__ ULL
548566
// AARCH64-DARWIN: #define __UINT64_MAX__ 18446744073709551615ULL
549567
// AARCH64-DARWIN: #define __UINT64_TYPE__ long long unsigned int
568+
// AARCH64-DARWIN: #define __UINT8_C(c) c
550569
// AARCH64-DARWIN: #define __UINT8_C_SUFFIX__
551570
// AARCH64-DARWIN: #define __UINT8_MAX__ 255
552571
// AARCH64-DARWIN: #define __UINT8_TYPE__ unsigned char
572+
// AARCH64-DARWIN: #define __UINTMAX_C(c) c##UL
553573
// AARCH64-DARWIN: #define __UINTMAX_C_SUFFIX__ UL
554574
// AARCH64-DARWIN: #define __UINTMAX_MAX__ 18446744073709551615UL
555575
// AARCH64-DARWIN: #define __UINTMAX_TYPE__ long unsigned int
@@ -703,18 +723,23 @@
703723
// AARCH64-MSVC: #define __STDC_UTF_32__ 1
704724
// AARCH64-MSVC: #define __STDC_VERSION__ 201710L
705725
// AARCH64-MSVC: #define __STDC__ 1
726+
// AARCH64-MSVC: #define __UINT16_C(c) c
706727
// AARCH64-MSVC: #define __UINT16_C_SUFFIX__
707728
// AARCH64-MSVC: #define __UINT16_MAX__ 65535
708729
// AARCH64-MSVC: #define __UINT16_TYPE__ unsigned short
730+
// AARCH64-MSVC: #define __UINT32_C(c) c##U
709731
// AARCH64-MSVC: #define __UINT32_C_SUFFIX__ U
710732
// AARCH64-MSVC: #define __UINT32_MAX__ 4294967295U
711733
// AARCH64-MSVC: #define __UINT32_TYPE__ unsigned int
734+
// AARCH64-MSVC: #define __UINT64_C(c) c##ULL
712735
// AARCH64-MSVC: #define __UINT64_C_SUFFIX__ ULL
713736
// AARCH64-MSVC: #define __UINT64_MAX__ 18446744073709551615ULL
714737
// AARCH64-MSVC: #define __UINT64_TYPE__ long long unsigned int
738+
// AARCH64-MSVC: #define __UINT8_C(c) c
715739
// AARCH64-MSVC: #define __UINT8_C_SUFFIX__
716740
// AARCH64-MSVC: #define __UINT8_MAX__ 255
717741
// AARCH64-MSVC: #define __UINT8_TYPE__ unsigned char
742+
// AARCH64-MSVC: #define __UINTMAX_C(c) c##ULL
718743
// AARCH64-MSVC: #define __UINTMAX_C_SUFFIX__ ULL
719744
// AARCH64-MSVC: #define __UINTMAX_MAX__ 18446744073709551615ULL
720745
// AARCH64-MSVC: #define __UINTMAX_TYPE__ long long unsigned int
@@ -867,26 +892,31 @@
867892
// ARM64EC-MSVC: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
868893
// ARM64EC-MSVC: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
869894
// ARM64EC-MSVC: #define __HAVE_FUNCTION_MULTI_VERSIONING 1
895+
// ARM64EC-MSVC: #define __INT16_C(c) c
870896
// ARM64EC-MSVC: #define __INT16_C_SUFFIX__
871897
// ARM64EC-MSVC: #define __INT16_FMTd__ "hd"
872898
// ARM64EC-MSVC: #define __INT16_FMTi__ "hi"
873899
// ARM64EC-MSVC: #define __INT16_MAX__ 32767
874900
// ARM64EC-MSVC: #define __INT16_TYPE__ short
901+
// ARM64EC-MSVC: #define __INT32_C(c) c
875902
// ARM64EC-MSVC: #define __INT32_C_SUFFIX__
876903
// ARM64EC-MSVC: #define __INT32_FMTd__ "d"
877904
// ARM64EC-MSVC: #define __INT32_FMTi__ "i"
878905
// ARM64EC-MSVC: #define __INT32_MAX__ 2147483647
879906
// ARM64EC-MSVC: #define __INT32_TYPE__ int
907+
// ARM64EC-MSVC: #define __INT64_C(c) c##LL
880908
// ARM64EC-MSVC: #define __INT64_C_SUFFIX__ LL
881909
// ARM64EC-MSVC: #define __INT64_FMTd__ "lld"
882910
// ARM64EC-MSVC: #define __INT64_FMTi__ "lli"
883911
// ARM64EC-MSVC: #define __INT64_MAX__ 9223372036854775807LL
884912
// ARM64EC-MSVC: #define __INT64_TYPE__ long long int
913+
// ARM64EC-MSVC: #define __INT8_C(c) c
885914
// ARM64EC-MSVC: #define __INT8_C_SUFFIX__
886915
// ARM64EC-MSVC: #define __INT8_FMTd__ "hhd"
887916
// ARM64EC-MSVC: #define __INT8_FMTi__ "hhi"
888917
// ARM64EC-MSVC: #define __INT8_MAX__ 127
889918
// ARM64EC-MSVC: #define __INT8_TYPE__ signed char
919+
// ARM64EC-MSVC: #define __INTMAX_C(c) c##LL
890920
// ARM64EC-MSVC: #define __INTMAX_C_SUFFIX__ LL
891921
// ARM64EC-MSVC: #define __INTMAX_FMTd__ "lld"
892922
// ARM64EC-MSVC: #define __INTMAX_FMTi__ "lli"
@@ -1013,34 +1043,39 @@
10131043
// ARM64EC-MSVC: #define __STDC_UTF_32__ 1
10141044
// ARM64EC-MSVC: #define __STDC_VERSION__ 201710L
10151045
// ARM64EC-MSVC: #define __STDC__ 1
1046+
// ARM64EC-MSVC: #define __UINT16_C(c) c
10161047
// ARM64EC-MSVC: #define __UINT16_C_SUFFIX__
10171048
// ARM64EC-MSVC: #define __UINT16_FMTX__ "hX"
10181049
// ARM64EC-MSVC: #define __UINT16_FMTo__ "ho"
10191050
// ARM64EC-MSVC: #define __UINT16_FMTu__ "hu"
10201051
// ARM64EC-MSVC: #define __UINT16_FMTx__ "hx"
10211052
// ARM64EC-MSVC: #define __UINT16_MAX__ 65535
10221053
// ARM64EC-MSVC: #define __UINT16_TYPE__ unsigned short
1054+
// ARM64EC-MSVC: #define __UINT32_C(c) c##U
10231055
// ARM64EC-MSVC: #define __UINT32_C_SUFFIX__ U
10241056
// ARM64EC-MSVC: #define __UINT32_FMTX__ "X"
10251057
// ARM64EC-MSVC: #define __UINT32_FMTo__ "o"
10261058
// ARM64EC-MSVC: #define __UINT32_FMTu__ "u"
10271059
// ARM64EC-MSVC: #define __UINT32_FMTx__ "x"
10281060
// ARM64EC-MSVC: #define __UINT32_MAX__ 4294967295U
10291061
// ARM64EC-MSVC: #define __UINT32_TYPE__ unsigned int
1062+
// ARM64EC-MSVC: #define __UINT64_C(c) c##ULL
10301063
// ARM64EC-MSVC: #define __UINT64_C_SUFFIX__ ULL
10311064
// ARM64EC-MSVC: #define __UINT64_FMTX__ "llX"
10321065
// ARM64EC-MSVC: #define __UINT64_FMTo__ "llo"
10331066
// ARM64EC-MSVC: #define __UINT64_FMTu__ "llu"
10341067
// ARM64EC-MSVC: #define __UINT64_FMTx__ "llx"
10351068
// ARM64EC-MSVC: #define __UINT64_MAX__ 18446744073709551615ULL
10361069
// ARM64EC-MSVC: #define __UINT64_TYPE__ long long unsigned int
1070+
// ARM64EC-MSVC: #define __UINT8_C(c) c
10371071
// ARM64EC-MSVC: #define __UINT8_C_SUFFIX__
10381072
// ARM64EC-MSVC: #define __UINT8_FMTX__ "hhX"
10391073
// ARM64EC-MSVC: #define __UINT8_FMTo__ "hho"
10401074
// ARM64EC-MSVC: #define __UINT8_FMTu__ "hhu"
10411075
// ARM64EC-MSVC: #define __UINT8_FMTx__ "hhx"
10421076
// ARM64EC-MSVC: #define __UINT8_MAX__ 255
10431077
// ARM64EC-MSVC: #define __UINT8_TYPE__ unsigned char
1078+
// ARM64EC-MSVC: #define __UINTMAX_C(c) c##ULL
10441079
// ARM64EC-MSVC: #define __UINTMAX_C_SUFFIX__ ULL
10451080
// ARM64EC-MSVC: #define __UINTMAX_FMTX__ "llX"
10461081
// ARM64EC-MSVC: #define __UINTMAX_FMTo__ "llo"

0 commit comments

Comments
 (0)