Skip to content

Commit 6c75ab5

Browse files
committed
Introduce _BitInt, deprecate _ExtInt
WG14 adopted the _ExtInt feature from Clang for C23, but renamed the type to be _BitInt. This patch does the vast majority of the work to rename _ExtInt to _BitInt, which accounts for most of its size. The new type is exposed in older C modes and all C++ modes as a conforming extension. However, there are functional changes worth calling out: * Deprecates _ExtInt with a fix-it to help users migrate to _BitInt. * Updates the mangling for the type. * Updates the documentation and adds a release note to warn users what is going on. * Adds new diagnostics for use of _BitInt to call out when it's used as a Clang extension or as a pre-C23 compatibility concern. * Adds new tests for the new diagnostic behaviors. I want to call out the ABI break specifically. We do not believe that this break will cause a significant imposition for early adopters of the feature, and so this is being done as a full break. If it turns out there are critical uses where recompilation is not an option for some reason, we can consider using ABI tags to ease the transition.
1 parent a6816b9 commit 6c75ab5

File tree

90 files changed

+730
-696
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+730
-696
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
// RUN: %check_clang_tidy -std=c99 %s bugprone-implicit-widening-of-multiplication-result %t -- -- -target x86_64-unknown-unknown -x c
22
// RUN: %check_clang_tidy %s bugprone-implicit-widening-of-multiplication-result %t -- -- -target x86_64-unknown-unknown -x c++
33

4-
_ExtInt(64) t0(_ExtInt(32) a, _ExtInt(32) b) {
4+
_BitInt(64) t0(_BitInt(32) a, _BitInt(32) b) {
55
return a * b;
6-
// CHECK-NOTES: :[[@LINE-1]]:10: warning: performing an implicit widening conversion to type '_ExtInt(64)' of a multiplication performed in type '_ExtInt(32)'
6+
// CHECK-NOTES: :[[@LINE-1]]:10: warning: performing an implicit widening conversion to type '_BitInt(64)' of a multiplication performed in type '_BitInt(32)'
77
// CHECK-NOTES: :[[@LINE-2]]:10: note: make conversion explicit to silence this warning
88
// CHECK-NOTES: :[[@LINE-3]]:10: note: perform multiplication in a wider type
99
}
10-
unsigned _ExtInt(64) t1(_ExtInt(32) a, _ExtInt(32) b) {
10+
unsigned _BitInt(64) t1(_BitInt(32) a, _BitInt(32) b) {
1111
return a * b;
12-
// CHECK-NOTES: :[[@LINE-1]]:10: warning: performing an implicit widening conversion to type 'unsigned _ExtInt(64)' of a multiplication performed in type '_ExtInt(32)'
12+
// CHECK-NOTES: :[[@LINE-1]]:10: warning: performing an implicit widening conversion to type 'unsigned _BitInt(64)' of a multiplication performed in type '_BitInt(32)'
1313
// CHECK-NOTES: :[[@LINE-2]]:10: note: make conversion explicit to silence this warning
1414
// CHECK-NOTES: :[[@LINE-3]]:10: note: perform multiplication in a wider type
1515
}
16-
_ExtInt(64) t2(unsigned _ExtInt(32) a, unsigned _ExtInt(32) b) {
16+
_BitInt(64) t2(unsigned _BitInt(32) a, unsigned _BitInt(32) b) {
1717
return a * b;
18-
// CHECK-NOTES: :[[@LINE-1]]:10: warning: performing an implicit widening conversion to type '_ExtInt(64)' of a multiplication performed in type 'unsigned _ExtInt(32)'
18+
// CHECK-NOTES: :[[@LINE-1]]:10: warning: performing an implicit widening conversion to type '_BitInt(64)' of a multiplication performed in type 'unsigned _BitInt(32)'
1919
// CHECK-NOTES: :[[@LINE-2]]:10: note: make conversion explicit to silence this warning
2020
// CHECK-NOTES: :[[@LINE-3]]:10: note: perform multiplication in a wider type
2121
}

clang/docs/LanguageExtensions.rst

Lines changed: 7 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4089,55 +4089,13 @@ Examples are:
40894089
Extended Integer Types
40904090
======================
40914091
4092-
Clang supports a set of extended integer types under the syntax ``_ExtInt(N)``
4093-
where ``N`` is an integer that specifies the number of bits that are used to represent
4094-
the type, including the sign bit. The keyword ``_ExtInt`` is a type specifier, thus
4095-
it can be used in any place a type can, including as a non-type-template-parameter,
4096-
as the type of a bitfield, and as the underlying type of an enumeration.
4097-
4098-
An extended integer can be declared either signed, or unsigned by using the
4099-
``signed``/``unsigned`` keywords. If no sign specifier is used or if the ``signed``
4100-
keyword is used, the extended integer type is a signed integer and can represent
4101-
negative values.
4102-
4103-
The ``N`` expression is an integer constant expression, which specifies the number
4104-
of bits used to represent the type, following normal integer representations for
4105-
both signed and unsigned types. Both a signed and unsigned extended integer of the
4106-
same ``N`` value will have the same number of bits in its representation. Many
4107-
architectures don't have a way of representing non power-of-2 integers, so these
4108-
architectures emulate these types using larger integers. In these cases, they are
4109-
expected to follow the 'as-if' rule and do math 'as-if' they were done at the
4110-
specified number of bits.
4111-
4112-
In order to be consistent with the C language specification, and make the extended
4113-
integer types useful for their intended purpose, extended integers follow the C
4114-
standard integer conversion ranks. An extended integer type has a greater rank than
4115-
any integer type with less precision. However, they have lower rank than any
4116-
of the built in or other integer types (such as __int128). Usual arithmetic conversions
4117-
also work the same, where the smaller ranked integer is converted to the larger.
4118-
4119-
The one exception to the C rules for integers for these types is Integer Promotion.
4120-
Unary +, -, and ~ operators typically will promote operands to ``int``. Doing these
4121-
promotions would inflate the size of required hardware on some platforms, so extended
4122-
integer types aren't subject to the integer promotion rules in these cases.
4123-
4124-
In languages (such as OpenCL) that define shift by-out-of-range behavior as a mask,
4125-
non-power-of-two versions of these types use an unsigned remainder operation to constrain
4126-
the value to the proper range, preventing undefined behavior.
4127-
4128-
Extended integer types are aligned to the next greatest power-of-2 up to 64 bits.
4129-
The size of these types for the purposes of layout and ``sizeof`` are the number of
4130-
bits aligned to this calculated alignment. This permits the use of these types in
4131-
allocated arrays using common ``sizeof(Array)/sizeof(ElementType)`` pattern.
4132-
4133-
Extended integer types work with the C _Atomic type modifier, however only precisions
4134-
that are powers-of-2 greater than 8 bit are accepted.
4135-
4136-
Extended integer types align with existing calling conventions. They have the same size
4137-
and alignment as the smallest basic type that can contain them. Types that are larger
4138-
than 64 bits are handled in the same way as _int128 is handled; they are conceptually
4139-
treated as struct of register size chunks. They number of chunks are the smallest
4140-
number that can contain the types which does not necessarily mean a power-of-2 size.
4092+
Clang supports the C23 ``_BitInt(N)`` feature as an extension in older C modes
4093+
and in C++. This type was previously implemented in Clang with the same
4094+
semantics, but spelled ``_ExtInt(N)``. This spelling has been deprecated in
4095+
favor of the standard type.
4096+
4097+
Note: the ABI for ``_BitInt(N)`` is still in the process of being stabilized,
4098+
so this type should not yet be used in interfaces that require ABI stability.
41414099
41424100
Intrinsics Support within Constant Expressions
41434101
==============================================

clang/docs/ReleaseNotes.rst

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,16 @@ C Language Changes in Clang
141141
``__attribute__((warning("")))`` function attributes have been added.
142142
- The maximum allowed alignment has been increased from 2^29 to 2^32.
143143

144+
- Clang now supports the ``_BitInt(N)`` family of bit-precise integer types
145+
from C23. This type was previously exposed as ``_ExtInt(N)``, which is now a
146+
deprecated alias for ``_BitInt(N)`` (so diagnostics will mention ``_BitInt``
147+
even if source uses ``_ExtInt``). ``_BitInt(N)`` and ``_ExtInt(N)`` are the
148+
same types in all respects beyond spelling and the deprecation warning.
149+
``_BitInt(N)`` is supported as an extension in older C modes and in all C++
150+
modes. Note: the ABI for ``_BitInt(N)`` is still in the process of being
151+
stabilized, so this type should not yet be used in interfaces that require
152+
ABI stability.
153+
144154
C++ Language Changes in Clang
145155
-----------------------------
146156

@@ -173,6 +183,13 @@ OpenCL C Language Changes in Clang
173183
ABI Changes in Clang
174184
--------------------
175185

186+
- The ``_ExtInt(N)`` extension has been standardized in C23 as ``_BitInt(N)``.
187+
The mangling of this type in C++ has accordingly changed: under the Microsoft
188+
ABI it is now mangled using the ``_BitInt`` spelling, and under the Itanium ABI
189+
it is now mangled using a dedicated production. Note: the ABI for ``_BitInt(N)``
190+
is still in the process of being stabilized, so this type should not yet be
191+
used in interfaces that require ABI stability.
192+
176193
OpenMP Support in Clang
177194
-----------------------
178195

clang/include/clang/AST/ASTContext.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,8 @@ class ASTContext : public RefCountedBase<ASTContext> {
264264
mutable llvm::FoldingSet<AtomicType> AtomicTypes;
265265
llvm::FoldingSet<AttributedType> AttributedTypes;
266266
mutable llvm::FoldingSet<PipeType> PipeTypes;
267-
mutable llvm::FoldingSet<ExtIntType> ExtIntTypes;
268-
mutable llvm::FoldingSet<DependentExtIntType> DependentExtIntTypes;
267+
mutable llvm::FoldingSet<BitIntType> BitIntTypes;
268+
mutable llvm::FoldingSet<DependentBitIntType> DependentBitIntTypes;
269269

270270
mutable llvm::FoldingSet<QualifiedTemplateName> QualifiedTemplateNames;
271271
mutable llvm::FoldingSet<DependentTemplateName> DependentTemplateNames;
@@ -1350,13 +1350,13 @@ class ASTContext : public RefCountedBase<ASTContext> {
13501350
/// Return a write_only pipe type for the specified type.
13511351
QualType getWritePipeType(QualType T) const;
13521352

1353-
/// Return an extended integer type with the specified signedness and bit
1353+
/// Return a bit-precise integer type with the specified signedness and bit
13541354
/// count.
1355-
QualType getExtIntType(bool Unsigned, unsigned NumBits) const;
1355+
QualType getBitIntType(bool Unsigned, unsigned NumBits) const;
13561356

1357-
/// Return a dependent extended integer type with the specified signedness and
1358-
/// bit count.
1359-
QualType getDependentExtIntType(bool Unsigned, Expr *BitsExpr) const;
1357+
/// Return a dependent bit-precise integer type with the specified signedness
1358+
/// and bit count.
1359+
QualType getDependentBitIntType(bool Unsigned, Expr *BitsExpr) const;
13601360

13611361
/// Gets the struct used to keep track of the extended descriptor for
13621362
/// pointer to blocks.

clang/include/clang/AST/RecursiveASTVisitor.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,8 +1072,8 @@ DEF_TRAVERSE_TYPE(AtomicType, { TRY_TO(TraverseType(T->getValueType())); })
10721072

10731073
DEF_TRAVERSE_TYPE(PipeType, { TRY_TO(TraverseType(T->getElementType())); })
10741074

1075-
DEF_TRAVERSE_TYPE(ExtIntType, {})
1076-
DEF_TRAVERSE_TYPE(DependentExtIntType,
1075+
DEF_TRAVERSE_TYPE(BitIntType, {})
1076+
DEF_TRAVERSE_TYPE(DependentBitIntType,
10771077
{ TRY_TO(TraverseStmt(T->getNumBitsExpr())); })
10781078

10791079
#undef DEF_TRAVERSE_TYPE
@@ -1358,8 +1358,8 @@ DEF_TRAVERSE_TYPELOC(AtomicType, { TRY_TO(TraverseTypeLoc(TL.getValueLoc())); })
13581358

13591359
DEF_TRAVERSE_TYPELOC(PipeType, { TRY_TO(TraverseTypeLoc(TL.getValueLoc())); })
13601360

1361-
DEF_TRAVERSE_TYPELOC(ExtIntType, {})
1362-
DEF_TRAVERSE_TYPELOC(DependentExtIntType, {
1361+
DEF_TRAVERSE_TYPELOC(BitIntType, {})
1362+
DEF_TRAVERSE_TYPELOC(DependentBitIntType, {
13631363
TRY_TO(TraverseStmt(TL.getTypePtr()->getNumBitsExpr()));
13641364
})
13651365

clang/include/clang/AST/Type.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2128,7 +2128,7 @@ class alignas(8) Type : public ExtQualsTypeCommonBase {
21282128
bool isOCLExtOpaqueType() const; // Any OpenCL extension type
21292129

21302130
bool isPipeType() const; // OpenCL pipe type
2131-
bool isExtIntType() const; // Extended Int Type
2131+
bool isBitIntType() const; // Bit-precise integer type
21322132
bool isOpenCLSpecificType() const; // Any OpenCL specific type
21332133

21342134
/// Determines if this type, which must satisfy
@@ -6307,13 +6307,13 @@ class PipeType : public Type, public llvm::FoldingSetNode {
63076307
};
63086308

63096309
/// A fixed int type of a specified bitwidth.
6310-
class ExtIntType final : public Type, public llvm::FoldingSetNode {
6310+
class BitIntType final : public Type, public llvm::FoldingSetNode {
63116311
friend class ASTContext;
63126312
unsigned IsUnsigned : 1;
63136313
unsigned NumBits : 24;
63146314

63156315
protected:
6316-
ExtIntType(bool isUnsigned, unsigned NumBits);
6316+
BitIntType(bool isUnsigned, unsigned NumBits);
63176317

63186318
public:
63196319
bool isUnsigned() const { return IsUnsigned; }
@@ -6333,16 +6333,16 @@ class ExtIntType final : public Type, public llvm::FoldingSetNode {
63336333
ID.AddInteger(NumBits);
63346334
}
63356335

6336-
static bool classof(const Type *T) { return T->getTypeClass() == ExtInt; }
6336+
static bool classof(const Type *T) { return T->getTypeClass() == BitInt; }
63376337
};
63386338

6339-
class DependentExtIntType final : public Type, public llvm::FoldingSetNode {
6339+
class DependentBitIntType final : public Type, public llvm::FoldingSetNode {
63406340
friend class ASTContext;
63416341
const ASTContext &Context;
63426342
llvm::PointerIntPair<Expr*, 1, bool> ExprAndUnsigned;
63436343

63446344
protected:
6345-
DependentExtIntType(const ASTContext &Context, bool IsUnsigned,
6345+
DependentBitIntType(const ASTContext &Context, bool IsUnsigned,
63466346
Expr *NumBits);
63476347

63486348
public:
@@ -6360,7 +6360,7 @@ class DependentExtIntType final : public Type, public llvm::FoldingSetNode {
63606360
bool IsUnsigned, Expr *NumBitsExpr);
63616361

63626362
static bool classof(const Type *T) {
6363-
return T->getTypeClass() == DependentExtInt;
6363+
return T->getTypeClass() == DependentBitInt;
63646364
}
63656365
};
63666366

@@ -6891,8 +6891,8 @@ inline bool Type::isPipeType() const {
68916891
return isa<PipeType>(CanonicalType);
68926892
}
68936893

6894-
inline bool Type::isExtIntType() const {
6895-
return isa<ExtIntType>(CanonicalType);
6894+
inline bool Type::isBitIntType() const {
6895+
return isa<BitIntType>(CanonicalType);
68966896
}
68976897

68986898
#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \
@@ -6998,7 +6998,7 @@ inline bool Type::isIntegerType() const {
69986998
return IsEnumDeclComplete(ET->getDecl()) &&
69996999
!IsEnumDeclScoped(ET->getDecl());
70007000
}
7001-
return isExtIntType();
7001+
return isBitIntType();
70027002
}
70037003

70047004
inline bool Type::isFixedPointType() const {
@@ -7056,7 +7056,7 @@ inline bool Type::isScalarType() const {
70567056
isa<MemberPointerType>(CanonicalType) ||
70577057
isa<ComplexType>(CanonicalType) ||
70587058
isa<ObjCObjectPointerType>(CanonicalType) ||
7059-
isExtIntType();
7059+
isBitIntType();
70607060
}
70617061

70627062
inline bool Type::isIntegralOrEnumerationType() const {
@@ -7069,7 +7069,7 @@ inline bool Type::isIntegralOrEnumerationType() const {
70697069
if (const auto *ET = dyn_cast<EnumType>(CanonicalType))
70707070
return IsEnumDeclComplete(ET->getDecl());
70717071

7072-
return isExtIntType();
7072+
return isBitIntType();
70737073
}
70747074

70757075
inline bool Type::isBooleanType() const {

clang/include/clang/AST/TypeLoc.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2561,12 +2561,12 @@ inline T TypeLoc::getAsAdjusted() const {
25612561
}
25622562
return Cur.getAs<T>();
25632563
}
2564-
class ExtIntTypeLoc final
2565-
: public InheritingConcreteTypeLoc<TypeSpecTypeLoc, ExtIntTypeLoc,
2566-
ExtIntType> {};
2567-
class DependentExtIntTypeLoc final
2568-
: public InheritingConcreteTypeLoc<TypeSpecTypeLoc, DependentExtIntTypeLoc,
2569-
DependentExtIntType> {};
2564+
class BitIntTypeLoc final
2565+
: public InheritingConcreteTypeLoc<TypeSpecTypeLoc, BitIntTypeLoc,
2566+
BitIntType> {};
2567+
class DependentBitIntTypeLoc final
2568+
: public InheritingConcreteTypeLoc<TypeSpecTypeLoc, DependentBitIntTypeLoc,
2569+
DependentBitIntType> {};
25702570

25712571
} // namespace clang
25722572

clang/include/clang/AST/TypeProperties.td

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -882,7 +882,7 @@ let Class = PipeType in {
882882
}]>;
883883
}
884884

885-
let Class = ExtIntType in {
885+
let Class = BitIntType in {
886886
def : Property<"isUnsigned", Bool> {
887887
let Read = [{ node->isUnsigned() }];
888888
}
@@ -891,18 +891,18 @@ let Class = ExtIntType in {
891891
}
892892

893893
def : Creator<[{
894-
return ctx.getExtIntType(isUnsigned, numBits);
894+
return ctx.getBitIntType(isUnsigned, numBits);
895895
}]>;
896896
}
897897

898-
let Class = DependentExtIntType in {
898+
let Class = DependentBitIntType in {
899899
def : Property<"isUnsigned", Bool> {
900900
let Read = [{ node->isUnsigned() }];
901901
}
902902
def : Property <"numBitsExpr", ExprRef> {
903903
let Read = [{ node->getNumBitsExpr() }];
904904
}
905905
def : Creator<[{
906-
return ctx.getDependentExtIntType(isUnsigned, numBitsExpr);
906+
return ctx.getDependentBitIntType(isUnsigned, numBitsExpr);
907907
}]>;
908908
}

clang/include/clang/Basic/DiagnosticGroups.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ def DeprecatedVolatile : DiagGroup<"deprecated-volatile">;
191191
def DeprecatedWritableStr : DiagGroup<"deprecated-writable-strings",
192192
[CXX11CompatDeprecatedWritableStr]>;
193193
def DeprecatedPragma : DiagGroup<"deprecated-pragma">;
194+
def DeprecatedType : DiagGroup<"deprecated-type">;
194195
// FIXME: Why is DeprecatedImplementations not in this group?
195196
def Deprecated : DiagGroup<"deprecated", [DeprecatedAnonEnumEnumConversion,
196197
DeprecatedArrayCompare,
@@ -208,6 +209,7 @@ def Deprecated : DiagGroup<"deprecated", [DeprecatedAnonEnumEnumConversion,
208209
DeprecatedPragma,
209210
DeprecatedRegister,
210211
DeprecatedThisCapture,
212+
DeprecatedType,
211213
DeprecatedVolatile,
212214
DeprecatedWritableStr]>,
213215
DiagCategory<"Deprecations">;

clang/include/clang/Basic/DiagnosticParseKinds.td

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1503,6 +1503,15 @@ def warn_pragma_force_cuda_host_device_bad_arg : Warning<
15031503
def err_pragma_cannot_end_force_cuda_host_device : Error<
15041504
"force_cuda_host_device end pragma without matching "
15051505
"force_cuda_host_device begin">;
1506+
1507+
def warn_ext_int_deprecated : Warning<
1508+
"'_ExtInt' is deprecated; use '_BitInt' instead">, InGroup<DeprecatedType>;
1509+
def ext_bit_int : Extension<
1510+
"'_BitInt' in %select{C17 and earlier|C++}0 is a Clang extension">,
1511+
InGroup<DiagGroup<"bit-int-extension">>;
1512+
def warn_c17_compat_bit_int : Warning<
1513+
"'_BitInt' is incompatible with C standards before C2x">,
1514+
InGroup<CPre2xCompat>, DefaultIgnore;
15061515
} // end of Parse Issue category.
15071516

15081517
let CategoryName = "Modules Issue" in {

clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8337,8 +8337,8 @@ def err_atomic_exclusive_builtin_pointer_size : Error<
83378337
" 1,2,4 or 8 byte type (%0 invalid)">;
83388338
def err_atomic_builtin_ext_int_size : Error<
83398339
"Atomic memory operand must have a power-of-two size">;
8340-
def err_atomic_builtin_ext_int_prohibit : Error<
8341-
"argument to atomic builtin of type '_ExtInt' is not supported">;
8340+
def err_atomic_builtin_bit_int_prohibit : Error<
8341+
"argument to atomic builtin of type '_BitInt' is not supported">;
83428342
def err_atomic_op_needs_atomic : Error<
83438343
"address argument to atomic operation must be a pointer to _Atomic "
83448344
"type (%0 invalid)">;
@@ -8374,8 +8374,8 @@ def err_overflow_builtin_must_be_int : Error<
83748374
def err_overflow_builtin_must_be_ptr_int : Error<
83758375
"result argument to overflow builtin must be a pointer "
83768376
"to a non-const integer (%0 invalid)">;
8377-
def err_overflow_builtin_ext_int_max_size : Error<
8378-
"__builtin_mul_overflow does not support signed _ExtInt operands of more "
8377+
def err_overflow_builtin_bit_int_max_size : Error<
8378+
"__builtin_mul_overflow does not support 'signed _BitInt' operands of more "
83798379
"than %0 bits">;
83808380

83818381
def err_atomic_load_store_uses_lib : Error<
@@ -11423,9 +11423,9 @@ def warn_sycl_kernel_return_type : Warning<
1142311423
"function template with 'sycl_kernel' attribute must have a 'void' return type">,
1142411424
InGroup<IgnoredAttributes>;
1142511425

11426-
def err_ext_int_bad_size : Error<"%select{signed|unsigned}0 _ExtInt must "
11426+
def err_bit_int_bad_size : Error<"%select{signed|unsigned}0 _BitInt must "
1142711427
"have a bit size of at least %select{2|1}0">;
11428-
def err_ext_int_max_size : Error<"%select{signed|unsigned}0 _ExtInt of bit "
11428+
def err_bit_int_max_size : Error<"%select{signed|unsigned}0 _BitInt of bit "
1142911429
"sizes greater than %1 not supported">;
1143011430

1143111431
// errors of expect.with.probability

clang/include/clang/Basic/Specifiers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ namespace clang {
5959
TST_char32, // C++11 char32_t
6060
TST_int,
6161
TST_int128,
62-
TST_extint, // Extended Int types.
62+
TST_bitint, // Bit-precise integer types.
6363
TST_half, // OpenCL half, ARM NEON __fp16
6464
TST_Float16, // C11 extension ISO/IEC TS 18661-3
6565
TST_Accum, // ISO/IEC JTC1 SC22 WG14 N1169 Extension

0 commit comments

Comments
 (0)