52#include "llvm/ADT/DenseMap.h"
53#include "llvm/ADT/SmallVector.h"
54#include "llvm/ADT/StringRef.h"
55#include "llvm/Bitstream/BitstreamReader.h"
56#include "llvm/Support/ErrorHandling.h"
70 llvm::BitstreamCursor &DeclsCursor;
72 std::optional<BitsUnpacker> CurrentUnpackingBits;
75 return Record.readSourceLocation();
79 return Record.readSourceRange();
82 std::string readString() {
83 return Record.readString();
87 return Record.readTypeSourceInfo();
91 return Record.readDecl();
96 return Record.readDeclAs<
T>();
101 : Record(Record), DeclsCursor(Cursor) {}
117 unsigned NumTemplateArgs);
120#define STMT(Type, Base) \
121 void Visit##Type(Type *);
122#include "clang/AST/StmtNodes.inc"
129 unsigned NumTemplateArgs) {
134 for (
unsigned i = 0; i != NumTemplateArgs; ++i)
135 ArgInfo.
addArgument(Record.readTemplateArgumentLoc());
140 assert(Record.getIdx() ==
NumStmtFields &&
"Incorrect statement field count");
143void ASTStmtReader::VisitNullStmt(
NullStmt *S) {
152 unsigned NumStmts =
Record.readInt();
153 unsigned HasFPFeatures =
Record.readInt();
156 Stmts.push_back(
Record.readSubStmt());
159 S->setStoredFPFeatures(
161 S->LBraceLoc = readSourceLocation();
162 S->RBraceLoc = readSourceLocation();
165void ASTStmtReader::VisitSwitchCase(
SwitchCase *S) {
167 Record.recordSwitchCaseID(S, Record.readInt());
172void ASTStmtReader::VisitCaseStmt(
CaseStmt *S) {
174 bool CaseStmtIsGNURange = Record.readInt();
175 S->
setLHS(Record.readSubExpr());
177 if (CaseStmtIsGNURange) {
178 S->
setRHS(Record.readSubExpr());
183void ASTStmtReader::VisitDefaultStmt(
DefaultStmt *S) {
188void ASTStmtReader::VisitLabelStmt(
LabelStmt *S) {
190 bool IsSideEntry = Record.readInt();
191 auto *LD = readDeclAs<LabelDecl>();
204 uint64_t NumAttrs = Record.readInt();
206 Record.readAttributes(Attrs);
209 assert(NumAttrs == Attrs.size());
210 std::copy(Attrs.begin(), Attrs.end(), S->getAttrArrayPtr());
211 S->SubStmt = Record.readSubStmt();
215void ASTStmtReader::VisitIfStmt(
IfStmt *S) {
218 CurrentUnpackingBits.emplace(Record.readInt());
220 bool HasElse = CurrentUnpackingBits->getNextBit();
221 bool HasVar = CurrentUnpackingBits->getNextBit();
222 bool HasInit = CurrentUnpackingBits->getNextBit();
225 S->
setCond(Record.readSubExpr());
226 S->
setThen(Record.readSubStmt());
228 S->
setElse(Record.readSubStmt());
232 S->
setInit(Record.readSubStmt());
241void ASTStmtReader::VisitSwitchStmt(
SwitchStmt *S) {
244 bool HasInit = Record.readInt();
245 bool HasVar = Record.readInt();
246 bool AllEnumCasesCovered = Record.readInt();
247 if (AllEnumCasesCovered)
250 S->
setCond(Record.readSubExpr());
251 S->
setBody(Record.readSubStmt());
253 S->
setInit(Record.readSubStmt());
261 SwitchCase *PrevSC =
nullptr;
262 for (
auto E = Record.size(); Record.getIdx() != E; ) {
263 SwitchCase *SC = Record.getSwitchCaseWithID(Record.readInt());
273void ASTStmtReader::VisitWhileStmt(
WhileStmt *S) {
276 bool HasVar = Record.readInt();
278 S->
setCond(Record.readSubExpr());
279 S->
setBody(Record.readSubStmt());
288void ASTStmtReader::VisitDoStmt(
DoStmt *S) {
290 S->
setCond(Record.readSubExpr());
291 S->
setBody(Record.readSubStmt());
297void ASTStmtReader::VisitForStmt(
ForStmt *S) {
299 S->
setInit(Record.readSubStmt());
300 S->
setCond(Record.readSubExpr());
302 S->
setInc(Record.readSubExpr());
303 S->
setBody(Record.readSubStmt());
309void ASTStmtReader::VisitGotoStmt(
GotoStmt *S) {
311 S->
setLabel(readDeclAs<LabelDecl>());
326 if (Record.readBool()) {
333 VisitLoopControlStmt(S);
336void ASTStmtReader::VisitBreakStmt(
BreakStmt *S) { VisitLoopControlStmt(S); }
338void ASTStmtReader::VisitDeferStmt(
DeferStmt *S) {
341 S->
setBody(Record.readSubStmt());
344void ASTStmtReader::VisitReturnStmt(
ReturnStmt *S) {
347 bool HasNRVOCandidate = Record.readInt();
350 if (HasNRVOCandidate)
356void ASTStmtReader::VisitDeclStmt(
DeclStmt *S) {
361 if (Record.size() - Record.getIdx() == 1) {
365 SmallVector<Decl *, 16> Decls;
366 int N = Record.size() - Record.getIdx();
368 for (
int I = 0; I < N; ++I)
369 Decls.push_back(readDecl());
376void ASTStmtReader::VisitAsmStmt(
AsmStmt *S) {
386void ASTStmtReader::VisitGCCAsmStmt(
GCCAsmStmt *S) {
388 S->NumLabels = Record.readInt();
398 SmallVector<IdentifierInfo *, 16> Names;
399 SmallVector<Expr *, 16> Constraints;
400 SmallVector<Stmt*, 16> Exprs;
401 for (
unsigned I = 0, N = NumOutputs + NumInputs; I != N; ++I) {
402 Names.push_back(Record.readIdentifier());
403 Constraints.push_back(cast_or_null<Expr>(Record.readSubStmt()));
404 Exprs.push_back(Record.readSubStmt());
408 SmallVector<Expr *, 16> Clobbers;
409 for (
unsigned I = 0; I != NumClobbers; ++I)
410 Clobbers.push_back(cast_or_null<Expr>(Record.readSubStmt()));
413 for (
unsigned I = 0, N = NumLabels; I != N; ++I) {
414 Names.push_back(Record.readIdentifier());
415 Exprs.push_back(Record.readSubStmt());
418 S->setOutputsAndInputsAndClobbers(Record.getContext(),
419 Names.data(), Constraints.data(),
420 Exprs.data(), NumOutputs, NumInputs,
422 Clobbers.data(), NumClobbers);
425void ASTStmtReader::VisitMSAsmStmt(
MSAsmStmt *S) {
427 S->LBraceLoc = readSourceLocation();
428 S->EndLoc = readSourceLocation();
429 S->NumAsmToks = Record.readInt();
430 std::string AsmStr = readString();
433 SmallVector<Token, 16> AsmToks;
434 AsmToks.reserve(S->NumAsmToks);
435 for (
unsigned i = 0, e = S->NumAsmToks; i != e; ++i) {
436 AsmToks.push_back(Record.readToken());
443 SmallVector<std::string, 16> ClobbersData;
444 SmallVector<StringRef, 16> Clobbers;
447 for (
unsigned i = 0, e = S->
NumClobbers; i != e; ++i) {
448 ClobbersData.push_back(readString());
449 Clobbers.push_back(ClobbersData.back());
454 SmallVector<Expr*, 16> Exprs;
455 SmallVector<std::string, 16> ConstraintsData;
456 SmallVector<StringRef, 16> Constraints;
457 Exprs.reserve(NumOperands);
458 ConstraintsData.reserve(NumOperands);
459 Constraints.reserve(NumOperands);
460 for (
unsigned i = 0; i != NumOperands; ++i) {
461 Exprs.push_back(
cast<Expr>(Record.readSubStmt()));
462 ConstraintsData.push_back(readString());
463 Constraints.push_back(ConstraintsData.back());
466 S->initialize(Record.getContext(), AsmStr, AsmToks,
467 Constraints, Exprs, Clobbers);
472 assert(Record.peekInt() == S->NumParams);
474 auto *StoredStmts = S->getStoredStmts();
476 i < CoroutineBodyStmt::SubStmt::FirstParamMove + S->NumParams; ++i)
477 StoredStmts[i] = Record.readSubStmt();
482 S->CoreturnLoc = Record.readSourceLocation();
483 for (
auto &SubStmt: S->SubStmts)
484 SubStmt = Record.readSubStmt();
485 S->IsImplicit = Record.readInt() != 0;
488void ASTStmtReader::VisitCoawaitExpr(
CoawaitExpr *E) {
490 E->KeywordLoc = readSourceLocation();
491 for (
auto &SubExpr: E->SubExprs)
492 SubExpr = Record.readSubStmt();
493 E->OpaqueValue = cast_or_null<OpaqueValueExpr>(Record.readSubStmt());
497void ASTStmtReader::VisitCoyieldExpr(
CoyieldExpr *E) {
499 E->KeywordLoc = readSourceLocation();
500 for (
auto &SubExpr: E->SubExprs)
501 SubExpr = Record.readSubStmt();
502 E->OpaqueValue = cast_or_null<OpaqueValueExpr>(Record.readSubStmt());
507 E->KeywordLoc = readSourceLocation();
508 for (
auto &SubExpr: E->SubExprs)
509 SubExpr = Record.readSubStmt();
523 *I = Record.readSubExpr();
526 S->setCapturedStmt(Record.readSubStmt());
531 I.VarAndKind.setPointer(readDeclAs<VarDecl>());
534 I.Loc = readSourceLocation();
544void ASTStmtReader::VisitExpr(
Expr *E) {
546 CurrentUnpackingBits.emplace(Record.readInt());
548 CurrentUnpackingBits->getNextBits(5)));
550 CurrentUnpackingBits->getNextBits(2)));
552 CurrentUnpackingBits->getNextBits(3)));
556 "Incorrect expression field count");
571 switch (StorageKind) {
576 E->Int64Result() = Record.readInt();
580 E->APValueResult() = Record.readAPValue();
583 Record.getContext().addDestruction(&E->APValueResult());
593 E->setAsteriskLocation(readSourceLocation());
599 E->setLocation(readSourceLocation());
600 E->setLParenLocation(readSourceLocation());
601 E->setRParenLocation(readSourceLocation());
603 E->setTypeSourceInfo(Record.readTypeSourceInfo());
608 bool HasFunctionName = Record.readInt();
617void ASTStmtReader::VisitDeclRefExpr(
DeclRefExpr *E) {
620 CurrentUnpackingBits.emplace(Record.readInt());
621 E->
DeclRefExprBits.HadMultipleCandidates = CurrentUnpackingBits->getNextBit();
623 CurrentUnpackingBits->getNextBit();
625 CurrentUnpackingBits->getNextBits(2);
626 E->
DeclRefExprBits.IsImmediateEscalating = CurrentUnpackingBits->getNextBit();
630 CurrentUnpackingBits->getNextBit();
631 E->
DeclRefExprBits.CapturedByCopyInLambdaWithExplicitObjectParameter =
false;
632 unsigned NumTemplateArgs = 0;
634 NumTemplateArgs = Record.readInt();
637 new (E->getTrailingObjects<NestedNameSpecifierLoc>())
638 NestedNameSpecifierLoc(Record.readNestedNameSpecifierLoc());
640 if (E->hasFoundDecl())
641 *E->getTrailingObjects<NamedDecl *>() = readDeclAs<NamedDecl>();
645 *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(),
646 E->getTrailingObjects<TemplateArgumentLoc>(), NumTemplateArgs);
648 E->D = readDeclAs<ValueDecl>();
656 E->
setValue(Record.getContext(), Record.readAPInt());
663 E->
setValue(Record.getContext(), Record.readAPInt());
669 static_cast<llvm::APFloatBase::Semantics
>(Record.readInt()));
685 unsigned NumConcatenated = Record.readInt();
686 unsigned Length = Record.readInt();
687 unsigned CharByteWidth = Record.readInt();
689 "Wrong number of concatenated tokens!");
690 assert((Length == E->
getLength()) &&
"Wrong Length!");
691 assert((CharByteWidth == E->
getCharByteWidth()) &&
"Wrong character width!");
698 assert((CharByteWidth ==
699 StringLiteral::mapCharByteWidth(Record.getContext().getTargetInfo(),
701 "Wrong character width!");
704 for (
unsigned I = 0; I < NumConcatenated; ++I)
705 E->setStrTokenLoc(I, readSourceLocation());
708 char *StrData = E->getStrDataAsChar();
709 for (
unsigned I = 0; I < Length * CharByteWidth; ++I)
710 StrData[I] = Record.readInt();
720void ASTStmtReader::VisitParenExpr(
ParenExpr *E) {
730 unsigned NumExprs = Record.readInt();
731 assert((NumExprs == E->
getNumExprs()) &&
"Wrong NumExprs!");
732 for (
unsigned I = 0; I != NumExprs; ++I)
733 E->getTrailingObjects()[I] = Record.readSubStmt();
734 E->LParenLoc = readSourceLocation();
735 E->RParenLoc = readSourceLocation();
740 bool hasFP_Features = CurrentUnpackingBits->getNextBit();
763 SourceLocation Start = readSourceLocation();
764 SourceLocation End = readSourceLocation();
767 E->
setComponent(I, OffsetOfNode(Start, Record.readInt(), End));
772 I, OffsetOfNode(Start, readDeclAs<FieldDecl>(), End));
778 OffsetOfNode(Start, Record.readIdentifier(), End));
782 auto *
Base =
new (Record.getContext()) CXXBaseSpecifier();
783 *
Base = Record.readCXXBaseSpecifier();
797 if (Record.peekInt() == 0) {
814 unsigned NumDetailRecords =
Record.readInt();
815 for (
unsigned i = 0; i != NumDetailRecords; ++i) {
816 auto Kind =
Record.readInt();
819 StringRef DiagMessage =
C.backupStr(
Record.readString());
821 Satisfaction.
Details.emplace_back(
new (
823 }
else if (Kind == 1) {
827 Satisfaction.
Details.emplace_back(
Record.readConceptReference());
834void ASTStmtReader::VisitConceptSpecializationExpr(
837 E->SpecDecl = Record.readDeclAs<ImplicitConceptSpecializationDecl>();
838 if (Record.readBool())
839 E->ConceptRef = Record.readConceptReference();
848 StringRef SubstitutedEntity =
C.backupStr(
Record.readString());
850 StringRef DiagMessage =
C.backupStr(
Record.readString());
852 return new (
Record.getContext())
859 unsigned NumLocalParameters = Record.readInt();
860 unsigned NumRequirements = Record.readInt();
863 E->Body = Record.readDeclAs<RequiresExprBodyDecl>();
864 llvm::SmallVector<ParmVarDecl *, 4> LocalParameters;
865 for (
unsigned i = 0; i < NumLocalParameters; ++i)
867 std::copy(LocalParameters.begin(), LocalParameters.end(),
868 E->getTrailingObjects<ParmVarDecl *>());
869 llvm::SmallVector<concepts::Requirement *, 4> Requirements;
870 for (
unsigned i = 0; i < NumRequirements; ++i) {
873 concepts::Requirement *R =
nullptr;
880 R =
new (Record.getContext())
883 R =
new (Record.getContext())
884 concepts::TypeRequirement(Record.readTypeSourceInfo());
891 llvm::PointerUnion<concepts::Requirement::SubstitutionDiagnostic *,
896 E = Record.readExpr();
898 std::optional<concepts::ExprRequirement::ReturnTypeRequirement> Req;
899 ConceptSpecializationExpr *SubstitutedConstraintExpr =
nullptr;
900 SourceLocation NoexceptLoc;
904 NoexceptLoc = Record.readSourceLocation();
905 switch (Record.readInt()) {
912 TemplateParameterList *TPL = Record.readTemplateParameterList();
915 SubstitutedConstraintExpr =
925 if (Expr *Ex = E.dyn_cast<Expr *>())
926 R =
new (Record.getContext()) concepts::ExprRequirement(
928 std::move(*Req), Status, SubstitutedConstraintExpr);
930 R =
new (Record.getContext()) concepts::ExprRequirement(
936 ASTContext &
C = Record.getContext();
937 bool HasInvalidConstraint = Record.readInt();
938 if (HasInvalidConstraint) {
939 StringRef InvalidConstraint =
C.backupStr(Record.readString());
940 R =
new (
C) concepts::NestedRequirement(
941 Record.getContext(), InvalidConstraint,
945 Expr *E = Record.readExpr();
947 R =
new (
C) concepts::NestedRequirement(E);
949 R =
new (
C) concepts::NestedRequirement(
955 Requirements.push_back(R);
957 std::copy(Requirements.begin(), Requirements.end(),
958 E->getTrailingObjects<concepts::Requirement *>());
959 E->LParenLoc = Record.readSourceLocation();
960 E->RParenLoc = Record.readSourceLocation();
961 E->RBraceLoc = Record.readSourceLocation();
966 E->
setLHS(Record.readSubExpr());
967 E->
setRHS(Record.readSubExpr());
971void ASTStmtReader::VisitMatrixSingleSubscriptExpr(
974 E->
setBase(Record.readSubExpr());
981 E->
setBase(Record.readSubExpr());
991 E->setBase(Record.readSubExpr());
992 E->setLowerBound(Record.readSubExpr());
993 E->setLength(Record.readSubExpr());
996 E->setStride(Record.readSubExpr());
998 E->setColonLocFirst(readSourceLocation());
1001 E->setColonLocSecond(readSourceLocation());
1003 E->setRBracketLoc(readSourceLocation());
1008 unsigned NumDims = Record.readInt();
1009 E->setBase(Record.readSubExpr());
1010 SmallVector<Expr *, 4> Dims(NumDims);
1011 for (
unsigned I = 0; I < NumDims; ++I)
1012 Dims[I] = Record.readSubExpr();
1013 E->setDimensions(Dims);
1014 SmallVector<SourceRange, 4> SRs(NumDims);
1015 for (
unsigned I = 0; I < NumDims; ++I)
1016 SRs[I] = readSourceRange();
1017 E->setBracketsRanges(SRs);
1024 unsigned NumIters = Record.readInt();
1028 for (
unsigned I = 0; I < NumIters; ++I) {
1029 E->setIteratorDeclaration(I, Record.readDeclRef());
1030 E->setAssignmentLoc(I, readSourceLocation());
1031 Expr *Begin = Record.readSubExpr();
1032 Expr *End = Record.readSubExpr();
1033 Expr *Step = Record.readSubExpr();
1034 SourceLocation ColonLoc = readSourceLocation();
1035 SourceLocation SecColonLoc;
1037 SecColonLoc = readSourceLocation();
1038 E->setIteratorRange(I, Begin, ColonLoc, End, SecColonLoc, Step);
1040 OMPIteratorHelperData HD;
1041 HD.
CounterVD = cast_or_null<VarDecl>(Record.readDeclRef());
1042 HD.
Upper = Record.readSubExpr();
1043 HD.
Update = Record.readSubExpr();
1045 E->setHelper(I, HD);
1049void ASTStmtReader::VisitCallExpr(
CallExpr *E) {
1052 unsigned NumArgs = Record.readInt();
1053 CurrentUnpackingBits.emplace(Record.readInt());
1056 bool HasFPFeatures = CurrentUnpackingBits->getNextBit();
1059 assert((NumArgs == E->
getNumArgs()) &&
"Wrong NumArgs!");
1062 for (
unsigned I = 0; I != NumArgs; ++I)
1063 E->
setArg(I, Record.readSubExpr());
1070 E->updateTrailingSourceLoc();
1077void ASTStmtReader::VisitMemberExpr(
MemberExpr *E) {
1080 CurrentUnpackingBits.emplace(Record.readInt());
1081 bool HasQualifier = CurrentUnpackingBits->getNextBit();
1082 bool HasFoundDecl = CurrentUnpackingBits->getNextBit();
1083 bool HasTemplateInfo = CurrentUnpackingBits->getNextBit();
1084 unsigned NumTemplateArgs = Record.readInt();
1086 E->Base = Record.readSubExpr();
1087 E->MemberDecl = Record.readDeclAs<ValueDecl>();
1088 E->MemberDNLoc = Record.readDeclarationNameLoc(E->MemberDecl->
getDeclName());
1089 E->MemberLoc = Record.readSourceLocation();
1094 E->
MemberExprBits.HadMultipleCandidates = CurrentUnpackingBits->getNextBit();
1096 CurrentUnpackingBits->getNextBits(2);
1100 new (E->getTrailingObjects<NestedNameSpecifierLoc>())
1101 NestedNameSpecifierLoc(Record.readNestedNameSpecifierLoc());
1104 auto *FoundD = Record.readDeclAs<NamedDecl>();
1109 if (HasTemplateInfo)
1111 *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(),
1112 E->getTrailingObjects<TemplateArgumentLoc>(), NumTemplateArgs);
1115void ASTStmtReader::VisitObjCIsaExpr(
ObjCIsaExpr *E) {
1117 E->
setBase(Record.readSubExpr());
1126 E->Operand = Record.readSubExpr();
1127 E->setShouldCopy(Record.readInt());
1131 VisitExplicitCastExpr(E);
1132 E->LParenLoc = readSourceLocation();
1133 E->BridgeKeywordLoc = readSourceLocation();
1134 E->Kind = Record.readInt();
1137void ASTStmtReader::VisitCastExpr(
CastExpr *E) {
1139 unsigned NumBaseSpecs = Record.readInt();
1142 CurrentUnpackingBits.emplace(Record.readInt());
1144 unsigned HasFPFeatures = CurrentUnpackingBits->getNextBit();
1150 while (NumBaseSpecs--) {
1151 auto *BaseSpec =
new (Record.getContext()) CXXBaseSpecifier;
1152 *BaseSpec = Record.readCXXBaseSpecifier();
1153 *BaseI++ = BaseSpec;
1162 CurrentUnpackingBits.emplace(Record.readInt());
1165 bool hasFP_Features = CurrentUnpackingBits->getNextBit();
1168 E->
setLHS(Record.readSubExpr());
1169 E->
setRHS(Record.readSubExpr());
1177 VisitBinaryOperator(E);
1184 E->SubExprs[ConditionalOperator::COND] = Record.readSubExpr();
1185 E->SubExprs[ConditionalOperator::LHS] = Record.readSubExpr();
1186 E->SubExprs[ConditionalOperator::RHS] = Record.readSubExpr();
1187 E->QuestionLoc = readSourceLocation();
1188 E->ColonLoc = readSourceLocation();
1195 E->SubExprs[BinaryConditionalOperator::COMMON] = Record.readSubExpr();
1196 E->SubExprs[BinaryConditionalOperator::COND] = Record.readSubExpr();
1197 E->SubExprs[BinaryConditionalOperator::LHS] = Record.readSubExpr();
1198 E->SubExprs[BinaryConditionalOperator::RHS] = Record.readSubExpr();
1199 E->QuestionLoc = readSourceLocation();
1200 E->ColonLoc = readSourceLocation();
1214 VisitExplicitCastExpr(E);
1229 E->
setBase(Record.readSubExpr());
1234void ASTStmtReader::VisitInitListExpr(
InitListExpr *E) {
1236 if (
auto *SyntForm = cast_or_null<InitListExpr>(Record.readSubStmt()))
1240 bool isArrayFiller = Record.readInt();
1241 Expr *filler =
nullptr;
1242 if (isArrayFiller) {
1243 filler = Record.readSubExpr();
1244 E->ArrayFillerOrUnionFieldInit = filler;
1246 E->ArrayFillerOrUnionFieldInit = readDeclAs<FieldDecl>();
1248 unsigned NumInits = Record.readInt();
1250 if (isArrayFiller) {
1251 for (
unsigned I = 0; I != NumInits; ++I) {
1252 Expr *init = Record.readSubExpr();
1253 E->
updateInit(Record.getContext(), I, init ? init : filler);
1256 for (
unsigned I = 0; I != NumInits; ++I)
1257 E->
updateInit(Record.getContext(), I, Record.readSubExpr());
1262 using Designator = DesignatedInitExpr::Designator;
1265 unsigned NumSubExprs = Record.readInt();
1266 assert(NumSubExprs == E->
getNumSubExprs() &&
"Wrong number of subexprs");
1267 for (
unsigned I = 0; I != NumSubExprs; ++I)
1272 SmallVector<Designator, 4> Designators;
1273 while (Record.getIdx() < Record.size()) {
1276 auto *
Field = readDeclAs<FieldDecl>();
1277 SourceLocation DotLoc = readSourceLocation();
1278 SourceLocation FieldLoc = readSourceLocation();
1280 Field->getIdentifier(), DotLoc, FieldLoc));
1281 Designators.back().setFieldDecl(Field);
1286 const IdentifierInfo *Name = Record.readIdentifier();
1287 SourceLocation DotLoc = readSourceLocation();
1288 SourceLocation FieldLoc = readSourceLocation();
1295 unsigned Index = Record.readInt();
1296 SourceLocation LBracketLoc = readSourceLocation();
1297 SourceLocation RBracketLoc = readSourceLocation();
1305 unsigned Index = Record.readInt();
1306 SourceLocation LBracketLoc = readSourceLocation();
1307 SourceLocation EllipsisLoc = readSourceLocation();
1308 SourceLocation RBracketLoc = readSourceLocation();
1310 Index, LBracketLoc, EllipsisLoc, RBracketLoc));
1316 Designators.data(), Designators.size());
1321 E->
setBase(Record.readSubExpr());
1325void ASTStmtReader::VisitNoInitExpr(
NoInitExpr *E) {
1331 E->SubExprs[0] = Record.readSubExpr();
1332 E->SubExprs[1] = Record.readSubExpr();
1343void ASTStmtReader::VisitVAArgExpr(
VAArgExpr *E) {
1354 E->ParentContext = readDeclAs<DeclContext>();
1355 E->BuiltinLoc = readSourceLocation();
1356 E->RParenLoc = readSourceLocation();
1360void ASTStmtReader::VisitEmbedExpr(
EmbedExpr *E) {
1362 E->EmbedKeywordLoc = readSourceLocation();
1363 EmbedDataStorage *
Data =
new (Record.getContext()) EmbedDataStorage;
1366 E->Begin = Record.readInt();
1367 E->NumOfElements = Record.readInt();
1374 E->
setLabel(readDeclAs<LabelDecl>());
1377void ASTStmtReader::VisitStmtExpr(
StmtExpr *E) {
1381 E->
setSubStmt(cast_or_null<CompoundStmt>(Record.readSubStmt()));
1385void ASTStmtReader::VisitChooseExpr(
ChooseExpr *E) {
1387 E->
setCond(Record.readSubExpr());
1388 E->
setLHS(Record.readSubExpr());
1389 E->
setRHS(Record.readSubExpr());
1395void ASTStmtReader::VisitGNUNullExpr(
GNUNullExpr *E) {
1402 SmallVector<Expr *, 16> Exprs;
1403 unsigned NumExprs = Record.readInt();
1405 Exprs.push_back(Record.readSubExpr());
1406 E->
setExprs(Record.getContext(), Exprs);
1413 bool HasFPFeatures = CurrentUnpackingBits->getNextBit();
1415 E->BuiltinLoc = readSourceLocation();
1416 E->RParenLoc = readSourceLocation();
1417 E->TInfo = readTypeSourceInfo();
1418 E->SrcExpr = Record.readSubExpr();
1424void ASTStmtReader::VisitBlockExpr(
BlockExpr *E) {
1432 unsigned NumAssocs = Record.readInt();
1433 assert(NumAssocs == E->
getNumAssocs() &&
"Wrong NumAssocs!");
1434 E->IsExprPredicate = Record.readInt();
1435 E->ResultIndex = Record.readInt();
1437 E->DefaultLoc = readSourceLocation();
1438 E->RParenLoc = readSourceLocation();
1440 Stmt **Stmts = E->getTrailingObjects<Stmt *>();
1444 for (
unsigned I = 0, N = NumAssocs + 1; I < N; ++I)
1445 Stmts[I] = Record.readSubExpr();
1447 TypeSourceInfo **TSIs = E->getTrailingObjects<TypeSourceInfo *>();
1448 for (
unsigned I = 0, N = NumAssocs; I < N; ++I)
1449 TSIs[I] = readTypeSourceInfo();
1454 unsigned numSemanticExprs = Record.readInt();
1459 E->getTrailingObjects()[0] = Record.readSubExpr();
1462 for (
unsigned i = 0; i != numSemanticExprs; ++i) {
1463 Expr *subExpr = Record.readSubExpr();
1464 E->getTrailingObjects()[i + 1] = subExpr;
1468void ASTStmtReader::VisitAtomicExpr(
AtomicExpr *E) {
1472 for (
unsigned I = 0; I != E->NumSubExprs; ++I)
1473 E->SubExprs[I] = Record.readSubExpr();
1474 E->BuiltinLoc = readSourceLocation();
1475 E->RParenLoc = readSourceLocation();
1490 E->SubExpr = Record.readSubStmt();
1491 E->BoxingMethod = readDeclAs<ObjCMethodDecl>();
1492 E->Range = readSourceRange();
1497 unsigned NumElements = Record.readInt();
1498 assert(NumElements == E->
getNumElements() &&
"Wrong number of elements");
1500 for (
unsigned I = 0, N = NumElements; I != N; ++I)
1501 Elements[I] = Record.readSubExpr();
1502 E->ArrayWithObjectsMethod = readDeclAs<ObjCMethodDecl>();
1503 E->Range = readSourceRange();
1508 unsigned NumElements = Record.readInt();
1509 assert(NumElements == E->
getNumElements() &&
"Wrong number of elements");
1510 bool HasPackExpansions = Record.readInt();
1511 assert(HasPackExpansions == E->HasPackExpansions &&
"Pack expansion mismatch");
1513 E->getTrailingObjects<ObjCDictionaryLiteral::KeyValuePair>();
1515 E->getTrailingObjects<ObjCDictionaryLiteral::ExpansionData>();
1516 for (
unsigned I = 0; I != NumElements; ++I) {
1517 KeyValues[I].Key = Record.readSubExpr();
1518 KeyValues[I].Value = Record.readSubExpr();
1519 if (HasPackExpansions) {
1520 Expansions[I].EllipsisLoc = readSourceLocation();
1521 Expansions[I].NumExpansionsPlusOne = Record.readInt();
1524 E->DictWithObjectsMethod = readDeclAs<ObjCMethodDecl>();
1525 E->Range = readSourceRange();
1546 E->ProtoLoc = readSourceLocation();
1552 E->
setDecl(readDeclAs<ObjCIvarDecl>());
1555 E->
setBase(Record.readSubExpr());
1562 unsigned MethodRefFlags = Record.readInt();
1563 bool Implicit = Record.readInt() != 0;
1565 auto *Getter = readDeclAs<ObjCMethodDecl>();
1566 auto *Setter = readDeclAs<ObjCMethodDecl>();
1567 E->setImplicitProperty(Getter, Setter, MethodRefFlags);
1569 E->setExplicitProperty(readDeclAs<ObjCPropertyDecl>(), MethodRefFlags);
1571 E->setLocation(readSourceLocation());
1572 E->setReceiverLocation(readSourceLocation());
1573 switch (Record.readInt()) {
1575 E->setBase(Record.readSubExpr());
1578 E->setSuperReceiver(Record.readType());
1581 E->setClassReceiver(readDeclAs<ObjCInterfaceDecl>());
1591 E->GetAtIndexMethodDecl = readDeclAs<ObjCMethodDecl>();
1592 E->SetAtIndexMethodDecl = readDeclAs<ObjCMethodDecl>();
1599 unsigned NumStoredSelLocs = Record.readInt();
1600 E->SelLocsKind = Record.readInt();
1602 E->IsImplicit = Record.readInt();
1615 QualType
T = Record.readType();
1616 SourceLocation SuperLoc = readSourceLocation();
1624 if (Record.readInt())
1629 E->LBracLoc = readSourceLocation();
1630 E->RBracLoc = readSourceLocation();
1632 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
1633 E->
setArg(I, Record.readSubExpr());
1635 SourceLocation *Locs = E->getStoredSelLocs();
1636 for (
unsigned I = 0; I != NumStoredSelLocs; ++I)
1637 Locs[I] = readSourceLocation();
1644 S->
setBody(Record.readSubStmt());
1673 bool HasFinally = Record.readInt();
1676 S->
setCatchStmt(I, cast_or_null<ObjCAtCatchStmt>(Record.readSubStmt()));
1704 SourceRange R = Record.readSourceRange();
1707 E->VersionToCheck = Record.readVersionTuple();
1714void ASTStmtReader::VisitCXXCatchStmt(
CXXCatchStmt *S) {
1716 S->CatchLoc = readSourceLocation();
1717 S->ExceptionDecl = readDeclAs<VarDecl>();
1718 S->HandlerBlock = Record.readSubStmt();
1721void ASTStmtReader::VisitCXXTryStmt(
CXXTryStmt *S) {
1723 assert(Record.peekInt() == S->
getNumHandlers() &&
"NumStmtFields is wrong ?");
1725 S->TryLoc = readSourceLocation();
1726 S->getStmts()[0] = Record.readSubStmt();
1728 S->getStmts()[i + 1] = Record.readSubStmt();
1733 S->ForLoc = readSourceLocation();
1734 S->CoawaitLoc = readSourceLocation();
1735 S->ColonLoc = readSourceLocation();
1736 S->RParenLoc = readSourceLocation();
1737 S->
setInit(Record.readSubStmt());
1741 S->
setCond(Record.readSubExpr());
1742 S->
setInc(Record.readSubExpr());
1744 S->
setBody(Record.readSubStmt());
1749 S->KeywordLoc = readSourceLocation();
1750 S->IsIfExists = Record.readInt();
1751 S->QualifierLoc = Record.readNestedNameSpecifierLoc();
1752 S->NameInfo = Record.readDeclarationNameInfo();
1753 S->SubStmt = Record.readSubStmt();
1759 E->BeginLoc = Record.readSourceLocation();
1762void ASTStmtReader::VisitCXXRewrittenBinaryOperator(
1766 E->SemanticForm = Record.readSubExpr();
1772 unsigned NumArgs = Record.readInt();
1773 assert((NumArgs == E->
getNumArgs()) &&
"Wrong NumArgs!");
1783 E->Constructor = readDeclAs<CXXConstructorDecl>();
1784 E->ParenOrBraceRange = readSourceRange();
1786 for (
unsigned I = 0; I != NumArgs; ++I)
1787 E->
setArg(I, Record.readSubExpr());
1792 E->Constructor = readDeclAs<CXXConstructorDecl>();
1793 E->Loc = readSourceLocation();
1794 E->ConstructsVirtualBase = Record.readInt();
1795 E->InheritedFromVirtualBase = Record.readInt();
1799 VisitCXXConstructExpr(E);
1800 E->TSI = readTypeSourceInfo();
1803void ASTStmtReader::VisitLambdaExpr(
LambdaExpr *E) {
1805 unsigned NumCaptures = Record.readInt();
1808 E->IntroducerRange = readSourceRange();
1810 E->CaptureDefaultLoc = readSourceLocation();
1813 E->ClosingBrace = readSourceLocation();
1819 *
C = Record.readSubExpr();
1828 E->SubExpr = Record.readSubExpr();
1832 VisitExplicitCastExpr(E);
1833 SourceRange R = readSourceRange();
1835 E->RParenLoc = R.
getEnd();
1836 if (CurrentUnpackingBits->getNextBit())
1837 E->AngleBrackets = readSourceRange();
1841 return VisitCXXNamedCastExpr(E);
1845 return VisitCXXNamedCastExpr(E);
1849 return VisitCXXNamedCastExpr(E);
1853 return VisitCXXNamedCastExpr(E);
1857 return VisitCXXNamedCastExpr(E);
1861 VisitExplicitCastExpr(E);
1867 VisitExplicitCastExpr(E);
1868 E->KWLoc = readSourceLocation();
1869 E->RParenLoc = readSourceLocation();
1874 E->UDSuffixLoc = readSourceLocation();
1892 E->Operand = readTypeSourceInfo();
1894 E->Operand = Record.readSubExpr();
1897void ASTStmtReader::VisitCXXThisExpr(
CXXThisExpr *E) {
1904void ASTStmtReader::VisitCXXThrowExpr(
CXXThrowExpr *E) {
1907 E->Operand = Record.readSubExpr();
1913 E->Param = readDeclAs<ParmVarDecl>();
1914 E->UsedContext = readDeclAs<DeclContext>();
1918 *E->getTrailingObjects() = Record.readSubExpr();
1924 E->Field = readDeclAs<FieldDecl>();
1925 E->UsedContext = readDeclAs<DeclContext>();
1928 *E->getTrailingObjects() = Record.readSubExpr();
1939 E->TypeInfo = readTypeSourceInfo();
1943void ASTStmtReader::VisitCXXNewExpr(
CXXNewExpr *E) {
1946 bool IsArray = Record.readInt();
1947 bool HasInit = Record.readInt();
1948 unsigned NumPlacementArgs = Record.readInt();
1949 bool IsParenTypeId = Record.readInt();
1958 assert((IsArray == E->
isArray()) &&
"Wrong IsArray!");
1961 "Wrong NumPlacementArgs!");
1962 assert((IsParenTypeId == E->
isParenTypeId()) &&
"Wrong IsParenTypeId!");
1965 (void)NumPlacementArgs;
1969 E->AllocatedTypeInfo = readTypeSourceInfo();
1971 E->getTrailingObjects<SourceRange>()[0] = readSourceRange();
1972 E->Range = readSourceRange();
1973 E->DirectInitRange = readSourceRange();
1979 *I = Record.readSubStmt();
1988 E->OperatorDelete = readDeclAs<FunctionDecl>();
1989 E->Argument = Record.readSubExpr();
1996 E->Base = Record.readSubExpr();
1997 E->IsArrow = Record.readInt();
1998 E->OperatorLoc = readSourceLocation();
1999 E->QualifierLoc = Record.readNestedNameSpecifierLoc();
2000 E->ScopeType = readTypeSourceInfo();
2001 E->ColonColonLoc = readSourceLocation();
2002 E->TildeLoc = readSourceLocation();
2004 IdentifierInfo *II = Record.readIdentifier();
2014 unsigned NumObjects = Record.readInt();
2016 for (
unsigned i = 0; i != NumObjects; ++i) {
2020 Obj = readDeclAs<BlockDecl>();
2024 llvm_unreachable(
"unexpected cleanup object type");
2025 E->getTrailingObjects()[i] = Obj;
2029 E->
SubExpr = Record.readSubExpr();
2032void ASTStmtReader::VisitCXXDependentScopeMemberExpr(
2036 unsigned NumTemplateArgs = Record.readInt();
2037 CurrentUnpackingBits.emplace(Record.readInt());
2038 bool HasTemplateKWAndArgsInfo = CurrentUnpackingBits->getNextBit();
2039 bool HasFirstQualifierFoundInScope = CurrentUnpackingBits->getNextBit();
2041 assert((HasTemplateKWAndArgsInfo == E->hasTemplateKWAndArgsInfo()) &&
2042 "Wrong HasTemplateKWAndArgsInfo!");
2044 (HasFirstQualifierFoundInScope == E->hasFirstQualifierFoundInScope()) &&
2045 "Wrong HasFirstQualifierFoundInScope!");
2047 if (HasTemplateKWAndArgsInfo)
2049 *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(),
2050 E->getTrailingObjects<TemplateArgumentLoc>(), NumTemplateArgs);
2053 "Wrong NumTemplateArgs!");
2056 CurrentUnpackingBits->getNextBit();
2058 E->BaseType = Record.readType();
2059 E->QualifierLoc = Record.readNestedNameSpecifierLoc();
2061 if (CurrentUnpackingBits->getNextBit())
2062 E->Base = Record.readSubExpr();
2068 if (HasFirstQualifierFoundInScope)
2069 *E->getTrailingObjects<NamedDecl *>() = readDeclAs<NamedDecl>();
2071 E->MemberNameInfo = Record.readDeclarationNameInfo();
2078 if (CurrentUnpackingBits->getNextBit())
2080 *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(),
2081 E->getTrailingObjects<TemplateArgumentLoc>(),
2082 CurrentUnpackingBits->getNextBits(16));
2084 E->QualifierLoc = Record.readNestedNameSpecifierLoc();
2085 E->NameInfo = Record.readDeclarationNameInfo();
2091 assert(Record.peekInt() == E->
getNumArgs() &&
2092 "Read wrong record during creation ?");
2094 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
2095 E->
setArg(I, Record.readSubExpr());
2096 E->TypeAndInitForm.setPointer(readTypeSourceInfo());
2099 E->TypeAndInitForm.setInt(Record.readInt());
2102void ASTStmtReader::VisitOverloadExpr(
OverloadExpr *E) {
2105 unsigned NumResults = Record.readInt();
2106 CurrentUnpackingBits.emplace(Record.readInt());
2107 bool HasTemplateKWAndArgsInfo = CurrentUnpackingBits->getNextBit();
2108 assert((E->
getNumDecls() == NumResults) &&
"Wrong NumResults!");
2110 "Wrong HasTemplateKWAndArgsInfo!");
2112 unsigned NumTemplateArgs = 0;
2113 if (HasTemplateKWAndArgsInfo) {
2114 NumTemplateArgs = Record.readInt();
2120 UnresolvedSet<8> Decls;
2121 for (
unsigned I = 0; I != NumResults; ++I) {
2122 auto *D = readDeclAs<NamedDecl>();
2128 UnresolvedSetIterator Iter = Decls.
begin();
2129 for (
unsigned I = 0; I != NumResults; ++I) {
2130 Results[I] = (Iter + I).getPair();
2134 "Wrong NumTemplateArgs!");
2136 E->NameInfo = Record.readDeclarationNameInfo();
2137 E->QualifierLoc = Record.readNestedNameSpecifierLoc();
2141 VisitOverloadExpr(E);
2144 CurrentUnpackingBits->getNextBit();
2146 if (CurrentUnpackingBits->getNextBit())
2147 E->Base = Record.readSubExpr();
2151 E->OperatorLoc = readSourceLocation();
2153 E->BaseType = Record.readType();
2157 VisitOverloadExpr(E);
2159 E->NamingClass = readDeclAs<CXXRecordDecl>();
2171 *E->getTrailingObjects<
APValue>() = Record.readAPValue();
2173 SourceRange
Range = readSourceRange();
2174 E->Loc =
Range.getBegin();
2175 E->RParenLoc =
Range.getEnd();
2177 auto **Args = E->getTrailingObjects<TypeSourceInfo *>();
2178 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
2179 Args[I] = readTypeSourceInfo();
2185 E->Value = (
unsigned int)Record.readInt();
2186 SourceRange
Range = readSourceRange();
2187 E->Loc =
Range.getBegin();
2188 E->RParen =
Range.getEnd();
2189 E->QueriedType = readTypeSourceInfo();
2190 E->Dimension = Record.readSubExpr();
2197 SourceRange
Range = readSourceRange();
2198 E->QueriedExpression = Record.readSubExpr();
2199 E->Loc =
Range.getBegin();
2200 E->RParen =
Range.getEnd();
2206 E->Range = readSourceRange();
2207 E->Operand = Record.readSubExpr();
2212 E->EllipsisLoc = readSourceLocation();
2213 E->NumExpansions = Record.readInt();
2214 E->Pattern = Record.readSubExpr();
2219 unsigned NumPartialArgs = Record.readInt();
2220 E->OperatorLoc = readSourceLocation();
2221 E->PackLoc = readSourceLocation();
2222 E->RParenLoc = readSourceLocation();
2223 E->Pack = Record.readDeclAs<NamedDecl>();
2225 assert(E->Length == NumPartialArgs);
2226 for (
auto *I = E->getTrailingObjects(), *E = I + NumPartialArgs; I != E;
2228 new (I) TemplateArgument(Record.readTemplateArgument());
2230 E->Length = Record.readInt();
2238 E->EllipsisLoc = readSourceLocation();
2239 E->RSquareLoc = readSourceLocation();
2240 E->SubExprs[0] = Record.readStmt();
2241 E->SubExprs[1] = Record.readStmt();
2242 auto **Exprs = E->getTrailingObjects();
2244 Exprs[I] = Record.readExpr();
2247void ASTStmtReader::VisitSubstNonTypeTemplateParmExpr(
2250 E->AssociatedDeclAndRef.setPointer(readDeclAs<Decl>());
2251 E->AssociatedDeclAndRef.setInt(CurrentUnpackingBits->getNextBit());
2252 E->Index = CurrentUnpackingBits->getNextBits(12);
2253 E->PackIndex = Record.readUnsignedOrNone().toInternalRepresentation();
2254 E->Final = CurrentUnpackingBits->getNextBit();
2256 E->Replacement = Record.readSubExpr();
2259void ASTStmtReader::VisitSubstNonTypeTemplateParmPackExpr(
2262 E->AssociatedDecl = readDeclAs<Decl>();
2263 E->Final = CurrentUnpackingBits->getNextBit();
2264 E->Index = Record.readInt();
2265 TemplateArgument ArgPack = Record.readTemplateArgument();
2271 E->NameLoc = readSourceLocation();
2276 E->NumParameters = Record.readInt();
2277 E->ParamPack = readDeclAs<ValueDecl>();
2278 E->NameLoc = readSourceLocation();
2279 auto **Parms = E->getTrailingObjects();
2280 for (
unsigned i = 0, n = E->NumParameters; i != n; ++i)
2281 Parms[i] = readDeclAs<ValueDecl>();
2286 bool HasMaterialzedDecl = Record.readInt();
2287 if (HasMaterialzedDecl)
2290 E->State = Record.readSubExpr();
2293void ASTStmtReader::VisitCXXFoldExpr(
CXXFoldExpr *E) {
2295 E->LParenLoc = readSourceLocation();
2296 E->EllipsisLoc = readSourceLocation();
2297 E->RParenLoc = readSourceLocation();
2298 E->NumExpansions = Record.readUnsignedOrNone();
2299 E->SubExprs[0] = Record.readSubExpr();
2300 E->SubExprs[1] = Record.readSubExpr();
2301 E->SubExprs[2] = Record.readSubExpr();
2307 unsigned ExpectedNumExprs = Record.readInt();
2308 assert(E->NumExprs == ExpectedNumExprs &&
2309 "expected number of expressions does not equal the actual number of "
2310 "serialized expressions.");
2311 E->NumUserSpecifiedExprs = Record.readInt();
2312 E->InitLoc = readSourceLocation();
2313 E->LParenLoc = readSourceLocation();
2314 E->RParenLoc = readSourceLocation();
2315 for (
unsigned I = 0; I < ExpectedNumExprs; I++)
2316 E->getTrailingObjects()[I] = Record.readSubExpr();
2318 bool HasArrayFillerOrUnionDecl = Record.readBool();
2319 if (HasArrayFillerOrUnionDecl) {
2320 bool HasArrayFiller = Record.readBool();
2321 if (HasArrayFiller) {
2332 E->SourceExpr = Record.readSubExpr();
2337void ASTStmtReader::VisitRecoveryExpr(
RecoveryExpr *E) {
2339 unsigned NumArgs = Record.readInt();
2340 E->BeginLoc = readSourceLocation();
2341 E->EndLoc = readSourceLocation();
2342 assert((NumArgs + 0LL ==
2347 Child = Record.readSubStmt();
2355 E->IsArrow = (Record.readInt() != 0);
2356 E->BaseExpr = Record.readSubExpr();
2357 E->QualifierLoc = Record.readNestedNameSpecifierLoc();
2358 E->MemberLoc = readSourceLocation();
2359 E->TheDecl = readDeclAs<MSPropertyDecl>();
2364 E->setBase(Record.readSubExpr());
2365 E->setIdx(Record.readSubExpr());
2372 E->Guid = readDeclAs<MSGuidDecl>();
2374 E->Operand = readTypeSourceInfo();
2376 E->Operand = Record.readSubExpr();
2379void ASTStmtReader::VisitSEHLeaveStmt(
SEHLeaveStmt *S) {
2386 S->Loc = readSourceLocation();
2387 S->Children[SEHExceptStmt::FILTER_EXPR] = Record.readSubStmt();
2388 S->Children[SEHExceptStmt::BLOCK] = Record.readSubStmt();
2393 S->Loc = readSourceLocation();
2394 S->Block = Record.readSubStmt();
2397void ASTStmtReader::VisitSEHTryStmt(
SEHTryStmt *S) {
2399 S->IsCXXTry = Record.readInt();
2400 S->TryLoc = readSourceLocation();
2401 S->Children[SEHTryStmt::TRY] = Record.readSubStmt();
2402 S->Children[SEHTryStmt::HANDLER] = Record.readSubStmt();
2411 E->
setPreArg(CUDAKernelCallExpr::CONFIG, Record.readSubExpr());
2417void ASTStmtReader::VisitAsTypeExpr(
AsTypeExpr *E) {
2419 E->BuiltinLoc = readSourceLocation();
2420 E->RParenLoc = readSourceLocation();
2421 E->SrcExpr = Record.readSubExpr();
2428void ASTStmtReader::VisitOMPCanonicalLoop(OMPCanonicalLoop *S) {
2430 for (Stmt *&SubStmt : S->SubStmts)
2431 SubStmt = Record.readSubStmt();
2434void ASTStmtReader::VisitOMPExecutableDirective(OMPExecutableDirective *E) {
2435 Record.readOMPChildren(E->Data);
2436 E->setLocStart(readSourceLocation());
2437 E->setLocEnd(readSourceLocation());
2440void ASTStmtReader::VisitOMPLoopBasedDirective(OMPLoopBasedDirective *D) {
2444 VisitOMPExecutableDirective(D);
2447void ASTStmtReader::VisitOMPLoopDirective(OMPLoopDirective *D) {
2448 VisitOMPLoopBasedDirective(D);
2451void ASTStmtReader::VisitOMPMetaDirective(OMPMetaDirective *D) {
2455 VisitOMPExecutableDirective(D);
2458void ASTStmtReader::VisitOMPParallelDirective(OMPParallelDirective *D) {
2460 VisitOMPExecutableDirective(D);
2461 D->setHasCancel(Record.readBool());
2464void ASTStmtReader::VisitOMPSimdDirective(OMPSimdDirective *D) {
2465 VisitOMPLoopDirective(D);
2468void ASTStmtReader::VisitOMPCanonicalLoopNestTransformationDirective(
2469 OMPCanonicalLoopNestTransformationDirective *D) {
2470 VisitOMPLoopBasedDirective(D);
2471 D->setNumGeneratedTopLevelLoops(Record.readUInt32());
2474void ASTStmtReader::VisitOMPTileDirective(OMPTileDirective *D) {
2475 VisitOMPCanonicalLoopNestTransformationDirective(D);
2478void ASTStmtReader::VisitOMPStripeDirective(OMPStripeDirective *D) {
2479 VisitOMPCanonicalLoopNestTransformationDirective(D);
2482void ASTStmtReader::VisitOMPUnrollDirective(OMPUnrollDirective *D) {
2483 VisitOMPCanonicalLoopNestTransformationDirective(D);
2486void ASTStmtReader::VisitOMPReverseDirective(OMPReverseDirective *D) {
2487 VisitOMPCanonicalLoopNestTransformationDirective(D);
2490void ASTStmtReader::VisitOMPCanonicalLoopSequenceTransformationDirective(
2491 OMPCanonicalLoopSequenceTransformationDirective *D) {
2493 VisitOMPExecutableDirective(D);
2494 D->setNumGeneratedTopLevelLoops(Record.readUInt32());
2497void ASTStmtReader::VisitOMPInterchangeDirective(OMPInterchangeDirective *D) {
2498 VisitOMPCanonicalLoopNestTransformationDirective(D);
2501void ASTStmtReader::VisitOMPFuseDirective(OMPFuseDirective *D) {
2502 VisitOMPCanonicalLoopSequenceTransformationDirective(D);
2505void ASTStmtReader::VisitOMPForDirective(OMPForDirective *D) {
2506 VisitOMPLoopDirective(D);
2507 D->setHasCancel(Record.readBool());
2510void ASTStmtReader::VisitOMPForSimdDirective(OMPForSimdDirective *D) {
2511 VisitOMPLoopDirective(D);
2514void ASTStmtReader::VisitOMPSectionsDirective(OMPSectionsDirective *D) {
2516 VisitOMPExecutableDirective(D);
2517 D->setHasCancel(Record.readBool());
2520void ASTStmtReader::VisitOMPSectionDirective(OMPSectionDirective *D) {
2522 VisitOMPExecutableDirective(D);
2523 D->setHasCancel(Record.readBool());
2526void ASTStmtReader::VisitOMPScopeDirective(OMPScopeDirective *D) {
2528 VisitOMPExecutableDirective(D);
2531void ASTStmtReader::VisitOMPSingleDirective(OMPSingleDirective *D) {
2533 VisitOMPExecutableDirective(D);
2536void ASTStmtReader::VisitOMPMasterDirective(OMPMasterDirective *D) {
2538 VisitOMPExecutableDirective(D);
2541void ASTStmtReader::VisitOMPCriticalDirective(OMPCriticalDirective *D) {
2543 VisitOMPExecutableDirective(D);
2544 D->DirName = Record.readDeclarationNameInfo();
2547void ASTStmtReader::VisitOMPParallelForDirective(OMPParallelForDirective *D) {
2548 VisitOMPLoopDirective(D);
2549 D->setHasCancel(Record.readBool());
2552void ASTStmtReader::VisitOMPParallelForSimdDirective(
2553 OMPParallelForSimdDirective *D) {
2554 VisitOMPLoopDirective(D);
2557void ASTStmtReader::VisitOMPParallelMasterDirective(
2558 OMPParallelMasterDirective *D) {
2560 VisitOMPExecutableDirective(D);
2563void ASTStmtReader::VisitOMPParallelMaskedDirective(
2564 OMPParallelMaskedDirective *D) {
2566 VisitOMPExecutableDirective(D);
2569void ASTStmtReader::VisitOMPParallelSectionsDirective(
2570 OMPParallelSectionsDirective *D) {
2572 VisitOMPExecutableDirective(D);
2573 D->setHasCancel(Record.readBool());
2576void ASTStmtReader::VisitOMPTaskDirective(OMPTaskDirective *D) {
2578 VisitOMPExecutableDirective(D);
2579 D->setHasCancel(Record.readBool());
2582void ASTStmtReader::VisitOMPTaskyieldDirective(OMPTaskyieldDirective *D) {
2584 VisitOMPExecutableDirective(D);
2587void ASTStmtReader::VisitOMPBarrierDirective(OMPBarrierDirective *D) {
2589 VisitOMPExecutableDirective(D);
2592void ASTStmtReader::VisitOMPTaskwaitDirective(OMPTaskwaitDirective *D) {
2596 VisitOMPExecutableDirective(D);
2599void ASTStmtReader::VisitOMPAssumeDirective(OMPAssumeDirective *D) {
2601 VisitOMPExecutableDirective(D);
2604void ASTStmtReader::VisitOMPErrorDirective(OMPErrorDirective *D) {
2608 VisitOMPExecutableDirective(D);
2611void ASTStmtReader::VisitOMPTaskgroupDirective(OMPTaskgroupDirective *D) {
2613 VisitOMPExecutableDirective(D);
2616void ASTStmtReader::VisitOMPFlushDirective(OMPFlushDirective *D) {
2618 VisitOMPExecutableDirective(D);
2621void ASTStmtReader::VisitOMPDepobjDirective(OMPDepobjDirective *D) {
2623 VisitOMPExecutableDirective(D);
2626void ASTStmtReader::VisitOMPScanDirective(OMPScanDirective *D) {
2628 VisitOMPExecutableDirective(D);
2631void ASTStmtReader::VisitOMPOrderedDirective(OMPOrderedDirective *D) {
2633 VisitOMPExecutableDirective(D);
2636void ASTStmtReader::VisitOMPAtomicDirective(OMPAtomicDirective *D) {
2638 VisitOMPExecutableDirective(D);
2639 D->Flags.IsXLHSInRHSPart = Record.readBool() ? 1 : 0;
2640 D->Flags.IsPostfixUpdate = Record.readBool() ? 1 : 0;
2641 D->Flags.IsFailOnly = Record.readBool() ? 1 : 0;
2644void ASTStmtReader::VisitOMPTargetDirective(OMPTargetDirective *D) {
2646 VisitOMPExecutableDirective(D);
2649void ASTStmtReader::VisitOMPTargetDataDirective(OMPTargetDataDirective *D) {
2651 VisitOMPExecutableDirective(D);
2654void ASTStmtReader::VisitOMPTargetEnterDataDirective(
2655 OMPTargetEnterDataDirective *D) {
2657 VisitOMPExecutableDirective(D);
2660void ASTStmtReader::VisitOMPTargetExitDataDirective(
2661 OMPTargetExitDataDirective *D) {
2663 VisitOMPExecutableDirective(D);
2666void ASTStmtReader::VisitOMPTargetParallelDirective(
2667 OMPTargetParallelDirective *D) {
2669 VisitOMPExecutableDirective(D);
2670 D->setHasCancel(Record.readBool());
2673void ASTStmtReader::VisitOMPTargetParallelForDirective(
2674 OMPTargetParallelForDirective *D) {
2675 VisitOMPLoopDirective(D);
2676 D->setHasCancel(Record.readBool());
2679void ASTStmtReader::VisitOMPTeamsDirective(OMPTeamsDirective *D) {
2681 VisitOMPExecutableDirective(D);
2684void ASTStmtReader::VisitOMPCancellationPointDirective(
2685 OMPCancellationPointDirective *D) {
2687 VisitOMPExecutableDirective(D);
2691void ASTStmtReader::VisitOMPCancelDirective(OMPCancelDirective *D) {
2693 VisitOMPExecutableDirective(D);
2697void ASTStmtReader::VisitOMPTaskLoopDirective(OMPTaskLoopDirective *D) {
2698 VisitOMPLoopDirective(D);
2699 D->setHasCancel(Record.readBool());
2702void ASTStmtReader::VisitOMPTaskLoopSimdDirective(OMPTaskLoopSimdDirective *D) {
2703 VisitOMPLoopDirective(D);
2706void ASTStmtReader::VisitOMPMasterTaskLoopDirective(
2707 OMPMasterTaskLoopDirective *D) {
2708 VisitOMPLoopDirective(D);
2709 D->setHasCancel(Record.readBool());
2712void ASTStmtReader::VisitOMPMaskedTaskLoopDirective(
2713 OMPMaskedTaskLoopDirective *D) {
2714 VisitOMPLoopDirective(D);
2715 D->setHasCancel(Record.readBool());
2718void ASTStmtReader::VisitOMPMasterTaskLoopSimdDirective(
2719 OMPMasterTaskLoopSimdDirective *D) {
2720 VisitOMPLoopDirective(D);
2723void ASTStmtReader::VisitOMPMaskedTaskLoopSimdDirective(
2724 OMPMaskedTaskLoopSimdDirective *D) {
2725 VisitOMPLoopDirective(D);
2728void ASTStmtReader::VisitOMPParallelMasterTaskLoopDirective(
2729 OMPParallelMasterTaskLoopDirective *D) {
2730 VisitOMPLoopDirective(D);
2731 D->setHasCancel(Record.readBool());
2734void ASTStmtReader::VisitOMPParallelMaskedTaskLoopDirective(
2735 OMPParallelMaskedTaskLoopDirective *D) {
2736 VisitOMPLoopDirective(D);
2737 D->setHasCancel(Record.readBool());
2740void ASTStmtReader::VisitOMPParallelMasterTaskLoopSimdDirective(
2741 OMPParallelMasterTaskLoopSimdDirective *D) {
2742 VisitOMPLoopDirective(D);
2745void ASTStmtReader::VisitOMPParallelMaskedTaskLoopSimdDirective(
2746 OMPParallelMaskedTaskLoopSimdDirective *D) {
2747 VisitOMPLoopDirective(D);
2750void ASTStmtReader::VisitOMPDistributeDirective(OMPDistributeDirective *D) {
2751 VisitOMPLoopDirective(D);
2754void ASTStmtReader::VisitOMPTargetUpdateDirective(OMPTargetUpdateDirective *D) {
2756 VisitOMPExecutableDirective(D);
2759void ASTStmtReader::VisitOMPDistributeParallelForDirective(
2760 OMPDistributeParallelForDirective *D) {
2761 VisitOMPLoopDirective(D);
2762 D->setHasCancel(Record.readBool());
2765void ASTStmtReader::VisitOMPDistributeParallelForSimdDirective(
2766 OMPDistributeParallelForSimdDirective *D) {
2767 VisitOMPLoopDirective(D);
2770void ASTStmtReader::VisitOMPDistributeSimdDirective(
2771 OMPDistributeSimdDirective *D) {
2772 VisitOMPLoopDirective(D);
2775void ASTStmtReader::VisitOMPTargetParallelForSimdDirective(
2776 OMPTargetParallelForSimdDirective *D) {
2777 VisitOMPLoopDirective(D);
2780void ASTStmtReader::VisitOMPTargetSimdDirective(OMPTargetSimdDirective *D) {
2781 VisitOMPLoopDirective(D);
2784void ASTStmtReader::VisitOMPTeamsDistributeDirective(
2785 OMPTeamsDistributeDirective *D) {
2786 VisitOMPLoopDirective(D);
2789void ASTStmtReader::VisitOMPTeamsDistributeSimdDirective(
2790 OMPTeamsDistributeSimdDirective *D) {
2791 VisitOMPLoopDirective(D);
2794void ASTStmtReader::VisitOMPTeamsDistributeParallelForSimdDirective(
2795 OMPTeamsDistributeParallelForSimdDirective *D) {
2796 VisitOMPLoopDirective(D);
2799void ASTStmtReader::VisitOMPTeamsDistributeParallelForDirective(
2800 OMPTeamsDistributeParallelForDirective *D) {
2801 VisitOMPLoopDirective(D);
2802 D->setHasCancel(Record.readBool());
2805void ASTStmtReader::VisitOMPTargetTeamsDirective(OMPTargetTeamsDirective *D) {
2807 VisitOMPExecutableDirective(D);
2810void ASTStmtReader::VisitOMPTargetTeamsDistributeDirective(
2811 OMPTargetTeamsDistributeDirective *D) {
2812 VisitOMPLoopDirective(D);
2815void ASTStmtReader::VisitOMPTargetTeamsDistributeParallelForDirective(
2816 OMPTargetTeamsDistributeParallelForDirective *D) {
2817 VisitOMPLoopDirective(D);
2818 D->setHasCancel(Record.readBool());
2821void ASTStmtReader::VisitOMPTargetTeamsDistributeParallelForSimdDirective(
2822 OMPTargetTeamsDistributeParallelForSimdDirective *D) {
2823 VisitOMPLoopDirective(D);
2826void ASTStmtReader::VisitOMPTargetTeamsDistributeSimdDirective(
2827 OMPTargetTeamsDistributeSimdDirective *D) {
2828 VisitOMPLoopDirective(D);
2831void ASTStmtReader::VisitOMPInteropDirective(OMPInteropDirective *D) {
2833 VisitOMPExecutableDirective(D);
2836void ASTStmtReader::VisitOMPDispatchDirective(OMPDispatchDirective *D) {
2838 VisitOMPExecutableDirective(D);
2839 D->setTargetCallLoc(Record.readSourceLocation());
2842void ASTStmtReader::VisitOMPMaskedDirective(OMPMaskedDirective *D) {
2844 VisitOMPExecutableDirective(D);
2847void ASTStmtReader::VisitOMPGenericLoopDirective(OMPGenericLoopDirective *D) {
2848 VisitOMPLoopDirective(D);
2851void ASTStmtReader::VisitOMPTeamsGenericLoopDirective(
2852 OMPTeamsGenericLoopDirective *D) {
2853 VisitOMPLoopDirective(D);
2856void ASTStmtReader::VisitOMPTargetTeamsGenericLoopDirective(
2857 OMPTargetTeamsGenericLoopDirective *D) {
2858 VisitOMPLoopDirective(D);
2859 D->setCanBeParallelFor(Record.readBool());
2862void ASTStmtReader::VisitOMPParallelGenericLoopDirective(
2863 OMPParallelGenericLoopDirective *D) {
2864 VisitOMPLoopDirective(D);
2867void ASTStmtReader::VisitOMPTargetParallelGenericLoopDirective(
2868 OMPTargetParallelGenericLoopDirective *D) {
2869 VisitOMPLoopDirective(D);
2876 (void)Record.readInt();
2878 S->Range = Record.readSourceRange();
2879 S->DirectiveLoc = Record.readSourceLocation();
2880 Record.readOpenACCClauseList(S->Clauses);
2883void ASTStmtReader::VisitOpenACCAssociatedStmtConstruct(
2885 VisitOpenACCConstructStmt(S);
2891 VisitOpenACCAssociatedStmtConstruct(S);
2894void ASTStmtReader::VisitOpenACCLoopConstruct(OpenACCLoopConstruct *S) {
2896 VisitOpenACCAssociatedStmtConstruct(S);
2900void ASTStmtReader::VisitOpenACCCombinedConstruct(OpenACCCombinedConstruct *S) {
2902 VisitOpenACCAssociatedStmtConstruct(S);
2905void ASTStmtReader::VisitOpenACCDataConstruct(OpenACCDataConstruct *S) {
2907 VisitOpenACCAssociatedStmtConstruct(S);
2910void ASTStmtReader::VisitOpenACCEnterDataConstruct(
2911 OpenACCEnterDataConstruct *S) {
2913 VisitOpenACCConstructStmt(S);
2916void ASTStmtReader::VisitOpenACCExitDataConstruct(OpenACCExitDataConstruct *S) {
2918 VisitOpenACCConstructStmt(S);
2921void ASTStmtReader::VisitOpenACCInitConstruct(OpenACCInitConstruct *S) {
2923 VisitOpenACCConstructStmt(S);
2926void ASTStmtReader::VisitOpenACCShutdownConstruct(OpenACCShutdownConstruct *S) {
2928 VisitOpenACCConstructStmt(S);
2931void ASTStmtReader::VisitOpenACCSetConstruct(OpenACCSetConstruct *S) {
2933 VisitOpenACCConstructStmt(S);
2936void ASTStmtReader::VisitOpenACCUpdateConstruct(OpenACCUpdateConstruct *S) {
2938 VisitOpenACCConstructStmt(S);
2941void ASTStmtReader::VisitOpenACCHostDataConstruct(OpenACCHostDataConstruct *S) {
2943 VisitOpenACCAssociatedStmtConstruct(S);
2946void ASTStmtReader::VisitOpenACCWaitConstruct(OpenACCWaitConstruct *S) {
2949 (void)Record.readInt();
2950 VisitOpenACCConstructStmt(S);
2951 S->LParenLoc = Record.readSourceLocation();
2952 S->RParenLoc = Record.readSourceLocation();
2953 S->QueuesLoc = Record.readSourceLocation();
2955 for (
unsigned I = 0; I < S->NumExprs; ++I) {
2956 S->getExprPtr()[I] = cast_if_present<Expr>(Record.readSubStmt());
2957 assert((I == 0 || S->getExprPtr()[I] !=
nullptr) &&
2958 "Only first expression should be null");
2962void ASTStmtReader::VisitOpenACCCacheConstruct(OpenACCCacheConstruct *S) {
2964 (void)Record.readInt();
2965 VisitOpenACCConstructStmt(S);
2966 S->ParensLoc = Record.readSourceRange();
2967 S->ReadOnlyLoc = Record.readSourceLocation();
2968 for (
unsigned I = 0; I < S->NumVars; ++I)
2972void ASTStmtReader::VisitOpenACCAtomicConstruct(OpenACCAtomicConstruct *S) {
2974 VisitOpenACCConstructStmt(S);
2976 S->setAssociatedStmt(Record.readSubStmt());
2985 S->SubExprs[HLSLOutArgExpr::BaseLValue] = Record.readSubExpr();
2986 S->SubExprs[HLSLOutArgExpr::CastedTemporary] = Record.readSubExpr();
2987 S->SubExprs[HLSLOutArgExpr::WritebackCast] = Record.readSubExpr();
2988 S->IsInOut = Record.readBool();
2996 switch (ReadingKind) {
2998 llvm_unreachable(
"should not call this when not reading anything");
3001 return ReadStmtFromStream(F);
3006 llvm_unreachable(
"ReadingKind not set ?");
3010 return cast_or_null<Expr>(
ReadStmt(F));
3025 ReadingKindTracker ReadingKind(Read_Stmt, *
this);
3030 llvm::DenseMap<uint64_t, Stmt *> StmtEntries;
3033 unsigned PrevNumStmts = StmtStack.size();
3042 Cursor.advanceSkippingSubblocks();
3047 llvm::BitstreamEntry Entry = MaybeEntry.get();
3049 switch (Entry.Kind) {
3050 case llvm::BitstreamEntry::SubBlock:
3051 case llvm::BitstreamEntry::Error:
3052 Error(
"malformed block record in AST file");
3054 case llvm::BitstreamEntry::EndBlock:
3056 case llvm::BitstreamEntry::Record:
3063 bool Finished =
false;
3064 bool IsStmtReference =
false;
3065 Expected<unsigned> MaybeStmtCode =
Record.readRecord(Cursor, Entry.ID);
3066 if (!MaybeStmtCode) {
3070 switch ((
StmtCode)MaybeStmtCode.get()) {
3076 IsStmtReference =
true;
3077 assert(StmtEntries.contains(
Record[0]) &&
3078 "No stmt was recorded for this offset reference!");
3079 S = StmtEntries[
Record.readInt()];
3087 S =
new (Context) NullStmt(
Empty);
3104 S =
new (Context) DefaultStmt(
Empty);
3108 S =
new (Context) LabelStmt(
Empty);
3119 bool HasElse = IfStmtBits.getNextBit();
3120 bool HasVar = IfStmtBits.getNextBit();
3121 bool HasInit = IfStmtBits.getNextBit();
3140 S =
new (Context) DoStmt(
Empty);
3144 S =
new (Context) ForStmt(
Empty);
3148 S =
new (Context) GotoStmt(
Empty);
3152 S =
new (Context) IndirectGotoStmt(
Empty);
3156 S =
new (Context) ContinueStmt(
Empty);
3160 S =
new (Context) BreakStmt(
Empty);
3173 S =
new (Context) DeclStmt(
Empty);
3177 S =
new (Context) GCCAsmStmt(
Empty);
3181 S =
new (Context) MSAsmStmt(
Empty);
3190 S =
new (Context) SYCLKernelCallStmt(
Empty);
3215 DeclRefExprBits.advance(5);
3216 bool HasFoundDecl = DeclRefExprBits.getNextBit();
3217 bool HasQualifier = DeclRefExprBits.getNextBit();
3218 bool HasTemplateKWAndArgsInfo = DeclRefExprBits.getNextBit();
3219 unsigned NumTemplateArgs = HasTemplateKWAndArgsInfo
3223 HasTemplateKWAndArgsInfo, NumTemplateArgs);
3240 S =
new (Context) ImaginaryLiteral(
Empty);
3252 S =
new (Context) CharacterLiteral(
Empty);
3256 S =
new (Context) ParenExpr(
Empty);
3268 bool HasFPFeatures = UnaryOperatorBits.getNextBit();
3280 S =
new (Context) UnaryExprOrTypeTraitExpr(
Empty);
3284 S =
new (Context) ArraySubscriptExpr(
Empty);
3288 S =
new (Context) MatrixSubscriptExpr(
Empty);
3292 S =
new (Context) ArraySectionExpr(
Empty);
3308 CallExprBits.advance(1);
3309 auto HasFPFeatures = CallExprBits.getNextBit();
3321 bool HasQualifier = ExprMemberBits.getNextBit();
3322 bool HasFoundDecl = ExprMemberBits.getNextBit();
3323 bool HasTemplateInfo = ExprMemberBits.getNextBit();
3326 HasTemplateInfo, NumTemplateArgs);
3332 BinaryOperatorBits.advance( 6);
3333 bool HasFPFeatures = BinaryOperatorBits.getNextBit();
3340 BinaryOperatorBits.advance( 6);
3341 bool HasFPFeatures = BinaryOperatorBits.getNextBit();
3347 S =
new (Context) ConditionalOperator(
Empty);
3351 S =
new (Context) BinaryConditionalOperator(
Empty);
3357 CastExprBits.advance(7);
3358 bool HasFPFeatures = CastExprBits.getNextBit();
3366 CastExprBits.advance(7);
3367 bool HasFPFeatures = CastExprBits.getNextBit();
3373 S =
new (Context) CompoundLiteralExpr(
Empty);
3377 S =
new (Context) ExtVectorElementExpr(
Empty);
3381 S =
new (Context) InitListExpr(
Empty);
3391 S =
new (Context) DesignatedInitUpdateExpr(
Empty);
3395 S =
new (Context) ImplicitValueInitExpr(
Empty);
3399 S =
new (Context) NoInitExpr(
Empty);
3403 S =
new (Context) ArrayInitLoopExpr(
Empty);
3407 S =
new (Context) ArrayInitIndexExpr(
Empty);
3411 S =
new (Context) VAArgExpr(
Empty);
3415 S =
new (Context) SourceLocExpr(
Empty);
3419 S =
new (Context) EmbedExpr(
Empty);
3423 S =
new (Context) AddrLabelExpr(
Empty);
3427 S =
new (Context) StmtExpr(
Empty);
3431 S =
new (Context) ChooseExpr(
Empty);
3435 S =
new (Context) GNUNullExpr(
Empty);
3439 S =
new (Context) ShuffleVectorExpr(
Empty);
3445 bool HasFPFeatures = ConvertVectorExprBits.getNextBit();
3451 S =
new (Context) BlockExpr(
Empty);
3461 S =
new (Context) ObjCStringLiteral(
Empty);
3465 S =
new (Context) ObjCBoxedExpr(
Empty);
3480 S =
new (Context) ObjCEncodeExpr(
Empty);
3484 S =
new (Context) ObjCSelectorExpr(
Empty);
3488 S =
new (Context) ObjCProtocolExpr(
Empty);
3492 S =
new (Context) ObjCIvarRefExpr(
Empty);
3496 S =
new (Context) ObjCPropertyRefExpr(
Empty);
3500 S =
new (Context) ObjCSubscriptRefExpr(
Empty);
3504 llvm_unreachable(
"mismatching AST file");
3513 S =
new (Context) ObjCIsaExpr(
Empty);
3517 S =
new (Context) ObjCIndirectCopyRestoreExpr(
Empty);
3521 S =
new (Context) ObjCBridgedCastExpr(
Empty);
3525 S =
new (Context) ObjCForCollectionStmt(
Empty);
3529 S =
new (Context) ObjCAtCatchStmt(
Empty);
3533 S =
new (Context) ObjCAtFinallyStmt(
Empty);
3543 S =
new (Context) ObjCAtSynchronizedStmt(
Empty);
3547 S =
new (Context) ObjCAtThrowStmt(
Empty);
3551 S =
new (Context) ObjCAutoreleasePoolStmt(
Empty);
3555 S =
new (Context) ObjCBoolLiteralExpr(
Empty);
3559 S =
new (Context) ObjCAvailabilityCheckExpr(
Empty);
3563 S =
new (Context) SEHLeaveStmt(
Empty);
3567 S =
new (Context) SEHExceptStmt(
Empty);
3571 S =
new (Context) SEHFinallyStmt(
Empty);
3575 S =
new (Context) SEHTryStmt(
Empty);
3579 S =
new (Context) CXXCatchStmt(
Empty);
3588 S =
new (Context) CXXForRangeStmt(
Empty);
3592 S =
new (Context) MSDependentExistsStmt(SourceLocation(),
true,
3593 NestedNameSpecifierLoc(),
3594 DeclarationNameInfo(),
3599 S = OMPCanonicalLoop::createEmpty(Context);
3609 OMPParallelDirective::CreateEmpty(Context,
3617 S = OMPSimdDirective::CreateEmpty(Context, NumClauses,
3618 CollapsedNum,
Empty);
3646 "Reverse directive has no clauses");
3667 S = OMPForDirective::CreateEmpty(Context, NumClauses, CollapsedNum,
3675 S = OMPForSimdDirective::CreateEmpty(Context, NumClauses, CollapsedNum,
3681 S = OMPSectionsDirective::CreateEmpty(
3686 S = OMPSectionDirective::CreateEmpty(Context,
Empty);
3690 S = OMPScopeDirective::CreateEmpty(
3695 S = OMPSingleDirective::CreateEmpty(
3700 S = OMPMasterDirective::CreateEmpty(Context,
Empty);
3704 S = OMPCriticalDirective::CreateEmpty(
3711 S = OMPParallelForDirective::CreateEmpty(Context, NumClauses,
3712 CollapsedNum,
Empty);
3719 S = OMPParallelForSimdDirective::CreateEmpty(Context, NumClauses,
3720 CollapsedNum,
Empty);
3725 S = OMPParallelMasterDirective::CreateEmpty(
3730 S = OMPParallelMaskedDirective::CreateEmpty(
3735 S = OMPParallelSectionsDirective::CreateEmpty(
3740 S = OMPTaskDirective::CreateEmpty(
3745 S = OMPTaskyieldDirective::CreateEmpty(Context,
Empty);
3749 S = OMPBarrierDirective::CreateEmpty(Context,
Empty);
3753 S = OMPTaskwaitDirective::CreateEmpty(
3763 S = OMPTaskgroupDirective::CreateEmpty(
3768 S = OMPFlushDirective::CreateEmpty(
3773 S = OMPDepobjDirective::CreateEmpty(
3785 S = OMPOrderedDirective::CreateEmpty(Context, NumClauses,
3786 !HasAssociatedStmt,
Empty);
3791 S = OMPAtomicDirective::CreateEmpty(
3824 CollapsedNum,
Empty);
3859 CollapsedNum,
Empty);
3867 CollapsedNum,
Empty);
3875 CollapsedNum,
Empty);
3883 CollapsedNum,
Empty);
3891 CollapsedNum,
Empty);
3899 CollapsedNum,
Empty);
3907 CollapsedNum,
Empty);
3915 Context, NumClauses, CollapsedNum,
Empty);
3923 Context, NumClauses, CollapsedNum,
Empty);
3939 CollapsedNum,
Empty);
3956 CollapsedNum,
Empty);
3964 CollapsedNum,
Empty);
3980 CollapsedNum,
Empty);
3988 CollapsedNum,
Empty);
3996 Context, NumClauses, CollapsedNum,
Empty);
4004 Context, NumClauses, CollapsedNum,
Empty);
4017 CollapsedNum,
Empty);
4025 Context, NumClauses, CollapsedNum,
Empty);
4033 Context, NumClauses, CollapsedNum,
Empty);
4041 Context, NumClauses, CollapsedNum,
Empty);
4064 CollapsedNum,
Empty);
4072 CollapsedNum,
Empty);
4080 CollapsedNum,
Empty);
4088 CollapsedNum,
Empty);
4096 Context, NumClauses, CollapsedNum,
Empty);
4109 CallExprBits.advance(1);
4110 auto HasFPFeatures = CallExprBits.getNextBit();
4119 CallExprBits.advance(1);
4120 auto HasFPFeatures = CallExprBits.getNextBit();
4127 S =
new (Context) CXXRewrittenBinaryOperator(
Empty);
4137 S =
new (Context) CXXInheritedCtorInitExpr(
Empty);
4149 CastExprBits.advance(7);
4150 bool HasFPFeatures = CastExprBits.getNextBit();
4178 CastExprBits.advance(7);
4179 bool HasFPFeatures = CastExprBits.getNextBit();
4187 assert(PathSize == 0 &&
"Wrong PathSize!");
4189 S =
new (Context) BuiltinBitCastExpr(
Empty);
4196 CallExprBits.advance(1);
4197 auto HasFPFeatures = CallExprBits.getNextBit();
4204 S =
new (Context) CXXStdInitializerListExpr(
Empty);
4208 S =
new (Context) CXXBoolLiteralExpr(
Empty);
4212 S =
new (Context) CXXNullPtrLiteralExpr(
Empty);
4216 S =
new (Context) CXXTypeidExpr(
Empty,
true);
4220 S =
new (Context) CXXTypeidExpr(
Empty,
false);
4224 S =
new (Context) CXXUuidofExpr(
Empty,
true);
4228 S =
new (Context) MSPropertyRefExpr(
Empty);
4232 S =
new (Context) MSPropertySubscriptExpr(
Empty);
4236 S =
new (Context) CXXUuidofExpr(
Empty,
false);
4244 S =
new (Context) CXXThrowExpr(
Empty);
4258 S =
new (Context) CXXBindTemporaryExpr(
Empty);
4262 S =
new (Context) CXXScalarValueInitExpr(
Empty);
4275 S =
new (Context) CXXDeleteExpr(
Empty);
4279 S =
new (Context) CXXPseudoDestructorExpr(
Empty);
4289 BitsUnpacker DependentScopeMemberBits(
4291 bool HasTemplateKWAndArgsInfo = DependentScopeMemberBits.getNextBit();
4293 bool HasFirstQualifierFoundInScope =
4294 DependentScopeMemberBits.getNextBit();
4296 Context, HasTemplateKWAndArgsInfo, NumTemplateArgs,
4297 HasFirstQualifierFoundInScope);
4302 BitsUnpacker DependentScopeDeclRefBits(
4305 bool HasTemplateKWAndArgsInfo = DependentScopeDeclRefBits.getNextBit();
4306 unsigned NumTemplateArgs =
4307 HasTemplateKWAndArgsInfo
4308 ? DependentScopeDeclRefBits.getNextBits(16)
4311 Context, HasTemplateKWAndArgsInfo, NumTemplateArgs);
4323 auto HasTemplateKWAndArgsInfo = OverloadExprBits.getNextBit();
4324 auto NumTemplateArgs = HasTemplateKWAndArgsInfo
4328 Context, NumResults, HasTemplateKWAndArgsInfo, NumTemplateArgs);
4335 auto HasTemplateKWAndArgsInfo = OverloadExprBits.getNextBit();
4336 auto NumTemplateArgs = HasTemplateKWAndArgsInfo
4340 Context, NumResults, HasTemplateKWAndArgsInfo, NumTemplateArgs);
4351 S =
new (Context) ArrayTypeTraitExpr(
Empty);
4355 S =
new (Context) ExpressionTraitExpr(
Empty);
4359 S =
new (Context) CXXNoexceptExpr(
Empty);
4363 S =
new (Context) PackExpansionExpr(
Empty);
4379 S =
new (Context) SubstNonTypeTemplateParmExpr(
Empty);
4383 S =
new (Context) SubstNonTypeTemplateParmPackExpr(
Empty);
4392 S =
new (Context) MaterializeTemporaryExpr(
Empty);
4396 S =
new (Context) CXXFoldExpr(
Empty);
4405 S =
new (Context) OpaqueValueExpr(
Empty);
4411 CallExprBits.advance(1);
4412 auto HasFPFeatures = CallExprBits.getNextBit();
4419 S =
new (Context) AsTypeExpr(
Empty);
4429 S =
new (Context) AtomicExpr(
Empty);
4445 S =
new (Context) CoreturnStmt(
Empty);
4449 S =
new (Context) CoawaitExpr(
Empty);
4453 S =
new (Context) CoyieldExpr(
Empty);
4457 S =
new (Context) DependentCoawaitExpr(
Empty);
4461 S =
new (Context) ConceptSpecializationExpr(
Empty);
4466 S = OpenACCComputeConstruct::CreateEmpty(Context, NumClauses);
4551 ++NumStatementsRead;
4553 if (S && !IsStmtReference) {
4555 StmtEntries[
Cursor.GetCurrentBitNo()] = S;
4559 "Invalid deserialization of statement");
4560 StmtStack.push_back(S);
4563 assert(StmtStack.size() > PrevNumStmts &&
"Read too many sub-stmts!");
4564 assert(StmtStack.size() == PrevNumStmts + 1 &&
"Extra expressions on stack!");
4565 return StmtStack.pop_back_val();
This file provides AST data structures related to concepts.
Defines the clang::ASTContext interface.
static concepts::Requirement::SubstitutionDiagnostic * readSubstitutionDiagnostic(ASTRecordReader &Record)
static ConstraintSatisfaction readConstraintSatisfaction(ASTRecordReader &Record)
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....
Defines the C++ template declaration subclasses.
Defines the clang::Expr interface and subclasses for C++ expressions.
Defines enumerations for expression traits intrinsics.
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
Defines the clang::LangOptions interface.
llvm::MachO::Record Record
This file defines OpenMP AST classes for clauses.
Defines some OpenMP-specific enums and functions.
static std::string toString(const clang::SanitizerSet &Sanitizers)
Produce a string containing comma-separated names of sanitizers in Sanitizers set.
Defines the clang::SourceLocation class and associated facilities.
Defines various enumerations that describe declaration and type specifiers.
Defines the Objective-C statement AST node classes.
This file defines OpenMP AST classes for executable directives and clauses.
This file defines SYCL AST classes used to represent calls to SYCL kernels.
Defines enumerations for the type traits support.
C Language Family Type Representation.
static OMPAssumeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
static OMPCancelDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
static OMPCancellationPointDirective * CreateEmpty(const ASTContext &C, EmptyShell)
Creates an empty directive.
static OMPDispatchDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPDistributeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPDistributeParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPDistributeParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPDistributeSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPErrorDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
static OMPFuseDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses)
Build an empty 'pragma omp fuse' AST node for deserialization.
static OMPGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with a place for NumClauses clauses.
static OMPInterchangeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned NumLoops)
Build an empty 'pragma omp interchange' AST node for deserialization.
static OMPInteropDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
static OMPMaskedDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
static OMPMaskedTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPMaskedTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPMasterTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPMasterTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPParallelGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPParallelMaskedTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPParallelMaskedTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPParallelMasterTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPParallelMasterTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPReverseDirective * CreateEmpty(const ASTContext &C, unsigned NumLoops)
Build an empty 'pragma omp reverse' AST node for deserialization.
static OMPScanDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPStripeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned NumLoops)
Build an empty 'pragma omp stripe' AST node for deserialization.
static OMPTargetDataDirective * CreateEmpty(const ASTContext &C, unsigned N, EmptyShell)
Creates an empty directive with the place for N clauses.
static OMPTargetDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTargetEnterDataDirective * CreateEmpty(const ASTContext &C, unsigned N, EmptyShell)
Creates an empty directive with the place for N clauses.
static OMPTargetExitDataDirective * CreateEmpty(const ASTContext &C, unsigned N, EmptyShell)
Creates an empty directive with the place for N clauses.
static OMPTargetParallelDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTargetParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTargetParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTargetParallelGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTargetSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTargetTeamsDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTargetTeamsDistributeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTargetTeamsDistributeParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTargetTeamsDistributeParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTargetTeamsDistributeSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTargetTeamsGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTargetUpdateDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTeamsDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTeamsDistributeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTeamsDistributeParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTeamsDistributeParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTeamsDistributeSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTeamsGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static OMPTileDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned NumLoops)
Build an empty 'pragma omp tile' AST node for deserialization.
static OMPUnrollDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses)
Build an empty 'pragma omp unroll' AST node for deserialization.
static OpenACCAtomicConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
ArrayRef< Expr * > getVarList() const
static OpenACCCacheConstruct * CreateEmpty(const ASTContext &C, unsigned NumVars)
static OpenACCCombinedConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCDataConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCEnterDataConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCExitDataConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCHostDataConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCInitConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCLoopConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCSetConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCShutdownConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCUpdateConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCWaitConstruct * CreateEmpty(const ASTContext &C, unsigned NumExprs, unsigned NumClauses)
void setValue(const ASTContext &C, const llvm::APInt &Val)
bool needsCleanup() const
Returns whether the object performed allocations.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
ASTContext & getContext()
Retrieve the AST context that this AST reader supplements.
Stmt * ReadSubStmt()
Reads a sub-statement operand during statement reading.
Expr * ReadSubExpr()
Reads a sub-expression operand during statement reading.
Expr * ReadExpr(ModuleFile &F)
Reads an expression.
Stmt * ReadStmt(ModuleFile &F)
Reads a statement.
serialization::ModuleFile ModuleFile
An object for streaming information from a record.
static const unsigned NumExprFields
The number of record fields required for the Expr class itself.
static const unsigned NumStmtFields
The number of record fields required for the Stmt class itself.
static const unsigned NumExprBits
The number of bits required for the packing bits for the Expr class.
void ReadTemplateKWAndArgsInfo(ASTTemplateKWAndArgsInfo &Args, TemplateArgumentLoc *ArgsLocArray, unsigned NumTemplateArgs)
Read and initialize a ExplicitTemplateArgumentList structure.
ASTStmtReader(ASTRecordReader &Record, llvm::BitstreamCursor &Cursor)
AddrLabelExpr - The GNU address of label extension, representing &&label.
void setLabel(LabelDecl *L)
void setLabelLoc(SourceLocation L)
void setAmpAmpLoc(SourceLocation L)
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...
bool isOMPArraySection() const
ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.
void setRBracketLoc(SourceLocation L)
An Embarcadero array type trait, as used in the implementation of __array_rank and __array_extent.
AsTypeExpr - Clang builtin function __builtin_astype [OpenCL 6.2.4.2] This AST node provides support ...
AsmStmt is the base class for GCCAsmStmt and MSAsmStmt.
void setAsmLoc(SourceLocation L)
unsigned getNumClobbers() const
unsigned getNumOutputs() const
unsigned getNumInputs() const
AtomicExpr - Variadic atomic builtins: __atomic_exchange, __atomic_fetch_*, __atomic_load,...
unsigned getNumSubExprs() const
Represents an attribute applied to a statement.
static AttributedStmt * CreateEmpty(const ASTContext &C, unsigned NumAttrs)
BinaryConditionalOperator - The GNU extension to the conditional operator which allows the middle ope...
A builtin binary operation expression such as "x + y" or "x <= y".
void setHasStoredFPFeatures(bool B)
Set and fetch the bit that shows whether FPFeatures needs to be allocated in Trailing Storage.
void setOperatorLoc(SourceLocation L)
void setExcludedOverflowPattern(bool B)
Set and get the bit that informs arithmetic overflow sanitizers whether or not they should exclude ce...
static BinaryOperator * CreateEmpty(const ASTContext &C, bool hasFPFeatures)
void setStoredFPFeatures(FPOptionsOverride F)
Set FPFeatures in trailing storage, used only by Serialization.
void setOpcode(Opcode Opc)
BinaryOperatorKind Opcode
BlockExpr - Adaptor class for mixing a BlockDecl with expressions.
void setBlockDecl(BlockDecl *BD)
BreakStmt - This represents a break.
Represents a C++2a __builtin_bit_cast(T, v) expression.
CStyleCastExpr - An explicit cast in C (C99 6.5.4) or a C-style cast in C++ (C++ [expr....
static CStyleCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize, bool HasFPFeatures)
void setRParenLoc(SourceLocation L)
void setLParenLoc(SourceLocation L)
Represents a call to a CUDA kernel function.
static CUDAKernelCallExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPFeatures, EmptyShell Empty)
A C++ addrspace_cast expression (currently only enabled for OpenCL).
static CXXAddrspaceCastExpr * CreateEmpty(const ASTContext &Context)
Represents binding an expression to a temporary.
void setTemporary(CXXTemporary *T)
A boolean literal, per ([C++ lex.bool] Boolean literals).
void setLocation(SourceLocation L)
CXXCatchStmt - This represents a C++ catch block.
A C++ const_cast expression (C++ [expr.const.cast]).
static CXXConstCastExpr * CreateEmpty(const ASTContext &Context)
Represents a call to a C++ constructor.
void setArg(unsigned Arg, Expr *ArgExpr)
Set the specified argument.
unsigned getNumArgs() const
Return the number of arguments to the constructor call.
static CXXConstructExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs)
Create an empty C++ construction expression.
A default argument (C++ [dcl.fct.default]).
static CXXDefaultArgExpr * CreateEmpty(const ASTContext &C, bool HasRewrittenInit)
A use of a default initializer in a constructor or in aggregate initialization.
static CXXDefaultInitExpr * CreateEmpty(const ASTContext &C, bool HasRewrittenInit)
Represents a delete expression for memory deallocation and destructor calls, e.g.
Represents a C++ member access expression where the actual member referenced could not be resolved be...
unsigned getNumTemplateArgs() const
Retrieve the number of template arguments provided as part of this template-id.
static CXXDependentScopeMemberExpr * CreateEmpty(const ASTContext &Ctx, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs, bool HasFirstQualifierFoundInScope)
A C++ dynamic_cast expression (C++ [expr.dynamic.cast]).
static CXXDynamicCastExpr * CreateEmpty(const ASTContext &Context, unsigned pathSize)
Represents a folding of a pack over an operator.
CXXForRangeStmt - This represents C++0x [stmt.ranged]'s ranged for statement, represented as 'for (ra...
void setLoopVarStmt(Stmt *S)
void setRangeStmt(Stmt *S)
void setBeginStmt(Stmt *S)
Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr....
void setLParenLoc(SourceLocation L)
static CXXFunctionalCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize, bool HasFPFeatures)
void setRParenLoc(SourceLocation L)
Represents a call to an inherited base class constructor from an inheriting constructor.
Represents a call to a member function that may be written either with member call syntax (e....
static CXXMemberCallExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPFeatures, EmptyShell Empty)
Abstract class common to all of the C++ "named"/"keyword" casts.
Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)".
static CXXNewExpr * CreateEmpty(const ASTContext &Ctx, bool IsArray, bool HasInit, unsigned NumPlacementArgs, bool IsParenTypeId)
Create an empty c++ new expression.
bool hasInitializer() const
Whether this new-expression has any initializer at all.
void setOperatorDelete(FunctionDecl *D)
unsigned getNumPlacementArgs() const
bool isParenTypeId() const
raw_arg_iterator raw_arg_end()
raw_arg_iterator raw_arg_begin()
void setOperatorNew(FunctionDecl *D)
Represents a C++11 noexcept expression (C++ [expr.unary.noexcept]).
The null pointer literal (C++11 [lex.nullptr])
void setLocation(SourceLocation L)
A call to an overloaded operator written using operator syntax.
static CXXOperatorCallExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPFeatures, EmptyShell Empty)
Represents a list-initialization with parenthesis.
void setInitializedFieldInUnion(FieldDecl *FD)
static CXXParenListInitExpr * CreateEmpty(ASTContext &C, unsigned numExprs, EmptyShell Empty)
void setArrayFiller(Expr *E)
Represents a C++ pseudo-destructor (C++ [expr.pseudo]).
void setDestroyedType(IdentifierInfo *II, SourceLocation Loc)
Set the name of destroyed type for a dependent pseudo-destructor expression.
A C++ reinterpret_cast expression (C++ [expr.reinterpret.cast]).
static CXXReinterpretCastExpr * CreateEmpty(const ASTContext &Context, unsigned pathSize)
A rewritten comparison expression that was originally written using operator syntax.
An expression "T()" which creates an rvalue of a non-class type T.
A C++ static_cast expression (C++ [expr.static.cast]).
static CXXStaticCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize, bool hasFPFeatures)
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.
static CXXTemporaryObjectExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs)
Represents the this expression in C++.
void setCapturedByCopyInLambdaWithExplicitObjectParameter(bool Set)
void setLocation(SourceLocation L)
static CXXThisExpr * CreateEmpty(const ASTContext &Ctx)
A C++ throw-expression (C++ [except.throw]).
CXXTryStmt - A C++ try block, including all handlers.
unsigned getNumHandlers() const
static CXXTryStmt * Create(const ASTContext &C, SourceLocation tryLoc, CompoundStmt *tryBlock, ArrayRef< Stmt * > handlers)
A C++ typeid expression (C++ [expr.typeid]), which gets the type_info that corresponds to the supplie...
bool isTypeOperand() const
void setSourceRange(SourceRange R)
Describes an explicit type conversion that uses functional notion but could not be resolved because o...
void setRParenLoc(SourceLocation L)
void setArg(unsigned I, Expr *E)
void setLParenLoc(SourceLocation L)
unsigned getNumArgs() const
Retrieve the number of arguments.
static CXXUnresolvedConstructExpr * CreateEmpty(const ASTContext &Context, unsigned NumArgs)
A Microsoft C++ __uuidof expression, which gets the _GUID that corresponds to the supplied type or ex...
bool isTypeOperand() const
void setSourceRange(SourceRange R)
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
void setRParenLoc(SourceLocation L)
void setCoroElideSafe(bool V=true)
void setArg(unsigned Arg, Expr *ArgExpr)
setArg - Set the specified argument.
void setADLCallKind(ADLCallKind V=UsesADL)
static CallExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPFeatures, EmptyShell Empty)
Create an empty call expression, for deserialization.
void setUsesMemberSyntax(bool V=true)
void setPreArg(unsigned I, Stmt *PreArg)
void setStoredFPFeatures(FPOptionsOverride F)
Set FPOptionsOverride in trailing storage. Used only by Serialization.
unsigned getNumArgs() const
getNumArgs - Return the number of actual arguments to this call.
This captures a statement into a function.
static CapturedStmt * CreateDeserialized(const ASTContext &Context, unsigned NumCaptures)
Expr ** capture_init_iterator
Iterator that walks over the capture initialization arguments.
void setCapturedRegionKind(CapturedRegionKind Kind)
Set the captured region kind.
CapturedDecl * getCapturedDecl()
Retrieve the outlined function declaration.
Stmt * getCapturedStmt()
Retrieve the statement being captured.
capture_init_iterator capture_init_begin()
Retrieve the first initialization argument.
void setCapturedDecl(CapturedDecl *D)
Set the outlined function declaration.
void setCapturedRecordDecl(RecordDecl *D)
Set the record declaration for captured variables.
capture_init_iterator capture_init_end()
Retrieve the iterator pointing one past the last initialization argument.
VariableCaptureKind
The different capture forms: by 'this', by reference, capture for variable-length array type etc.
CaseStmt - Represent a case statement.
void setEllipsisLoc(SourceLocation L)
Set the location of the ... in a case statement of the form LHS ... RHS.
static CaseStmt * CreateEmpty(const ASTContext &Ctx, bool CaseStmtIsGNURange)
Build an empty case statement.
CastExpr - Base class for type casts, including both implicit casts (ImplicitCastExpr) and explicit c...
FPOptionsOverride * getTrailingFPFeatures()
Return a pointer to the trailing FPOptions.
path_iterator path_begin()
unsigned path_size() const
void setCastKind(CastKind K)
bool hasStoredFPFeatures() const
CXXBaseSpecifier ** path_iterator
void setValue(unsigned Val)
void setLocation(SourceLocation Location)
void setKind(CharacterLiteralKind kind)
ChooseExpr - GNU builtin-in function __builtin_choose_expr.
void setRParenLoc(SourceLocation L)
void setIsConditionTrue(bool isTrue)
void setBuiltinLoc(SourceLocation L)
Represents a 'co_await' expression.
void setIsImplicit(bool value=true)
CompoundAssignOperator - For compound assignments (e.g.
void setComputationResultType(QualType T)
static CompoundAssignOperator * CreateEmpty(const ASTContext &C, bool hasFPFeatures)
void setComputationLHSType(QualType T)
CompoundLiteralExpr - [C99 6.5.2.5].
void setFileScope(bool FS)
void setTypeSourceInfo(TypeSourceInfo *tinfo)
void setLParenLoc(SourceLocation L)
void setInitializer(Expr *E)
CompoundStmt - This represents a group of statements like { stmt stmt }.
static CompoundStmt * CreateEmpty(const ASTContext &C, unsigned NumStmts, bool HasFPFeatures)
bool hasStoredFPFeatures() const
Represents the specialization of a concept - evaluates to a prvalue of type bool.
ConditionalOperator - The ?
ConstantExpr - An expression that occurs in a constant context and optionally the result of evaluatin...
ConstantResultStorageKind getResultStorageKind() const
static ConstantExpr * CreateEmpty(const ASTContext &Context, ConstantResultStorageKind StorageKind)
The result of a constraint satisfaction check, containing the necessary information to diagnose an un...
llvm::SmallVector< UnsatisfiedConstraintRecord, 4 > Details
The substituted constraint expr, if the template arguments could be substituted into them,...
ContinueStmt - This represents a continue.
ConvertVectorExpr - Clang builtin function __builtin_convertvector This AST node provides support for...
static ConvertVectorExpr * CreateEmpty(const ASTContext &C, bool hasFPFeatures)
void setStoredFPFeatures(FPOptionsOverride F)
Set FPFeatures in trailing storage, used by Serialization & ASTImporter.
bool hasStoredFPFeatures() const
Is FPFeatures in Trailing Storage?
Represents a 'co_return' statement in the C++ Coroutines TS.
Represents the body of a coroutine.
static CoroutineBodyStmt * Create(const ASTContext &C, CtorArgs const &Args)
Represents a 'co_yield' expression.
static DeclAccessPair make(NamedDecl *D, AccessSpecifier AS)
static DeclGroup * Create(ASTContext &C, Decl **Decls, unsigned NumDecls)
A reference to a declared variable, function, enum, etc.
bool hasTemplateKWAndArgsInfo() const
static DeclRefExpr * CreateEmpty(const ASTContext &Context, bool HasQualifier, bool HasFoundDecl, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
Construct an empty declaration reference expression.
void setLocation(SourceLocation L)
bool hasQualifier() const
Determine whether this declaration reference was preceded by a C++ nested-name-specifier,...
DeclStmt - Adaptor class for mixing declarations with statements and expressions.
void setStartLoc(SourceLocation L)
void setEndLoc(SourceLocation L)
void setDeclGroup(DeclGroupRef DGR)
Decl - This represents one declaration (or definition), e.g.
DeferStmt - This represents a deferred statement.
void setDeferLoc(SourceLocation DeferLoc)
static DeferStmt * CreateEmpty(ASTContext &Context, EmptyShell Empty)
Represents a 'co_await' expression while the type of the promise is dependent.
A qualified reference to a name whose declaration cannot yet be resolved.
static DependentScopeDeclRefExpr * CreateEmpty(const ASTContext &Context, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
Represents a C99 designated initializer expression.
static DesignatedInitExpr * CreateEmpty(const ASTContext &C, unsigned NumIndexExprs)
void setSubExpr(unsigned Idx, Expr *E)
void setGNUSyntax(bool GNU)
void setEqualOrColonLoc(SourceLocation L)
void setDesignators(const ASTContext &C, const Designator *Desigs, unsigned NumDesigs)
unsigned getNumSubExprs() const
Retrieve the total number of subexpressions in this designated initializer expression,...
void setUpdater(Expr *Updater)
static Designator CreateArrayRangeDesignator(Expr *Start, Expr *End, SourceLocation LBracketLoc, SourceLocation EllipsisLoc)
Creates a GNU array-range designator.
static Designator CreateArrayDesignator(Expr *Index, SourceLocation LBracketLoc)
Creates an array designator.
static Designator CreateFieldDesignator(const IdentifierInfo *FieldName, SourceLocation DotLoc, SourceLocation FieldLoc)
Creates a field designator.
DoStmt - This represents a 'do/while' stmt.
void setWhileLoc(SourceLocation L)
void setDoLoc(SourceLocation L)
void setRParenLoc(SourceLocation L)
Represents a reference to emded data.
ExplicitCastExpr - An explicit cast written in the source code.
void setTypeInfoAsWritten(TypeSourceInfo *writtenTy)
Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...
unsigned getNumObjects() const
llvm::PointerUnion< BlockDecl *, CompoundLiteralExpr * > CleanupObject
The type of objects that are kept in the cleanup.
static ExprWithCleanups * Create(const ASTContext &C, EmptyShell empty, unsigned numObjects)
This represents one expression.
bool isValueDependent() const
Determines whether the value of this expression depends on.
bool isInstantiationDependent() const
Whether this expression is instantiation-dependent, meaning that it depends in some way on.
void setValueKind(ExprValueKind Cat)
setValueKind - Set the value kind produced by this expression.
void setObjectKind(ExprObjectKind Cat)
setObjectKind - Set the object kind produced by this expression.
void setDependence(ExprDependence Deps)
Each concrete expr subclass is expected to compute its dependence and call this in the constructor.
An expression trait intrinsic.
ExtVectorElementExpr - This represents access to specific elements of a vector, and may occur on the ...
void setAccessor(IdentifierInfo *II)
void setAccessorLoc(SourceLocation L)
static FPOptionsOverride getFromOpaqueInt(storage_type I)
static FixedPointLiteral * Create(const ASTContext &C, EmptyShell Empty)
Returns an empty fixed-point literal.
void setLocation(SourceLocation Location)
void setScale(unsigned S)
static FloatingLiteral * Create(const ASTContext &C, const llvm::APFloat &V, bool isexact, QualType Type, SourceLocation L)
const llvm::fltSemantics & getSemantics() const
Return the APFloat semantics this literal uses.
void setValue(const ASTContext &C, const llvm::APFloat &Val)
void setRawSemantics(llvm::APFloatBase::Semantics Sem)
Set the raw enumeration value representing the floating-point semantics of this literal (32-bit IEEE,...
void setLocation(SourceLocation L)
ForStmt - This represents a 'for (init;cond;inc)' stmt.
void setForLoc(SourceLocation L)
void setLParenLoc(SourceLocation L)
void setConditionVariableDeclStmt(DeclStmt *CondVar)
void setRParenLoc(SourceLocation L)
void setSubExpr(Expr *E)
As with any mutator of the AST, be very careful when modifying an existing AST to preserve its invari...
Represents a reference to a function parameter pack, init-capture pack, or binding pack that has been...
static FunctionParmPackExpr * CreateEmpty(const ASTContext &Context, unsigned NumParams)
This represents a GCC inline-assembly statement extension.
unsigned getNumLabels() const
void setAsmStringExpr(Expr *E)
void setRParenLoc(SourceLocation L)
GNUNullExpr - Implements the GNU __null extension, which is a name for a null pointer constant that h...
void setTokenLocation(SourceLocation L)
Represents a C11 generic selection.
unsigned getNumAssocs() const
The number of association expressions.
static GenericSelectionExpr * CreateEmpty(const ASTContext &Context, unsigned NumAssocs)
Create an empty generic selection expression for deserialization.
GotoStmt - This represents a direct goto.
void setLabel(LabelDecl *D)
void setLabelLoc(SourceLocation L)
void setGotoLoc(SourceLocation L)
This class represents temporary values used to represent inout and out arguments in HLSL.
static HLSLOutArgExpr * CreateEmpty(const ASTContext &Ctx)
IfStmt - This represents an if/then/else.
void setConditionVariableDeclStmt(DeclStmt *CondVar)
void setLParenLoc(SourceLocation Loc)
void setElseLoc(SourceLocation ElseLoc)
static IfStmt * CreateEmpty(const ASTContext &Ctx, bool HasElse, bool HasVar, bool HasInit)
Create an empty IfStmt optionally with storage for an else statement, condition variable and init exp...
void setStatementKind(IfStatementKind Kind)
void setRParenLoc(SourceLocation Loc)
void setIfLoc(SourceLocation IfLoc)
ImaginaryLiteral - We support imaginary integer and floating point literals, like "1....
ImplicitCastExpr - Allows us to explicitly represent implicit type conversions, which have no direct ...
static ImplicitCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize, bool HasFPFeatures)
void setIsPartOfExplicitCast(bool PartOfExplicitCast)
Represents an implicitly-generated value initialization of an object of a given type.
IndirectGotoStmt - This represents an indirect goto.
void setGotoLoc(SourceLocation L)
void setStarLoc(SourceLocation L)
Describes an C or C++ initializer list.
void setSyntacticForm(InitListExpr *Init)
Expr * updateInit(const ASTContext &C, unsigned Init, Expr *expr)
Updates the initializer at index Init with the new expression expr, and returns the old expression at...
void setLBraceLoc(SourceLocation Loc)
void setRBraceLoc(SourceLocation Loc)
void sawArrayRangeDesignator(bool ARD=true)
void reserveInits(const ASTContext &C, unsigned NumInits)
Reserve space for some number of initializers.
void setLocation(SourceLocation Location)
static IntegerLiteral * Create(const ASTContext &C, const llvm::APInt &V, QualType type, SourceLocation l)
Returns a new integer literal with value 'V' and type 'type'.
LabelStmt - Represents a label, which has a substatement.
void setSubStmt(Stmt *SS)
void setDecl(LabelDecl *D)
void setIdentLoc(SourceLocation L)
void setSideEntry(bool SE)
A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...
Expr ** capture_init_iterator
Iterator that walks over the capture initialization arguments.
static LambdaExpr * CreateDeserialized(const ASTContext &C, unsigned NumCaptures)
Construct a new lambda expression that will be deserialized from an external source.
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...
Base class for BreakStmt and ContinueStmt.
void setLabelDecl(LabelDecl *S)
void setLabelLoc(SourceLocation L)
void setKwLoc(SourceLocation L)
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.
MS property subscript expression.
void setRBracketLoc(SourceLocation L)
Represents a prvalue temporary that is written into memory so that a reference can bind to it.
MatrixSingleSubscriptExpr - Matrix single subscript expression for the MatrixType extension when you ...
void setRBracketLoc(SourceLocation L)
MatrixSubscriptExpr - Matrix subscript expression for the MatrixType extension.
void setColumnIdx(Expr *E)
void setRBracketLoc(SourceLocation L)
MemberExpr - [C99 6.5.2.3] Structure and Union Members.
static MemberExpr * CreateEmpty(const ASTContext &Context, bool HasQualifier, bool HasFoundDecl, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
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.
void setSemiLoc(SourceLocation L)
An explicit cast in C or a C-style cast in C++, which uses the syntax ([s1][s2]......
void setLParenLoc(SourceLocation L)
static OMPArrayShapingExpr * CreateEmpty(const ASTContext &Context, unsigned NumDims)
void setRParenLoc(SourceLocation L)
OpenMP 5.0 [2.1.6 Iterators] Iterators are identifiers that expand to multiple values in the clause o...
void setLParenLoc(SourceLocation L)
static OMPIteratorExpr * CreateEmpty(const ASTContext &Context, unsigned NumIterators)
void setRParenLoc(SourceLocation L)
void setIteratorKwLoc(SourceLocation L)
ObjCArrayLiteral - used for objective-c array containers; as in: @["Hello", NSApp,...
static ObjCArrayLiteral * CreateEmpty(const ASTContext &C, unsigned NumElements)
Expr ** getElements()
Retrieve elements of array of literals.
unsigned getNumElements() const
getNumElements - Return number of elements of objective-c array literal.
Represents Objective-C's @catch statement.
void setCatchParamDecl(VarDecl *D)
void setCatchBody(Stmt *S)
void setRParenLoc(SourceLocation Loc)
void setAtCatchLoc(SourceLocation Loc)
Represents Objective-C's @finally statement.
void setFinallyBody(Stmt *S)
void setAtFinallyLoc(SourceLocation Loc)
Represents Objective-C's @synchronized statement.
void setSynchBody(Stmt *S)
void setAtSynchronizedLoc(SourceLocation Loc)
void setSynchExpr(Stmt *S)
Represents Objective-C's @throw statement.
void setThrowLoc(SourceLocation Loc)
void setThrowExpr(Stmt *S)
Represents Objective-C's @try ... @catch ... @finally statement.
void setAtTryLoc(SourceLocation Loc)
void setFinallyStmt(Stmt *S)
static ObjCAtTryStmt * CreateEmpty(const ASTContext &Context, unsigned NumCatchStmts, bool HasFinally)
unsigned getNumCatchStmts() const
Retrieve the number of @catch statements in this try-catch-finally block.
void setCatchStmt(unsigned I, ObjCAtCatchStmt *S)
Set a particular catch statement.
Represents Objective-C's @autoreleasepool Statement.
void setAtLoc(SourceLocation Loc)
A runtime availability query.
ObjCBoolLiteralExpr - Objective-C Boolean Literal.
void setLocation(SourceLocation L)
ObjCBoxedExpr - used for generalized expression boxing.
An Objective-C "bridged" cast expression, which casts between Objective-C pointers and C pointers,...
ObjCDictionaryLiteral - AST node to represent objective-c dictionary literals; as in:"name" : NSUserN...
static ObjCDictionaryLiteral * CreateEmpty(const ASTContext &C, unsigned NumElements, bool HasPackExpansions)
unsigned getNumElements() const
getNumElements - Return number of elements of objective-c dictionary literal.
ObjCEncodeExpr, used for @encode in Objective-C.
void setEncodedTypeSourceInfo(TypeSourceInfo *EncType)
void setRParenLoc(SourceLocation L)
void setAtLoc(SourceLocation L)
Represents Objective-C's collection statement.
void setCollection(Expr *E)
void setForLoc(SourceLocation Loc)
void setRParenLoc(SourceLocation Loc)
ObjCIndirectCopyRestoreExpr - Represents the passing of a function argument by indirect copy-restore ...
ObjCIsaExpr - Represent X->isa and X.isa when X is an ObjC 'id' type.
void setIsaMemberLoc(SourceLocation L)
void setOpLoc(SourceLocation L)
ObjCIvarRefExpr - A reference to an ObjC instance variable.
void setDecl(ObjCIvarDecl *d)
void setIsFreeIvar(bool A)
void setOpLoc(SourceLocation L)
void setLocation(SourceLocation L)
An expression that sends a message to the given Objective-C object or class.
static ObjCMessageExpr * CreateEmpty(const ASTContext &Context, unsigned NumArgs, unsigned NumStoredSelLocs)
Create an empty Objective-C message expression, to be filled in by subsequent calls.
void setMethodDecl(ObjCMethodDecl *MD)
void setClassReceiver(TypeSourceInfo *TSInfo)
void setInstanceReceiver(Expr *rec)
Turn this message send into an instance message that computes the receiver object with the given expr...
void setSuper(SourceLocation Loc, QualType T, bool IsInstanceSuper)
ReceiverKind
The kind of receiver this message is sending to.
@ 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.
void setDelegateInitCall(bool isDelegate)
ReceiverKind getReceiverKind() const
Determine the kind of receiver that this message is being sent to.
unsigned getNumArgs() const
Return the number of actual arguments in this message, not counting the receiver.
void setSelector(Selector S)
void setArg(unsigned Arg, Expr *ArgExpr)
setArg - Set the specified argument.
ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.
ObjCProtocolExpr used for protocol expression in Objective-C.
void setProtocol(ObjCProtocolDecl *P)
void setRParenLoc(SourceLocation L)
void setAtLoc(SourceLocation L)
ObjCSelectorExpr used for @selector in Objective-C.
void setSelector(Selector S)
void setAtLoc(SourceLocation L)
void setRParenLoc(SourceLocation L)
ObjCStringLiteral, used for Objective-C string literals i.e.
void setAtLoc(SourceLocation L)
void setString(StringLiteral *S)
ObjCSubscriptRefExpr - used for array and dictionary subscripting.
void setRBracket(SourceLocation RB)
void setBaseExpr(Stmt *S)
OffsetOfExpr - [C99 7.17] - This represents an expression of the form offsetof(record-type,...
void setOperatorLoc(SourceLocation L)
static OffsetOfExpr * CreateEmpty(const ASTContext &C, unsigned NumComps, unsigned NumExprs)
void setIndexExpr(unsigned Idx, Expr *E)
void setTypeSourceInfo(TypeSourceInfo *tsi)
void setComponent(unsigned Idx, OffsetOfNode ON)
unsigned getNumExpressions() const
void setRParenLoc(SourceLocation R)
unsigned getNumComponents() const
Kind
The kind of offsetof node we have.
@ 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.
OpaqueValueExpr - An expression referring to an opaque object of a fixed type and value class.
This is a base class for any OpenACC statement-level constructs that have an associated statement.
void setAssociatedStmt(Stmt *S)
This expression type represents an asterisk in an OpenACC Size-Expr, used in the 'tile' and 'gang' cl...
static OpenACCAsteriskSizeExpr * CreateEmpty(const ASTContext &C)
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.
unsigned getNumDecls() const
Gets the number of declarations in the unresolved set.
TemplateArgumentLoc * getTrailingTemplateArgumentLoc()
Return the optional template arguments.
DeclAccessPair * getTrailingResults()
Return the results. Defined after UnresolvedMemberExpr.
bool hasTemplateKWAndArgsInfo() const
unsigned getNumTemplateArgs() const
Represents a C++11 pack expansion that produces a sequence of expressions.
static PackIndexingExpr * CreateDeserialized(ASTContext &Context, unsigned NumTransformedExprs)
ParenExpr - This represents a parenthesized expression, e.g.
void setLParen(SourceLocation Loc)
void setIsProducedByFoldExpansion(bool ProducedByFoldExpansion=true)
void setRParen(SourceLocation Loc)
static ParenListExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumExprs)
Create an empty paren list.
unsigned getNumExprs() const
Return the number of expressions in this paren list.
[C99 6.4.2.2] - A predefined identifier such as func.
void setLocation(SourceLocation L)
static PredefinedExpr * CreateEmpty(const ASTContext &Ctx, bool HasFunctionName)
Create an empty PredefinedExpr.
PseudoObjectExpr - An expression which accesses a pseudo-object l-value.
static PseudoObjectExpr * Create(const ASTContext &Context, Expr *syntactic, ArrayRef< Expr * > semantic, unsigned resultIndex)
Frontend produces RecoveryExprs on semantic errors that prevent creating other well-formed expression...
static RecoveryExpr * CreateEmpty(ASTContext &Ctx, unsigned NumSubExprs)
C++2a [expr.prim.req]: A requires-expression provides a concise way to express requirements on templa...
static RequiresExpr * Create(ASTContext &C, SourceLocation RequiresKWLoc, RequiresExprBodyDecl *Body, SourceLocation LParenLoc, ArrayRef< ParmVarDecl * > LocalParameters, SourceLocation RParenLoc, ArrayRef< concepts::Requirement * > Requirements, SourceLocation RBraceLoc)
ReturnStmt - This represents a return, optionally of an expression: return; return 4;.
void setRetValue(Expr *E)
void setReturnLoc(SourceLocation L)
void setNRVOCandidate(const VarDecl *Var)
Set the variable that might be used for the named return value optimization.
static ReturnStmt * CreateEmpty(const ASTContext &Ctx, bool HasNRVOCandidate)
Create an empty return statement, optionally with storage for an NRVO candidate.
Represents a __leave statement.
void setLeaveLoc(SourceLocation L)
SYCLKernelCallStmt represents the transformation that is applied to the body of a function declared w...
void setOriginalStmt(CompoundStmt *CS)
void setOutlinedFunctionDecl(OutlinedFunctionDecl *OFD)
Set the outlined function declaration.
static SYCLUniqueStableNameExpr * CreateEmpty(const ASTContext &Ctx)
ShuffleVectorExpr - clang-specific builtin-in function __builtin_shufflevector.
void setExprs(const ASTContext &C, ArrayRef< Expr * > Exprs)
void setRParenLoc(SourceLocation L)
void setBuiltinLoc(SourceLocation L)
Represents an expression that computes the length of a parameter pack.
static SizeOfPackExpr * CreateDeserialized(ASTContext &Context, unsigned NumPartialArgs)
bool isPartiallySubstituted() const
Determine whether this represents a partially-substituted sizeof... expression, such as is produced f...
Represents a function call to one of __builtin_LINE(), __builtin_COLUMN(), __builtin_FUNCTION(),...
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;}).
void setRParenLoc(SourceLocation L)
void setLParenLoc(SourceLocation L)
void setSubStmt(CompoundStmt *S)
StmtVisitor - This class implements a simple visitor for Stmt subclasses.
Stmt - This represents one statement.
ExpressionTraitExprBitfields ExpressionTraitExprBits
GenericSelectionExprBitfields GenericSelectionExprBits
LambdaExprBitfields LambdaExprBits
AttributedStmtBitfields AttributedStmtBits
UnresolvedLookupExprBitfields UnresolvedLookupExprBits
SubstNonTypeTemplateParmExprBitfields SubstNonTypeTemplateParmExprBits
CXXNoexceptExprBitfields CXXNoexceptExprBits
CXXRewrittenBinaryOperatorBitfields CXXRewrittenBinaryOperatorBits
ExprWithCleanupsBitfields ExprWithCleanupsBits
StmtClass getStmtClass() const
CXXScalarValueInitExprBitfields CXXScalarValueInitExprBits
CXXConstructExprBitfields CXXConstructExprBits
CXXDependentScopeMemberExprBitfields CXXDependentScopeMemberExprBits
TypeTraitExprBitfields TypeTraitExprBits
CXXNewExprBitfields CXXNewExprBits
SourceLocExprBitfields SourceLocExprBits
ConstantExprBitfields ConstantExprBits
RequiresExprBitfields RequiresExprBits
CXXFoldExprBitfields CXXFoldExprBits
StmtExprBitfields StmtExprBits
StringLiteralBitfields StringLiteralBits
OpaqueValueExprBitfields OpaqueValueExprBits
CXXThrowExprBitfields CXXThrowExprBits
MemberExprBitfields MemberExprBits
PackIndexingExprBitfields PackIndexingExprBits
DeclRefExprBitfields DeclRefExprBits
CXXOperatorCallExprBitfields CXXOperatorCallExprBits
CXXDefaultInitExprBitfields CXXDefaultInitExprBits
NullStmtBitfields NullStmtBits
ArrayTypeTraitExprBitfields ArrayTypeTraitExprBits
PredefinedExprBitfields PredefinedExprBits
UnresolvedMemberExprBitfields UnresolvedMemberExprBits
PseudoObjectExprBitfields PseudoObjectExprBits
CXXDeleteExprBitfields CXXDeleteExprBits
CXXDefaultArgExprBitfields CXXDefaultArgExprBits
StringLiteral - This represents a string literal expression, e.g.
unsigned getLength() const
StringLiteralKind getKind() const
static StringLiteral * CreateEmpty(const ASTContext &Ctx, unsigned NumConcatenated, unsigned Length, unsigned CharByteWidth)
Construct an empty string literal.
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...
Represents a reference to a non-type template parameter pack that has been substituted with a non-tem...
void setColonLoc(SourceLocation L)
void setKeywordLoc(SourceLocation L)
void setNextSwitchCase(SwitchCase *SC)
SwitchStmt - This represents a 'switch' stmt.
void setSwitchLoc(SourceLocation L)
void setConditionVariableDeclStmt(DeclStmt *CondVar)
void setRParenLoc(SourceLocation Loc)
void setLParenLoc(SourceLocation Loc)
static SwitchStmt * CreateEmpty(const ASTContext &Ctx, bool HasInit, bool HasVar)
Create an empty switch statement optionally with storage for an init expression and a condition varia...
void setAllEnumCasesCovered()
Set a flag in the SwitchStmt indicating that if the 'switch (X)' is a switch over an enum value then ...
void setSwitchCaseList(SwitchCase *SC)
A convenient class for passing around template argument information.
void setLAngleLoc(SourceLocation Loc)
void setRAngleLoc(SourceLocation Loc)
void addArgument(const TemplateArgumentLoc &Loc)
Location wrapper for a TemplateArgument.
pack_iterator pack_begin() const
Iterator referencing the first argument of a template argument pack.
unsigned pack_size() const
The number of template arguments in the given template argument pack.
@ Pack
The template argument is actually a parameter pack.
ArgKind getKind() const
Return the kind of stored template argument.
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.
static TypeTraitExpr * CreateDeserialized(const ASTContext &C, bool IsStoredAsBool, unsigned NumArgs)
UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand.
void setKind(UnaryExprOrTypeTrait K)
void setOperatorLoc(SourceLocation L)
void setRParenLoc(SourceLocation L)
void setArgument(Expr *E)
UnaryOperator - This represents the unary-expression's (except sizeof and alignof),...
void setOperatorLoc(SourceLocation L)
void setCanOverflow(bool C)
bool hasStoredFPFeatures() const
Is FPFeatures in Trailing Storage?
void setOpcode(Opcode Opc)
void setStoredFPFeatures(FPOptionsOverride F)
Set FPFeatures in trailing storage, used by Serialization & ASTImporter.
static UnaryOperator * CreateEmpty(const ASTContext &C, bool hasFPFeatures)
A reference to a name which we were able to look up during parsing but could not resolve to a specifi...
static UnresolvedLookupExpr * CreateEmpty(const ASTContext &Context, unsigned NumResults, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
Represents a C++ member access expression for which lookup produced a set of overloaded functions.
static UnresolvedMemberExpr * CreateEmpty(const ASTContext &Context, unsigned NumResults, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
void addDecl(NamedDecl *D)
A call to a literal operator (C++11 [over.literal]) written as a user-defined literal (C++11 [lit....
static UserDefinedLiteral * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPOptions, EmptyShell Empty)
Represents a call to the builtin function __builtin_va_arg.
void setRParenLoc(SourceLocation L)
void setIsMicrosoftABI(bool IsMS)
void setBuiltinLoc(SourceLocation L)
void setWrittenTypeInfo(TypeSourceInfo *TI)
WhileStmt - This represents a 'while' stmt.
void setLParenLoc(SourceLocation L)
void setRParenLoc(SourceLocation L)
void setWhileLoc(SourceLocation L)
static WhileStmt * CreateEmpty(const ASTContext &Ctx, bool HasVar)
Create an empty while statement optionally with storage for a condition variable.
void setConditionVariableDeclStmt(DeclStmt *CondVar)
@ SS_ConstraintsNotSatisfied
@ SS_ExprSubstitutionFailure
Information about a module that has been loaded by the ASTReader.
llvm::BitstreamCursor DeclsCursor
DeclsCursor - This is a cursor to the start of the DECLTYPES_BLOCK block.
StmtCode
Record codes for each kind of statement or expression.
DesignatorTypes
The kinds of designators that can occur in a DesignatedInitExpr.
@ STMT_OMP_SECTION_DIRECTIVE
@ STMT_OPENACC_COMBINED_CONSTRUCT
@ EXPR_DESIGNATED_INIT
A DesignatedInitExpr record.
@ EXPR_COMPOUND_LITERAL
A CompoundLiteralExpr record.
@ STMT_OMP_ASSUME_DIRECTIVE
@ STMT_OPENACC_HOST_DATA_CONSTRUCT
@ 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
@ STMT_OPENACC_SHUTDOWN_CONSTRUCT
@ EXPR_OBJC_ISA
An ObjCIsa Expr record.
@ STMT_OMP_SINGLE_DIRECTIVE
@ STMT_OPENACC_EXIT_DATA_CONSTRUCT
@ 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_MATRIX_SUBSCRIPT
An MatrixSubscriptExpr record.
@ 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_OMP_INTERCHANGE_DIRECTIVE
@ 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_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_SYCLKERNELCALL
A SYCLKernelCallStmt record.
@ 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
@ STMT_OMP_ATOMIC_DIRECTIVE
@ STMT_OPENACC_ATOMIC_CONSTRUCT
@ 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_OPENACC_ENTER_DATA_CONSTRUCT
@ STMT_OMP_CANCEL_DIRECTIVE
@ EXPR_OFFSETOF
An OffsetOfExpr record.
@ STMT_RETURN
A ReturnStmt record.
@ STMT_OBJC_FOR_COLLECTION
An ObjCForCollectionStmt record.
@ STMT_OPENACC_CACHE_CONSTRUCT
@ 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.
@ EXPR_OPENACC_ASTERISK_SIZE
@ 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_OPENACC_DATA_CONSTRUCT
@ 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_OPENACC_WAIT_CONSTRUCT
@ 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
@ STMT_OPENACC_INIT_CONSTRUCT
@ EXPR_CXX_CONSTRUCT
A CXXConstructExpr record.
@ STMT_OMP_PARALLEL_MASKED_DIRECTIVE
@ STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE
@ STMT_OPENACC_UPDATE_CONSTRUCT
@ STMT_OMP_PARALLEL_MASTER_TASKLOOP_SIMD_DIRECTIVE
@ EXPR_OBJC_DICTIONARY_LITERAL
@ 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
@ STMT_OMP_FUSE_DIRECTIVE
@ 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
@ STMT_OMP_REVERSE_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.
@ STMP_OMP_STRIPE_DIRECTIVE
@ 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.
@ STMT_OPENACC_LOOP_CONSTRUCT
@ 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.
@ STMT_OPENACC_SET_CONSTRUCT
@ 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_OBJC_KVC_REF_EXPR
UNUSED.
@ 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.
@ EXPR_BUILTIN_PP_EMBED
A EmbedExpr 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.
ConstantResultStorageKind
Describes the kind of result that can be tail-allocated.
ArrayTypeTrait
Names for the array type traits.
ExprDependenceScope::ExprDependence ExprDependence
IfStatementKind
In an if statement, this denotes whether the statement is a constexpr or consteval if statement.
ExprObjectKind
A further classification of the kind of object referenced by an l-value or x-value.
AccessSpecifier
A C++ access specifier (public, private, protected), plus the special value "none" which means differ...
SmallVector< Attr *, 4 > AttrVec
AttrVec - A vector of Attr, which is how they are stored on the AST.
nullptr
This class represents a compute construct, representing a 'Kind' of ‘parallel’, 'serial',...
CapturedRegionKind
The different kinds of captured statement.
OpenACCComputeConstruct(OpenACCDirectiveKind K, SourceLocation Start, SourceLocation DirectiveLoc, SourceLocation End, ArrayRef< const OpenACCClause * > Clauses, Stmt *StructuredBlock)
UnaryExprOrTypeTrait
Names for the "expression or type" traits.
const FunctionProtoType * T
std::pair< SourceLocation, StringRef > ConstraintSubstitutionDiagnostic
Unsatisfied constraint expressions if the template arguments could be substituted into them,...
CastKind
CastKind - The kind of operation required for a conversion.
llvm::omp::Directive OpenMPDirectiveKind
OpenMP directives.
ExprValueKind
The categorization of expression values, currently following the C++11 scheme.
U cast(CodeGen::Address addr)
@ Implicit
An implicit conversion.
static ASTConstraintSatisfaction * Create(const ASTContext &C, const ConstraintSatisfaction &Satisfaction)
Represents an explicit template argument list in C++, e.g., the "<int>" in "sort<int>".
void initializeFrom(SourceLocation TemplateKWLoc, const TemplateArgumentListInfo &List, TemplateArgumentLoc *OutArgArray)
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.
A placeholder type used to construct an empty shell of a type, that will be filled in later (e....