22#ifndef LLVM_CLANG_SEMA_DECLSPEC_H
23#define LLVM_CLANG_SEMA_DECLSPEC_H
35#include "llvm/ADT/STLExtras.h"
36#include "llvm/ADT/SmallVector.h"
37#include "llvm/Support/Compiler.h"
38#include "llvm/Support/ErrorHandling.h"
46 class NamespaceAliasDecl;
51 struct TemplateIdAnnotation;
87 TemplateParamLists = L;
90 return TemplateParamLists;
95 return Builder.getRepresentation();
218 assert(R.
isValid() &&
"Must have a valid source range");
219 if (Range.getBegin().isInvalid())
312#define TRANSFORM_TYPE_TRAIT_DEF(_, Trait) \
313 static const TST TST_##Trait = clang::TST_##Trait;
314#include "clang/Basic/TransformTypeTraits.def"
319#define GENERIC_IMAGE_TYPE(ImgType, Id) \
320 static const TST TST_##ImgType##_t = clang::TST_##ImgType##_t;
321#include "clang/Basic/OpenCLImageTypes.def"
354 unsigned StorageClassSpec : 3;
355 unsigned ThreadStorageClassSpec : 2;
356 unsigned SCS_extern_in_linkage_spec : 1;
359 unsigned TypeSpecWidth : 2;
360 unsigned TypeSpecComplex : 2;
361 unsigned TypeSpecSign : 2;
362 unsigned TypeSpecType : 7;
363 unsigned TypeAltiVecVector : 1;
364 unsigned TypeAltiVecPixel : 1;
365 unsigned TypeAltiVecBool : 1;
366 unsigned TypeSpecOwned : 1;
367 unsigned TypeSpecPipe : 1;
368 unsigned TypeSpecSat : 1;
369 unsigned ConstrainedAuto : 1;
372 unsigned TypeQualifiers : 5;
375 unsigned FS_inline_specified : 1;
376 unsigned FS_forceinline_specified: 1;
377 unsigned FS_virtual_specified : 1;
378 unsigned FS_noreturn_specified : 1;
381 unsigned Friend_specified : 1;
384 unsigned ConstexprSpecifier : 2;
415 SourceLocation TQ_constLoc, TQ_restrictLoc, TQ_volatileLoc, TQ_atomicLoc,
417 SourceLocation FS_inlineLoc, FS_virtualLoc, FS_explicitLoc, FS_noreturnLoc;
424 void SaveWrittenBuiltinSpecs();
432 static bool isExprRep(
TST T) {
436 static bool isTemplateIdRep(
TST T) {
440 DeclSpec(
const DeclSpec &) =
delete;
441 void operator=(
const DeclSpec &) =
delete;
449 constexpr std::array<TST, 16> Traits = {
450#define TRANSFORM_TYPE_TRAIT_DEF(_, Trait) TST_##Trait,
451#include "clang/Basic/TransformTypeTraits.def"
454 return T >= Traits.front() && T <= Traits.back();
460 SCS_extern_in_linkage_spec(
false),
468 FS_forceinline_specified(
false), FS_virtual_specified(
false),
469 FS_noreturn_specified(
false), Friend_specified(
false),
472 Attrs(attrFactory), writtenBS(), ObjCQualifiers(nullptr) {}
477 return (
TSCS)ThreadStorageClassSpec;
481 SCS_extern_in_linkage_spec =
Value;
486 return ThreadStorageClassSpecLoc;
492 SCS_extern_in_linkage_spec =
false;
499 TypeSpecOwned =
false;
522 assert(
isTypeRep((
TST) TypeSpecType) &&
"DeclSpec does not store a type");
526 assert(
isDeclRep((
TST) TypeSpecType) &&
"DeclSpec does not store a decl");
530 assert(isExprRep((
TST) TypeSpecType) &&
"DeclSpec does not store an expr");
534 assert(isTemplateIdRep((
TST) TypeSpecType) &&
535 "DeclSpec does not store a template id");
555 isExprRep((
TST)TypeSpecType));
604 return FS_inline_specified | FS_forceinline_specified;
607 return FS_inline_specified ? FS_inlineLoc : FS_forceinlineLoc;
611 return FS_explicit_specifier;
622 return FS_explicit_specifier.
getExpr()
623 ?
SourceRange(FS_explicitLoc, FS_explicitCloseParenLoc)
631 FS_inline_specified =
false;
633 FS_forceinline_specified =
false;
635 FS_virtual_specified =
false;
640 FS_noreturn_specified =
false;
688 const char *&PrevSpec,
unsigned &DiagID,
691 const char *&PrevSpec,
unsigned &DiagID);
693 const char *&PrevSpec,
unsigned &DiagID,
698 const char *&PrevSpec,
unsigned &DiagID);
712 unsigned &DiagID,
Decl *Rep,
bool Owned,
720 unsigned &DiagID,
Decl *Rep,
bool Owned,
727 unsigned &DiagID,
Expr *Rep,
730 const char *&PrevSpec,
unsigned &DiagID,
733 const char *&PrevSpec,
unsigned &DiagID,
736 const char *&PrevSpec,
unsigned &DiagID,
739 const char *&PrevSpec,
unsigned &DiagID,
742 const char *&PrevSpec,
unsigned &DiagID,
756 assert(isExprRep((
TST) TypeSpecType));
782 const char *&PrevSpec,
unsigned &DiagID);
882 PropertyAttributes(ObjCPropertyAttribute::kind_noattr), Nullability(0),
883 GetterName(nullptr), SetterName(nullptr) {}
907 "Objective-C declspec doesn't have nullability");
915 "Objective-C declspec doesn't have nullability");
916 return NullabilityLoc;
923 "Set the nullability declspec or property attribute first");
924 Nullability =
static_cast<unsigned>(kind);
925 NullabilityLoc = loc;
948 unsigned objcDeclQualifier : 7;
953 unsigned Nullability : 2;
1305 std::unique_ptr<CachedTokens> DefArgTokens =
nullptr)
1419 for (
unsigned I = 0; I <
NumParams; ++I)
1420 Params[I].DefaultArgTokens.reset();
1576 Scope().~CXXScopeSpec();
1648 bool isStatic,
bool isStar,
Expr *NumElts,
1666 ParamInfo *Params,
unsigned NumParams,
1669 bool RefQualifierIsLvalueRef,
1676 unsigned NumExceptions,
1687 DeclSpec *MethodQualifiers =
nullptr);
1754 unsigned NumBindings : 31;
1755 unsigned DeleteBindings : 1;
1761 :
Bindings(nullptr), NumBindings(0), DeleteBindings(
false) {}
1775 DeleteBindings =
false;
1871 unsigned InvalidType : 1;
1874 unsigned GroupingParens : 1;
1880 unsigned FunctionDefinition : 2;
1883 unsigned Redeclaration : 1;
1886 unsigned Extension : 1;
1889 unsigned ObjCIvar : 1;
1892 unsigned ObjCWeakProperty : 1;
1895 unsigned InlineStorageUsed : 1;
1898 unsigned HasInitializer : 1;
1912 Expr *TrailingRequiresClause;
1965 GroupingParens(
false), FunctionDefinition(static_cast<
unsigned>(
1968 ObjCWeakProperty(
false), InlineStorageUsed(
false),
1970 DeclarationAttrs(DeclarationAttrs), AsmLabel(nullptr),
1971 TrailingRequiresClause(nullptr),
1972 InventedTemplateParameterList(nullptr) {
1973 assert(llvm::all_of(DeclarationAttrs,
1978 "DeclarationAttrs may only contain [[]] and keyword attributes");
2008 return BindingGroup;
2030 Range.setBegin(Loc);
2042 if (Range.getBegin().isInvalid())
2045 Range.setEnd(SR.
getEnd());
2053 BindingGroup.
clear();
2055 for (
unsigned i = 0, e = DeclTypeInfo.size(); i != e; ++i)
2056 DeclTypeInfo[i].destroy();
2057 DeclTypeInfo.clear();
2060 InlineStorageUsed =
false;
2061 HasInitializer =
false;
2063 ObjCWeakProperty =
false;
2105 llvm_unreachable(
"unknown context kind!");
2145 llvm_unreachable(
"unknown context kind!");
2189 llvm_unreachable(
"unknown context kind!");
2246 llvm_unreachable(
"unknown context kind!");
2265 return BindingGroup.
isSet();
2270 return Name.Identifier;
2278 Name.setIdentifier(
Id, IdLoc);
2293 DeclTypeInfo.push_back(TI);
2294 DeclTypeInfo.back().getAttrs().addAll(attrs.begin(), attrs.end());
2304 DeclTypeInfo.push_back(TI);
2312 DeclTypeInfo.insert(DeclTypeInfo.begin(), TI);
2321 assert(i < DeclTypeInfo.size() &&
"Invalid type chunk");
2322 return DeclTypeInfo[i];
2325 assert(i < DeclTypeInfo.size() &&
"Invalid type chunk");
2326 return DeclTypeInfo[i];
2338 assert(!DeclTypeInfo.empty() &&
"No type chunks to drop.");
2339 DeclTypeInfo.front().destroy();
2340 DeclTypeInfo.erase(DeclTypeInfo.begin());
2347 for (
unsigned i = 0, i_end = DeclTypeInfo.size(); i < i_end; ++i) {
2348 if (!DeclTypeInfo[i].isParen())
2349 return &DeclTypeInfo[i];
2358 for (
unsigned i = DeclTypeInfo.size(), i_end = 0; i != i_end; --i) {
2359 if (!DeclTypeInfo[i-1].isParen())
2360 return &DeclTypeInfo[i-1];
2379 for (
unsigned i = 0, i_end = DeclTypeInfo.size(); i < i_end; ++i) {
2380 switch (DeclTypeInfo[i].Kind) {
2394 llvm_unreachable(
"Invalid type chunk");
2413 return DeclTypeInfo[index].Fun;
2469 llvm_unreachable(
"unknown context kind!");
2512 llvm_unreachable(
"unknown context kind!");
2533 Chunk.Fun.hasTrailingReturnType())
2542 Chunk.Fun.hasTrailingReturnType())
2543 return Chunk.Fun.getTrailingReturnType();
2549 TrailingRequiresClause = TRC;
2556 return TrailingRequiresClause;
2562 return TrailingRequiresClause !=
nullptr;
2567 TemplateParameterLists = TPLs;
2572 return TemplateParameterLists;
2579 InventedTemplateParameterList = Invented;
2586 return InventedTemplateParameterList;
2609 return DeclarationAttrs;
2652 FunctionDefinition =
static_cast<unsigned>(Val);
2711 const char *&PrevSpec);
2732 unsigned Specifiers = 0;
2791 InitCaptureType, ExplicitRange));
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....
Defines the ExceptionSpecificationType enumeration and various utility functions.
Defines several types used to describe C++ lambda expressions that are shared between the parser and ...
Defines an enumeration for C++ overloaded operators.
llvm::SmallVector< std::pair< const MemRegion *, SVal >, 4 > Bindings
@ Extend
Lifetime-extend along this path.
Defines various enumerations that describe declaration and type specifiers.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
The result of parsing/analyzing an expression, statement etc.
bool isRegularKeywordAttribute() const
bool isStandardAttributeSyntax() const
The attribute is spelled [[]] in either C or C++ mode, including standard attributes spelled with a k...
A factory, from which one makes pools, from which one creates individual attributes which are dealloc...
void takeAllFrom(AttributePool &pool)
Take the given pool's allocations and add them to this pool.
Represents a C++ struct/union/class.
Represents a C++ nested-name-specifier or a global scope specifier.
bool isNotEmpty() const
A scope specifier is present, but may be valid or invalid.
char * location_data() const
Retrieve the data associated with the source-location information.
bool isValid() const
A scope specifier is present, and it refers to a real scope.
void MakeTrivial(ASTContext &Context, NestedNameSpecifier *Qualifier, SourceRange R)
Make a new nested-name-specifier from incomplete source-location information.
SourceLocation getLastQualifierNameLoc() const
Retrieve the location of the name in the last qualifier in this nested name specifier.
SourceLocation getEndLoc() const
void setRange(SourceRange R)
void setBeginLoc(SourceLocation Loc)
SourceRange getRange() const
void MakeGlobal(ASTContext &Context, SourceLocation ColonColonLoc)
Turn this (empty) nested-name-specifier into the global nested-name-specifier '::'.
SourceLocation getBeginLoc() const
bool isSet() const
Deprecated.
ArrayRef< TemplateParameterList * > getTemplateParamLists() const
void setEndLoc(SourceLocation Loc)
NestedNameSpecifierLoc getWithLocInContext(ASTContext &Context) const
Retrieve a nested-name-specifier with location information, copied into the given AST context.
NestedNameSpecifier * getScopeRep() const
Retrieve the representation of the nested-name-specifier.
void SetInvalid(SourceRange R)
Indicate that this nested-name-specifier is invalid.
unsigned location_size() const
Retrieve the size of the data associated with source-location information.
void MakeSuper(ASTContext &Context, CXXRecordDecl *RD, SourceLocation SuperLoc, SourceLocation ColonColonLoc)
Turns this (empty) nested-name-specifier into '__super' nested-name-specifier.
bool isInvalid() const
An error occurred during parsing of the scope specifier.
void setTemplateParamLists(ArrayRef< TemplateParameterList * > L)
bool isEmpty() const
No scope specifier.
void Adopt(NestedNameSpecifierLoc Other)
Adopt an existing nested-name-specifier (with source-range information).
Captures information about "declaration specifiers".
bool isVirtualSpecified() const
bool setFunctionSpecExplicit(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, ExplicitSpecifier ExplicitSpec, SourceLocation CloseParenLoc)
const WrittenBuiltinSpecs & getWrittenBuiltinSpecs() const
bool isTypeSpecPipe() const
bool isModulePrivateSpecified() const
static const TSCS TSCS___thread
void UpdateDeclRep(Decl *Rep)
static const TST TST_typeof_unqualType
SourceLocation getTypeSpecSignLoc() const
void setTypeArgumentRange(SourceRange range)
bool SetTypePipe(bool isPipe, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy)
SourceLocation getPipeLoc() const
bool hasAutoTypeSpec() const
static const TST TST_typename
SourceLocation getEndLoc() const LLVM_READONLY
bool hasTypeSpecifier() const
Return true if any type-specifier has been found.
bool SetStorageClassSpec(Sema &S, SCS SC, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy)
These methods set the specified attribute of the DeclSpec and return false if there was no error.
const ParsedAttributes & getAttributes() const
ThreadStorageClassSpecifier TSCS
void setObjCQualifiers(ObjCDeclSpec *quals)
static const TST TST_char8
static const TST TST_BFloat16
void ClearStorageClassSpecs()
bool SetConstexprSpec(ConstexprSpecKind ConstexprKind, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID)
static const TSCS TSCS__Thread_local
bool SetTypeSpecWidth(TypeSpecifierWidth W, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy)
These methods set the specified attribute of the DeclSpec, but return true and ignore the request if ...
bool isNoreturnSpecified() const
TST getTypeSpecType() const
SourceLocation getStorageClassSpecLoc() const
SCS getStorageClassSpec() const
bool setModulePrivateSpec(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID)
bool SetTypeSpecType(TST T, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy)
SourceLocation getBeginLoc() const LLVM_READONLY
bool isTypeSpecSat() const
bool SetTypeSpecSat(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID)
SourceRange getSourceRange() const LLVM_READONLY
bool SetStorageClassSpecThread(TSCS TSC, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID)
void SetRangeEnd(SourceLocation Loc)
ObjCDeclSpec * getObjCQualifiers() const
bool SetBitIntType(SourceLocation KWLoc, Expr *BitWidth, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy)
static const TST TST_auto_type
static const TST TST_interface
static const TST TST_double
static const TST TST_typeofExpr
unsigned getTypeQualifiers() const
getTypeQualifiers - Return a set of TQs.
void SetRangeStart(SourceLocation Loc)
bool SetTypeAltiVecPixel(bool isAltiVecPixel, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy)
bool SetFriendSpec(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID)
SourceLocation getNoreturnSpecLoc() const
TemplateIdAnnotation * getRepAsTemplateId() const
bool isExternInLinkageSpec() const
const CXXScopeSpec & getTypeSpecScope() const
static const TST TST_union
static const TST TST_char
static const TST TST_bool
static const TST TST_char16
SCS
storage-class-specifier
SourceLocation getExplicitSpecLoc() const
static const TST TST_unknown_anytype
SourceLocation getAltiVecLoc() const
SourceLocation getFriendSpecLoc() const
TSC getTypeSpecComplex() const
SourceLocation getModulePrivateSpecLoc() const
void forEachCVRUQualifier(llvm::function_ref< void(TQ, StringRef, SourceLocation)> Handle)
This method calls the passed in handler on each CVRU qual being set.
bool SetTypeSpecComplex(TSC C, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID)
bool isMissingDeclaratorOk()
Checks if this DeclSpec can stand alone, without a Declarator.
ParsedType getRepAsType() const
void UpdateTypeRep(ParsedType Rep)
TSCS getThreadStorageClassSpec() const
bool setFunctionSpecNoreturn(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID)
bool hasAttributes() const
static const TST TST_accum
static const TST TST_half
ParsedAttributes & getAttributes()
bool isTypeAltiVecPixel() const
void ClearTypeQualifiers()
Clear out all of the type qualifiers.
SourceLocation getConstSpecLoc() const
SourceRange getExplicitSpecRange() const
static const TST TST_ibm128
DeclSpec(AttributeFactory &attrFactory)
Expr * getRepAsExpr() const
void addAttributes(const ParsedAttributesView &AL)
Concatenates two attribute lists.
static const TST TST_enum
bool SetTypeAltiVecBool(bool isAltiVecBool, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy)
AttributePool & getAttributePool() const
static const TST TST_float128
static const TST TST_decltype
SourceRange getTypeSpecWidthRange() const
SourceLocation getTypeSpecTypeNameLoc() const
static bool isDeclRep(TST T)
void Finish(Sema &S, const PrintingPolicy &Policy)
Finish - This does final analysis of the declspec, issuing diagnostics for things like "_Imaginary" (...
bool isInlineSpecified() const
SourceLocation getTypeSpecWidthLoc() const
SourceLocation getRestrictSpecLoc() const
static const TST TST_typeof_unqualExpr
static const TST TST_class
bool hasTagDefinition() const
static const TST TST_decimal64
unsigned getParsedSpecifiers() const
Return a bitmask of which flavors of specifiers this DeclSpec includes.
bool isTypeAltiVecBool() const
void ClearFunctionSpecs()
bool isConstrainedAuto() const
bool SetTypeQual(TQ T, SourceLocation Loc)
static const TST TST_wchar
SourceLocation getTypeSpecComplexLoc() const
static const TST TST_void
static const TSCS TSCS_unspecified
bool isTypeAltiVecVector() const
static const TST TST_bitint
void ClearConstexprSpec()
static const char * getSpecifierName(DeclSpec::TST T, const PrintingPolicy &Policy)
Turn a type-specifier-type into a string like "_Bool" or "union".
static const TST TST_float
static const TST TST_atomic
static const TST TST_fract
SourceLocation getThreadStorageClassSpecLoc() const
Decl * getRepAsDecl() const
static const TST TST_float16
static bool isTransformTypeTrait(TST T)
static const TST TST_unspecified
SourceLocation getAtomicSpecLoc() const
SourceLocation getVirtualSpecLoc() const
TypeSpecifierSign getTypeSpecSign() const
SourceLocation getConstexprSpecLoc() const
CXXScopeSpec & getTypeSpecScope()
bool isEmpty() const
isEmpty - Return true if this declaration specifier is completely empty: no tokens were parsed in the...
SourceLocation getTypeSpecTypeLoc() const
void UpdateExprRep(Expr *Rep)
bool SetTypeSpecType(TST T, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, TypeResult Rep, const PrintingPolicy &Policy)
static const TST TST_decltype_auto
static const TSCS TSCS_thread_local
void setExternInLinkageSpec(bool Value)
static const TST TST_error
void forEachQualifier(llvm::function_ref< void(TQ, StringRef, SourceLocation)> Handle)
This method calls the passed in handler on each qual being set.
bool setFunctionSpecVirtual(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID)
static const TST TST_decimal32
bool SetTypeAltiVecVector(bool isAltiVecVector, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy)
TypeSpecifierWidth getTypeSpecWidth() const
ExplicitSpecifier getExplicitSpecifier() const
static const TST TST_char32
bool setFunctionSpecInline(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID)
static const TST TST_decimal128
bool isTypeSpecOwned() const
SourceLocation getTypeSpecSatLoc() const
SourceRange getTypeofParensRange() const
SourceLocation getInlineSpecLoc() const
SourceLocation getUnalignedSpecLoc() const
static const TST TST_int128
SourceLocation getVolatileSpecLoc() const
FriendSpecified isFriendSpecified() const
bool hasExplicitSpecifier() const
bool setFunctionSpecForceInline(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID)
bool hasConstexprSpecifier() const
void takeAttributesFrom(ParsedAttributes &attrs)
static const TST TST_typeofType
TemplateIdAnnotation * TemplateIdRep
bool SetTypeSpecSign(TypeSpecifierSign S, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID)
static const TST TST_auto
ParsedSpecifiers
ParsedSpecifiers - Flags to query which specifiers were applied.
@ PQ_StorageClassSpecifier
ConstexprSpecKind getConstexprSpecifier() const
static const TST TST_struct
Decl - This represents one declaration (or definition), e.g.
Information about one declarator, including the parsed type information and the identifier.
DeclaratorChunk & getTypeObject(unsigned i)
bool isFunctionDeclarator(unsigned &idx) const
isFunctionDeclarator - This method returns true if the declarator is a function declarator (looking t...
bool isPastIdentifier() const
isPastIdentifier - Return true if we have parsed beyond the point where the name would appear.
bool isArrayOfUnknownBound() const
isArrayOfUnknownBound - This method returns true if the declarator is a declarator for an array of un...
void SetIdentifier(IdentifierInfo *Id, SourceLocation IdLoc)
Set the name of this declarator to be the given identifier.
bool isDeclarationOfFunction() const
Determine whether the declaration that will be produced from this declaration will be a function.
void SetRangeBegin(SourceLocation Loc)
SetRangeBegin - Set the start of the source range to Loc, unless it's invalid.
const DeclaratorChunk & getTypeObject(unsigned i) const
Return the specified TypeInfo from this declarator.
bool hasAttributes() const
hasAttributes - do we contain any attributes?
void setCommaLoc(SourceLocation CL)
const DeclSpec & getDeclSpec() const
getDeclSpec - Return the declaration-specifier that this declarator was declared with.
SmallVectorImpl< DeclaratorChunk >::const_iterator type_object_iterator
const DeclaratorChunk * getInnermostNonParenChunk() const
Return the innermost (closest to the declarator) chunk of this declarator that is not a parens chunk,...
Expr * getAsmLabel() const
void AddInnermostTypeInfo(const DeclaratorChunk &TI)
Add a new innermost chunk to this declarator.
bool isFunctionDeclarationContext() const
Return true if this declaration appears in a context where a function declarator would be a function ...
FunctionDefinitionKind getFunctionDefinitionKind() const
const ParsedAttributes & getAttributes() const
void setRedeclaration(bool Val)
bool isObjCWeakProperty() const
SourceLocation getIdentifierLoc() const
bool mayOmitIdentifier() const
mayOmitIdentifier - Return true if the identifier is either optional or not allowed.
bool isFunctionDeclarator() const
isFunctionDeclarator - Once this declarator is fully parsed and formed, this method returns true if t...
bool hasTrailingReturnType() const
Determine whether a trailing return type was written (at any level) within this declarator.
SourceLocation getEndLoc() const LLVM_READONLY
void setObjCIvar(bool Val=true)
bool mayBeFollowedByCXXDirectInit() const
mayBeFollowedByCXXDirectInit - Return true if the declarator can be followed by a C++ direct initiali...
Expr * getTrailingRequiresClause()
Sets a trailing requires clause for this declarator.
bool isExpressionContext() const
Determine whether this declaration appears in a context where an expression could appear.
type_object_range type_objects() const
Returns the range of type objects, from the identifier outwards.
bool hasGroupingParens() const
void setInvalidType(bool Val=true)
void DropFirstTypeObject()
TemplateParameterList * getInventedTemplateParameterList() const
The template parameter list generated from the explicit template parameters along with any invented t...
void SetSourceRange(SourceRange R)
unsigned getNumTypeObjects() const
Return the number of types applied to this declarator.
bool mayHaveIdentifier() const
mayHaveIdentifier - Return true if the identifier is either optional or required.
void setGroupingParens(bool flag)
const DeclaratorChunk * getOutermostNonParenChunk() const
Return the outermost (furthest from the declarator) chunk of this declarator that is not a parens chu...
bool isRedeclaration() const
DeclaratorChunk::ParamInfo InlineParams[16]
InlineParams - This is a local array used for the first function decl chunk to avoid going to the hea...
const ParsedAttributesView & getDeclarationAttributes() const
Declarator(const DeclSpec &DS, const ParsedAttributesView &DeclarationAttrs, DeclaratorContext C)
DS and DeclarationAttrs must outlive the Declarator.
SourceLocation getEllipsisLoc() const
DeclaratorContext getContext() const
const DecompositionDeclarator & getDecompositionDeclarator() const
SourceLocation getBeginLoc() const LLVM_READONLY
bool isCtorOrDtor()
Returns true if this declares a constructor or a destructor.
bool isFunctionDefinition() const
void setTrailingRequiresClause(Expr *TRC)
Sets a trailing requires clause for this declarator.
void setHasInitializer(bool Val=true)
UnqualifiedId & getName()
Retrieve the name specified by this declarator.
void setTemplateParameterLists(ArrayRef< TemplateParameterList * > TPLs)
Sets the template parameter lists that preceded the declarator.
bool isFirstDeclarator() const
bool hasTrailingRequiresClause() const
Determine whether a trailing requires clause was written in this declarator.
bool hasInitializer() const
SourceLocation getCommaLoc() const
void setFunctionDefinitionKind(FunctionDefinitionKind Val)
AttributePool & getAttributePool() const
void setDecompositionBindings(SourceLocation LSquareLoc, ArrayRef< DecompositionDeclarator::Binding > Bindings, SourceLocation RSquareLoc)
Set the decomposition bindings for this declarator.
const CXXScopeSpec & getCXXScopeSpec() const
getCXXScopeSpec - Return the C++ scope specifier (global scope or nested-name-specifier) that is part...
void takeAttributes(ParsedAttributes &attrs)
takeAttributes - Takes attributes from the given parsed-attributes set and add them to this declarato...
bool hasName() const
hasName - Whether this declarator has a name, which might be an identifier (accessible via getIdentif...
ArrayRef< TemplateParameterList * > getTemplateParameterLists() const
The template parameter lists that preceded the declarator.
bool isFunctionDeclaratorAFunctionDeclaration() const
Return true if a function declarator at this position would be a function declaration.
ParsedType getTrailingReturnType() const
Get the trailing return type appearing (at any level) within this declarator.
void setInventedTemplateParameterList(TemplateParameterList *Invented)
Sets the template parameter list generated from the explicit template parameters along with any inven...
IdentifierInfo * getIdentifier() const
void clear()
Reset the contents of this Declarator.
void AddTypeInfo(const DeclaratorChunk &TI, SourceLocation EndLoc)
AddTypeInfo - Add a chunk to this declarator.
ParsedAttributes & getAttributes()
void setAsmLabel(Expr *E)
void AddTypeInfo(const DeclaratorChunk &TI, ParsedAttributes &&attrs, SourceLocation EndLoc)
AddTypeInfo - Add a chunk to this declarator.
CXXScopeSpec & getCXXScopeSpec()
void ExtendWithDeclSpec(const DeclSpec &DS)
ExtendWithDeclSpec - Extend the declarator source range to include the given declspec,...
void SetRangeEnd(SourceLocation Loc)
SetRangeEnd - Set the end of the source range to Loc, unless it's invalid.
void setExtension(bool Val=true)
bool mayHaveDecompositionDeclarator() const
Return true if the context permits a C++17 decomposition declarator.
bool isInvalidType() const
SourceRange getSourceRange() const LLVM_READONLY
Get the source range that spans this declarator.
void setObjCWeakProperty(bool Val=true)
bool isDecompositionDeclarator() const
Return whether this declarator is a decomposition declarator.
bool isFirstDeclarationOfMember()
Returns true if this declares a real member and not a friend.
bool isPrototypeContext() const
llvm::iterator_range< type_object_iterator > type_object_range
bool isStaticMember()
Returns true if this declares a static member.
DecompositionDeclarator::Binding InlineBindings[16]
bool getExtension() const
const DeclaratorChunk::FunctionTypeInfo & getFunctionTypeInfo() const
getFunctionTypeInfo - Retrieves the function type info object (looking through parentheses).
DeclSpec & getMutableDeclSpec()
getMutableDeclSpec - Return a non-const version of the DeclSpec.
DeclaratorChunk::FunctionTypeInfo & getFunctionTypeInfo()
getFunctionTypeInfo - Retrieves the function type info object (looking through parentheses).
void setEllipsisLoc(SourceLocation EL)
A parsed C++17 decomposition declarator of the form '[' identifier-list ']'.
~DecompositionDeclarator()
DecompositionDeclarator & operator=(const DecompositionDeclarator &G)=delete
ArrayRef< Binding > bindings() const
SourceRange getSourceRange() const
DecompositionDeclarator()
SourceLocation getLSquareLoc() const
DecompositionDeclarator(const DecompositionDeclarator &G)=delete
SourceLocation getRSquareLoc() const
Store information needed for an explicit specifier.
const Expr * getExpr() const
bool isSpecified() const
Determine if the declaration had an explicit specifier of any kind.
This represents one expression.
One of these records is kept for each identifier that is lexed.
A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
This represents a decl that may have a name.
Represents a C++ namespace alias.
Represent a C++ namespace.
Class that aids in the construction of nested-name-specifiers along with source-location information ...
A C++ nested-name-specifier augmented with source location information.
Represents a C++ nested name specifier, such as "\::std::vector<int>::".
Captures information about "declaration specifiers" specific to Objective-C.
void setObjCDeclQualifier(ObjCDeclQualifier DQVal)
ObjCPropertyAttribute::Kind getPropertyAttributes() const
IdentifierInfo * getSetterName()
void clearObjCDeclQualifier(ObjCDeclQualifier DQVal)
ObjCDeclQualifier
ObjCDeclQualifier - Qualifier used on types in method declarations.
void setSetterName(IdentifierInfo *name, SourceLocation loc)
const IdentifierInfo * getSetterName() const
ObjCDeclQualifier getObjCDeclQualifier() const
SourceLocation getGetterNameLoc() const
SourceLocation getNullabilityLoc() const
NullabilityKind getNullability() const
SourceLocation getSetterNameLoc() const
void setGetterName(IdentifierInfo *name, SourceLocation loc)
void setNullability(SourceLocation loc, NullabilityKind kind)
const IdentifierInfo * getGetterName() const
void setPropertyAttributes(ObjCPropertyAttribute::Kind PRVal)
IdentifierInfo * getGetterName()
ParsedAttr - Represents a syntactic attribute.
void addAll(iterator B, iterator E)
ParsedAttributes - A collection of parsed attributes.
AttributePool & getPool() const
void takeAllFrom(ParsedAttributes &Other)
C++2a [expr.prim.req]: A requires-expression provides a concise way to express requirements on templa...
Sema - This implements semantic analysis and AST building for C.
Encodes a location in the source.
bool isValid() const
Return true if this is a valid SourceLocation object.
A trivial tuple used to represent a source range.
SourceLocation getEnd() const
SourceLocation getBegin() const
SourceLocation getEndLoc() const LLVM_READONLY
Represents a C++ template name within the type system.
Stores a list of template parameters for a TemplateDecl and its derived classes.
Base wrapper for a particular "section" of type source info.
Represents a C++ unqualified-id that has been parsed.
struct OFI OperatorFunctionId
When Kind == IK_OperatorFunctionId, the overloaded operator that we parsed.
UnionParsedType ConversionFunctionId
When Kind == IK_ConversionFunctionId, the type that the conversion function names.
void setLiteralOperatorId(const IdentifierInfo *Id, SourceLocation OpLoc, SourceLocation IdLoc)
Specific that this unqualified-id was parsed as a literal-operator-id.
SourceLocation getBeginLoc() const LLVM_READONLY
void setIdentifier(const IdentifierInfo *Id, SourceLocation IdLoc)
Specify that this unqualified-id was parsed as an identifier.
UnionParsedType ConstructorName
When Kind == IK_ConstructorName, the class-name of the type whose constructor is being referenced.
SourceLocation EndLocation
The location of the last token that describes this unqualified-id.
void setOperatorFunctionId(SourceLocation OperatorLoc, OverloadedOperatorKind Op, SourceLocation SymbolLocations[3])
Specify that this unqualified-id was parsed as an operator-function-id.
bool isValid() const
Determine whether this unqualified-id refers to a valid name.
void setImplicitSelfParam(const IdentifierInfo *Id)
Specify that this unqualified-id is an implicit 'self' parameter.
bool isInvalid() const
Determine whether this unqualified-id refers to an invalid name.
void setDeductionGuideName(ParsedTemplateTy Template, SourceLocation TemplateLoc)
Specify that this unqualified-id was parsed as a template-name for a deduction-guide.
SourceRange getSourceRange() const LLVM_READONLY
Return the source range that covers this unqualified-id.
void setConversionFunctionId(SourceLocation OperatorLoc, ParsedType Ty, SourceLocation EndLoc)
Specify that this unqualified-id was parsed as a conversion-function-id.
void setDestructorName(SourceLocation TildeLoc, ParsedType ClassType, SourceLocation EndLoc)
Specify that this unqualified-id was parsed as a destructor name.
IdentifierInfo * Identifier
When Kind == IK_Identifier, the parsed identifier, or when Kind == IK_UserLiteralId,...
void setTemplateId(TemplateIdAnnotation *TemplateId)
Specify that this unqualified-id was parsed as a template-id.
SourceLocation getEndLoc() const LLVM_READONLY
UnionParsedType DestructorName
When Kind == IK_DestructorName, the type referred to by the class-name.
void setConstructorTemplateId(TemplateIdAnnotation *TemplateId)
Specify that this unqualified-id was parsed as a template-id that names a constructor.
SourceLocation StartLocation
The location of the first token that describes this unqualified-id, which will be the location of the...
void setConstructorName(ParsedType ClassType, SourceLocation ClassNameLoc, SourceLocation EndLoc)
Specify that this unqualified-id was parsed as a constructor name.
UnionParsedTemplateTy TemplateName
When Kind == IK_DeductionGuideName, the parsed template-name.
void clear()
Clear out this unqualified-id, setting it to default (invalid) state.
UnqualifiedIdKind getKind() const
Determine what kind of name we have.
TemplateIdAnnotation * TemplateId
When Kind == IK_TemplateId or IK_ConstructorTemplateId, the template-id annotation that contains the ...
Represents a C++11 virt-specifier-seq.
SourceLocation getOverrideLoc() const
Specifier getLastSpecifier() const
SourceLocation getFirstLocation() const
SourceLocation getLastLocation() const
SourceLocation getAbstractLoc() const
bool isOverrideSpecified() const
SourceLocation getFinalLoc() const
bool isFinalSpecified() const
bool isFinalSpelledSealed() const
static const char * getSpecifierName(Specifier VS)
bool SetSpecifier(Specifier VS, SourceLocation Loc, const char *&PrevSpec)
@ kind_nullability
Indicates that the nullability of the type was spelled with a property attribute rather than a type q...
TypeSpecifierType
Specifies the kind of type.
OverloadedOperatorKind
Enumeration specifying the different kinds of C++ overloaded operators.
FunctionDefinitionKind
Described the kind of function definition (if any) provided for a function.
@ NumObjCPropertyAttrsBits
Number of bits fitting all the property attributes.
ConstexprSpecKind
Define the kind of constexpr specifier.
NullabilityKind
Describes the nullability of a particular type.
LambdaCaptureKind
The different capture forms in a lambda introducer.
UnqualifiedIdKind
Describes the kind of unqualified-id parsed.
@ IK_DeductionGuideName
A deduction-guide name (a template-name)
@ IK_ImplicitSelfParam
An implicit 'self' parameter.
@ IK_TemplateId
A template-id, e.g., f<int>.
@ IK_ConstructorTemplateId
A constructor named via a template-id.
@ IK_ConstructorName
A constructor name.
@ IK_LiteralOperatorId
A user-defined literal name, e.g., operator "" _i.
@ IK_Identifier
An identifier.
@ IK_DestructorName
A destructor name.
@ IK_OperatorFunctionId
An overloaded operator name, e.g., operator+.
@ IK_ConversionFunctionId
A conversion function name, e.g., operator int.
ThreadStorageClassSpecifier
Thread storage-class-specifier.
@ TSCS_thread_local
C++11 thread_local.
@ TSCS__Thread_local
C11 _Thread_local.
@ TSCS___thread
GNU __thread.
@ CopyInit
[a = b], [a = {b}]
@ C
Languages that the frontend can parse and compile.
TypeSpecifierWidth
Specifies the width of a type, e.g., short, long, or long long.
ActionResult< ParsedType > TypeResult
TypeSpecifierSign
Specifies the signedness of a type, e.g., signed or unsigned.
LambdaCaptureDefault
The default, if any, capture method for a lambda expression.
OpaquePtr< QualType > ParsedType
An opaque type for threading parsed type information through the parser.
SmallVector< Token, 4 > CachedTokens
A set of tokens that has been cached for later parsing.
ExceptionSpecificationType
The various types of exception specifications that exist in C++11.
@ EST_Unparsed
not parsed yet
@ EST_None
no exception specification
@ EST_Dynamic
throw(T1, T2)
unsigned isStar
True if this dimension was [*]. In this case, NumElts is null.
unsigned TypeQuals
The type qualifiers for the array: const/volatile/restrict/__unaligned/_Atomic.
unsigned hasStatic
True if this dimension included the 'static' keyword.
Expr * NumElts
This is the size of the array, or null if [] or [*] was specified.
unsigned TypeQuals
For now, sema will catch these as invalid.
SourceLocation getConstQualifierLoc() const
Retrieve the location of the 'const' qualifier.
unsigned isVariadic
isVariadic - If this function has a prototype, and if that proto ends with ',...)',...
SourceLocation getTrailingReturnTypeLoc() const
Get the trailing-return-type location for this function declarator.
SourceLocation getLParenLoc() const
CachedTokens * ExceptionSpecTokens
Pointer to the cached tokens for an exception-specification that has not yet been parsed.
SourceLocation MutableLoc
The location of the 'mutable' qualifer in a lambda-declarator, if any.
SourceLocation getRestrictQualifierLoc() const
Retrieve the location of the 'restrict' qualifier.
bool hasTrailingReturnType() const
Determine whether this function declarator had a trailing-return-type.
UnionParsedType TrailingReturnType
If HasTrailingReturnType is true, this is the trailing return type specified.
TypeAndRange * Exceptions
Pointer to a new[]'d array of TypeAndRange objects that contain the types in the function's dynamic e...
ParamInfo * Params
Params - This is a pointer to a new[]'d array of ParamInfo objects that describe the parameters speci...
ParsedType getTrailingReturnType() const
Get the trailing-return-type for this function declarator.
unsigned RefQualifierIsLValueRef
Whether the ref-qualifier (if any) is an lvalue reference.
SourceLocation getExceptionSpecLocBeg() const
NamedDecl ** DeclsInPrototype
Pointer to a new[]'d array of declarations that need to be available for lookup inside the function b...
AttributeFactory * QualAttrFactory
AttributeFactory for the MethodQualifiers.
SourceLocation ExceptionSpecLocEnd
The end location of the exception specification, if any.
SourceLocation EllipsisLoc
When isVariadic is true, the location of the ellipsis in the source.
ArrayRef< NamedDecl * > getDeclsInPrototype() const
Get the non-parameter decls defined within this function prototype.
unsigned DeleteParams
DeleteParams - If this is true, we need to delete[] Params.
DeclSpec * MethodQualifiers
DeclSpec for the function with the qualifier related info.
SourceLocation getRefQualifierLoc() const
Retrieve the location of the ref-qualifier, if any.
unsigned NumExceptionsOrDecls
NumExceptionsOrDecls - This is the number of types in the dynamic-exception-decl, if the function has...
SourceLocation getRParenLoc() const
SourceLocation RefQualifierLoc
The location of the ref-qualifier, if any.
SourceLocation getExceptionSpecLocEnd() const
SourceLocation getVolatileQualifierLoc() const
Retrieve the location of the 'volatile' qualifier.
SourceLocation getEllipsisLoc() const
SourceLocation RParenLoc
The location of the right parenthesis in the source.
unsigned NumParams
NumParams - This is the number of formal parameters specified by the declarator.
unsigned getNumExceptions() const
Get the number of dynamic exception specifications.
bool hasMutableQualifier() const
Determine whether this lambda-declarator contains a 'mutable' qualifier.
bool isKNRPrototype() const
isKNRPrototype - Return true if this is a K&R style identifier list, like "void foo(a,...
bool hasMethodTypeQualifiers() const
Determine whether this method has qualifiers.
unsigned HasTrailingReturnType
HasTrailingReturnType - If this is true, a trailing return type was specified.
unsigned isAmbiguous
Can this declaration be a constructor-style initializer?
DeclSpec & getOrCreateMethodQualifiers()
void freeParams()
Reset the parameter list to having zero parameters.
unsigned hasPrototype
hasPrototype - This is true if the function had at least one typed parameter.
bool hasRefQualifier() const
Determine whether this function declaration contains a ref-qualifier.
SourceRange getExceptionSpecRange() const
SourceLocation getMutableLoc() const
Retrieve the location of the 'mutable' qualifier, if any.
SourceLocation LParenLoc
The location of the left parenthesis in the source.
unsigned ExceptionSpecType
ExceptionSpecType - An ExceptionSpecificationType value.
SourceLocation ExceptionSpecLocBeg
The beginning location of the exception specification, if any.
ExceptionSpecificationType getExceptionSpecType() const
Get the type of exception specification this function has.
SourceLocation TrailingReturnTypeLoc
If HasTrailingReturnType is true, this is the location of the trailing return type.
Expr * NoexceptExpr
Pointer to the expression in the noexcept-specifier of this function, if it has one.
const CXXScopeSpec & Scope() const
unsigned TypeQuals
The type qualifiers: const/volatile/restrict/__unaligned/_Atomic.
SourceLocation StarLoc
Location of the '*' token.
char ScopeMem[sizeof(CXXScopeSpec)]
ParamInfo - An array of paraminfo objects is allocated whenever a function declarator is parsed.
ParamInfo(IdentifierInfo *ident, SourceLocation iloc, Decl *param, std::unique_ptr< CachedTokens > DefArgTokens=nullptr)
std::unique_ptr< CachedTokens > DefaultArgTokens
DefaultArgTokens - When the parameter's default argument cannot be parsed immediately (because it occ...
unsigned AccessWrites
The access writes.
SourceLocation RestrictQualLoc
The location of the restrict-qualifier, if any.
SourceLocation ConstQualLoc
The location of the const-qualifier, if any.
SourceLocation VolatileQualLoc
The location of the volatile-qualifier, if any.
SourceLocation UnalignedQualLoc
The location of the __unaligned-qualifier, if any.
unsigned TypeQuals
The type qualifiers: const/volatile/restrict/unaligned/atomic.
SourceLocation AtomicQualLoc
The location of the _Atomic-qualifier, if any.
bool LValueRef
True if this is an lvalue reference, false if it's an rvalue reference.
bool HasRestrict
The type qualifier: restrict. [GNU] C++ extension.
One instance of this struct is used for each type in a declarator that is parsed.
SourceRange getSourceRange() const
const ParsedAttributesView & getAttrs() const
If there are attributes applied to this declaratorchunk, return them.
static DeclaratorChunk getBlockPointer(unsigned TypeQuals, SourceLocation Loc)
Return a DeclaratorChunk for a block.
SourceLocation EndLoc
EndLoc - If valid, the place where this chunck ends.
enum clang::DeclaratorChunk::@214 Kind
static DeclaratorChunk getFunction(bool HasProto, bool IsAmbiguous, SourceLocation LParenLoc, ParamInfo *Params, unsigned NumParams, SourceLocation EllipsisLoc, SourceLocation RParenLoc, bool RefQualifierIsLvalueRef, SourceLocation RefQualifierLoc, SourceLocation MutableLoc, ExceptionSpecificationType ESpecType, SourceRange ESpecRange, ParsedType *Exceptions, SourceRange *ExceptionRanges, unsigned NumExceptions, Expr *NoexceptExpr, CachedTokens *ExceptionSpecTokens, ArrayRef< NamedDecl * > DeclsInPrototype, SourceLocation LocalRangeBegin, SourceLocation LocalRangeEnd, Declarator &TheDeclarator, TypeResult TrailingReturnType=TypeResult(), SourceLocation TrailingReturnTypeLoc=SourceLocation(), DeclSpec *MethodQualifiers=nullptr)
DeclaratorChunk::getFunction - Return a DeclaratorChunk for a function.
static DeclaratorChunk getPipe(unsigned TypeQuals, SourceLocation Loc)
Return a DeclaratorChunk for a block.
ParsedAttributesView & getAttrs()
MemberPointerTypeInfo Mem
static DeclaratorChunk getArray(unsigned TypeQuals, bool isStatic, bool isStar, Expr *NumElts, SourceLocation LBLoc, SourceLocation RBLoc)
Return a DeclaratorChunk for an array.
SourceLocation Loc
Loc - The place where this type was defined.
ParsedAttributesView AttrList
static DeclaratorChunk getMemberPointer(const CXXScopeSpec &SS, unsigned TypeQuals, SourceLocation StarLoc, SourceLocation EndLoc)
static DeclaratorChunk getParen(SourceLocation LParenLoc, SourceLocation RParenLoc)
Return a DeclaratorChunk for a paren.
static DeclaratorChunk getPointer(unsigned TypeQuals, SourceLocation Loc, SourceLocation ConstQualLoc, SourceLocation VolatileQualLoc, SourceLocation RestrictQualLoc, SourceLocation AtomicQualLoc, SourceLocation UnalignedQualLoc)
Return a DeclaratorChunk for a pointer.
static DeclaratorChunk getReference(unsigned TypeQuals, SourceLocation Loc, bool lvalue)
Return a DeclaratorChunk for a reference.
This little struct is used to capture information about structure field declarators,...
FieldDeclarator(const DeclSpec &DS, const ParsedAttributes &DeclarationAttrs)
Wraps an identifier and optional source location for the identifier.
unsigned NumExplicitTemplateParams
The number of parameters in the template parameter list that were explicitly specified by the user,...
SmallVector< NamedDecl *, 4 > TemplateParams
Store the list of the template parameters for a generic lambda or an abbreviated function template.
unsigned AutoTemplateParameterDepth
If this is a generic lambda or abbreviated function template, use this as the depth of each 'auto' pa...
An individual capture in a lambda introducer.
SourceRange ExplicitRange
SourceLocation EllipsisLoc
ParsedType InitCaptureType
LambdaCapture(LambdaCaptureKind Kind, SourceLocation Loc, IdentifierInfo *Id, SourceLocation EllipsisLoc, LambdaCaptureInitKind InitKind, ExprResult Init, ParsedType InitCaptureType, SourceRange ExplicitRange)
LambdaCaptureInitKind InitKind
Represents a complete lambda introducer.
LambdaIntroducer()=default
bool hasLambdaCapture() const
SmallVector< LambdaCapture, 4 > Captures
void addCapture(LambdaCaptureKind Kind, SourceLocation Loc, IdentifierInfo *Id, SourceLocation EllipsisLoc, LambdaCaptureInitKind InitKind, ExprResult Init, ParsedType InitCaptureType, SourceRange ExplicitRange)
Append a capture in a lambda introducer.
SourceLocation DefaultLoc
LambdaCaptureDefault Default
Describes how types, statements, expressions, and declarations should be printed.
Information about a template-id annotation token.
SourceLocation SymbolLocations[3]
The source locations of the individual tokens that name the operator, e.g., the "new",...
OverloadedOperatorKind Operator
The kind of overloaded operator.
Structure that packs information about the type specifiers that were written in a particular type spe...