23 #include "llvm/Bitstream/BitstreamWriter.h"
24 using namespace clang;
54 class PakedBitsWriter {
57 ~PakedBitsWriter() { assert(!CurrentIndex); }
59 void addBit(
bool Value) {
60 assert(CurrentIndex &&
"Writing Bits without recording first!");
61 PackingBits.addBit(
Value);
63 void addBits(uint32_t
Value, uint32_t BitsWidth) {
64 assert(CurrentIndex &&
"Writing Bits without recording first!");
65 PackingBits.addBits(
Value, BitsWidth);
72 RecordRef[*CurrentIndex] = (uint32_t)PackingBits;
73 CurrentIndex = std::nullopt;
80 CurrentIndex = RecordRef.size();
81 RecordRef.push_back(0);
87 std::optional<unsigned> CurrentIndex;
90 PakedBitsWriter CurrentPackingBits;
96 CurrentPackingBits(this->
Record) {}
102 CurrentPackingBits.writeBits();
104 "unhandled sub-statement writing AST file");
105 return Record.EmitStmt(Code, AbbrevToUse);
112 #define STMT(Type, Base) \
113 void Visit##Type(Type *);
114 #include "clang/AST/StmtNodes.inc"
124 Record.AddTemplateArgumentLoc(Args[i]);
130 void ASTStmtWriter::VisitNullStmt(
NullStmt *S) {
132 Record.AddSourceLocation(S->getSemiLoc());
133 Record.push_back(S->NullStmtBits.HasLeadingEmptyMacro);
137 void ASTStmtWriter::VisitCompoundStmt(
CompoundStmt *S) {
140 Record.push_back(S->size());
141 Record.push_back(S->hasStoredFPFeatures());
143 for (
auto *CS : S->body())
145 if (S->hasStoredFPFeatures())
146 Record.push_back(S->getStoredFPFeatures().getAsOpaqueInt());
147 Record.AddSourceLocation(S->getLBracLoc());
148 Record.AddSourceLocation(S->getRBracLoc());
150 if (!S->hasStoredFPFeatures())
156 void ASTStmtWriter::VisitSwitchCase(
SwitchCase *S) {
159 Record.AddSourceLocation(S->getKeywordLoc());
160 Record.AddSourceLocation(S->getColonLoc());
163 void ASTStmtWriter::VisitCaseStmt(
CaseStmt *S) {
165 Record.push_back(S->caseStmtIsGNURange());
166 Record.AddStmt(S->getLHS());
167 Record.AddStmt(S->getSubStmt());
168 if (S->caseStmtIsGNURange()) {
169 Record.AddStmt(S->getRHS());
170 Record.AddSourceLocation(S->getEllipsisLoc());
175 void ASTStmtWriter::VisitDefaultStmt(
DefaultStmt *S) {
177 Record.AddStmt(S->getSubStmt());
181 void ASTStmtWriter::VisitLabelStmt(
LabelStmt *S) {
183 Record.push_back(S->isSideEntry());
184 Record.AddDeclRef(S->getDecl());
185 Record.AddStmt(S->getSubStmt());
186 Record.AddSourceLocation(S->getIdentLoc());
192 Record.push_back(S->getAttrs().size());
193 Record.AddAttributes(S->getAttrs());
194 Record.AddStmt(S->getSubStmt());
195 Record.AddSourceLocation(S->getAttrLoc());
199 void ASTStmtWriter::VisitIfStmt(
IfStmt *S) {
202 bool HasElse = S->getElse() !=
nullptr;
203 bool HasVar = S->getConditionVariableDeclStmt() !=
nullptr;
204 bool HasInit = S->getInit() !=
nullptr;
206 CurrentPackingBits.updateBits();
208 CurrentPackingBits.addBit(HasElse);
209 CurrentPackingBits.addBit(HasVar);
210 CurrentPackingBits.addBit(HasInit);
212 Record.AddStmt(S->getCond());
213 Record.AddStmt(S->getThen());
215 Record.AddStmt(S->getElse());
217 Record.AddStmt(S->getConditionVariableDeclStmt());
219 Record.AddStmt(S->getInit());
221 Record.AddSourceLocation(S->getIfLoc());
222 Record.AddSourceLocation(S->getLParenLoc());
223 Record.AddSourceLocation(S->getRParenLoc());
225 Record.AddSourceLocation(S->getElseLoc());
230 void ASTStmtWriter::VisitSwitchStmt(
SwitchStmt *S) {
233 bool HasInit = S->getInit() !=
nullptr;
234 bool HasVar = S->getConditionVariableDeclStmt() !=
nullptr;
235 Record.push_back(HasInit);
237 Record.push_back(S->isAllEnumCasesCovered());
239 Record.AddStmt(S->getCond());
240 Record.AddStmt(S->getBody());
242 Record.AddStmt(S->getInit());
244 Record.AddStmt(S->getConditionVariableDeclStmt());
246 Record.AddSourceLocation(S->getSwitchLoc());
247 Record.AddSourceLocation(S->getLParenLoc());
248 Record.AddSourceLocation(S->getRParenLoc());
250 for (
SwitchCase *SC = S->getSwitchCaseList(); SC;
251 SC = SC->getNextSwitchCase())
256 void ASTStmtWriter::VisitWhileStmt(
WhileStmt *S) {
259 bool HasVar = S->getConditionVariableDeclStmt() !=
nullptr;
262 Record.AddStmt(S->getCond());
263 Record.AddStmt(S->getBody());
265 Record.AddStmt(S->getConditionVariableDeclStmt());
267 Record.AddSourceLocation(S->getWhileLoc());
268 Record.AddSourceLocation(S->getLParenLoc());
269 Record.AddSourceLocation(S->getRParenLoc());
273 void ASTStmtWriter::VisitDoStmt(
DoStmt *S) {
275 Record.AddStmt(S->getCond());
276 Record.AddStmt(S->getBody());
277 Record.AddSourceLocation(S->getDoLoc());
278 Record.AddSourceLocation(S->getWhileLoc());
279 Record.AddSourceLocation(S->getRParenLoc());
283 void ASTStmtWriter::VisitForStmt(
ForStmt *S) {
285 Record.AddStmt(S->getInit());
286 Record.AddStmt(S->getCond());
287 Record.AddStmt(S->getConditionVariableDeclStmt());
288 Record.AddStmt(S->getInc());
289 Record.AddStmt(S->getBody());
290 Record.AddSourceLocation(S->getForLoc());
291 Record.AddSourceLocation(S->getLParenLoc());
292 Record.AddSourceLocation(S->getRParenLoc());
296 void ASTStmtWriter::VisitGotoStmt(
GotoStmt *S) {
298 Record.AddDeclRef(S->getLabel());
299 Record.AddSourceLocation(S->getGotoLoc());
300 Record.AddSourceLocation(S->getLabelLoc());
306 Record.AddSourceLocation(S->getGotoLoc());
307 Record.AddSourceLocation(S->getStarLoc());
308 Record.AddStmt(S->getTarget());
312 void ASTStmtWriter::VisitContinueStmt(
ContinueStmt *S) {
314 Record.AddSourceLocation(S->getContinueLoc());
318 void ASTStmtWriter::VisitBreakStmt(
BreakStmt *S) {
320 Record.AddSourceLocation(S->getBreakLoc());
324 void ASTStmtWriter::VisitReturnStmt(
ReturnStmt *S) {
327 bool HasNRVOCandidate = S->getNRVOCandidate() !=
nullptr;
328 Record.push_back(HasNRVOCandidate);
330 Record.AddStmt(S->getRetValue());
331 if (HasNRVOCandidate)
332 Record.AddDeclRef(S->getNRVOCandidate());
334 Record.AddSourceLocation(S->getReturnLoc());
338 void ASTStmtWriter::VisitDeclStmt(
DeclStmt *S) {
340 Record.AddSourceLocation(S->getBeginLoc());
341 Record.AddSourceLocation(S->getEndLoc());
348 void ASTStmtWriter::VisitAsmStmt(
AsmStmt *S) {
350 Record.push_back(S->getNumOutputs());
351 Record.push_back(S->getNumInputs());
352 Record.push_back(S->getNumClobbers());
353 Record.AddSourceLocation(S->getAsmLoc());
354 Record.push_back(S->isVolatile());
355 Record.push_back(S->isSimple());
358 void ASTStmtWriter::VisitGCCAsmStmt(
GCCAsmStmt *S) {
360 Record.push_back(S->getNumLabels());
361 Record.AddSourceLocation(S->getRParenLoc());
362 Record.AddStmt(S->getAsmString());
365 for (
unsigned I = 0, N = S->getNumOutputs(); I != N; ++I) {
366 Record.AddIdentifierRef(S->getOutputIdentifier(I));
367 Record.AddStmt(S->getOutputConstraintLiteral(I));
368 Record.AddStmt(S->getOutputExpr(I));
372 for (
unsigned I = 0, N = S->getNumInputs(); I != N; ++I) {
373 Record.AddIdentifierRef(S->getInputIdentifier(I));
374 Record.AddStmt(S->getInputConstraintLiteral(I));
375 Record.AddStmt(S->getInputExpr(I));
379 for (
unsigned I = 0, N = S->getNumClobbers(); I != N; ++I)
380 Record.AddStmt(S->getClobberStringLiteral(I));
383 for (
unsigned I = 0, N = S->getNumLabels(); I != N; ++I) {
384 Record.AddIdentifierRef(S->getLabelIdentifier(I));
385 Record.AddStmt(S->getLabelExpr(I));
391 void ASTStmtWriter::VisitMSAsmStmt(
MSAsmStmt *S) {
393 Record.AddSourceLocation(S->getLBraceLoc());
394 Record.AddSourceLocation(S->getEndLoc());
395 Record.push_back(S->getNumAsmToks());
396 Record.AddString(S->getAsmString());
399 for (
unsigned I = 0, N = S->getNumAsmToks(); I != N; ++I) {
405 for (
unsigned I = 0, N = S->getNumClobbers(); I != N; ++I) {
406 Record.AddString(S->getClobber(I));
410 for (
unsigned I = 0, N = S->getNumOutputs(); I != N; ++I) {
411 Record.AddStmt(S->getOutputExpr(I));
412 Record.AddString(S->getOutputConstraint(I));
416 for (
unsigned I = 0, N = S->getNumInputs(); I != N; ++I) {
417 Record.AddStmt(S->getInputExpr(I));
418 Record.AddString(S->getInputConstraint(I));
432 void ASTStmtWriter::VisitCoreturnStmt(
CoreturnStmt *S) {
434 Record.AddSourceLocation(S->getKeywordLoc());
435 Record.AddStmt(S->getOperand());
436 Record.AddStmt(S->getPromiseCall());
437 Record.push_back(S->isImplicit());
449 void ASTStmtWriter::VisitCoawaitExpr(
CoawaitExpr *E) {
450 VisitCoroutineSuspendExpr(E);
455 void ASTStmtWriter::VisitCoyieldExpr(
CoyieldExpr *E) {
456 VisitCoroutineSuspendExpr(E);
475 for (
const auto &DetailRecord : Satisfaction) {
476 Record.writeStmtRef(DetailRecord.first);
477 auto *E = DetailRecord.second.dyn_cast<
Expr *>();
478 Record.push_back(E ==
nullptr);
500 void ASTStmtWriter::VisitConceptSpecializationExpr(
505 Record.push_back(CR !=
nullptr);
507 Record.AddConceptReference(CR);
514 void ASTStmtWriter::VisitRequiresExpr(
RequiresExpr *E) {
524 if (
auto *TypeReq = dyn_cast<concepts::TypeRequirement>(R)) {
526 Record.push_back(TypeReq->Status);
530 Record.AddTypeSourceInfo(TypeReq->getType());
531 }
else if (
auto *ExprReq = dyn_cast<concepts::ExprRequirement>(R)) {
532 Record.push_back(ExprReq->getKind());
533 Record.push_back(ExprReq->Status);
534 if (ExprReq->isExprSubstitutionFailure()) {
540 Record.AddSourceLocation(ExprReq->NoexceptLoc);
541 const auto &RetReq = ExprReq->getReturnTypeRequirement();
542 if (RetReq.isSubstitutionFailure()) {
545 }
else if (RetReq.isTypeConstraint()) {
547 Record.AddTemplateParameterList(
548 RetReq.getTypeConstraintTemplateParameterList());
549 if (ExprReq->Status >=
552 ExprReq->getReturnTypeRequirementSubstitutedConstraintExpr());
554 assert(RetReq.isEmpty());
559 auto *NestedReq = cast<concepts::NestedRequirement>(R);
561 Record.push_back(NestedReq->hasInvalidConstraint());
562 if (NestedReq->hasInvalidConstraint()) {
563 Record.AddString(NestedReq->getInvalidConstraintEntity());
566 Record.AddStmt(NestedReq->getConstraintExpr());
567 if (!NestedReq->isDependent())
580 void ASTStmtWriter::VisitCapturedStmt(
CapturedStmt *S) {
586 Record.AddDeclRef(S->getCapturedDecl());
587 Record.push_back(S->getCapturedRegionKind());
589 Record.AddDeclRef(S->getCapturedRecordDecl());
592 for (
auto *I : S->capture_inits())
596 Record.AddStmt(S->getCapturedStmt());
599 for (
const auto &I : S->captures()) {
600 if (I.capturesThis() || I.capturesVariableArrayType())
601 Record.AddDeclRef(
nullptr);
603 Record.AddDeclRef(I.getCapturedVar());
604 Record.push_back(I.getCaptureKind());
605 Record.AddSourceLocation(I.getLocation());
611 void ASTStmtWriter::VisitExpr(
Expr *E) {
614 CurrentPackingBits.updateBits();
622 void ASTStmtWriter::VisitConstantExpr(
ConstantExpr *E) {
636 Record.push_back(E->Int64Result());
639 Record.AddAPValue(E->APValueResult());
673 Record.push_back(HasFunctionName);
683 void ASTStmtWriter::VisitDeclRefExpr(
DeclRefExpr *E) {
686 CurrentPackingBits.updateBits();
698 Record.push_back(NumTemplateArgs);
730 if (E->
getValue().getBitWidth() == 32) {
777 Record.push_back(StrData[I]);
793 void ASTStmtWriter::VisitParenExpr(
ParenExpr *E) {
804 for (
auto *SubStmt : E->
exprs())
816 CurrentPackingBits.addBit(HasFPFeatures);
818 CurrentPackingBits.addBits(E->
getOpcode(),
828 void ASTStmtWriter::VisitOffsetOfExpr(
OffsetOfExpr *E) {
896 Record.writeEnum(E->ASType);
918 Record.AddSourceRange(SR);
950 void ASTStmtWriter::VisitCallExpr(
CallExpr *E) {
954 CurrentPackingBits.updateBits();
955 CurrentPackingBits.addBit(
static_cast<bool>(E->
getADLCallKind()));
961 Arg != ArgEnd; ++Arg)
974 void ASTStmtWriter::VisitRecoveryExpr(
RecoveryExpr *E) {
984 void ASTStmtWriter::VisitMemberExpr(
MemberExpr *E) {
988 bool HasFoundDecl = E->hasFoundDecl();
989 bool HasTemplateInfo = E->hasTemplateKWAndArgsInfo();
994 CurrentPackingBits.updateBits();
995 CurrentPackingBits.addBit(HasQualifier);
996 CurrentPackingBits.addBit(HasFoundDecl);
997 CurrentPackingBits.addBit(HasTemplateInfo);
998 Record.push_back(NumTemplateArgs);
1002 Record.AddDeclarationNameLoc(E->MemberDNLoc,
1005 CurrentPackingBits.addBit(E->
isArrow());
1015 Record.AddDeclRef(FoundDecl.getDecl());
1016 CurrentPackingBits.addBits(FoundDecl.
getAccess(), 2);
1019 if (HasTemplateInfo)
1026 void ASTStmtWriter::VisitObjCIsaExpr(
ObjCIsaExpr *E) {
1035 void ASTStmtWriter::
1044 VisitExplicitCastExpr(E);
1051 void ASTStmtWriter::VisitCastExpr(
CastExpr *E) {
1055 CurrentPackingBits.updateBits();
1063 Record.AddCXXBaseSpecifier(**PI);
1074 CurrentPackingBits.updateBits();
1075 CurrentPackingBits.addBits(E->
getOpcode(), 6);
1077 CurrentPackingBits.addBit(HasFPFeatures);
1092 VisitBinaryOperator(E);
1142 VisitExplicitCastExpr(E);
1165 void ASTStmtWriter::VisitInitListExpr(
InitListExpr *E) {
1172 bool isArrayFiller = E->ArrayFillerOrUnionFieldInit.is<
Expr*>();
1173 Record.push_back(isArrayFiller);
1180 if (isArrayFiller) {
1184 for (
unsigned I = 0, N = E->
getNumInits(); I != N; ++I)
1187 for (
unsigned I = 0, N = E->
getNumInits(); I != N; ++I)
1201 if (D.isFieldDesignator()) {
1202 if (
FieldDecl *Field = D.getFieldDecl()) {
1204 Record.AddDeclRef(Field);
1207 Record.AddIdentifierRef(D.getFieldName());
1209 Record.AddSourceLocation(D.getDotLoc());
1210 Record.AddSourceLocation(D.getFieldLoc());
1211 }
else if (D.isArrayDesignator()) {
1213 Record.push_back(D.getArrayIndex());
1214 Record.AddSourceLocation(D.getLBracketLoc());
1215 Record.AddSourceLocation(D.getRBracketLoc());
1217 assert(D.isArrayRangeDesignator() &&
"Unknown designator");
1219 Record.push_back(D.getArrayIndex());
1220 Record.AddSourceLocation(D.getLBracketLoc());
1221 Record.AddSourceLocation(D.getEllipsisLoc());
1222 Record.AddSourceLocation(D.getRBracketLoc());
1235 void ASTStmtWriter::VisitNoInitExpr(
NoInitExpr *E) {
1242 Record.AddStmt(E->SubExprs[0]);
1243 Record.AddStmt(E->SubExprs[1]);
1257 void ASTStmtWriter::VisitVAArgExpr(
VAArgExpr *E) {
1284 void ASTStmtWriter::VisitStmtExpr(
StmtExpr *E) {
1293 void ASTStmtWriter::VisitChooseExpr(
ChooseExpr *E) {
1304 void ASTStmtWriter::VisitGNUNullExpr(
GNUNullExpr *E) {
1329 void ASTStmtWriter::VisitBlockExpr(
BlockExpr *E) {
1340 Record.push_back(E->ResultIndex);
1345 Stmt **Stmts = E->getTrailingObjects<
Stmt *>();
1349 for (
unsigned I = 0, N = E->
getNumAssocs() + 1; I < N; ++I)
1350 Record.AddStmt(Stmts[I]);
1353 for (
unsigned I = 0, N = E->
getNumAssocs(); I < N; ++I)
1354 Record.AddTypeSourceInfo(TSIs[I]);
1367 Record.push_back(result);
1377 void ASTStmtWriter::VisitAtomicExpr(
AtomicExpr *E) {
1419 Record.push_back(E->HasPackExpansions);
1422 Record.AddStmt(Element.Key);
1423 Record.AddStmt(Element.Value);
1424 if (E->HasPackExpansions) {
1425 Record.AddSourceLocation(Element.EllipsisLoc);
1426 unsigned NumExpansions = 0;
1427 if (Element.NumExpansions)
1428 NumExpansions = *Element.NumExpansions + 1;
1429 Record.push_back(NumExpansions);
1458 Record.AddSourceLocation(E->ProtoLoc);
1476 Record.push_back(E->SetterAndMethodRefFlags.getInt());
1514 Record.push_back(E->getNumStoredSelLocs());
1515 Record.push_back(E->SelLocsKind);
1517 Record.push_back(E->IsImplicit);
1547 Arg != ArgEnd; ++Arg)
1551 for (
unsigned i = 0, e = E->getNumStoredSelLocs(); i != e; ++i)
1552 Record.AddSourceLocation(Locs[i]);
1559 Record.AddStmt(S->getElement());
1560 Record.AddStmt(S->getCollection());
1561 Record.AddStmt(S->getBody());
1562 Record.AddSourceLocation(S->getForLoc());
1563 Record.AddSourceLocation(S->getRParenLoc());
1569 Record.AddStmt(S->getCatchBody());
1570 Record.AddDeclRef(S->getCatchParamDecl());
1571 Record.AddSourceLocation(S->getAtCatchLoc());
1572 Record.AddSourceLocation(S->getRParenLoc());
1578 Record.AddStmt(S->getFinallyBody());
1579 Record.AddSourceLocation(S->getAtFinallyLoc());
1585 Record.AddStmt(S->getSubStmt());
1586 Record.AddSourceLocation(S->getAtLoc());
1592 Record.push_back(S->getNumCatchStmts());
1593 Record.push_back(S->getFinallyStmt() !=
nullptr);
1594 Record.AddStmt(S->getTryBody());
1597 if (S->getFinallyStmt())
1598 Record.AddStmt(S->getFinallyStmt());
1599 Record.AddSourceLocation(S->getAtTryLoc());
1605 Record.AddStmt(S->getSynchExpr());
1606 Record.AddStmt(S->getSynchBody());
1607 Record.AddSourceLocation(S->getAtSynchronizedLoc());
1613 Record.AddStmt(S->getThrowExpr());
1614 Record.AddSourceLocation(S->getThrowLoc());
1636 void ASTStmtWriter::VisitCXXCatchStmt(
CXXCatchStmt *S) {
1638 Record.AddSourceLocation(S->getCatchLoc());
1639 Record.AddDeclRef(S->getExceptionDecl());
1640 Record.AddStmt(S->getHandlerBlock());
1644 void ASTStmtWriter::VisitCXXTryStmt(
CXXTryStmt *S) {
1646 Record.push_back(S->getNumHandlers());
1647 Record.AddSourceLocation(S->getTryLoc());
1648 Record.AddStmt(S->getTryBlock());
1649 for (
unsigned i = 0, e = S->getNumHandlers(); i != e; ++i)
1650 Record.AddStmt(S->getHandler(i));
1656 Record.AddSourceLocation(S->getForLoc());
1657 Record.AddSourceLocation(S->getCoawaitLoc());
1658 Record.AddSourceLocation(S->getColonLoc());
1659 Record.AddSourceLocation(S->getRParenLoc());
1660 Record.AddStmt(S->getInit());
1661 Record.AddStmt(S->getRangeStmt());
1662 Record.AddStmt(S->getBeginStmt());
1663 Record.AddStmt(S->getEndStmt());
1664 Record.AddStmt(S->getCond());
1665 Record.AddStmt(S->getInc());
1666 Record.AddStmt(S->getLoopVarStmt());
1667 Record.AddStmt(S->getBody());
1673 Record.AddSourceLocation(S->getKeywordLoc());
1674 Record.push_back(S->isIfExists());
1675 Record.AddNestedNameSpecifierLoc(S->getQualifierLoc());
1676 Record.AddDeclarationNameInfo(S->getNameInfo());
1677 Record.AddStmt(S->getSubStmt());
1684 Record.AddSourceRange(E->Range);
1701 void ASTStmtWriter::VisitCXXRewrittenBinaryOperator(
1725 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
1741 VisitCXXConstructExpr(E);
1746 void ASTStmtWriter::VisitLambdaExpr(
LambdaExpr *E) {
1749 Record.AddSourceRange(E->IntroducerRange);
1751 Record.AddSourceLocation(E->CaptureDefaultLoc);
1754 Record.AddSourceLocation(E->ClosingBrace);
1776 VisitExplicitCastExpr(E);
1784 VisitCXXNamedCastExpr(E);
1789 VisitCXXNamedCastExpr(E);
1794 VisitCXXNamedCastExpr(E);
1799 VisitCXXNamedCastExpr(E);
1804 VisitCXXNamedCastExpr(E);
1809 VisitExplicitCastExpr(E);
1816 VisitExplicitCastExpr(E);
1850 Record.AddSourceLocation(E->UDSuffixLoc);
1879 void ASTStmtWriter::VisitCXXThisExpr(
CXXThisExpr *E) {
1888 void ASTStmtWriter::VisitCXXThrowExpr(
CXXThrowExpr *E) {
1932 void ASTStmtWriter::VisitCXXNewExpr(
CXXNewExpr *E) {
1999 if (
auto *BD = Obj.dyn_cast<
BlockDecl *>()) {
2013 void ASTStmtWriter::VisitCXXDependentScopeMemberExpr(
2020 CurrentPackingBits.updateBits();
2021 CurrentPackingBits.addBit(E->hasTemplateKWAndArgsInfo());
2022 CurrentPackingBits.addBit(E->hasFirstQualifierFoundInScope());
2024 if (E->hasTemplateKWAndArgsInfo()) {
2031 CurrentPackingBits.addBit(E->
isArrow());
2041 if (E->hasFirstQualifierFoundInScope())
2044 Record.AddDeclarationNameInfo(E->MemberNameInfo);
2054 CurrentPackingBits.addBit(
2067 Record.AddDeclarationNameInfo(E->NameInfo);
2085 void ASTStmtWriter::VisitOverloadExpr(
OverloadExpr *E) {
2090 CurrentPackingBits.updateBits();
2101 OvI != OvE; ++OvI) {
2102 Record.AddDeclRef(OvI.getDecl());
2103 Record.push_back(OvI.getAccess());
2111 VisitOverloadExpr(E);
2112 CurrentPackingBits.addBit(E->
isArrow());
2125 VisitOverloadExpr(E);
2137 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
2172 Record.push_back(E->NumExpansions);
2181 Record.AddSourceLocation(E->OperatorLoc);
2182 Record.AddSourceLocation(E->PackLoc);
2183 Record.AddSourceLocation(E->RParenLoc);
2184 Record.AddDeclRef(E->Pack);
2187 Record.AddTemplateArgument(TA);
2196 Record.push_back(E->TransformedExpressions);
2197 Record.push_back(E->ExpandedToEmptyPack);
2207 void ASTStmtWriter::VisitSubstNonTypeTemplateParmExpr(
2212 CurrentPackingBits.addBits(E->
getIndex(), 12);
2215 Record.push_back(*PackIndex + 1);
2222 void ASTStmtWriter::VisitSubstNonTypeTemplateParmPackExpr(
2253 void ASTStmtWriter::VisitCXXFoldExpr(
CXXFoldExpr *E) {
2255 Record.AddSourceLocation(E->LParenLoc);
2256 Record.AddSourceLocation(E->EllipsisLoc);
2257 Record.AddSourceLocation(E->RParenLoc);
2258 Record.push_back(E->NumExpansions);
2259 Record.AddStmt(E->SubExprs[0]);
2260 Record.AddStmt(E->SubExprs[1]);
2261 Record.AddStmt(E->SubExprs[2]);
2262 Record.push_back(E->Opcode);
2269 Record.push_back(InitExprs.size());
2275 Record.AddStmt(InitExpr);
2278 bool HasArrayFillerOrUnionDecl = ArrayFiller || UnionField;
2279 Record.push_back(HasArrayFillerOrUnionDecl);
2280 if (HasArrayFillerOrUnionDecl) {
2281 Record.push_back(
static_cast<bool>(ArrayFiller));
2283 Record.AddStmt(ArrayFiller);
2285 Record.AddDeclRef(UnionField);
2298 void ASTStmtWriter::VisitTypoExpr(
TypoExpr *E) {
2301 llvm_unreachable(
"Cannot write TypoExpr nodes");
2317 void ASTStmtWriter::VisitAsTypeExpr(
AsTypeExpr *E) {
2361 Record.AddSourceLocation(S->getExceptLoc());
2362 Record.AddStmt(S->getFilterExpr());
2363 Record.AddStmt(S->getBlock());
2369 Record.AddSourceLocation(S->getFinallyLoc());
2370 Record.AddStmt(S->getBlock());
2374 void ASTStmtWriter::VisitSEHTryStmt(
SEHTryStmt *S) {
2376 Record.push_back(S->getIsCXXTry());
2377 Record.AddSourceLocation(S->getTryLoc());
2378 Record.AddStmt(S->getTryBlock());
2379 Record.AddStmt(S->getHandler());
2383 void ASTStmtWriter::VisitSEHLeaveStmt(
SEHLeaveStmt *S) {
2385 Record.AddSourceLocation(S->getLeaveLoc());
2395 for (
Stmt *SubStmt : S->SubStmts)
2410 VisitOMPExecutableDirective(D);
2414 VisitOMPLoopBasedDirective(D);
2420 VisitOMPExecutableDirective(D);
2426 VisitOMPExecutableDirective(D);
2432 VisitOMPLoopDirective(D);
2436 void ASTStmtWriter::VisitOMPLoopTransformationDirective(
2438 VisitOMPLoopBasedDirective(D);
2443 VisitOMPLoopTransformationDirective(D);
2448 VisitOMPLoopTransformationDirective(D);
2453 VisitOMPLoopDirective(D);
2459 VisitOMPLoopDirective(D);
2465 VisitOMPExecutableDirective(D);
2472 VisitOMPExecutableDirective(D);
2479 VisitOMPExecutableDirective(D);
2485 VisitOMPExecutableDirective(D);
2491 VisitOMPExecutableDirective(D);
2497 VisitOMPExecutableDirective(D);
2503 VisitOMPLoopDirective(D);
2508 void ASTStmtWriter::VisitOMPParallelForSimdDirective(
2510 VisitOMPLoopDirective(D);
2514 void ASTStmtWriter::VisitOMPParallelMasterDirective(
2517 VisitOMPExecutableDirective(D);
2521 void ASTStmtWriter::VisitOMPParallelMaskedDirective(
2524 VisitOMPExecutableDirective(D);
2528 void ASTStmtWriter::VisitOMPParallelSectionsDirective(
2531 VisitOMPExecutableDirective(D);
2538 VisitOMPExecutableDirective(D);
2545 VisitOMPExecutableDirective(D);
2554 VisitOMPExecutableDirective(D);
2560 VisitOMPExecutableDirective(D);
2564 void ASTStmtWriter::VisitOMPTargetEnterDataDirective(
2567 VisitOMPExecutableDirective(D);
2571 void ASTStmtWriter::VisitOMPTargetExitDataDirective(
2574 VisitOMPExecutableDirective(D);
2578 void ASTStmtWriter::VisitOMPTargetParallelDirective(
2581 VisitOMPExecutableDirective(D);
2586 void ASTStmtWriter::VisitOMPTargetParallelForDirective(
2588 VisitOMPLoopDirective(D);
2595 VisitOMPExecutableDirective(D);
2601 VisitOMPExecutableDirective(D);
2608 VisitOMPExecutableDirective(D);
2615 VisitOMPExecutableDirective(D);
2621 VisitOMPExecutableDirective(D);
2627 VisitOMPExecutableDirective(D);
2633 VisitOMPExecutableDirective(D);
2639 VisitOMPExecutableDirective(D);
2645 VisitOMPExecutableDirective(D);
2651 VisitOMPExecutableDirective(D);
2655 void ASTStmtWriter::VisitOMPCancellationPointDirective(
2658 VisitOMPExecutableDirective(D);
2665 VisitOMPExecutableDirective(D);
2671 VisitOMPLoopDirective(D);
2677 VisitOMPLoopDirective(D);
2681 void ASTStmtWriter::VisitOMPMasterTaskLoopDirective(
2683 VisitOMPLoopDirective(D);
2688 void ASTStmtWriter::VisitOMPMaskedTaskLoopDirective(
2690 VisitOMPLoopDirective(D);
2695 void ASTStmtWriter::VisitOMPMasterTaskLoopSimdDirective(
2697 VisitOMPLoopDirective(D);
2701 void ASTStmtWriter::VisitOMPMaskedTaskLoopSimdDirective(
2703 VisitOMPLoopDirective(D);
2707 void ASTStmtWriter::VisitOMPParallelMasterTaskLoopDirective(
2709 VisitOMPLoopDirective(D);
2714 void ASTStmtWriter::VisitOMPParallelMaskedTaskLoopDirective(
2716 VisitOMPLoopDirective(D);
2721 void ASTStmtWriter::VisitOMPParallelMasterTaskLoopSimdDirective(
2723 VisitOMPLoopDirective(D);
2727 void ASTStmtWriter::VisitOMPParallelMaskedTaskLoopSimdDirective(
2729 VisitOMPLoopDirective(D);
2734 VisitOMPLoopDirective(D);
2740 VisitOMPExecutableDirective(D);
2744 void ASTStmtWriter::VisitOMPDistributeParallelForDirective(
2746 VisitOMPLoopDirective(D);
2751 void ASTStmtWriter::VisitOMPDistributeParallelForSimdDirective(
2753 VisitOMPLoopDirective(D);
2757 void ASTStmtWriter::VisitOMPDistributeSimdDirective(
2759 VisitOMPLoopDirective(D);
2763 void ASTStmtWriter::VisitOMPTargetParallelForSimdDirective(
2765 VisitOMPLoopDirective(D);
2770 VisitOMPLoopDirective(D);
2774 void ASTStmtWriter::VisitOMPTeamsDistributeDirective(
2776 VisitOMPLoopDirective(D);
2780 void ASTStmtWriter::VisitOMPTeamsDistributeSimdDirective(
2782 VisitOMPLoopDirective(D);
2786 void ASTStmtWriter::VisitOMPTeamsDistributeParallelForSimdDirective(
2788 VisitOMPLoopDirective(D);
2792 void ASTStmtWriter::VisitOMPTeamsDistributeParallelForDirective(
2794 VisitOMPLoopDirective(D);
2801 VisitOMPExecutableDirective(D);
2805 void ASTStmtWriter::VisitOMPTargetTeamsDistributeDirective(
2807 VisitOMPLoopDirective(D);
2811 void ASTStmtWriter::VisitOMPTargetTeamsDistributeParallelForDirective(
2813 VisitOMPLoopDirective(D);
2818 void ASTStmtWriter::VisitOMPTargetTeamsDistributeParallelForSimdDirective(
2820 VisitOMPLoopDirective(D);
2825 void ASTStmtWriter::VisitOMPTargetTeamsDistributeSimdDirective(
2827 VisitOMPLoopDirective(D);
2833 VisitOMPExecutableDirective(D);
2839 VisitOMPExecutableDirective(D);
2846 VisitOMPExecutableDirective(D);
2851 VisitOMPLoopDirective(D);
2855 void ASTStmtWriter::VisitOMPTeamsGenericLoopDirective(
2857 VisitOMPLoopDirective(D);
2861 void ASTStmtWriter::VisitOMPTargetTeamsGenericLoopDirective(
2863 VisitOMPLoopDirective(D);
2868 void ASTStmtWriter::VisitOMPParallelGenericLoopDirective(
2870 VisitOMPLoopDirective(D);
2874 void ASTStmtWriter::VisitOMPTargetParallelGenericLoopDirective(
2876 VisitOMPLoopDirective(D);
2884 Record.push_back(S->clauses().size());
2885 Record.writeEnum(S->Kind);
2886 Record.AddSourceRange(S->Range);
2887 Record.writeOpenACCClauseList(S->clauses());
2890 void ASTStmtWriter::VisitOpenACCAssociatedStmtConstruct(
2892 VisitOpenACCConstructStmt(S);
2893 Record.AddStmt(S->getAssociatedStmt());
2898 VisitOpenACCAssociatedStmtConstruct(S);
2907 assert(!SwitchCaseIDs.contains(S) &&
"SwitchCase recorded twice");
2908 unsigned NextID = SwitchCaseIDs.size();
2909 SwitchCaseIDs[S] = NextID;
2914 assert(SwitchCaseIDs.contains(S) &&
"SwitchCase hasn't been seen yet");
2915 return SwitchCaseIDs[S];
2919 SwitchCaseIDs.clear();
2924 void ASTWriter::WriteSubStmt(
Stmt *S) {
2934 llvm::DenseMap<Stmt *, uint64_t>::iterator I = SubStmtEntries.find(S);
2935 if (I != SubStmtEntries.end()) {
2936 Record.push_back(I->second);
2942 assert(!ParentStmts.count(S) &&
"There is a Stmt cycle!");
2944 struct ParentStmtInserterRAII {
2949 : S(S), ParentStmts(ParentStmts) {
2950 ParentStmts.insert(S);
2952 ~ParentStmtInserterRAII() {
2953 ParentStmts.erase(S);
2957 ParentStmtInserterRAII ParentStmtInserter(S, ParentStmts);
2963 SubStmtEntries[S] =
Offset;
2968 void ASTRecordWriter::FlushStmts() {
2971 assert(Writer->SubStmtEntries.empty() &&
"unexpected entries in sub-stmt map");
2972 assert(Writer->ParentStmts.empty() &&
"unexpected entries in parent stmt map");
2974 for (
unsigned I = 0, N = StmtsToEmit.size(); I != N; ++I) {
2975 Writer->WriteSubStmt(StmtsToEmit[I]);
2977 assert(N == StmtsToEmit.size() &&
"record modified while being written!");
2984 Writer->SubStmtEntries.clear();
2985 Writer->ParentStmts.clear();
2988 StmtsToEmit.clear();
2991 void ASTRecordWriter::FlushSubStmts() {
2995 for (
unsigned I = 0, N = StmtsToEmit.size(); I != N; ++I) {
2996 Writer->WriteSubStmt(StmtsToEmit[N - I - 1]);
2997 assert(N == StmtsToEmit.size() &&
"record modified while being written!");
3000 StmtsToEmit.clear();
This file provides AST data structures related to concepts.
Defines the clang::ASTContext interface.
static void addConstraintSatisfaction(ASTRecordWriter &Record, const ASTConstraintSatisfaction &Satisfaction)
static void addSubstitutionDiagnostic(ASTRecordWriter &Record, const concepts::Requirement::SubstitutionDiagnostic *D)
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....
Defines the C++ template declaration subclasses.
static DiagnosticBuilder Diag(DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc TokLoc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, unsigned DiagID)
Produce a diagnostic highlighting some portion of a literal.
llvm::MachO::Record Record
llvm::APInt getValue() const
An object for streaming information to a record.
void AddTemplateKWAndArgsInfo(const ASTTemplateKWAndArgsInfo &ArgInfo, const TemplateArgumentLoc *Args)
ASTStmtWriter & operator=(const ASTStmtWriter &)=delete
ASTStmtWriter(const ASTStmtWriter &)=delete
ASTStmtWriter(ASTWriter &Writer, ASTWriter::RecordData &Record)
Writes an AST file containing the contents of a translation unit.
unsigned getBinaryOperatorAbbrev() const
unsigned getExprImplicitCastAbbrev() const
unsigned getSwitchCaseID(SwitchCase *S)
Retrieve the ID for the given switch-case statement.
unsigned getDeclRefExprAbbrev() const
unsigned getCXXOperatorCallExprAbbrev()
void ClearSwitchCaseIDs()
unsigned getCXXMemberCallExprAbbrev()
unsigned getCompoundAssignOperatorAbbrev() const
unsigned RecordSwitchCaseID(SwitchCase *S)
Record an ID for the given switch-case statement.
unsigned getCharacterLiteralAbbrev() const
unsigned getCompoundStmtAbbrev() const
void AddToken(const Token &Tok, RecordDataImpl &Record)
Emit a token.
SmallVector< uint64_t, 64 > RecordData
unsigned getCallExprAbbrev() const
unsigned getIntegerLiteralAbbrev() const
SourceLocation getColonLoc() const
SourceLocation getQuestionLoc() const
AddrLabelExpr - The GNU address of label extension, representing &&label.
SourceLocation getAmpAmpLoc() const
LabelDecl * getLabel() const
SourceLocation getLabelLoc() const
Represents the index of the current element of an array being initialized by an ArrayInitLoopExpr.
Represents a loop initializing the elements of an array.
This class represents BOTH the OpenMP Array Section and OpenACC 'subarray', with a boolean differenti...
SourceLocation getRBracketLoc() const
Expr * getBase()
Get base of the array section.
bool isOMPArraySection() const
Expr * getLowerBound()
Get lower bound of array section.
Expr * getStride()
Get stride of array section.
SourceLocation getColonLocSecond() const
Expr * getLength()
Get length of array section.
SourceLocation getColonLocFirst() const
ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.
SourceLocation getRBracketLoc() const
Expr * getLHS()
An array access can be written A[4] or 4[A] (both are equivalent).
An Embarcadero array type trait, as used in the implementation of __array_rank and __array_extent.
uint64_t getValue() const
TypeSourceInfo * getQueriedTypeSourceInfo() const
ArrayTypeTrait getTrait() const
Expr * getDimensionExpression() const
AsTypeExpr - Clang builtin function __builtin_astype [OpenCL 6.2.4.2] This AST node provides support ...
SourceLocation getBuiltinLoc() const
getBuiltinLoc - Return the location of the __builtin_astype token.
SourceLocation getRParenLoc() const
getRParenLoc - Return the location of final right parenthesis.
Expr * getSrcExpr() const
getSrcExpr - Return the Expr to be converted.
AsmStmt is the base class for GCCAsmStmt and MSAsmStmt.
AtomicExpr - Variadic atomic builtins: __atomic_exchange, __atomic_fetch_*, __atomic_load,...
SourceLocation getRParenLoc() const
static unsigned getNumSubExprs(AtomicOp Op)
Determine the number of arguments the specified atomic builtin should have.
SourceLocation getBuiltinLoc() const
Represents an attribute applied to a statement.
BinaryConditionalOperator - The GNU extension to the conditional operator which allows the middle ope...
Expr * getTrueExpr() const
getTrueExpr - Return the subexpression which will be evaluated if the condition evaluates to true; th...
Expr * getFalseExpr() const
getFalseExpr - Return the subexpression which will be evaluated if the condnition evaluates to false;...
Expr * getCommon() const
getCommon - Return the common expression, written to the left of the condition.
OpaqueValueExpr * getOpaqueValue() const
getOpaqueValue - Return the opaque value placeholder.
Expr * getCond() const
getCond - Return the condition expression; this is defined in terms of the opaque value.
A builtin binary operation expression such as "x + y" or "x <= y".
SourceLocation getOperatorLoc() const
bool hasStoredFPFeatures() const
FPOptionsOverride getStoredFPFeatures() const
Get FPFeatures from trailing storage.
A simple helper class to pack several bits in order into (a) 32 bit integer(s).
Represents a block literal declaration, which is like an unnamed FunctionDecl.
BlockExpr - Adaptor class for mixing a BlockDecl with expressions.
const BlockDecl * getBlockDecl() const
BreakStmt - This represents a break.
Represents a C++2a __builtin_bit_cast(T, v) expression.
SourceLocation getEndLoc() const LLVM_READONLY
SourceLocation getBeginLoc() const LLVM_READONLY
CStyleCastExpr - An explicit cast in C (C99 6.5.4) or a C-style cast in C++ (C++ [expr....
SourceLocation getRParenLoc() const
SourceLocation getLParenLoc() const
Represents a call to a CUDA kernel function.
const CallExpr * getConfig() const
A C++ addrspace_cast expression (currently only enabled for OpenCL).
Represents a base class of a C++ class.
Represents binding an expression to a temporary.
const Expr * getSubExpr() const
CXXTemporary * getTemporary()
A boolean literal, per ([C++ lex.bool] Boolean literals).
SourceLocation getLocation() const
CXXCatchStmt - This represents a C++ catch block.
A C++ const_cast expression (C++ [expr.const.cast]).
Represents a call to a C++ constructor.
SourceRange getParenOrBraceRange() const
bool isElidable() const
Whether this construction is elidable.
bool hadMultipleCandidates() const
Whether the referred constructor was resolved from an overloaded set having size greater than 1.
bool isStdInitListInitialization() const
Whether this constructor call was written as list-initialization, but was interpreted as forming a st...
bool isImmediateEscalating() const
bool requiresZeroInitialization() const
Whether this construction first requires zero-initialization before the initializer is called.
SourceLocation getLocation() const
Expr * getArg(unsigned Arg)
Return the specified argument.
bool isListInitialization() const
Whether this constructor call was written as list-initialization.
unsigned getNumArgs() const
Return the number of arguments to the constructor call.
CXXConstructionKind getConstructionKind() const
Determine whether this constructor is actually constructing a base class (rather than a complete obje...
CXXConstructorDecl * getConstructor() const
Get the constructor that this expression will (ultimately) call.
A default argument (C++ [dcl.fct.default]).
const ParmVarDecl * getParam() const
SourceLocation getUsedLocation() const
Retrieve the location where this default argument was actually used.
Expr * getRewrittenExpr()
const DeclContext * getUsedContext() const
bool hasRewrittenInit() const
A use of a default initializer in a constructor or in aggregate initialization.
bool hasRewrittenInit() const
const Expr * getRewrittenExpr() const
Retrieve the initializing expression with evaluated immediate calls, if any.
const DeclContext * getUsedContext() const
FieldDecl * getField()
Get the field whose initializer will be used.
Represents a delete expression for memory deallocation and destructor calls, e.g.
SourceLocation getBeginLoc() const
FunctionDecl * getOperatorDelete() const
bool isGlobalDelete() const
bool doesUsualArrayDeleteWantSize() const
Answers whether the usual array deallocation function for the allocated type expects the size of the ...
bool isArrayFormAsWritten() const
Represents a C++ member access expression where the actual member referenced could not be resolved be...
bool isArrow() const
Determine whether this member expression used the '->' operator; otherwise, it used the '.
SourceLocation getOperatorLoc() const
Retrieve the location of the '->' or '.' operator.
Expr * getBase() const
Retrieve the base object of this member expressions, e.g., the x in x.m.
unsigned getNumTemplateArgs() const
Retrieve the number of template arguments provided as part of this template-id.
QualType getBaseType() const
NestedNameSpecifierLoc getQualifierLoc() const
Retrieve the nested-name-specifier that qualifies the member name, with source location information.
bool isImplicitAccess() const
True if this is an implicit access, i.e.
NamedDecl * getFirstQualifierFoundInScope() const
Retrieve the first part of the nested-name-specifier that was found in the scope of the member access...
A C++ dynamic_cast expression (C++ [expr.dynamic.cast]).
Represents a folding of a pack over an operator.
CXXForRangeStmt - This represents C++0x [stmt.ranged]'s ranged for statement, represented as 'for (ra...
Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr....
SourceLocation getLParenLoc() const
SourceLocation getRParenLoc() const
Represents a call to an inherited base class constructor from an inheriting constructor.
bool constructsVBase() const
Determine whether this constructor is actually constructing a base class (rather than a complete obje...
SourceLocation getLocation() const LLVM_READONLY
CXXConstructorDecl * getConstructor() const
Get the constructor that this expression will call.
bool inheritedFromVBase() const
Determine whether the inherited constructor is inherited from a virtual base of the object we constru...
Represents a call to a member function that may be written either with member call syntax (e....
Abstract class common to all of the C++ "named"/"keyword" casts.
SourceLocation getOperatorLoc() const
Retrieve the location of the cast operator keyword, e.g., static_cast.
SourceRange getAngleBrackets() const LLVM_READONLY
SourceLocation getRParenLoc() const
Retrieve the location of the closing parenthesis.
Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)".
SourceRange getDirectInitRange() const
bool hasInitializer() const
Whether this new-expression has any initializer at all.
bool passAlignment() const
Indicates whether the required alignment should be implicitly passed to the allocation function.
unsigned getNumPlacementArgs() const
TypeSourceInfo * getAllocatedTypeSourceInfo() const
SourceRange getSourceRange() const
SourceRange getTypeIdParens() const
bool isParenTypeId() const
FunctionDecl * getOperatorDelete() const
raw_arg_iterator raw_arg_end()
bool doesUsualArrayDeleteWantSize() const
Answers whether the usual array deallocation function for the allocated type expects the size of the ...
raw_arg_iterator raw_arg_begin()
FunctionDecl * getOperatorNew() const
Represents a C++11 noexcept expression (C++ [expr.unary.noexcept]).
Expr * getOperand() const
SourceRange getSourceRange() const
The null pointer literal (C++11 [lex.nullptr])
SourceLocation getLocation() const
A call to an overloaded operator written using operator syntax.
OverloadedOperatorKind getOperator() const
Returns the kind of overloaded operator that this expression refers to.
Represents a list-initialization with parenthesis.
FieldDecl * getInitializedFieldInUnion()
ArrayRef< Expr * > getUserSpecifiedInitExprs()
ArrayRef< Expr * > getInitExprs()
SourceLocation getEndLoc() const LLVM_READONLY
SourceLocation getInitLoc() const LLVM_READONLY
SourceLocation getBeginLoc() const LLVM_READONLY
Represents a C++ pseudo-destructor (C++ [expr.pseudo]).
bool isArrow() const
Determine whether this pseudo-destructor expression was written using an '->' (otherwise,...
SourceLocation getTildeLoc() const
Retrieve the location of the '~'.
TypeSourceInfo * getScopeTypeInfo() const
Retrieve the scope type in a qualified pseudo-destructor expression.
NestedNameSpecifierLoc getQualifierLoc() const
Retrieves the nested-name-specifier that qualifies the type name, with source-location information.
SourceLocation getDestroyedTypeLoc() const
Retrieve the starting location of the type being destroyed.
const IdentifierInfo * getDestroyedTypeIdentifier() const
In a dependent pseudo-destructor expression for which we do not have full type information on the des...
SourceLocation getColonColonLoc() const
Retrieve the location of the '::' in a qualified pseudo-destructor expression.
SourceLocation getOperatorLoc() const
Retrieve the location of the '.' or '->' operator.
TypeSourceInfo * getDestroyedTypeInfo() const
Retrieve the source location information for the type being destroyed.
A C++ reinterpret_cast expression (C++ [expr.reinterpret.cast]).
A rewritten comparison expression that was originally written using operator syntax.
bool isReversed() const
Determine whether this expression was rewritten in reverse form.
Expr * getSemanticForm()
Get an equivalent semantic form for this expression.
An expression "T()" which creates a value-initialized rvalue of type T, which is a non-class type.
TypeSourceInfo * getTypeSourceInfo() const
SourceLocation getRParenLoc() const
A C++ static_cast expression (C++ [expr.static.cast]).
Implicit construction of a std::initializer_list<T> object from an array temporary within list-initia...
Represents a C++ functional cast expression that builds a temporary object.
TypeSourceInfo * getTypeSourceInfo() const
Represents the this expression in C++.
bool isCapturedByCopyInLambdaWithExplicitObjectParameter() const
SourceLocation getLocation() const
A C++ throw-expression (C++ [except.throw]).
const Expr * getSubExpr() const
SourceLocation getThrowLoc() const
bool isThrownVariableInScope() const
Determines whether the variable thrown by this expression (if any!) is within the innermost try block...
CXXTryStmt - A C++ try block, including all handlers.
A C++ typeid expression (C++ [expr.typeid]), which gets the type_info that corresponds to the supplie...
TypeSourceInfo * getTypeOperandSourceInfo() const
Retrieve source information for the type operand.
bool isTypeOperand() const
SourceRange getSourceRange() const LLVM_READONLY
Expr * getExprOperand() const
Describes an explicit type conversion that uses functional notion but could not be resolved because o...
SourceLocation getLParenLoc() const
Retrieve the location of the left parentheses ('(') that precedes the argument list.
bool isListInitialization() const
Determine whether this expression models list-initialization.
TypeSourceInfo * getTypeSourceInfo() const
Retrieve the type source information for the type being constructed.
SourceLocation getRParenLoc() const
Retrieve the location of the right parentheses (')') that follows the argument list.
unsigned getNumArgs() const
Retrieve the number of arguments.
A Microsoft C++ __uuidof expression, which gets the _GUID that corresponds to the supplied type or ex...
Expr * getExprOperand() const
TypeSourceInfo * getTypeOperandSourceInfo() const
Retrieve source information for the type operand.
MSGuidDecl * getGuidDecl() const
bool isTypeOperand() const
SourceRange getSourceRange() const LLVM_READONLY
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
bool hasStoredFPFeatures() const
ADLCallKind getADLCallKind() const
FPOptionsOverride getFPFeatures() const
unsigned getNumArgs() const
getNumArgs - Return the number of actual arguments to this call.
SourceLocation getRParenLoc() const
This captures a statement into a function.
CaseStmt - Represent a case statement.
CastExpr - Base class for type casts, including both implicit casts (ImplicitCastExpr) and explicit c...
path_iterator path_begin()
unsigned path_size() const
CastKind getCastKind() const
bool hasStoredFPFeatures() const
FPOptionsOverride getFPFeatures() const
SourceLocation getLocation() const
unsigned getValue() const
CharacterLiteralKind getKind() const
ChooseExpr - GNU builtin-in function __builtin_choose_expr.
SourceLocation getBuiltinLoc() const
bool isConditionDependent() const
bool isConditionTrue() const
isConditionTrue - Return whether the condition is true (i.e.
SourceLocation getRParenLoc() const
Represents a 'co_await' expression.
CompoundAssignOperator - For compound assignments (e.g.
QualType getComputationLHSType() const
QualType getComputationResultType() const
CompoundLiteralExpr - [C99 6.5.2.5].
SourceLocation getLParenLoc() const
TypeSourceInfo * getTypeSourceInfo() const
const Expr * getInitializer() const
CompoundStmt - This represents a group of statements like { stmt stmt }.
A reference to a concept and its template args, as it appears in the code.
Represents the specialization of a concept - evaluates to a prvalue of type bool.
ConceptReference * getConceptReference() const
const ASTConstraintSatisfaction & getSatisfaction() const
Get elaborated satisfaction info about the template arguments' satisfaction of the named concept.
const ImplicitConceptSpecializationDecl * getSpecializationDecl() const
ConditionalOperator - The ?: ternary operator.
Expr * getCond() const
getCond - Return the expression representing the condition for the ?: operator.
ConstantExpr - An expression that occurs in a constant context and optionally the result of evaluatin...
ConstantResultStorageKind getResultStorageKind() const
ContinueStmt - This represents a continue.
ConvertVectorExpr - Clang builtin function __builtin_convertvector This AST node provides support for...
SourceLocation getRParenLoc() const
getRParenLoc - Return the location of final right parenthesis.
Expr * getSrcExpr() const
getSrcExpr - Return the Expr to be converted.
SourceLocation getBuiltinLoc() const
getBuiltinLoc - Return the location of the __builtin_convertvector token.
TypeSourceInfo * getTypeSourceInfo() const
getTypeSourceInfo - Return the destination type.
Represents a 'co_return' statement in the C++ Coroutines TS.
Represents the body of a coroutine.
ArrayRef< Stmt const * > getParamMoves() const
Represents an expression that might suspend coroutine execution; either a co_await or co_yield expres...
SourceLocation getKeywordLoc() const
OpaqueValueExpr * getOpaqueValue() const
getOpaqueValue - Return the opaque value placeholder.
Represents a 'co_yield' expression.
A POD class for pairing a NamedDecl* with an access specifier.
A reference to a declared variable, function, enum, etc.
unsigned getNumTemplateArgs() const
Retrieve the number of template arguments provided as part of this template-id.
bool refersToEnclosingVariableOrCapture() const
Does this DeclRefExpr refer to an enclosing local or a captured variable?
bool hasTemplateKWAndArgsInfo() const
bool hasQualifier() const
Determine whether this declaration reference was preceded by a C++ nested-name-specifier,...
NestedNameSpecifierLoc getQualifierLoc() const
If the name was qualified, retrieves the nested-name-specifier that precedes the name,...
NamedDecl * getFoundDecl()
Get the NamedDecl through which this reference occurred.
NonOdrUseReason isNonOdrUse() const
Is this expression a non-odr-use reference, and if so, why?
bool hadMultipleCandidates() const
Returns true if this expression refers to a function that was resolved from an overloaded set having ...
SourceLocation getLocation() const
bool isImmediateEscalating() const
DeclStmt - Adaptor class for mixing declarations with statements and expressions.
Decl - This represents one declaration (or definition), e.g.
AccessSpecifier getAccess() const
NameKind
The kind of the name stored in this DeclarationName.
NameKind getNameKind() const
Determine what kind of name this is.
Represents a 'co_await' expression while the type of the promise is dependent.
SourceLocation getKeywordLoc() const
A qualified reference to a name whose declaration cannot yet be resolved.
NestedNameSpecifierLoc getQualifierLoc() const
Retrieve the nested-name-specifier that qualifies the name, with source location information.
Represents a single C99 designator.
Represents a C99 designated initializer expression.
llvm::MutableArrayRef< Designator > designators()
bool usesGNUSyntax() const
Determines whether this designated initializer used the deprecated GNU syntax for designated initiali...
Expr * getSubExpr(unsigned Idx) const
SourceLocation getEqualOrColonLoc() const
Retrieve the location of the '=' that precedes the initializer value itself, if present.
unsigned getNumSubExprs() const
Retrieve the total number of subexpressions in this designated initializer expression,...
InitListExpr * getUpdater() const
DoStmt - This represents a 'do/while' stmt.
ExplicitCastExpr - An explicit cast written in the source code.
TypeSourceInfo * getTypeInfoAsWritten() const
getTypeInfoAsWritten - Returns the type source info for the type that this expression is casting to.
Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...
bool cleanupsHaveSideEffects() const
unsigned getNumObjects() const
ArrayRef< CleanupObject > getObjects() const
This represents one expression.
bool isValueDependent() const
Determines whether the value of this expression depends on.
ExprValueKind getValueKind() const
getValueKind - The value kind that this expression produces.
ExprObjectKind getObjectKind() const
getObjectKind - The object kind that this expression produces.
SourceLocation getExprLoc() const LLVM_READONLY
getExprLoc - Return the preferred location for the arrow when diagnosing a problem with a generic exp...
ExprDependence getDependence() const
An expression trait intrinsic.
Expr * getQueriedExpression() const
ExpressionTrait getTrait() const
ExtVectorElementExpr - This represents access to specific elements of a vector, and may occur on the ...
const Expr * getBase() const
IdentifierInfo & getAccessor() const
SourceLocation getAccessorLoc() const
storage_type getAsOpaqueInt() const
Represents a member of a struct/union/class.
SourceLocation getLocation() const
Retrieve the location of the literal.
unsigned getScale() const
SourceLocation getLocation() const
llvm::APFloatBase::Semantics getRawSemantics() const
Get a raw enumeration value representing the floating-point semantics of this literal (32-bit IEEE,...
llvm::APFloat getValue() const
ForStmt - This represents a 'for (init;cond;inc)' stmt.
const Expr * getSubExpr() const
Represents a reference to a function parameter pack or init-capture pack that has been substituted bu...
VarDecl * getParameterPack() const
Get the parameter pack which this expression refers to.
VarDecl *const * iterator
Iterators over the parameters which the parameter pack expanded into.
unsigned getNumExpansions() const
Get the number of parameters in this parameter pack.
SourceLocation getParameterPackLocation() const
Get the location of the parameter pack.
This represents a GCC inline-assembly statement extension.
GNUNullExpr - Implements the GNU __null extension, which is a name for a null pointer constant that h...
SourceLocation getTokenLocation() const
getTokenLocation - The location of the __null token.
Represents a C11 generic selection.
unsigned getNumAssocs() const
The number of association expressions.
bool isExprPredicate() const
Whether this generic selection uses an expression as its controlling argument.
SourceLocation getGenericLoc() const
SourceLocation getRParenLoc() const
SourceLocation getDefaultLoc() const
GotoStmt - This represents a direct goto.
IfStmt - This represents an if/then/else.
ImaginaryLiteral - We support imaginary integer and floating point literals, like "1....
const Expr * getSubExpr() const
ImplicitCastExpr - Allows us to explicitly represent implicit type conversions, which have no direct ...
bool isPartOfExplicitCast() const
Represents an implicitly-generated value initialization of an object of a given type.
IndirectGotoStmt - This represents an indirect goto.
Describes an C or C++ initializer list.
FieldDecl * getInitializedFieldInUnion()
If this initializes a union, specifies which field in the union to initialize.
unsigned getNumInits() const
const Expr * getInit(unsigned Init) const
SourceLocation getLBraceLoc() const
bool hadArrayRangeDesignator() const
SourceLocation getRBraceLoc() const
Expr * getArrayFiller()
If this initializer list initializes an array with more elements than there are initializers in the l...
InitListExpr * getSyntacticForm() const
SourceLocation getLocation() const
Retrieve the location of the literal.
LabelStmt - Represents a label, which has a substatement.
A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...
capture_init_iterator capture_init_end()
Retrieve the iterator pointing one past the last initialization argument for this lambda expression.
capture_init_iterator capture_init_begin()
Retrieve the first initialization argument for this lambda expression (which initializes the first ca...
This represents a Microsoft inline-assembly statement extension.
Representation of a Microsoft __if_exists or __if_not_exists statement with a dependent name.
A member reference to an MSPropertyDecl.
NestedNameSpecifierLoc getQualifierLoc() const
MSPropertyDecl * getPropertyDecl() const
Expr * getBaseExpr() const
SourceLocation getMemberLoc() const
MS property subscript expression.
SourceLocation getRBracketLoc() const
Represents a prvalue temporary that is written into memory so that a reference can bind to it.
LifetimeExtendedTemporaryDecl * getLifetimeExtendedTemporaryDecl()
Expr * getSubExpr() const
Retrieve the temporary-generating subexpression whose value will be materialized into a glvalue.
MatrixSubscriptExpr - Matrix subscript expression for the MatrixType extension.
SourceLocation getRBracketLoc() const
MemberExpr - [C99 6.5.2.3] Structure and Union Members.
SourceLocation getMemberLoc() const
getMemberLoc - Return the location of the "member", in X->F, it is the location of 'F'.
SourceLocation getOperatorLoc() const
NestedNameSpecifierLoc getQualifierLoc() const
If the member name was qualified, retrieves the nested-name-specifier that precedes the member name,...
NonOdrUseReason isNonOdrUse() const
Is this expression a non-odr-use reference, and if so, why? This is only meaningful if the named memb...
ValueDecl * getMemberDecl() const
Retrieve the member declaration to which this expression refers.
bool hasQualifier() const
Determines whether this member expression actually had a C++ nested-name-specifier prior to the name ...
unsigned getNumTemplateArgs() const
Retrieve the number of template arguments provided as part of this template-id.
bool hadMultipleCandidates() const
Returns true if this member expression refers to a method that was resolved from an overloaded set ha...
DeclAccessPair getFoundDecl() const
Retrieves the declaration found by lookup.
DeclarationName getDeclName() const
Get the actual, stored name of the declaration, which may be a special name.
Represents a place-holder for an object not to be initialized by anything.
NullStmt - This is the null statement ";": C99 6.8.3p3.
An explicit cast in C or a C-style cast in C++, which uses the syntax ([s1][s2]......
Expr * getBase()
Fetches base expression of array shaping expression.
ArrayRef< SourceRange > getBracketsRanges() const
Fetches source ranges for the brackets os the array shaping expression.
SourceLocation getLParenLoc() const
ArrayRef< Expr * > getDimensions() const
Fetches the dimensions for array shaping expression.
SourceLocation getRParenLoc() const
This represents '#pragma omp atomic' directive.
bool isXLHSInRHSPart() const
Return true if helper update expression has form 'OpaqueValueExpr(x) binop OpaqueValueExpr(expr)' and...
bool isFailOnly() const
Return true if 'v' is updated only when the condition is evaluated false (compare capture only).
bool isPostfixUpdate() const
Return true if 'v' expression must be updated to original value of 'x', false if 'v' must be updated ...
This represents '#pragma omp barrier' directive.
This represents '#pragma omp cancel' directive.
OpenMPDirectiveKind getCancelRegion() const
Get cancellation region for the current cancellation point.
This represents '#pragma omp cancellation point' directive.
OpenMPDirectiveKind getCancelRegion() const
Get cancellation region for the current cancellation point.
Representation of an OpenMP canonical loop.
This represents '#pragma omp critical' directive.
DeclarationNameInfo getDirectiveName() const
Return name of the directive.
This represents '#pragma omp depobj' directive.
This represents '#pragma omp dispatch' directive.
SourceLocation getTargetCallLoc() const
Return location of target-call.
This represents '#pragma omp distribute' directive.
This represents '#pragma omp distribute parallel for' composite directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp distribute parallel for simd' composite directive.
This represents '#pragma omp distribute simd' composite directive.
This represents '#pragma omp error' directive.
This is a basic class for representing single OpenMP executable directive.
SourceLocation getBeginLoc() const
Returns starting location of directive kind.
unsigned getNumClauses() const
Get number of clauses.
OMPChildren * Data
Data, associated with the directive.
OpenMPDirectiveKind getMappedDirective() const
SourceLocation getEndLoc() const
Returns ending location of directive.
This represents '#pragma omp flush' directive.
This represents '#pragma omp for' directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp for simd' directive.
This represents '#pragma omp loop' directive.
This represents '#pragma omp interop' directive.
OpenMP 5.0 [2.1.6 Iterators] Iterators are identifiers that expand to multiple values in the clause o...
SourceLocation getLParenLoc() const
SourceLocation getSecondColonLoc(unsigned I) const
Gets the location of the second ':' (if any) in the range for the given iteratori definition.
SourceLocation getColonLoc(unsigned I) const
Gets the location of the first ':' in the range for the given iterator definition.
SourceLocation getRParenLoc() const
IteratorRange getIteratorRange(unsigned I)
Gets the iterator range for the given iterator.
OMPIteratorHelperData & getHelper(unsigned I)
Fetches helper data for the specified iteration space.
SourceLocation getAssignLoc(unsigned I) const
Gets the location of '=' for the given iterator definition.
SourceLocation getIteratorKwLoc() const
unsigned numOfIterators() const
Returns number of iterator definitions.
Decl * getIteratorDecl(unsigned I)
Gets the iterator declaration for the given iterator.
The base class for all loop-based directives, including loop transformation directives.
unsigned getLoopsNumber() const
Get number of collapsed loops.
This is a common base class for loop directives ('omp simd', 'omp for', 'omp for simd' etc....
This represents '#pragma omp masked' directive.
This represents '#pragma omp masked taskloop' directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp masked taskloop simd' directive.
This represents '#pragma omp master' directive.
This represents '#pragma omp master taskloop' directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp master taskloop simd' directive.
This represents '#pragma omp ordered' directive.
This represents '#pragma omp parallel' directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp parallel for' directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp parallel for simd' directive.
This represents '#pragma omp parallel loop' directive.
This represents '#pragma omp parallel masked' directive.
This represents '#pragma omp parallel masked taskloop' directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp parallel masked taskloop simd' directive.
This represents '#pragma omp parallel master' directive.
This represents '#pragma omp parallel master taskloop' directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp parallel master taskloop simd' directive.
This represents '#pragma omp parallel sections' directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp scan' directive.
This represents '#pragma omp scope' directive.
This represents '#pragma omp section' directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp sections' directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp simd' directive.
This represents '#pragma omp single' directive.
This represents '#pragma omp target data' directive.
This represents '#pragma omp target' directive.
This represents '#pragma omp target enter data' directive.
This represents '#pragma omp target exit data' directive.
This represents '#pragma omp target parallel' directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp target parallel for' directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp target parallel for simd' directive.
This represents '#pragma omp target parallel loop' directive.
This represents '#pragma omp target simd' directive.
This represents '#pragma omp target teams' directive.
This represents '#pragma omp target teams distribute' combined directive.
This represents '#pragma omp target teams distribute parallel for' combined directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp target teams distribute parallel for simd' combined directive.
This represents '#pragma omp target teams distribute simd' combined directive.
This represents '#pragma omp target teams loop' directive.
bool canBeParallelFor() const
Return true if current loop directive's associated loop can be a parallel for.
This represents '#pragma omp target update' directive.
This represents '#pragma omp task' directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp taskloop' directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp taskloop simd' directive.
This represents '#pragma omp taskgroup' directive.
This represents '#pragma omp taskwait' directive.
This represents '#pragma omp taskyield' directive.
This represents '#pragma omp teams' directive.
This represents '#pragma omp teams distribute' directive.
This represents '#pragma omp teams distribute parallel for' composite directive.
bool hasCancel() const
Return true if current directive has inner cancel directive.
This represents '#pragma omp teams distribute parallel for simd' composite directive.
This represents '#pragma omp teams distribute simd' combined directive.
This represents '#pragma omp teams loop' directive.
This represents the '#pragma omp tile' loop transformation directive.
This represents the '#pragma omp unroll' loop transformation directive.
ObjCArrayLiteral - used for objective-c array containers; as in: @["Hello", NSApp,...
ObjCMethodDecl * getArrayWithObjectsMethod() const
unsigned getNumElements() const
getNumElements - Return number of elements of objective-c array literal.
SourceRange getSourceRange() const LLVM_READONLY
Expr * getElement(unsigned Index)
getElement - Return the Element at the specified index.
Represents Objective-C's @catch statement.
Represents Objective-C's @finally statement.
Represents Objective-C's @synchronized statement.
Represents Objective-C's @throw statement.
Represents Objective-C's @try ... @catch ... @finally statement.
Represents Objective-C's @autoreleasepool Statement.
A runtime availability query.
SourceRange getSourceRange() const
VersionTuple getVersion() const
ObjCBoolLiteralExpr - Objective-C Boolean Literal.
SourceLocation getLocation() const
ObjCBoxedExpr - used for generalized expression boxing.
SourceRange getSourceRange() const LLVM_READONLY
ObjCMethodDecl * getBoxingMethod() const
An Objective-C "bridged" cast expression, which casts between Objective-C pointers and C pointers,...
SourceLocation getLParenLoc() const
SourceLocation getBridgeKeywordLoc() const
The location of the bridge keyword.
ObjCBridgeCastKind getBridgeKind() const
Determine which kind of bridge is being performed via this cast.
ObjCDictionaryLiteral - AST node to represent objective-c dictionary literals; as in:"name" : NSUserN...
ObjCMethodDecl * getDictWithObjectsMethod() const
unsigned getNumElements() const
getNumElements - Return number of elements of objective-c dictionary literal.
ObjCDictionaryElement getKeyValueElement(unsigned Index) const
SourceRange getSourceRange() const LLVM_READONLY
ObjCEncodeExpr, used for @encode in Objective-C.
TypeSourceInfo * getEncodedTypeSourceInfo() const
SourceLocation getRParenLoc() const
SourceLocation getAtLoc() const
Represents Objective-C's collection statement.
ObjCIndirectCopyRestoreExpr - Represents the passing of a function argument by indirect copy-restore ...
bool shouldCopy() const
shouldCopy - True if we should do the 'copy' part of the copy-restore.
ObjCIsaExpr - Represent X->isa and X.isa when X is an ObjC 'id' type.
SourceLocation getIsaMemberLoc() const
getMemberLoc - Return the location of the "member", in X->F, it is the location of 'F'.
SourceLocation getOpLoc() const
ObjCIvarRefExpr - A reference to an ObjC instance variable.
SourceLocation getLocation() const
SourceLocation getOpLoc() const
const Expr * getBase() const
An expression that sends a message to the given Objective-C object or class.
bool isDelegateInitCall() const
isDelegateInitCall - Answers whether this message send has been tagged as a "delegate init call",...
SourceLocation getLeftLoc() const
SourceLocation getSuperLoc() const
Retrieve the location of the 'super' keyword for a class or instance message to 'super',...
Selector getSelector() const
Expr * getInstanceReceiver()
Returns the object expression (receiver) for an instance message, or null for a message that is not a...
@ SuperInstance
The receiver is the instance of the superclass object.
@ Instance
The receiver is an object instance.
@ SuperClass
The receiver is a superclass.
@ Class
The receiver is a class.
QualType getSuperType() const
Retrieve the type referred to by 'super'.
const ObjCMethodDecl * getMethodDecl() const
ReceiverKind getReceiverKind() const
Determine the kind of receiver that this message is being sent to.
TypeSourceInfo * getClassReceiverTypeInfo() const
Returns a type-source information of a class message send, or nullptr if the message is not a class m...
SourceLocation getRightLoc() const
unsigned getNumArgs() const
Return the number of actual arguments in this message, not counting the receiver.
ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.
ObjCPropertyDecl * getExplicitProperty() const
const Expr * getBase() const
SourceLocation getReceiverLocation() const
bool isObjectReceiver() const
ObjCInterfaceDecl * getClassReceiver() const
QualType getSuperReceiverType() const
ObjCMethodDecl * getImplicitPropertySetter() const
bool isImplicitProperty() const
SourceLocation getLocation() const
ObjCMethodDecl * getImplicitPropertyGetter() const
bool isSuperReceiver() const
ObjCProtocolExpr used for protocol expression in Objective-C.
ObjCProtocolDecl * getProtocol() const
SourceLocation getRParenLoc() const
SourceLocation getAtLoc() const
ObjCSelectorExpr used for @selector in Objective-C.
SourceLocation getRParenLoc() const
Selector getSelector() const
SourceLocation getAtLoc() const
ObjCStringLiteral, used for Objective-C string literals i.e.
SourceLocation getAtLoc() const
StringLiteral * getString()
ObjCSubscriptRefExpr - used for array and dictionary subscripting.
ObjCMethodDecl * setAtIndexMethodDecl() const
Expr * getBaseExpr() const
Expr * getKeyExpr() const
ObjCMethodDecl * getAtIndexMethodDecl() const
SourceLocation getRBracket() const
OffsetOfExpr - [C99 7.17] - This represents an expression of the form offsetof(record-type,...
SourceLocation getOperatorLoc() const
getOperatorLoc - Return the location of the operator.
TypeSourceInfo * getTypeSourceInfo() const
const OffsetOfNode & getComponent(unsigned Idx) const
unsigned getNumExpressions() const
SourceLocation getRParenLoc() const
Return the location of the right parentheses.
Expr * getIndexExpr(unsigned Idx)
unsigned getNumComponents() const
Helper class for OffsetOfExpr.
unsigned getArrayExprIndex() const
For an array element node, returns the index into the array of expressions.
IdentifierInfo * getFieldName() const
For a field or identifier offsetof node, returns the name of the field.
SourceRange getSourceRange() const LLVM_READONLY
Retrieve the source range that covers this offsetof node.
FieldDecl * getField() const
For a field offsetof node, returns the field.
CXXBaseSpecifier * getBase() const
For a base class node, returns the base specifier.
@ Array
An index into an array.
@ Identifier
A field in a dependent type, known only by its name.
@ Base
An implicit indirection through a C++ base class, when the field found is in a base class.
Kind getKind() const
Determine what kind of offsetof node this is.
OpaqueValueExpr - An expression referring to an opaque object of a fixed type and value class.
Expr * getSourceExpr() const
The source expression of an opaque value expression is the expression which originally generated the ...
SourceLocation getLocation() const
Retrieve the location of this expression.
This is a base class for any OpenACC statement-level constructs that have an associated statement.
This class represents a compute construct, representing a 'Kind' of ‘parallel’, 'serial',...
This is the base class for an OpenACC statement-level construct, other construct types are expected t...
A reference to an overloaded function set, either an UnresolvedLookupExpr or an UnresolvedMemberExpr.
ASTTemplateKWAndArgsInfo * getTrailingASTTemplateKWAndArgsInfo()
Return the optional template keyword and arguments info.
decls_iterator decls_begin() const
unsigned getNumDecls() const
Gets the number of declarations in the unresolved set.
const DeclarationNameInfo & getNameInfo() const
Gets the full name info.
NestedNameSpecifierLoc getQualifierLoc() const
Fetches the nested-name qualifier with source-location information, if one was given.
TemplateArgumentLoc * getTrailingTemplateArgumentLoc()
Return the optional template arguments.
bool hasTemplateKWAndArgsInfo() const
decls_iterator decls_end() const
Represents a C++11 pack expansion that produces a sequence of expressions.
SourceLocation getEllipsisLoc() const
Retrieve the location of the ellipsis that describes this pack expansion.
Expr * getPattern()
Retrieve the pattern of the pack expansion.
SourceLocation getEllipsisLoc() const
Determine the location of the 'sizeof' keyword.
Expr * getPackIdExpression() const
SourceLocation getRSquareLoc() const
Determine the location of the right parenthesis.
ArrayRef< Expr * > getExpressions() const
Return the trailing expressions, regardless of the expansion.
Expr * getIndexExpr() const
ParenExpr - This represents a parethesized expression, e.g.
SourceLocation getLParen() const
Get the location of the left parentheses '('.
const Expr * getSubExpr() const
SourceLocation getRParen() const
Get the location of the right parentheses ')'.
unsigned getNumExprs() const
Return the number of expressions in this paren list.
SourceLocation getLParenLoc() const
SourceLocation getRParenLoc() const
ArrayRef< Expr * > exprs()
Represents a parameter to a function.
[C99 6.4.2.2] - A predefined identifier such as func.
bool isTransparent() const
PredefinedIdentKind getIdentKind() const
SourceLocation getLocation() const
StringLiteral * getFunctionName()
PseudoObjectExpr - An expression which accesses a pseudo-object l-value.
semantics_iterator semantics_end()
unsigned getResultExprIndex() const
Return the index of the result-bearing expression into the semantics expressions, or PseudoObjectExpr...
Expr * getSyntacticForm()
Return the syntactic form of this expression, i.e.
semantics_iterator semantics_begin()
Expr *const * semantics_iterator
unsigned getNumSemanticExprs() const
Frontend produces RecoveryExprs on semantic errors that prevent creating other well-formed expression...
SourceLocation getEndLoc() const
SourceLocation getBeginLoc() const
C++2a [expr.prim.req]: A requires-expression provides a concise way to express requirements on templa...
SourceLocation getLParenLoc() const
SourceLocation getRParenLoc() const
SourceLocation getEndLoc() const LLVM_READONLY
RequiresExprBodyDecl * getBody() const
ArrayRef< concepts::Requirement * > getRequirements() const
ArrayRef< ParmVarDecl * > getLocalParameters() const
ReturnStmt - This represents a return, optionally of an expression: return; return 4;.
Represents a __leave statement.
Represents a __builtin_base_type expression.
QualType getSourceType() const
const Expr * getIndex() const
SourceLocation getLocation() const
Represents a __builtin_field_type expression.
QualType getSourceType() const
SourceLocation getLocation() const
const Expr * getIndex() const
Represents a __builtin_num_bases expression.
SourceLocation getLocation() const
QualType getSourceType() const
Represents a __builtin_num_fields expression.
QualType getSourceType() const
SourceLocation getLocation() const
SourceLocation getLocation() const
SourceLocation getLParenLocation() const
SourceLocation getRParenLocation() const
TypeSourceInfo * getTypeSourceInfo()
SourceLocation getLocation() const
SourceLocation getLParenLocation() const
SourceLocation getRParenLocation() const
ShuffleVectorExpr - clang-specific builtin-in function __builtin_shufflevector.
SourceLocation getBuiltinLoc() const
unsigned getNumSubExprs() const
getNumSubExprs - Return the size of the SubExprs array.
SourceLocation getRParenLoc() const
Expr * getExpr(unsigned Index)
getExpr - Return the Expr at the specified index.
Represents an expression that computes the length of a parameter pack.
ArrayRef< TemplateArgument > getPartialArguments() const
Get.
bool isPartiallySubstituted() const
Determine whether this represents a partially-substituted sizeof...
unsigned getPackLength() const
Retrieve the length of the parameter pack.
Represents a function call to one of __builtin_LINE(), __builtin_COLUMN(), __builtin_FUNCTION(),...
const DeclContext * getParentContext() const
If the SourceLocExpr has been resolved return the subexpression representing the resolved value.
SourceLocation getBeginLoc() const
SourceLocation getEndLoc() const
SourceLocIdentKind getIdentKind() const
Encodes a location in the source.
A trivial tuple used to represent a source range.
SourceLocation getEnd() const
SourceLocation getBegin() const
StmtExpr - This is the GNU Statement Expression extension: ({int X=4; X;}).
CompoundStmt * getSubStmt()
unsigned getTemplateDepth() const
SourceLocation getRParenLoc() const
SourceLocation getLParenLoc() const
StmtVisitor - This class implements a simple visitor for Stmt subclasses.
Stmt - This represents one statement.
LambdaExprBitfields LambdaExprBits
StmtClass getStmtClass() const
SourceRange getSourceRange() const LLVM_READONLY
SourceLocation tokens are not useful in isolation - they are low level value objects created/interpre...
TypeTraitExprBitfields TypeTraitExprBits
CXXNewExprBitfields CXXNewExprBits
ConstantExprBitfields ConstantExprBits
RequiresExprBitfields RequiresExprBits
DependentScopeDeclRefExprBitfields DependentScopeDeclRefExprBits
StringLiteral - This represents a string literal expression, e.g.
SourceLocation getStrTokenLoc(unsigned TokNum) const
Get one of the string literal token.
unsigned getLength() const
StringLiteralKind getKind() const
StringRef getBytes() const
Allow access to clients that need the byte representation, such as ASTWriterStmt::VisitStringLiteral(...
unsigned getByteLength() const
unsigned getNumConcatenated() const
getNumConcatenated - Get the number of string literal tokens that were concatenated in translation ph...
unsigned getCharByteWidth() const
Represents a reference to a non-type template parameter that has been substituted with a template arg...
std::optional< unsigned > getPackIndex() const
bool isReferenceParameter() const
unsigned getIndex() const
Returns the index of the replaced parameter in the associated declaration.
Decl * getAssociatedDecl() const
A template-like entity which owns the whole pattern being substituted.
SourceLocation getNameLoc() const
Expr * getReplacement() const
Represents a reference to a non-type template parameter pack that has been substituted with a non-tem...
Decl * getAssociatedDecl() const
A template-like entity which owns the whole pattern being substituted.
TemplateArgument getArgumentPack() const
Retrieve the template argument pack containing the substituted template arguments.
SourceLocation getParameterPackLocation() const
Retrieve the location of the parameter pack name.
unsigned getIndex() const
Returns the index of the replaced parameter in the associated declaration.
SwitchStmt - This represents a 'switch' stmt.
Location wrapper for a TemplateArgument.
A container of type source information.
A type trait used in the implementation of various C++11 and Library TR1 trait templates.
unsigned getNumArgs() const
Determine the number of arguments to this type trait.
TypeSourceInfo * getArg(unsigned I) const
Retrieve the Ith argument.
TypoExpr - Internal placeholder for expressions where typo correction still needs to be performed and...
UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand.
SourceLocation getRParenLoc() const
SourceLocation getOperatorLoc() const
TypeSourceInfo * getArgumentTypeInfo() const
bool isArgumentType() const
UnaryExprOrTypeTrait getKind() const
UnaryOperator - This represents the unary-expression's (except sizeof and alignof),...
SourceLocation getOperatorLoc() const
getOperatorLoc - Return the location of the operator.
bool hasStoredFPFeatures() const
Is FPFeatures in Trailing Storage?
Expr * getSubExpr() const
FPOptionsOverride getStoredFPFeatures() const
Get FPFeatures from trailing storage.
bool canOverflow() const
Returns true if the unary operator can cause an overflow.
A reference to a name which we were able to look up during parsing but could not resolve to a specifi...
bool requiresADL() const
True if this declaration should be extended by argument-dependent lookup.
CXXRecordDecl * getNamingClass()
Gets the 'naming class' (in the sense of C++0x [class.access.base]p5) of the lookup.
Represents a C++ member access expression for which lookup produced a set of overloaded functions.
QualType getBaseType() const
bool isArrow() const
Determine whether this member expression used the '->' operator; otherwise, it used the '.
SourceLocation getOperatorLoc() const
Retrieve the location of the '->' or '.' operator.
bool hasUnresolvedUsing() const
Determine whether the lookup results contain an unresolved using declaration.
Expr * getBase()
Retrieve the base object of this member expressions, e.g., the x in x.m.
bool isImplicitAccess() const
True if this is an implicit access, i.e., one in which the member being accessed was not written in t...
The iterator over UnresolvedSets.
A call to a literal operator (C++11 [over.literal]) written as a user-defined literal (C++11 [lit....
Represents a call to the builtin function __builtin_va_arg.
SourceLocation getBuiltinLoc() const
SourceLocation getRParenLoc() const
bool isMicrosoftABI() const
Returns whether this is really a Win64 ABI va_arg expression.
TypeSourceInfo * getWrittenTypeInfo() const
const Expr * getSubExpr() const
WhileStmt - This represents a 'while' stmt.
@ SS_ConstraintsNotSatisfied
A static requirement that can be used in a requires-expression to check properties of types and expre...
StmtCode
Record codes for each kind of statement or expression.
@ STMT_OMP_SECTION_DIRECTIVE
@ EXPR_DESIGNATED_INIT
A DesignatedInitExpr record.
@ EXPR_COMPOUND_LITERAL
A CompoundLiteralExpr record.
@ STMT_OMP_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE
@ EXPR_OBJC_IVAR_REF_EXPR
An ObjCIvarRefExpr record.
@ STMT_OMP_SCOPE_DIRECTIVE
@ STMT_OMP_PARALLEL_FOR_SIMD_DIRECTIVE
@ EXPR_MEMBER
A MemberExpr record.
@ STMT_OMP_TARGET_TEAMS_DIRECTIVE
@ EXPR_CXX_TEMPORARY_OBJECT
A CXXTemporaryObjectExpr record.
@ EXPR_CXX_UNRESOLVED_LOOKUP
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE
@ EXPR_COMPOUND_ASSIGN_OPERATOR
A CompoundAssignOperator record.
@ EXPR_EXPR_WITH_CLEANUPS
@ EXPR_CXX_STATIC_CAST
A CXXStaticCastExpr record.
@ STMT_OMP_META_DIRECTIVE
@ EXPR_OBJC_STRING_LITERAL
An ObjCStringLiteral record.
@ EXPR_CXX_PROPERTY_REF_EXPR
@ EXPR_SYCL_UNIQUE_STABLE_NAME
@ STMT_OMP_TARGET_DATA_DIRECTIVE
@ STMT_OMP_BARRIER_DIRECTIVE
@ EXPR_VA_ARG
A VAArgExpr record.
@ STMT_OMP_TEAMS_DISTRIBUTE_SIMD_DIRECTIVE
@ EXPR_OBJC_ISA
An ObjCIsa Expr record.
@ STMT_OMP_SINGLE_DIRECTIVE
@ EXPR_CXX_OPERATOR_CALL
A CXXOperatorCallExpr record.
@ STMT_OBJC_AT_TRY
An ObjCAtTryStmt record.
@ STMT_OMP_TARGET_EXIT_DATA_DIRECTIVE
@ EXPR_CXX_UNRESOLVED_CONSTRUCT
@ EXPR_FIXEDPOINT_LITERAL
@ STMT_DO
A DoStmt record.
@ STMT_OBJC_CATCH
An ObjCAtCatchStmt record.
@ STMT_OMP_TARGET_DIRECTIVE
@ STMT_IF
An IfStmt record.
@ EXPR_CXX_EXPRESSION_TRAIT
@ EXPR_STRING_LITERAL
A StringLiteral record.
@ EXPR_OBJC_AVAILABILITY_CHECK
An ObjCAvailabilityCheckExpr record.
@ STMT_OMP_PARALLEL_MASKED_TASKLOOP_DIRECTIVE
@ EXPR_PSEUDO_OBJECT
A PseudoObjectExpr record.
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE
@ EXPR_IMPLICIT_CAST
An ImplicitCastExpr record.
@ STMT_OMP_FLUSH_DIRECTIVE
@ STMT_CAPTURED
A CapturedStmt record.
@ STMT_OMP_TARGET_PARALLEL_FOR_SIMD_DIRECTIVE
@ STMT_OMP_MASTER_TASKLOOP_DIRECTIVE
@ STMT_OMP_TILE_DIRECTIVE
@ STMT_OMP_CANCELLATION_POINT_DIRECTIVE
@ STMT_GCCASM
A GCC-style AsmStmt record.
@ EXPR_IMAGINARY_LITERAL
An ImaginaryLiteral record.
@ STMT_WHILE
A WhileStmt record.
@ EXPR_CONVERT_VECTOR
A ConvertVectorExpr record.
@ EXPR_OBJC_SUBSCRIPT_REF_EXPR
An ObjCSubscriptRefExpr record.
@ STMT_OPENACC_COMPUTE_CONSTRUCT
@ STMT_OMP_TASKWAIT_DIRECTIVE
@ STMT_OMP_TASKYIELD_DIRECTIVE
@ EXPR_SYCL_BUILTIN_NUM_FIELDS
@ EXPR_STMT
A StmtExpr record.
@ STMT_OMP_PARALLEL_GENERIC_LOOP_DIRECTIVE
@ EXPR_CXX_REINTERPRET_CAST
A CXXReinterpretCastExpr record.
@ EXPR_DESIGNATED_INIT_UPDATE
A DesignatedInitUpdateExpr record.
@ STMT_OBJC_AT_SYNCHRONIZED
An ObjCAtSynchronizedStmt record.
@ STMT_OMP_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE
@ STMT_OMP_TASKLOOP_SIMD_DIRECTIVE
@ STMT_MS_DEPENDENT_EXISTS
@ EXPR_BUILTIN_BIT_CAST
A BuiltinBitCastExpr record.
@ EXPR_CXX_PROPERTY_SUBSCRIPT_EXPR
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD_DIRECTIVE
@ EXPR_CXX_PSEUDO_DESTRUCTOR
@ STMT_OMP_MASKED_DIRECTIVE
@ STMT_OMP_TARGET_ENTER_DATA_DIRECTIVE
@ EXPR_CHARACTER_LITERAL
A CharacterLiteral record.
@ EXPR_OBJC_ENCODE
An ObjCEncodeExpr record.
@ STMT_OMP_PARALLEL_SECTIONS_DIRECTIVE
@ STMT_OMP_PARALLEL_FOR_DIRECTIVE
@ EXPR_CSTYLE_CAST
A CStyleCastExpr record.
@ STMT_OMP_PARALLEL_DIRECTIVE
@ EXPR_OBJC_BOXED_EXPRESSION
@ EXPR_OBJC_BOOL_LITERAL
An ObjCBoolLiteralExpr record.
@ EXPR_CXX_BIND_TEMPORARY
@ EXPR_SYCL_BUILTIN_BASE_TYPE
@ STMT_OMP_ATOMIC_DIRECTIVE
@ STMT_OMP_ORDERED_DIRECTIVE
@ EXPR_EXT_VECTOR_ELEMENT
An ExtVectorElementExpr record.
@ STMT_OMP_TEAMS_GENERIC_LOOP_DIRECTIVE
@ STMT_OMP_CRITICAL_DIRECTIVE
@ EXPR_ATOMIC
An AtomicExpr record.
@ STMT_OMP_CANCEL_DIRECTIVE
@ EXPR_OFFSETOF
An OffsetOfExpr record.
@ STMT_RETURN
A ReturnStmt record.
@ STMT_OBJC_FOR_COLLECTION
An ObjCForCollectionStmt record.
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_DIRECTIVE
@ EXPR_ARRAY_INIT_LOOP
An ArrayInitLoopExpr record.
@ STMT_OMP_PARALLEL_MASTER_TASKLOOP_DIRECTIVE
@ STMT_OMP_PARALLEL_MASKED_TASKLOOP_SIMD_DIRECTIVE
@ STMT_CONTINUE
A ContinueStmt record.
@ EXPR_PREDEFINED
A PredefinedExpr record.
@ STMT_OMP_DEPOBJ_DIRECTIVE
@ EXPR_CXX_BOOL_LITERAL
A CXXBoolLiteralExpr record.
@ EXPR_PAREN_LIST
A ParenListExpr record.
@ EXPR_CXX_PAREN_LIST_INIT
A CXXParenListInitExpr record.
@ STMT_OMP_DISPATCH_DIRECTIVE
@ STMT_OMP_MASTER_TASKLOOP_SIMD_DIRECTIVE
@ STMT_OMP_TASKLOOP_DIRECTIVE
@ STMT_COMPOUND
A CompoundStmt record.
@ STMT_OMP_CANONICAL_LOOP
@ STMT_FOR
A ForStmt record.
@ STMT_ATTRIBUTED
An AttributedStmt record.
@ STMT_OMP_PARALLEL_MASTER_DIRECTIVE
@ STMT_OMP_TARGET_TEAMS_GENERIC_LOOP_DIRECTIVE
@ STMT_OMP_TEAMS_DIRECTIVE
@ STMT_OMP_TARGET_PARALLEL_DIRECTIVE
@ EXPR_CXX_REWRITTEN_BINARY_OPERATOR
A CXXRewrittenBinaryOperator record.
@ STMT_GOTO
A GotoStmt record.
@ EXPR_NO_INIT
An NoInitExpr record.
@ EXPR_OBJC_ARRAY_LITERAL
@ STMT_OMP_ERROR_DIRECTIVE
@ EXPR_OBJC_PROTOCOL_EXPR
An ObjCProtocolExpr record.
@ STMT_OMP_GENERIC_LOOP_DIRECTIVE
@ EXPR_ARRAY_INIT_INDEX
An ArrayInitIndexExpr record.
@ STMT_OMP_TASK_DIRECTIVE
@ EXPR_CXX_CONSTRUCT
A CXXConstructExpr record.
@ STMT_OMP_PARALLEL_MASKED_DIRECTIVE
@ STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE
@ STMT_OMP_PARALLEL_MASTER_TASKLOOP_SIMD_DIRECTIVE
@ EXPR_OBJC_DICTIONARY_LITERAL
@ EXPR_SYCL_BUILTIN_NUM_BASES
@ STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE
@ EXPR_CXX_DYNAMIC_CAST
A CXXDynamicCastExpr record.
@ STMT_CXX_TRY
A CXXTryStmt record.
@ EXPR_GENERIC_SELECTION
A GenericSelectionExpr record.
@ STMT_OMP_TARGET_SIMD_DIRECTIVE
@ EXPR_OBJC_INDIRECT_COPY_RESTORE
An ObjCIndirectCopyRestoreExpr record.
@ EXPR_CXX_INHERITED_CTOR_INIT
A CXXInheritedCtorInitExpr record.
@ EXPR_CALL
A CallExpr record.
@ EXPR_GNU_NULL
A GNUNullExpr record.
@ EXPR_BINARY_CONDITIONAL_OPERATOR
@ EXPR_OBJC_PROPERTY_REF_EXPR
An ObjCPropertyRefExpr record.
@ STMT_OMP_TARGET_PARALLEL_FOR_DIRECTIVE
@ STMT_OMP_FOR_SIMD_DIRECTIVE
@ STMT_OMP_MASKED_TASKLOOP_DIRECTIVE
@ EXPR_CXX_CONST_CAST
A CXXConstCastExpr record.
@ STMT_OMP_SCAN_DIRECTIVE
@ STMT_REF_PTR
A reference to a previously [de]serialized Stmt record.
@ EXPR_OBJC_MESSAGE_EXPR
An ObjCMessageExpr record.
@ EXPR_CXX_DEPENDENT_SCOPE_DECL_REF
@ EXPR_SYCL_BUILTIN_FIELD_TYPE
@ STMT_OMP_TEAMS_DISTRIBUTE_DIRECTIVE
@ STMT_CASE
A CaseStmt record.
@ EXPR_CONSTANT
A constant expression context.
@ EXPR_FUNCTION_PARM_PACK
@ STMT_STOP
A marker record that indicates that we are at the end of an expression.
@ EXPR_CXX_NULL_PTR_LITERAL
@ STMT_OMP_TARGET_UPDATE_DIRECTIVE
@ STMT_MSASM
A MS-style AsmStmt record.
@ STMT_OMP_DISTRIBUTE_DIRECTIVE
@ EXPR_CONDITIONAL_OPERATOR
A ConditionOperator record.
@ EXPR_BINARY_OPERATOR
A BinaryOperator record.
@ EXPR_CXX_STD_INITIALIZER_LIST
A CXXStdInitializerListExpr record.
@ STMT_OMP_TASKGROUP_DIRECTIVE
@ EXPR_SHUFFLE_VECTOR
A ShuffleVectorExpr record.
@ STMT_OBJC_FINALLY
An ObjCAtFinallyStmt record.
@ EXPR_OBJC_SELECTOR_EXPR
An ObjCSelectorExpr record.
@ EXPR_FLOATING_LITERAL
A FloatingLiteral record.
@ STMT_OMP_MASTER_DIRECTIVE
@ EXPR_CXX_DEPENDENT_SCOPE_MEMBER
@ STMT_NULL_PTR
A NULL expression.
@ STMT_DEFAULT
A DefaultStmt record.
@ EXPR_CHOOSE
A ChooseExpr record.
@ STMT_OMP_UNROLL_DIRECTIVE
@ STMT_NULL
A NullStmt record.
@ STMT_OMP_SIMD_DIRECTIVE
@ EXPR_DECL_REF
A DeclRefExpr record.
@ EXPR_SUBST_NON_TYPE_TEMPLATE_PARM
@ EXPR_INIT_LIST
An InitListExpr record.
@ EXPR_IMPLICIT_VALUE_INIT
An ImplicitValueInitExpr record.
@ STMT_OBJC_AUTORELEASE_POOL
An ObjCAutoreleasePoolStmt record.
@ EXPR_RECOVERY
A RecoveryExpr record.
@ EXPR_PAREN
A ParenExpr record.
@ STMT_OMP_TARGET_PARALLEL_GENERIC_LOOP_DIRECTIVE
@ STMT_LABEL
A LabelStmt record.
@ EXPR_CXX_FUNCTIONAL_CAST
A CXXFunctionalCastExpr record.
@ EXPR_USER_DEFINED_LITERAL
A UserDefinedLiteral record.
@ EXPR_INTEGER_LITERAL
An IntegerLiteral record.
@ EXPR_SOURCE_LOC
A SourceLocExpr record.
@ EXPR_MATERIALIZE_TEMPORARY
@ EXPR_CXX_MEMBER_CALL
A CXXMemberCallExpr record.
@ STMT_OMP_INTEROP_DIRECTIVE
@ STMT_SWITCH
A SwitchStmt record.
@ STMT_DECL
A DeclStmt record.
@ EXPR_CXX_UNRESOLVED_MEMBER
@ EXPR_SYCL_UNIQUE_STABLE_ID
@ STMT_OMP_SECTIONS_DIRECTIVE
@ EXPR_SUBST_NON_TYPE_TEMPLATE_PARM_PACK
@ EXPR_CXX_SCALAR_VALUE_INIT
@ STMT_OMP_MASKED_TASKLOOP_SIMD_DIRECTIVE
@ STMT_OMP_DISTRIBUTE_SIMD_DIRECTIVE
@ EXPR_SIZEOF_ALIGN_OF
A SizefAlignOfExpr record.
@ STMT_BREAK
A BreakStmt record.
@ STMT_OBJC_AT_THROW
An ObjCAtThrowStmt record.
@ EXPR_ADDR_LABEL
An AddrLabelExpr record.
@ STMT_CXX_FOR_RANGE
A CXXForRangeStmt record.
@ EXPR_CXX_ADDRSPACE_CAST
A CXXAddrspaceCastExpr record.
@ EXPR_ARRAY_SUBSCRIPT
An ArraySubscriptExpr record.
@ EXPR_CONCEPT_SPECIALIZATION
@ EXPR_UNARY_OPERATOR
A UnaryOperator record.
@ STMT_CXX_CATCH
A CXXCatchStmt record.
@ STMT_INDIRECT_GOTO
An IndirectGotoStmt record.
@ DESIG_ARRAY_RANGE
GNU array range designator.
@ DESIG_FIELD_NAME
Field designator where only the field name is known.
@ DESIG_FIELD_DECL
Field designator where the field has been resolved to a declaration.
@ DESIG_ARRAY
Array designator.
The JSON file list parser is used to communicate input to InstallAPI.
@ OK_Ordinary
An ordinary object is located at an address in memory.
@ VK_PRValue
A pr-value expression (in the C++11 taxonomy) produces a temporary value.
float __ovld __cnfn distance(float, float)
Returns the distance between p0 and p1.
The result of a constraint satisfaction check, containing the necessary information to diagnose an un...
Represents an explicit template argument list in C++, e.g., the "<int>" in "sort<int>".
SourceLocation LAngleLoc
The source location of the left angle bracket ('<').
unsigned NumTemplateArgs
The number of template arguments in TemplateArgs.
SourceLocation RAngleLoc
The source location of the right angle bracket ('>').
SourceLocation TemplateKWLoc
The source location of the template keyword; this is used as part of the representation of qualified ...
Iterator range representation begin:end[:step].
Helper expressions and declaration for OMPIteratorExpr class for each iteration space.
Expr * CounterUpdate
Updater for the internal counter: ++CounterVD;.
Expr * Upper
Normalized upper bound.
Expr * Update
Update expression for the originally specified iteration variable, calculated as VD = Begin + Counter...
VarDecl * CounterVD
Internal normalized counter.
An element in an Objective-C dictionary literal.
Iterator for iterating over Stmt * arrays that contain only T *.
StringRef SubstitutedEntity