A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://clang.llvm.org/doxygen/SemaTemplateVariadic_8cpp_source.html below:

clang: lib/Sema/SemaTemplateVariadic.cpp Source File

22#include "llvm/Support/SaveAndRestore.h" 25using namespace clang

;

33class

CollectUnexpandedParameterPacksVisitor

37 bool

InLambdaOrBlock =

false

;

38 unsigned

DepthLimit = (

unsigned

)-1;

41 bool

ContainsIntermediatePacks =

false

;

45 if

(

auto

*VD = dyn_cast<VarDecl>(ND)) {

49 auto

*FD = dyn_cast<FunctionDecl>(VD->getDeclContext());

50 auto

*FTD = FD ? FD->getDescribedFunctionTemplate() :

nullptr

;

51 if

(FTD && FTD->getTemplateParameters()->getDepth() >= DepthLimit)

53

}

else if

(

auto

*BD = dyn_cast<BindingDecl>(ND)) {

54 Expr

*

E

= BD->getBinding();

55 if

(

auto

*RP = cast_if_present<ResolvedUnexpandedPackExpr>(

E

)) {

63

Unexpanded.push_back({ND,

Loc

});

68 if

(

T

->getDepth() < DepthLimit)

69

Unexpanded.push_back({

T

,

Loc

});

77 explicit

CollectUnexpandedParameterPacksVisitor(

79

: Unexpanded(Unexpanded) {

80

ShouldWalkTypesOfTypeLocs =

false

;

83

ShouldVisitImplicitCode =

true

;

103 if

(

T

->isParameterPack())

112 if

(

E

->getDecl()->isParameterPack())

113

addUnexpanded(

E

->getDecl(),

E

->getLocation());

126 if

(

auto

*TTP = dyn_cast_or_null<TemplateTemplateParmDecl>(

128 if

(TTP->isParameterPack())

133

ContainsIntermediatePacks |=

146 for

(

unsigned

I = 0, N =

E

->getNumElements(); I != N; ++I) {

148 if

(Element.isPackExpansion())

163 Expr

*

E

= dyn_cast_or_null<Expr>(S);

221 bool

TraverseCXXFoldExpr(

CXXFoldExpr

*

E

)

override

{

return true

; }

237 if

(

D

->isPackExpansion())

240 return

DynamicRecursiveASTVisitor::TraverseUnresolvedUsingValueDecl(

D

);

244 bool

TraverseUnresolvedUsingTypenameDecl(

246 if

(

D

->isPackExpansion())

249 return

DynamicRecursiveASTVisitor::TraverseUnresolvedUsingTypenameDecl(

D

);

271 if

(

Base

.isPackExpansion())

279 if

(

Init

->isPackExpansion())

290 bool

TraverseLambdaExpr(

LambdaExpr

*Lambda)

override

{

297 unsigned

OldDepthLimit = DepthLimit;

300

DepthLimit = TPL->getDepth();

302

DynamicRecursiveASTVisitor::TraverseLambdaExpr(Lambda);

304

DepthLimit = OldDepthLimit;

310 if

(!

Block

->containsUnexpandedParameterPack())

314

DynamicRecursiveASTVisitor::TraverseBlockExpr(

Block

);

321 if

(

C

->isPackExpansion())

329

ContainsIntermediatePacks =

true

;

333 bool

TraverseSubstNonTypeTemplateParmPackExpr(

335

ContainsIntermediatePacks =

true

;

339 bool

VisitSubstTemplateTypeParmPackType(

341

ContainsIntermediatePacks =

true

;

345 bool

VisitSubstTemplateTypeParmPackTypeLoc(

347

ContainsIntermediatePacks =

true

;

351 bool

containsIntermediatePacks()

const

{

return

ContainsIntermediatePacks; }

365 if

(isa<sema::LambdaScopeInfo>(SI))

376 if

(Unexpanded.empty())

386 for

(

auto

&Pack : Unexpanded) {

387 auto

DeclaresThisPack = [&](

NamedDecl

*LocalPack) {

389 auto

*TTPD = dyn_cast<TemplateTypeParmDecl>(LocalPack);

390 return

TTPD && TTPD->getTypeForDecl() == TTPT;

394 if

(llvm::any_of(CSI->LocalPacks, DeclaresThisPack))

395

ParamPackReferences.push_back(Pack);

398 if

(ParamPackReferences.empty()) {

410 bool

EnclosingStmtExpr =

false

;

414 Func

->CompoundScopes,

416

EnclosingStmtExpr =

true

;

425 if

(!EnclosingStmtExpr) {

426

CSI->ContainsUnexpandedParameterPack =

true

;

430

Unexpanded = ParamPackReferences;

438 for

(

unsigned

I = 0, N = Unexpanded.size(); I != N; ++I) {

442

Name = TTP->getIdentifier();

446 if

(Name && NamesKnown.insert(Name).second)

447

Names.push_back(Name);

449 if

(Unexpanded[I].second.isValid())

450

Locations.push_back(Unexpanded[I].second);

453 auto

DB =

Diag

(

Loc

, diag::err_unexpanded_parameter_pack)

454

<< (

int

)UPPC << (

int

)Names.size();

455 for

(

size_t

I = 0,

E

= std::min(Names.size(), (

size_t

)2); I !=

E

; ++I)

458 for

(

unsigned

I = 0, N = Locations.size(); I != N; ++I)

473

CollectUnexpandedParameterPacksVisitor(Unexpanded).TraverseTypeLoc(

475

assert(!Unexpanded.empty() &&

"Unable to find unexpanded parameter packs"

);

488

CollectUnexpandedParameterPacksVisitor Visitor(Unexpanded);

489

Visitor.TraverseStmt(

E

);

496 bool

LambdaReferencingOuterPacks =

498

assert((!Unexpanded.empty() || LambdaReferencingOuterPacks) &&

499 "Unable to find unexpanded parameter packs"

);

509

CollectUnexpandedParameterPacksVisitor(Unexpanded).TraverseStmt(RE);

510

assert(!Unexpanded.empty() &&

"Unable to find unexpanded parameter packs"

);

517 for

(

auto

Parm : Unexpanded)

518 if

(ParmSet.contains(Parm.first.dyn_cast<

NamedDecl

*>()))

519

UnexpandedParms.push_back(Parm);

520 if

(UnexpandedParms.empty())

537

CollectUnexpandedParameterPacksVisitor(Unexpanded)

539

assert(!Unexpanded.empty() &&

"Unable to find unexpanded parameter packs"

);

574

CollectUnexpandedParameterPacksVisitor(Unexpanded)

576

assert(!Unexpanded.empty() &&

"Unable to find unexpanded parameter packs"

);

588

CollectUnexpandedParameterPacksVisitor(Unexpanded)

589

.TraverseTemplateName(Template);

590

assert(!Unexpanded.empty() &&

"Unable to find unexpanded parameter packs"

);

601

CollectUnexpandedParameterPacksVisitor(Unexpanded)

602

.TraverseTemplateArgumentLoc(Arg);

603

assert(!Unexpanded.empty() &&

"Unable to find unexpanded parameter packs"

);

609

CollectUnexpandedParameterPacksVisitor(Unexpanded)

610

.TraverseTemplateArgument(Arg);

615

CollectUnexpandedParameterPacksVisitor(Unexpanded)

616

.TraverseTemplateArgumentLoc(Arg);

621

CollectUnexpandedParameterPacksVisitor(Unexpanded).TraverseType(

T

);

626

CollectUnexpandedParameterPacksVisitor(Unexpanded).TraverseTypeLoc(TL);

632

CollectUnexpandedParameterPacksVisitor(Unexpanded)

633

.TraverseNestedNameSpecifierLoc(NNS);

639

CollectUnexpandedParameterPacksVisitor(Unexpanded)

640

.TraverseDeclarationNameInfo(NameInfo);

645

CollectUnexpandedParameterPacksVisitor(Unexpanded).TraverseStmt(

E

);

678 Diag

(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)

685

llvm_unreachable(

"Unhandled template argument kind?"

);

705

std::optional<unsigned> NumExpansions) {

709

EllipsisLoc, NumExpansions);

723

std::optional<unsigned> NumExpansions) {

733 Diag

(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)

747

std::optional<unsigned> NumExpansions) {

756 Diag

(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)

771 bool

&RetainExpansion, std::optional<unsigned> &NumExpansions) {

772

ShouldExpand =

true

;

773

RetainExpansion =

false

;

774

std::pair<IdentifierInfo *, SourceLocation> FirstPack;

775 bool

HaveFirstPack =

false

;

776

std::optional<unsigned> NumPartialExpansions;

782 unsigned

Depth = 0, Index = 0;

784 bool

IsVarDeclPack =

false

;

789

Depth = TTP->getDepth();

790

Index = TTP->getIndex();

791

Name = TTP->getIdentifier();

792

}

else if

(

auto

*RP =

796 NamedDecl

*ND = cast<NamedDecl *>(ParmPack.first);

797 if

(isa<VarDecl>(ND))

798

IsVarDeclPack =

true

;

799 else if

(isa<BindingDecl>(ND)) {

801

llvm::PointerUnion<Decl *, DeclArgumentPack *> *Instantiation =

803 Decl

*B = cast<Decl *>(*Instantiation);

804 Expr

*BindingExpr = cast<BindingDecl>(B)->getBinding();

805

ResolvedPack = cast_if_present<ResolvedUnexpandedPackExpr>(BindingExpr);

807

ShouldExpand =

false

;

817 unsigned

NewPackSize, PendingPackExpansionSize = 0;

820

llvm::PointerUnion<Decl *, DeclArgumentPack *> *Instantiation =

822

cast<NamedDecl *>(ParmPack.first));

823 if

(isa<DeclArgumentPack *>(*Instantiation)) {

825

NewPackSize = cast<DeclArgumentPack *>(*Instantiation)->size();

829

ShouldExpand =

false

;

832

}

else if

(ResolvedPack) {

840

ShouldExpand =

false

;

846

TemplateArgs(Depth, Index).getPackAsArray();

847

NewPackSize = Pack.size();

848

PendingPackExpansionSize =

859 return

!cast<PackExpansionExpr>(TA.

getAsExpr

())

860

->getNumExpansions();

873 unsigned

PartialDepth, PartialIndex;

875 if

(PartialDepth == Depth && PartialIndex == Index) {

876

RetainExpansion =

true

;

878

NumPartialExpansions = NewPackSize;

879

PartiallySubstitutedPackLoc = ParmPack.second;

885 if

(!NumExpansions) {

888

NumExpansions = NewPackSize;

889

FirstPack.first = Name;

890

FirstPack.second = ParmPack.second;

891

HaveFirstPack =

true

;

895 if

(NewPackSize != *NumExpansions) {

917 unsigned

LeastNewPackSize = NewPackSize - PendingPackExpansionSize;

918 if

(PendingPackExpansionSize && LeastNewPackSize <= *NumExpansions) {

919

ShouldExpand =

false

;

926 Diag

(EllipsisLoc, diag::err_pack_expansion_length_conflict)

927

<< FirstPack.first << Name << *NumExpansions

928

<< (LeastNewPackSize != NewPackSize) << LeastNewPackSize

931 Diag

(EllipsisLoc, diag::err_pack_expansion_length_conflict_multilevel)

932

<< Name << *NumExpansions << (LeastNewPackSize != NewPackSize)

933

<< LeastNewPackSize <<

SourceRange

(ParmPack.second);

947 if

(NumPartialExpansions) {

948 if

(NumExpansions && *NumExpansions < *NumPartialExpansions) {

951 Diag

(EllipsisLoc, diag::err_pack_expansion_length_conflict_partial)

952

<< PartialPack << *NumPartialExpansions << *NumExpansions

957

NumExpansions = NumPartialExpansions;

966

std::optional<unsigned>

Result

;

967 for

(

unsigned

I = 0, N = Unexpanded.size(); I != N; ++I) {

974

Depth = TTP->getDepth();

975

Index = TTP->getIndex();

976

}

else if

(

auto

*PE = Unexpanded[I]

978 unsigned

Size = PE->getNumExprs();

979

assert((!

Result

|| *

Result

== Size) &&

"inconsistent pack sizes"

);

983 NamedDecl

*ND = cast<NamedDecl *>(Unexpanded[I].first);

984 if

(isa<VarDecl>(ND)) {

988

llvm::PointerUnion<Decl *, DeclArgumentPack *> *Instantiation =

990

cast<NamedDecl *>(Unexpanded[I].first));

991 if

(isa<Decl *>(*Instantiation))

996 unsigned

Size = cast<DeclArgumentPack *>(*Instantiation)->size();

997

assert((!

Result

|| *

Result

== Size) &&

"inconsistent pack sizes"

);

1008 return

std::nullopt;

1011 unsigned

Size = TemplateArgs(Depth, Index).pack_size();

1012

assert((!

Result

|| *

Result

== Size) &&

"inconsistent pack sizes"

);

1021 QualType

Pattern = cast<PackExpansionType>(

T

)->getPattern();

1023

CollectUnexpandedParameterPacksVisitor(Unexpanded).TraverseType(Pattern);

1034#define TRANSFORM_TYPE_TRAIT_DEF(_, Trait) case TST_##Trait: 1035#include "clang/Basic/TransformTypeTraits.def" 1082#define GENERIC_IMAGE_TYPE(ImgType, Id) case TST_##ImgType##_t: 1083#include "clang/Basic/OpenCLImageTypes.def" 1084#define HLSL_INTANGIBLE_TYPE(Name, Id, SingletonId) case TST_##Name: 1085#include "clang/Basic/HLSLIntangibleTypes.def" 1091 for

(

unsigned

I = 0, N =

D

.getNumTypeObjects(); I != N; ++I) {

1093 switch

(Chunk.

Kind

) {

1108 for

(

unsigned

i = 0, e = Chunk.

Fun

.

NumParams

; i != e; ++i) {

1111

assert(!ParamTy.

isNull

() &&

"Couldn't parse type?"

);

1141 if

(

Expr

*TRC =

D

.getTrailingRequiresClause())

1142 if

(TRC->containsUnexpandedParameterPack())

1153 bool

ValidateCandidate(

const TypoCorrection

&candidate)

override

{

1158

std::unique_ptr<CorrectionCandidateCallback> clone()

override

{

1159 return

std::make_unique<ParameterPackValidatorCCC>(*

this

);

1183

ParameterPackValidatorCCC CCC{};

1188 PDiag

(diag::err_sizeof_pack_no_pack_name_suggest) << &Name,

1189 PDiag

(diag::note_parameter_pack_here));

1190

ParameterPack = Corrected.getCorrectionDecl();

1204 Diag

(NameLoc, diag::err_expected_name_of_pack) << &Name;

1210

std::optional<unsigned> Length;

1212

Length = RP->getNumExprs();

1219 if

(

auto

*

D

= dyn_cast<DeclRefExpr>(PackExpression);

D

) {

1235 Diag

(PackExpression->

getBeginLoc

(), diag::err_expected_name_of_pack)

1244

? diag::warn_cxx23_pack_indexing

1245

: diag::ext_pack_indexing);

1254 bool

FullySubstituted) {

1256

std::optional<int64_t> Index;

1264

Index =

Value

.getExtValue();

1265

IndexExpr = Res.

get

();

1268 if

(Index && FullySubstituted) {

1269 if

(*Index < 0 || *Index >= int64_t(ExpandedExprs.size())) {

1270 Diag

(PackExpression->

getBeginLoc

(), diag::err_pack_index_out_of_bound)

1271

<< *Index << PackExpression << ExpandedExprs.size();

1277

PackExpression, IndexExpr, Index,

1278

ExpandedExprs, FullySubstituted);

1283

std::optional<unsigned> &NumExpansions)

const

{

1286 switch

(Argument.

getKind

()) {

1291 if

(!ExpansionTSInfo)

1314

= cast<PackExpansionExpr>(Argument.

getAsExpr

());

1338

llvm_unreachable(

"Invalid TemplateArgument Kind!"

);

1353

Pack = Subst->getArgumentPack();

1355 return

std::nullopt;

1360

dyn_cast<SubstNonTypeTemplateParmPackExpr>(Arg.

getAsExpr

()))

1361

Pack = Subst->getArgumentPack();

1362 else if

(

auto

*Subst = dyn_cast<FunctionParmPackExpr>(Arg.

getAsExpr

())) {

1364 if

(PD->isParameterPack())

1365 return

std::nullopt;

1366 return

Subst->getNumExpansions();

1368 return

std::nullopt;

1374

Pack = Subst->getArgumentPack();

1376 return

std::nullopt;

1386 return

std::nullopt;

1393 if

(Elem.isPackExpansion())

1394 return

std::nullopt;

1404 if

(Elem.containsUnexpandedParameterPack())

1405 return

std::nullopt;

1415 auto

*OCE = dyn_cast<CXXOperatorCallExpr>(

E

);

1416 if

((OCE && OCE->isInfixBinaryOp()) || isa<BinaryOperator>(

E

) ||

1417

isa<AbstractConditionalOperator>(

E

)) {

1434 auto

DiscardOperands = [&] {

1447 return Diag

(EllipsisLoc,

1449

? diag::err_fold_expression_packs_both_sides

1450

: diag::err_pack_expansion_without_parameter_packs)

1458 Expr

*Pack = LHS ? LHS : RHS;

1459

assert(Pack &&

"fold expression with neither LHS nor RHS"

);

1462 return Diag

(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs)

1474 if

(!Functions.

empty

()) {

1480 if

(Callee.isInvalid())

1482

ULE = cast<UnresolvedLookupExpr>(Callee.get());

1486 return BuildCXXFoldExpr

(ULE, LParenLoc, LHS, Opc, EllipsisLoc, RHS, RParenLoc,

1495

std::optional<unsigned> NumExpansions) {

1498

EllipsisLoc, RHS, RParenLoc, NumExpansions);

1523 return Diag

(EllipsisLoc, diag::err_fold_expression_empty)

static void CheckFoldOperand(Sema &S, Expr *E)

static bool isParameterPack(Expr *PackExpression)

Defines the clang::TypeLoc interface and its subclasses.

unsigned getIntWidth(QualType T) const

DeclarationNameTable DeclarationNames

TypeSourceInfo * getTrivialTypeSourceInfo(QualType T, SourceLocation Loc=SourceLocation()) const

Allocate a TypeSourceInfo where all locations have been initialized to a given location,...

CanQualType getSizeType() const

Return the unique type for "size_t" (C99 7.17), defined in <stddef.h>.

QualType getPackExpansionType(QualType Pattern, std::optional< unsigned > NumExpansions, bool ExpectPackInType=true) const

Form a pack expansion type with the given pattern.

The result of parsing/analyzing an expression, statement etc.

Attr - This represents one attribute.

bool isPackExpansion() const

static OverloadedOperatorKind getOverloadedOperator(Opcode Opc)

Retrieve the overloaded operator kind that corresponds to the given binary opcode.

StringRef getOpcodeStr() const

BlockExpr - Adaptor class for mixing a BlockDecl with expressions.

Represents a base class of a C++ class.

Represents a C++ base or member initializer.

Represents a folding of a pack over an operator.

An expression "T()" which creates an rvalue of a non-class type T.

Represents a C++ nested-name-specifier or a global scope specifier.

bool isValid() const

A scope specifier is present, and it refers to a real scope.

SourceRange getRange() const

SourceLocation getBeginLoc() const

NestedNameSpecifier * getScopeRep() const

Retrieve the representation of the nested-name-specifier.

const TypeClass * getTypePtr() const

Base class for callback objects used by Sema::CorrectTypo to check the validity of a potential typo c...

A reference to a declared variable, function, enum, etc.

Captures information about "declaration specifiers".

TST getTypeSpecType() const

ParsedType getRepAsType() const

Expr * getRepAsExpr() const

Decl - This represents one declaration (or definition), e.g.

bool isParameterPack() const

Whether this declaration is a parameter pack.

The name of a declaration.

@ CXXConversionFunctionName

QualType getCXXNameType() const

If this name is one of the C++ names (of a constructor, destructor, or conversion function),...

NameKind getNameKind() const

Determine what kind of name this is.

Information about one declarator, including the parsed type information and the identifier.

Recursive AST visitor that supports extension via dynamic dispatch.

virtual bool TraverseTemplateArgumentLoc(const TemplateArgumentLoc &ArgLoc)

Recursively visit a template argument location and dispatch to the appropriate method for the argumen...

virtual bool TraverseConstructorInitializer(MaybeConst< CXXCtorInitializer > *Init)

Recursively visit a constructor initializer.

virtual bool TraverseDecl(MaybeConst< Decl > *D)

Recursively visit a declaration, by dispatching to Traverse*Decl() based on the argument's dynamic ty...

virtual bool TraverseCXXBaseSpecifier(const CXXBaseSpecifier &Base)

Recursively visit a base specifier.

virtual bool TraverseStmt(MaybeConst< Stmt > *S)

Recursively visit a statement or expression, by dispatching to Traverse*() based on the argument's dy...

virtual bool TraverseAttr(MaybeConst< Attr > *At)

Recursively visit an attribute, by dispatching to Traverse*Attr() based on the argument's dynamic typ...

virtual bool TraverseTypeLoc(TypeLoc TL)

Recursively visit a type with location, by dispatching to Traverse*TypeLoc() based on the argument ty...

virtual bool TraverseType(QualType T)

Recursively visit a type, by dispatching to Traverse*Type() based on the argument's getTypeClass() pr...

virtual bool TraverseTemplateName(TemplateName Template)

Recursively visit a template name and dispatch to the appropriate method.

virtual bool TraverseLambdaCapture(MaybeConst< LambdaExpr > *LE, const LambdaCapture *C, MaybeConst< Expr > *Init)

Recursively visit a lambda capture.

virtual bool TraverseTemplateArgument(const TemplateArgument &Arg)

Recursively visit a template argument and dispatch to the appropriate method for the argument type.

This represents one expression.

bool containsUnexpandedParameterPack() const

Whether this expression contains an unexpanded parameter pack (for C++11 variadic templates).

bool containsErrors() const

Whether this expression contains subexpressions which had errors, e.g.

bool isInstantiationDependent() const

Whether this expression is instantiation-dependent, meaning that it depends in some way on.

Expr * IgnoreImpCasts() LLVM_READONLY

Skip past any implicit casts which might surround this expression until reaching a fixed point.

SourceLocation getExprLoc() const LLVM_READONLY

getExprLoc - Return the preferred location for the arrow when diagnosing a problem with a generic exp...

static FixItHint CreateInsertion(SourceLocation InsertionLoc, StringRef Code, bool BeforePreviousInsertions=false)

Create a code modification hint that inserts the given code string at a specific location.

Represents a reference to a function parameter pack or init-capture pack that has been substituted bu...

One of these records is kept for each identifier that is lexed.

const TypeClass * getTypePtr() const

Describes the capture of a variable or of this, or of a C++1y init-capture.

A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...

TemplateParameterList * getTemplateParameterList() const

If this is a generic lambda expression, retrieve the template parameter list associated with it,...

NamedDecl * getPartiallySubstitutedPack(const TemplateArgument **ExplicitArgs=nullptr, unsigned *NumExplicitArgs=nullptr) const

Retrieve the partially-substitued template parameter pack.

llvm::PointerUnion< Decl *, DeclArgumentPack * > * findInstantiationOf(const Decl *D)

Find the instantiation of the declaration D within the current instantiation scope.

Represents the results of name lookup.

@ FoundOverloaded

Name lookup found a set of overloaded functions that met the criteria.

@ FoundUnresolvedValue

Name lookup found an unresolvable value declaration and cannot yet complete.

@ Ambiguous

Name lookup results in an ambiguity; use getAmbiguityKind to figure out what kind of ambiguity we hav...

@ NotFound

No entity found met the criteria.

@ NotFoundInCurrentInstantiation

No entity found met the criteria within the current instantiation,, but there were dependent base cla...

@ Found

Name lookup found a single declaration that met the criteria.

NamedDecl * getFoundDecl() const

Fetch the unique decl found by this lookup.

Sema::LookupNameKind getLookupKind() const

Gets the kind of lookup to perform.

LookupResultKind getResultKind() const

const DeclarationNameInfo & getLookupNameInfo() const

Gets the name info to look up.

Data structure that captures multiple levels of template argument lists for use in template instantia...

bool hasTemplateArgument(unsigned Depth, unsigned Index) const

Determine whether there is a non-NULL template argument at the given depth and index.

unsigned getNumLevels() const

Determine the number of levels in this template argument list.

This represents a decl that may have a name.

IdentifierInfo * getIdentifier() const

Get the identifier that names this declaration, if there is one.

A C++ nested-name-specifier augmented with source location information.

bool containsUnexpandedParameterPack() const

Whether this nested-name-specifier contains an unexpanded parameter pack (for C++11 variadic template...

ObjCDictionaryLiteral - AST node to represent objective-c dictionary literals; as in:"name" : NSUserN...

Represents a C++11 pack expansion that produces a sequence of expressions.

Expr * getPattern()

Retrieve the pattern of the pack expansion.

std::optional< unsigned > getNumExpansions() const

Determine the number of expansions that will be produced when this pack expansion is instantiated,...

SourceLocation getEllipsisLoc() const

Retrieve the location of the ellipsis that describes this pack expansion.

void setEllipsisLoc(SourceLocation Loc)

SourceLocation getEllipsisLoc() const

TypeLoc getPatternLoc() const

Represents a pack expansion of types.

std::optional< unsigned > getNumExpansions() const

Retrieve the number of expansions that this pack expansion will generate, if known.

static PackIndexingExpr * Create(ASTContext &Context, SourceLocation EllipsisLoc, SourceLocation RSquareLoc, Expr *PackIdExpr, Expr *IndexExpr, std::optional< int64_t > Index, ArrayRef< Expr * > SubstitutedExprs={}, bool FullySubstituted=false)

Expr * getIndexExpr() const

Represents a parameter to a function.

Represents the parsed form of a C++ template argument.

KindType getKind() const

Determine what kind of template argument we have.

SourceLocation getLocation() const

Retrieve the location of the template argument.

ParsedTemplateTy getAsTemplate() const

Retrieve the template template argument's template name.

ParsedTemplateArgument getTemplatePackExpansion(SourceLocation EllipsisLoc) const

Retrieve a pack expansion of the given template template argument.

ParsedType getAsType() const

Retrieve the template type argument's type.

@ Type

A template type parameter, stored as a type.

@ Template

A template template argument, stored as a template name.

@ NonType

A non-type template parameter, stored as an expression.

bool isInvalid() const

Determine whether the given template argument is invalid.

Expr * getAsExpr() const

Retrieve the non-type template argument's expression.

const CXXScopeSpec & getScopeSpec() const

Retrieve the nested-name-specifier that precedes the template name in a template template argument.

A (possibly-)qualified type.

bool isNull() const

Return true if this QualType doesn't point to a type yet.

C++2a [expr.prim.req]: A requires-expression provides a concise way to express requirements on templa...

SourceLocation getBeginLoc() const LLVM_READONLY

ArrayRef< ParmVarDecl * > getLocalParameters() const

static ResolvedUnexpandedPackExpr * getFromDecl(Decl *)

unsigned getNumExprs() const

Scope - A scope is a transient data structure that is used while parsing the program.

SemaDiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID, bool DeferHint=false)

Emit a diagnostic.

PartialDiagnostic PDiag(unsigned DiagID=0)

Build a partial diagnostic.

Sema - This implements semantic analysis and AST building for C.

ParsedType CreateParsedType(QualType T, TypeSourceInfo *TInfo)

Package the given type and TSI into a ParsedType.

LocalInstantiationScope * CurrentInstantiationScope

The current instantiation scope used to store local variables.

sema::CapturingScopeInfo * getEnclosingLambdaOrBlock() const

Get the innermost lambda or block enclosing the current location, if any.

bool containsUnexpandedParameterPacks(Declarator &D)

Determine whether the given declarator contains any unexpanded parameter packs.

bool CheckParameterPacksForExpansion(SourceLocation EllipsisLoc, SourceRange PatternRange, ArrayRef< UnexpandedParameterPack > Unexpanded, const MultiLevelTemplateArgumentList &TemplateArgs, bool &ShouldExpand, bool &RetainExpansion, std::optional< unsigned > &NumExpansions)

Determine whether we could expand a pack expansion with the given set of parameter packs into separat...

@ LookupOrdinaryName

Ordinary name lookup, which finds ordinary names (functions, variables, typedefs, etc....

SmallVector< sema::FunctionScopeInfo *, 4 > FunctionScopes

Stack containing information about each of the nested function, block, and method scopes that are cur...

TypeSourceInfo * CheckPackExpansion(TypeSourceInfo *Pattern, SourceLocation EllipsisLoc, std::optional< unsigned > NumExpansions)

Construct a pack expansion type from the pattern of the pack expansion.

ExprResult BuildPackIndexingExpr(Expr *PackExpression, SourceLocation EllipsisLoc, Expr *IndexExpr, SourceLocation RSquareLoc, ArrayRef< Expr * > ExpandedExprs={}, bool FullySubstituted=false)

ASTContext & getASTContext() const

bool DiagnoseUnexpandedParameterPackInRequiresExpr(RequiresExpr *RE)

If the given requirees-expression contains an unexpanded reference to one of its own parameter packs,...

void LookupBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc, UnresolvedSetImpl &Functions)

TemplateArgumentLoc getTemplateArgumentPackExpansionPattern(TemplateArgumentLoc OrigLoc, SourceLocation &Ellipsis, std::optional< unsigned > &NumExpansions) const

Returns the pattern of the pack expansion for a template argument.

ExprResult CheckConvertedConstantExpression(Expr *From, QualType T, llvm::APSInt &Value, CCEKind CCE)

std::optional< unsigned > getNumArgumentsInExpansionFromUnexpanded(llvm::ArrayRef< UnexpandedParameterPack > Unexpanded, const MultiLevelTemplateArgumentList &TemplateArgs)

UnexpandedParameterPackContext

The context in which an unexpanded parameter pack is being diagnosed.

const LangOptions & getLangOpts() const

TypoCorrection CorrectTypo(const DeclarationNameInfo &Typo, Sema::LookupNameKind LookupKind, Scope *S, CXXScopeSpec *SS, CorrectionCandidateCallback &CCC, CorrectTypoKind Mode, DeclContext *MemberContext=nullptr, bool EnteringContext=false, const ObjCObjectPointerType *OPT=nullptr, bool RecordFailure=true)

Try to "correct" a typo in the source code by finding visible declarations whose names are similar to...

bool isUnexpandedParameterPackPermitted()

Determine whether an unexpanded parameter pack might be permitted in this location.

ExprResult BuildCXXFoldExpr(UnresolvedLookupExpr *Callee, SourceLocation LParenLoc, Expr *LHS, BinaryOperatorKind Operator, SourceLocation EllipsisLoc, Expr *RHS, SourceLocation RParenLoc, std::optional< unsigned > NumExpansions)

void collectUnexpandedParameterPacks(TemplateArgument Arg, SmallVectorImpl< UnexpandedParameterPack > &Unexpanded)

Collect the set of unexpanded parameter packs within the given template argument.

bool DiagnoseUnexpandedParameterPack(SourceLocation Loc, TypeSourceInfo *T, UnexpandedParameterPackContext UPPC)

If the given type contains an unexpanded parameter pack, diagnose the error.

ExprResult ActOnCXXBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind)

ActOnCXXBoolLiteral - Parse {true,false} literals.

void MarkAnyDeclReferenced(SourceLocation Loc, Decl *D, bool MightBeOdrUse)

Perform marking for a reference to an arbitrary declaration.

std::optional< unsigned > getNumArgumentsInExpansion(QualType T, const MultiLevelTemplateArgumentList &TemplateArgs)

Determine the number of arguments in the given pack expansion type.

std::optional< unsigned > getFullyPackExpandedSize(TemplateArgument Arg)

Given a template argument that contains an unexpanded parameter pack, but which has already been subs...

ExprResult ActOnPackIndexingExpr(Scope *S, Expr *PackExpression, SourceLocation EllipsisLoc, SourceLocation LSquareLoc, Expr *IndexExpr, SourceLocation RSquareLoc)

ExprResult CreateUnresolvedLookupExpr(CXXRecordDecl *NamingClass, NestedNameSpecifierLoc NNSLoc, DeclarationNameInfo DNI, const UnresolvedSetImpl &Fns, bool PerformADL=true)

ParsedTemplateArgument ActOnPackExpansion(const ParsedTemplateArgument &Arg, SourceLocation EllipsisLoc)

Invoked when parsing a template argument followed by an ellipsis, which creates a pack expansion.

@ CCEK_ArrayBound

Array bound in array declarator or new-expression.

void diagnoseTypo(const TypoCorrection &Correction, const PartialDiagnostic &TypoDiag, bool ErrorRecovery=true)

void DiagnoseAmbiguousLookup(LookupResult &Result)

Produce a diagnostic describing the ambiguity that resulted from name lookup.

ExprResult ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc)

Called when an expression computing the size of a parameter pack is parsed.

ExprResult BuildEmptyCXXFoldExpr(SourceLocation EllipsisLoc, BinaryOperatorKind Operator)

ExprResult ActOnCXXFoldExpr(Scope *S, SourceLocation LParenLoc, Expr *LHS, tok::TokenKind Operator, SourceLocation EllipsisLoc, Expr *RHS, SourceLocation RParenLoc)

Handle a C++1z fold-expression: ( expr op ... op expr ).

bool LookupName(LookupResult &R, Scope *S, bool AllowBuiltinCreation=false, bool ForceNoCPlusPlus=false)

Perform unqualified name lookup starting from a given scope.

static QualType GetTypeFromParser(ParsedType Ty, TypeSourceInfo **TInfo=nullptr)

bool DiagnoseUnexpandedParameterPacks(SourceLocation Loc, UnexpandedParameterPackContext UPPC, ArrayRef< UnexpandedParameterPack > Unexpanded)

Diagnose unexpanded parameter packs.

ExprResult CorrectDelayedTyposInExpr(Expr *E, VarDecl *InitDecl=nullptr, bool RecoverUncorrectedTypos=false, llvm::function_ref< ExprResult(Expr *)> Filter=[](Expr *E) -> ExprResult { return E;})

Process any TypoExprs in the given Expr and its children, generating diagnostics as appropriate and r...

static SizeOfPackExpr * Create(ASTContext &Context, SourceLocation OperatorLoc, NamedDecl *Pack, SourceLocation PackLoc, SourceLocation RParenLoc, std::optional< unsigned > Length=std::nullopt, ArrayRef< TemplateArgument > PartialArgs={})

Encodes a location in the source.

A trivial tuple used to represent a source range.

void setBegin(SourceLocation b)

SourceLocation getBegin() const

Stmt - This represents one statement.

SourceLocation getEndLoc() const LLVM_READONLY

SourceRange getSourceRange() const LLVM_READONLY

SourceLocation tokens are not useful in isolation - they are low level value objects created/interpre...

SourceLocation getBeginLoc() const LLVM_READONLY

Represents a reference to a non-type template parameter pack that has been substituted with a non-tem...

A structure for storing an already-substituted template template parameter pack.

Wrapper for substituted template type parameters.

Represents the result of substituting a set of types for a template type parameter pack.

Location wrapper for a TemplateArgument.

SourceLocation getLocation() const

SourceLocation getTemplateEllipsisLoc() const

const TemplateArgument & getArgument() const

SourceLocation getTemplateNameLoc() const

TypeSourceInfo * getTypeSourceInfo() const

NestedNameSpecifierLoc getTemplateQualifierLoc() const

Represents a template argument.

Expr * getAsExpr() const

Retrieve the template argument as an expression.

std::optional< unsigned > getNumTemplateExpansions() const

Retrieve the number of expansions that a template template argument expansion will produce,...

QualType getAsType() const

Retrieve the type for a type template argument.

TemplateName getAsTemplate() const

Retrieve the template name for a template name argument.

bool containsUnexpandedParameterPack() const

Whether this template argument contains an unexpanded parameter pack.

TemplateArgument getPackExpansionPattern() const

When the template argument is a pack expansion, returns the pattern of the pack expansion.

bool isNull() const

Determine whether this template argument has no value.

unsigned pack_size() const

The number of template arguments in the given template argument pack.

ArrayRef< TemplateArgument > pack_elements() const

Iterator range referencing all of the elements of a template argument pack.

@ Declaration

The template argument is a declaration that was provided for a pointer, reference,...

@ Template

The template argument is a template name that was provided for a template template parameter.

@ StructuralValue

The template argument is a non-type template argument that can't be represented by the special-case D...

@ Pack

The template argument is actually a parameter pack.

@ TemplateExpansion

The template argument is a pack expansion of a template name that was provided for a template templat...

@ NullPtr

The template argument is a null pointer or null pointer to member that was provided for a non-type te...

@ Type

The template argument is a type.

@ Null

Represents an empty template argument, e.g., one that has not been deduced.

@ Integral

The template argument is an integral value stored in an llvm::APSInt that was provided for an integra...

@ Expression

The template argument is an expression, and we've not resolved it to one of the other forms yet,...

ArgKind getKind() const

Return the kind of stored template argument.

bool isPackExpansion() const

Determine whether this template argument is a pack expansion.

Represents a C++ template name within the type system.

TemplateDecl * getAsTemplateDecl(bool IgnoreDeduced=false) const

Retrieve the underlying template declaration that this template name refers to, if known.

bool isNull() const

Determine whether this template name is NULL.

bool containsUnexpandedParameterPack() const

Determines whether this template name contains an unexpanded parameter pack (for C++0x variadic templ...

SubstTemplateTemplateParmPackStorage * getAsSubstTemplateTemplateParmPack() const

Retrieve the substituted template template parameter pack, if known.

Wrapper for template type parameters.

bool isParameterPack() const

TyLocType push(QualType T)

Pushes space for a new TypeLoc of the given type.

void pushFullCopy(TypeLoc L)

Pushes a copy of the given TypeLoc onto this builder.

TypeSourceInfo * getTypeSourceInfo(ASTContext &Context, QualType T)

Creates a TypeSourceInfo for the given type.

Base wrapper for a particular "section" of type source info.

QualType getType() const

Get the type for which this source info wrapper provides information.

T castAs() const

Convert to the specified TypeLoc type, asserting that this TypeLoc is of the desired type.

SourceRange getSourceRange() const LLVM_READONLY

Get the full source range.

A container of type source information.

TypeLoc getTypeLoc() const

Return the TypeLoc wrapper for the type source info.

QualType getType() const

Return the type wrapped by this type source info.

SourceLocation getNameLoc() const

The base class of the type hierarchy.

DeducedType * getContainedDeducedType() const

Get the DeducedType whose type will be deduced for a variable with an initializer of this type.

bool containsUnexpandedParameterPack() const

Whether this type is or contains an unexpanded parameter pack, used to support C++0x variadic templat...

const T * getAs() const

Member-template getAs<specific type>'.

Simple class containing the result of Sema::CorrectTypo.

NamedDecl * getCorrectionDecl() const

Gets the pointer to the declaration of the typo correction.

A reference to a name which we were able to look up during parsing but could not resolve to a specifi...

A set of unresolved declarations.

Represents a dependent using declaration which was marked with typename.

Represents a dependent using declaration which was not marked with typename.

Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...

bool isParameterPack() const

Determine whether this value is actually a function parameter pack, init-capture pack,...

Represents a variable declaration or definition.

Contains information about the compound statement currently being parsed.

Retains information about a function, method, or block that is currently being parsed.

TokenKind

Provides a simple uniform namespace for tokens from all C languages.

The JSON file list parser is used to communicate input to InstallAPI.

@ TST_typename_pack_indexing

if(T->getSizeExpr()) TRY_TO(TraverseStmt(const_cast< Expr * >(T -> getSizeExpr())))

std::pair< llvm::PointerUnion< const TemplateTypeParmType *, NamedDecl *, ResolvedUnexpandedPackExpr * >, SourceLocation > UnexpandedParameterPack

@ Result

The result type of a method or function.

std::pair< unsigned, unsigned > getDepthAndIndex(const NamedDecl *ND)

Retrieve the depth and index of a template parameter.

bool isComputedNoexcept(ExceptionSpecificationType ESpecType)

const FunctionProtoType * T

bool declaresSameEntity(const Decl *D1, const Decl *D2)

Determine whether two declarations declare the same entity.

@ EST_Dynamic

throw(T1, T2)

DeclarationNameInfo - A collector data type for bundling together a DeclarationName and the correspon...

SourceLocation getLoc() const

getLoc - Returns the main location of the declaration name.

DeclarationName getName() const

getName - Returns the embedded declaration name.

TypeSourceInfo * getNamedTypeInfo() const

getNamedTypeInfo - Returns the source type info associated to the name.

Expr * NumElts

This is the size of the array, or null if [] or [*] was specified.

bool hasTrailingReturnType() const

Determine whether this function declarator had a trailing-return-type.

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 NumParams

NumParams - This is the number of formal parameters specified by the declarator.

unsigned getNumExceptions() const

Get the number of dynamic exception specifications.

ExceptionSpecificationType getExceptionSpecType() const

Get the type of exception specification this function has.

Expr * NoexceptExpr

Pointer to the expression in the noexcept-specifier of this function, if it has one.

One instance of this struct is used for each type in a declarator that is parsed.

enum clang::DeclaratorChunk::@223 Kind

MemberPointerTypeInfo Mem

An element in an Objective-C dictionary literal.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4