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"
64using namespace serialization;
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();
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)
143void ASTStmtReader::VisitNullStmt(
NullStmt *S) {
145 S->setSemiLoc(readSourceLocation());
146 S->NullStmtBits.HasLeadingEmptyMacro =
Record.readInt();
152 unsigned NumStmts =
Record.readInt();
153 unsigned HasFPFeatures =
Record.readInt();
154 assert(S->hasStoredFPFeatures() == HasFPFeatures);
156 Stmts.push_back(
Record.readSubStmt());
159 S->setStoredFPFeatures(
161 S->LBraceLoc = readSourceLocation();
162 S->RBraceLoc = readSourceLocation();
165void ASTStmtReader::VisitSwitchCase(
SwitchCase *S) {
168 S->setKeywordLoc(readSourceLocation());
169 S->setColonLoc(readSourceLocation());
172void ASTStmtReader::VisitCaseStmt(
CaseStmt *S) {
174 bool CaseStmtIsGNURange =
Record.readInt();
175 S->setLHS(
Record.readSubExpr());
176 S->setSubStmt(
Record.readSubStmt());
177 if (CaseStmtIsGNURange) {
178 S->setRHS(
Record.readSubExpr());
179 S->setEllipsisLoc(readSourceLocation());
183void ASTStmtReader::VisitDefaultStmt(
DefaultStmt *S) {
185 S->setSubStmt(
Record.readSubStmt());
188void ASTStmtReader::VisitLabelStmt(
LabelStmt *S) {
190 bool IsSideEntry =
Record.readInt();
191 auto *LD = readDeclAs<LabelDecl>();
194 S->setSubStmt(
Record.readSubStmt());
195 S->setIdentLoc(readSourceLocation());
196 S->setSideEntry(IsSideEntry);
206 Record.readAttributes(Attrs);
208 assert(NumAttrs == S->AttributedStmtBits.NumAttrs);
209 assert(NumAttrs == Attrs.size());
210 std::copy(Attrs.begin(), Attrs.end(), S->getAttrArrayPtr());
211 S->SubStmt =
Record.readSubStmt();
212 S->AttributedStmtBits.AttrLoc = readSourceLocation();
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());
230 S->setConditionVariableDeclStmt(cast<DeclStmt>(
Record.readSubStmt()));
232 S->setInit(
Record.readSubStmt());
234 S->setIfLoc(readSourceLocation());
235 S->setLParenLoc(readSourceLocation());
236 S->setRParenLoc(readSourceLocation());
238 S->setElseLoc(readSourceLocation());
241void ASTStmtReader::VisitSwitchStmt(
SwitchStmt *S) {
244 bool HasInit =
Record.readInt();
245 bool HasVar =
Record.readInt();
246 bool AllEnumCasesCovered =
Record.readInt();
247 if (AllEnumCasesCovered)
248 S->setAllEnumCasesCovered();
250 S->setCond(
Record.readSubExpr());
251 S->setBody(
Record.readSubStmt());
253 S->setInit(
Record.readSubStmt());
255 S->setConditionVariableDeclStmt(cast<DeclStmt>(
Record.readSubStmt()));
257 S->setSwitchLoc(readSourceLocation());
258 S->setLParenLoc(readSourceLocation());
259 S->setRParenLoc(readSourceLocation());
267 S->setSwitchCaseList(SC);
273void ASTStmtReader::VisitWhileStmt(
WhileStmt *S) {
276 bool HasVar =
Record.readInt();
278 S->setCond(
Record.readSubExpr());
279 S->setBody(
Record.readSubStmt());
281 S->setConditionVariableDeclStmt(cast<DeclStmt>(
Record.readSubStmt()));
283 S->setWhileLoc(readSourceLocation());
284 S->setLParenLoc(readSourceLocation());
285 S->setRParenLoc(readSourceLocation());
288void ASTStmtReader::VisitDoStmt(
DoStmt *S) {
290 S->setCond(
Record.readSubExpr());
291 S->setBody(
Record.readSubStmt());
292 S->setDoLoc(readSourceLocation());
293 S->setWhileLoc(readSourceLocation());
294 S->setRParenLoc(readSourceLocation());
297void ASTStmtReader::VisitForStmt(
ForStmt *S) {
299 S->setInit(
Record.readSubStmt());
300 S->setCond(
Record.readSubExpr());
301 S->setConditionVariableDeclStmt(cast_or_null<DeclStmt>(
Record.readSubStmt()));
302 S->setInc(
Record.readSubExpr());
303 S->setBody(
Record.readSubStmt());
304 S->setForLoc(readSourceLocation());
305 S->setLParenLoc(readSourceLocation());
306 S->setRParenLoc(readSourceLocation());
309void ASTStmtReader::VisitGotoStmt(
GotoStmt *S) {
311 S->setLabel(readDeclAs<LabelDecl>());
312 S->setGotoLoc(readSourceLocation());
313 S->setLabelLoc(readSourceLocation());
318 S->setGotoLoc(readSourceLocation());
319 S->setStarLoc(readSourceLocation());
320 S->setTarget(
Record.readSubExpr());
325 S->setKwLoc(readSourceLocation());
327 S->setLabelDecl(readDeclAs<LabelDecl>());
328 S->setLabelLoc(readSourceLocation());
333 VisitLoopControlStmt(S);
336void ASTStmtReader::VisitBreakStmt(
BreakStmt *S) { VisitLoopControlStmt(S); }
338void ASTStmtReader::VisitReturnStmt(
ReturnStmt *S) {
341 bool HasNRVOCandidate =
Record.readInt();
343 S->setRetValue(
Record.readSubExpr());
344 if (HasNRVOCandidate)
345 S->setNRVOCandidate(readDeclAs<VarDecl>());
347 S->setReturnLoc(readSourceLocation());
350void ASTStmtReader::VisitDeclStmt(
DeclStmt *S) {
352 S->setStartLoc(readSourceLocation());
353 S->setEndLoc(readSourceLocation());
362 for (
int I = 0; I < N; ++I)
363 Decls.push_back(readDecl());
370void ASTStmtReader::VisitAsmStmt(
AsmStmt *S) {
372 S->NumOutputs =
Record.readInt();
373 S->NumInputs =
Record.readInt();
374 S->NumClobbers =
Record.readInt();
375 S->setAsmLoc(readSourceLocation());
376 S->setVolatile(
Record.readInt());
377 S->setSimple(
Record.readInt());
380void ASTStmtReader::VisitGCCAsmStmt(
GCCAsmStmt *S) {
382 S->NumLabels =
Record.readInt();
383 S->setRParenLoc(readSourceLocation());
384 S->setAsmStringExpr(cast_or_null<Expr>(
Record.readSubStmt()));
386 unsigned NumOutputs = S->getNumOutputs();
387 unsigned NumInputs = S->getNumInputs();
388 unsigned NumClobbers = S->getNumClobbers();
389 unsigned NumLabels = S->getNumLabels();
395 for (
unsigned I = 0, N = NumOutputs + NumInputs; I != N; ++I) {
396 Names.push_back(
Record.readIdentifier());
397 Constraints.push_back(cast_or_null<Expr>(
Record.readSubStmt()));
398 Exprs.push_back(
Record.readSubStmt());
403 for (
unsigned I = 0; I != NumClobbers; ++I)
404 Clobbers.push_back(cast_or_null<Expr>(
Record.readSubStmt()));
407 for (
unsigned I = 0, N = NumLabels; I != N; ++I) {
408 Names.push_back(
Record.readIdentifier());
409 Exprs.push_back(
Record.readSubStmt());
412 S->setOutputsAndInputsAndClobbers(
Record.getContext(),
413 Names.data(), Constraints.data(),
414 Exprs.data(), NumOutputs, NumInputs,
416 Clobbers.data(), NumClobbers);
419void ASTStmtReader::VisitMSAsmStmt(
MSAsmStmt *S) {
421 S->LBraceLoc = readSourceLocation();
422 S->EndLoc = readSourceLocation();
423 S->NumAsmToks =
Record.readInt();
424 std::string AsmStr = readString();
428 AsmToks.reserve(S->NumAsmToks);
429 for (
unsigned i = 0, e = S->NumAsmToks; i != e; ++i) {
430 AsmToks.push_back(
Record.readToken());
439 ClobbersData.reserve(S->NumClobbers);
440 Clobbers.reserve(S->NumClobbers);
441 for (
unsigned i = 0, e = S->NumClobbers; i != e; ++i) {
442 ClobbersData.push_back(readString());
443 Clobbers.push_back(ClobbersData.back());
447 unsigned NumOperands = S->NumOutputs + S->NumInputs;
451 Exprs.reserve(NumOperands);
452 ConstraintsData.reserve(NumOperands);
453 Constraints.reserve(NumOperands);
454 for (
unsigned i = 0; i != NumOperands; ++i) {
455 Exprs.push_back(cast<Expr>(
Record.readSubStmt()));
456 ConstraintsData.push_back(readString());
457 Constraints.push_back(ConstraintsData.back());
460 S->initialize(
Record.getContext(), AsmStr, AsmToks,
461 Constraints, Exprs, Clobbers);
466 assert(
Record.peekInt() == S->NumParams);
468 auto *StoredStmts = S->getStoredStmts();
470 i < CoroutineBodyStmt::SubStmt::FirstParamMove + S->NumParams; ++i)
471 StoredStmts[i] =
Record.readSubStmt();
476 S->CoreturnLoc =
Record.readSourceLocation();
477 for (
auto &SubStmt: S->SubStmts)
478 SubStmt =
Record.readSubStmt();
479 S->IsImplicit =
Record.readInt() != 0;
484 E->KeywordLoc = readSourceLocation();
485 for (
auto &SubExpr:
E->SubExprs)
486 SubExpr =
Record.readSubStmt();
487 E->OpaqueValue = cast_or_null<OpaqueValueExpr>(
Record.readSubStmt());
488 E->setIsImplicit(
Record.readInt() != 0);
493 E->KeywordLoc = readSourceLocation();
494 for (
auto &SubExpr:
E->SubExprs)
495 SubExpr =
Record.readSubStmt();
496 E->OpaqueValue = cast_or_null<OpaqueValueExpr>(
Record.readSubStmt());
501 E->KeywordLoc = readSourceLocation();
502 for (
auto &SubExpr:
E->SubExprs)
503 SubExpr =
Record.readSubStmt();
509 S->setCapturedDecl(readDeclAs<CapturedDecl>());
511 S->setCapturedRecordDecl(readDeclAs<RecordDecl>());
515 E = S->capture_init_end();
517 *I =
Record.readSubExpr();
520 S->setCapturedStmt(
Record.readSubStmt());
521 S->getCapturedDecl()->setBody(S->getCapturedStmt());
524 for (
auto &I : S->captures()) {
525 I.VarAndKind.setPointer(readDeclAs<VarDecl>());
528 I.Loc = readSourceLocation();
534 S->setOriginalStmt(cast<CompoundStmt>(
Record.readSubStmt()));
535 S->setOutlinedFunctionDecl(readDeclAs<OutlinedFunctionDecl>());
538void ASTStmtReader::VisitExpr(
Expr *
E) {
540 CurrentUnpackingBits.emplace(
Record.readInt());
542 CurrentUnpackingBits->getNextBits(5)));
544 CurrentUnpackingBits->getNextBits(2)));
546 CurrentUnpackingBits->getNextBits(3)));
550 "Incorrect expression field count");
557 assert(
E->getResultStorageKind() == StorageKind &&
"Wrong ResultKind!");
565 switch (StorageKind) {
570 E->Int64Result() =
Record.readInt();
574 E->APValueResult() =
Record.readAPValue();
575 if (
E->APValueResult().needsCleanup()) {
577 Record.getContext().addDestruction(&
E->APValueResult());
582 E->setSubExpr(
Record.readSubExpr());
587 E->setAsteriskLocation(readSourceLocation());
593 E->setLocation(readSourceLocation());
594 E->setLParenLocation(readSourceLocation());
595 E->setRParenLocation(readSourceLocation());
597 E->setTypeSourceInfo(
Record.readTypeSourceInfo());
602 bool HasFunctionName =
Record.readInt();
606 E->setLocation(readSourceLocation());
608 E->setFunctionName(cast<StringLiteral>(
Record.readSubExpr()));
614 CurrentUnpackingBits.emplace(
Record.readInt());
615 E->
DeclRefExprBits.HadMultipleCandidates = CurrentUnpackingBits->getNextBit();
617 CurrentUnpackingBits->getNextBit();
619 CurrentUnpackingBits->getNextBits(2);
620 E->
DeclRefExprBits.IsImmediateEscalating = CurrentUnpackingBits->getNextBit();
624 CurrentUnpackingBits->getNextBit();
625 E->
DeclRefExprBits.CapturedByCopyInLambdaWithExplicitObjectParameter =
false;
626 unsigned NumTemplateArgs = 0;
627 if (
E->hasTemplateKWAndArgsInfo())
628 NumTemplateArgs =
Record.readInt();
630 if (
E->hasQualifier())
634 if (
E->hasFoundDecl())
635 *
E->getTrailingObjects<
NamedDecl *>() = readDeclAs<NamedDecl>();
637 if (
E->hasTemplateKWAndArgsInfo())
642 E->D = readDeclAs<ValueDecl>();
643 E->setLocation(readSourceLocation());
644 E->DNLoc =
Record.readDeclarationNameLoc(
E->getDecl()->getDeclName());
649 E->setLocation(readSourceLocation());
655 E->setLocation(readSourceLocation());
663 static_cast<llvm::APFloatBase::Semantics
>(
Record.readInt()));
665 E->setValue(
Record.getContext(),
Record.readAPFloat(
E->getSemantics()));
666 E->setLocation(readSourceLocation());
671 E->setSubExpr(
Record.readSubExpr());
679 unsigned NumConcatenated =
Record.readInt();
680 unsigned Length =
Record.readInt();
681 unsigned CharByteWidth =
Record.readInt();
682 assert((NumConcatenated ==
E->getNumConcatenated()) &&
683 "Wrong number of concatenated tokens!");
684 assert((Length ==
E->getLength()) &&
"Wrong Length!");
685 assert((CharByteWidth ==
E->getCharByteWidth()) &&
"Wrong character width!");
692 assert((CharByteWidth ==
693 StringLiteral::mapCharByteWidth(
Record.getContext().getTargetInfo(),
695 "Wrong character width!");
698 for (
unsigned I = 0; I < NumConcatenated; ++I)
699 E->setStrTokenLoc(I, readSourceLocation());
702 char *StrData =
E->getStrDataAsChar();
703 for (
unsigned I = 0; I < Length * CharByteWidth; ++I)
704 StrData[I] =
Record.readInt();
710 E->setLocation(readSourceLocation());
714void ASTStmtReader::VisitParenExpr(
ParenExpr *
E) {
716 E->setIsProducedByFoldExpansion(
Record.readInt());
717 E->setLParen(readSourceLocation());
718 E->setRParen(readSourceLocation());
719 E->setSubExpr(
Record.readSubExpr());
724 unsigned NumExprs =
Record.readInt();
725 assert((NumExprs ==
E->getNumExprs()) &&
"Wrong NumExprs!");
726 for (
unsigned I = 0; I != NumExprs; ++I)
727 E->getTrailingObjects()[I] =
Record.readSubStmt();
728 E->LParenLoc = readSourceLocation();
729 E->RParenLoc = readSourceLocation();
734 bool hasFP_Features = CurrentUnpackingBits->getNextBit();
735 assert(hasFP_Features ==
E->hasStoredFPFeatures());
736 E->setSubExpr(
Record.readSubExpr());
739 E->setOperatorLoc(readSourceLocation());
740 E->setCanOverflow(CurrentUnpackingBits->getNextBit());
742 E->setStoredFPFeatures(
748 assert(
E->getNumComponents() ==
Record.peekInt());
750 assert(
E->getNumExpressions() ==
Record.peekInt());
752 E->setOperatorLoc(readSourceLocation());
753 E->setRParenLoc(readSourceLocation());
754 E->setTypeSourceInfo(readTypeSourceInfo());
755 for (
unsigned I = 0, N =
E->getNumComponents(); I != N; ++I) {
784 for (
unsigned I = 0, N =
E->getNumExpressions(); I != N; ++I)
785 E->setIndexExpr(I,
Record.readSubExpr());
791 if (
Record.peekInt() == 0) {
792 E->setArgument(
Record.readSubExpr());
795 E->setArgument(readTypeSourceInfo());
797 E->setOperatorLoc(readSourceLocation());
798 E->setRParenLoc(readSourceLocation());
808 unsigned NumDetailRecords =
Record.readInt();
809 for (
unsigned i = 0; i != NumDetailRecords; ++i) {
812 StringRef DiagMessage =
C.backupStr(
Record.readString());
814 Satisfaction.
Details.emplace_back(
816 DiagLocation, DiagMessage));
824void ASTStmtReader::VisitConceptSpecializationExpr(
829 E->ConceptRef =
Record.readConceptReference();
838 StringRef SubstitutedEntity =
C.backupStr(
Record.readString());
840 StringRef DiagMessage =
C.backupStr(
Record.readString());
842 return new (
Record.getContext())
849 unsigned NumLocalParameters =
Record.readInt();
850 unsigned NumRequirements =
Record.readInt();
855 for (
unsigned i = 0; i < NumLocalParameters; ++i)
856 LocalParameters.push_back(cast<ParmVarDecl>(
Record.readDecl()));
857 std::copy(LocalParameters.begin(), LocalParameters.end(),
860 for (
unsigned i = 0; i < NumRequirements; ++i) {
870 R =
new (
Record.getContext())
873 R =
new (
Record.getContext())
888 std::optional<concepts::ExprRequirement::ReturnTypeRequirement> Req;
894 NoexceptLoc =
Record.readSourceLocation();
895 switch (
Record.readInt()) {
905 SubstitutedConstraintExpr =
906 cast<ConceptSpecializationExpr>(
Record.readExpr());
918 std::move(*Req), Status, SubstitutedConstraintExpr);
921 cast<concepts::Requirement::SubstitutionDiagnostic *>(
E),
927 bool HasInvalidConstraint =
Record.readInt();
928 if (HasInvalidConstraint) {
929 StringRef InvalidConstraint =
C.backupStr(
Record.readString());
931 Record.getContext(), InvalidConstraint,
945 Requirements.push_back(R);
947 std::copy(Requirements.begin(), Requirements.end(),
949 E->LParenLoc =
Record.readSourceLocation();
950 E->RParenLoc =
Record.readSourceLocation();
951 E->RBraceLoc =
Record.readSourceLocation();
956 E->setLHS(
Record.readSubExpr());
957 E->setRHS(
Record.readSubExpr());
958 E->setRBracketLoc(readSourceLocation());
963 E->setBase(
Record.readSubExpr());
964 E->setRowIdx(
Record.readSubExpr());
965 E->setColumnIdx(
Record.readSubExpr());
966 E->setRBracketLoc(readSourceLocation());
973 E->setBase(
Record.readSubExpr());
974 E->setLowerBound(
Record.readSubExpr());
975 E->setLength(
Record.readSubExpr());
977 if (
E->isOMPArraySection())
978 E->setStride(
Record.readSubExpr());
980 E->setColonLocFirst(readSourceLocation());
982 if (
E->isOMPArraySection())
983 E->setColonLocSecond(readSourceLocation());
985 E->setRBracketLoc(readSourceLocation());
990 unsigned NumDims =
Record.readInt();
991 E->setBase(
Record.readSubExpr());
993 for (
unsigned I = 0; I < NumDims; ++I)
994 Dims[I] =
Record.readSubExpr();
995 E->setDimensions(Dims);
997 for (
unsigned I = 0; I < NumDims; ++I)
998 SRs[I] = readSourceRange();
999 E->setBracketsRanges(SRs);
1000 E->setLParenLoc(readSourceLocation());
1001 E->setRParenLoc(readSourceLocation());
1006 unsigned NumIters =
Record.readInt();
1007 E->setIteratorKwLoc(readSourceLocation());
1008 E->setLParenLoc(readSourceLocation());
1009 E->setRParenLoc(readSourceLocation());
1010 for (
unsigned I = 0; I < NumIters; ++I) {
1011 E->setIteratorDeclaration(I,
Record.readDeclRef());
1012 E->setAssignmentLoc(I, readSourceLocation());
1019 SecColonLoc = readSourceLocation();
1020 E->setIteratorRange(I,
Begin, ColonLoc, End, SecColonLoc, Step);
1027 E->setHelper(I, HD);
1031void ASTStmtReader::VisitCallExpr(
CallExpr *
E) {
1034 unsigned NumArgs =
Record.readInt();
1035 CurrentUnpackingBits.emplace(
Record.readInt());
1038 bool HasFPFeatures = CurrentUnpackingBits->getNextBit();
1039 E->setCoroElideSafe(CurrentUnpackingBits->getNextBit());
1040 E->setUsesMemberSyntax(CurrentUnpackingBits->getNextBit());
1041 assert((NumArgs ==
E->getNumArgs()) &&
"Wrong NumArgs!");
1042 E->setRParenLoc(readSourceLocation());
1043 E->setCallee(
Record.readSubExpr());
1044 for (
unsigned I = 0; I != NumArgs; ++I)
1045 E->setArg(I,
Record.readSubExpr());
1048 E->setStoredFPFeatures(
1052 E->updateTrailingSourceLoc();
1059void ASTStmtReader::VisitMemberExpr(
MemberExpr *
E) {
1062 CurrentUnpackingBits.emplace(
Record.readInt());
1063 bool HasQualifier = CurrentUnpackingBits->getNextBit();
1064 bool HasFoundDecl = CurrentUnpackingBits->getNextBit();
1065 bool HasTemplateInfo = CurrentUnpackingBits->getNextBit();
1066 unsigned NumTemplateArgs =
Record.readInt();
1068 E->Base =
Record.readSubExpr();
1070 E->MemberDNLoc =
Record.readDeclarationNameLoc(
E->MemberDecl->getDeclName());
1071 E->MemberLoc =
Record.readSourceLocation();
1076 E->
MemberExprBits.HadMultipleCandidates = CurrentUnpackingBits->getNextBit();
1078 CurrentUnpackingBits->getNextBits(2);
1091 if (HasTemplateInfo)
1099 E->setBase(
Record.readSubExpr());
1100 E->setIsaMemberLoc(readSourceLocation());
1101 E->setOpLoc(readSourceLocation());
1102 E->setArrow(
Record.readInt());
1108 E->Operand =
Record.readSubExpr();
1109 E->setShouldCopy(
Record.readInt());
1113 VisitExplicitCastExpr(
E);
1114 E->LParenLoc = readSourceLocation();
1115 E->BridgeKeywordLoc = readSourceLocation();
1119void ASTStmtReader::VisitCastExpr(
CastExpr *
E) {
1121 unsigned NumBaseSpecs =
Record.readInt();
1122 assert(NumBaseSpecs ==
E->path_size());
1124 CurrentUnpackingBits.emplace(
Record.readInt());
1125 E->setCastKind((
CastKind)CurrentUnpackingBits->getNextBits(7));
1126 unsigned HasFPFeatures = CurrentUnpackingBits->getNextBit();
1127 assert(
E->hasStoredFPFeatures() == HasFPFeatures);
1129 E->setSubExpr(
Record.readSubExpr());
1132 while (NumBaseSpecs--) {
1134 *BaseSpec =
Record.readCXXBaseSpecifier();
1135 *BaseI++ = BaseSpec;
1138 *
E->getTrailingFPFeatures() =
1144 CurrentUnpackingBits.emplace(
Record.readInt());
1147 bool hasFP_Features = CurrentUnpackingBits->getNextBit();
1148 E->setHasStoredFPFeatures(hasFP_Features);
1149 E->setExcludedOverflowPattern(CurrentUnpackingBits->getNextBit());
1150 E->setLHS(
Record.readSubExpr());
1151 E->setRHS(
Record.readSubExpr());
1152 E->setOperatorLoc(readSourceLocation());
1154 E->setStoredFPFeatures(
1159 VisitBinaryOperator(
E);
1160 E->setComputationLHSType(
Record.readType());
1161 E->setComputationResultType(
Record.readType());
1166 E->SubExprs[ConditionalOperator::COND] =
Record.readSubExpr();
1167 E->SubExprs[ConditionalOperator::LHS] =
Record.readSubExpr();
1168 E->SubExprs[ConditionalOperator::RHS] =
Record.readSubExpr();
1169 E->QuestionLoc = readSourceLocation();
1170 E->ColonLoc = readSourceLocation();
1176 E->OpaqueValue = cast<OpaqueValueExpr>(
Record.readSubExpr());
1177 E->SubExprs[BinaryConditionalOperator::COMMON] =
Record.readSubExpr();
1178 E->SubExprs[BinaryConditionalOperator::COND] =
Record.readSubExpr();
1179 E->SubExprs[BinaryConditionalOperator::LHS] =
Record.readSubExpr();
1180 E->SubExprs[BinaryConditionalOperator::RHS] =
Record.readSubExpr();
1181 E->QuestionLoc = readSourceLocation();
1182 E->ColonLoc = readSourceLocation();
1187 E->setIsPartOfExplicitCast(CurrentUnpackingBits->getNextBit());
1192 E->setTypeInfoAsWritten(readTypeSourceInfo());
1196 VisitExplicitCastExpr(
E);
1197 E->setLParenLoc(readSourceLocation());
1198 E->setRParenLoc(readSourceLocation());
1203 E->setLParenLoc(readSourceLocation());
1204 E->setTypeSourceInfo(readTypeSourceInfo());
1205 E->setInitializer(
Record.readSubExpr());
1206 E->setFileScope(
Record.readInt());
1211 E->setBase(
Record.readSubExpr());
1212 E->setAccessor(
Record.readIdentifier());
1213 E->setAccessorLoc(readSourceLocation());
1218 if (
auto *SyntForm = cast_or_null<InitListExpr>(
Record.readSubStmt()))
1219 E->setSyntacticForm(SyntForm);
1220 E->setLBraceLoc(readSourceLocation());
1221 E->setRBraceLoc(readSourceLocation());
1222 bool isArrayFiller =
Record.readInt();
1223 Expr *filler =
nullptr;
1224 if (isArrayFiller) {
1225 filler =
Record.readSubExpr();
1226 E->ArrayFillerOrUnionFieldInit = filler;
1228 E->ArrayFillerOrUnionFieldInit = readDeclAs<FieldDecl>();
1229 E->sawArrayRangeDesignator(
Record.readInt());
1230 unsigned NumInits =
Record.readInt();
1231 E->reserveInits(
Record.getContext(), NumInits);
1232 if (isArrayFiller) {
1233 for (
unsigned I = 0; I != NumInits; ++I) {
1235 E->updateInit(
Record.getContext(), I, init ? init : filler);
1238 for (
unsigned I = 0; I != NumInits; ++I)
1239 E->updateInit(
Record.getContext(), I,
Record.readSubExpr());
1247 unsigned NumSubExprs =
Record.readInt();
1248 assert(NumSubExprs ==
E->getNumSubExprs() &&
"Wrong number of subexprs");
1249 for (
unsigned I = 0; I != NumSubExprs; ++I)
1250 E->setSubExpr(I,
Record.readSubExpr());
1251 E->setEqualOrColonLoc(readSourceLocation());
1252 E->setGNUSyntax(
Record.readInt());
1258 auto *
Field = readDeclAs<FieldDecl>();
1262 Field->getIdentifier(), DotLoc, FieldLoc));
1263 Designators.back().setFieldDecl(Field);
1277 unsigned Index =
Record.readInt();
1287 unsigned Index =
Record.readInt();
1292 Index, LBracketLoc, EllipsisLoc, RBracketLoc));
1297 E->setDesignators(
Record.getContext(),
1298 Designators.data(), Designators.size());
1303 E->setBase(
Record.readSubExpr());
1304 E->setUpdater(
Record.readSubExpr());
1307void ASTStmtReader::VisitNoInitExpr(
NoInitExpr *
E) {
1313 E->SubExprs[0] =
Record.readSubExpr();
1314 E->SubExprs[1] =
Record.readSubExpr();
1325void ASTStmtReader::VisitVAArgExpr(
VAArgExpr *
E) {
1327 E->setSubExpr(
Record.readSubExpr());
1328 E->setWrittenTypeInfo(readTypeSourceInfo());
1329 E->setBuiltinLoc(readSourceLocation());
1330 E->setRParenLoc(readSourceLocation());
1331 E->setIsMicrosoftABI(
Record.readInt());
1336 E->ParentContext = readDeclAs<DeclContext>();
1337 E->BuiltinLoc = readSourceLocation();
1338 E->RParenLoc = readSourceLocation();
1342void ASTStmtReader::VisitEmbedExpr(
EmbedExpr *
E) {
1344 E->EmbedKeywordLoc = readSourceLocation();
1346 Data->BinaryData = cast<StringLiteral>(
Record.readSubStmt());
1349 E->NumOfElements =
Record.readInt();
1354 E->setAmpAmpLoc(readSourceLocation());
1355 E->setLabelLoc(readSourceLocation());
1356 E->setLabel(readDeclAs<LabelDecl>());
1359void ASTStmtReader::VisitStmtExpr(
StmtExpr *
E) {
1361 E->setLParenLoc(readSourceLocation());
1362 E->setRParenLoc(readSourceLocation());
1363 E->setSubStmt(cast_or_null<CompoundStmt>(
Record.readSubStmt()));
1367void ASTStmtReader::VisitChooseExpr(
ChooseExpr *
E) {
1369 E->setCond(
Record.readSubExpr());
1370 E->setLHS(
Record.readSubExpr());
1371 E->setRHS(
Record.readSubExpr());
1372 E->setBuiltinLoc(readSourceLocation());
1373 E->setRParenLoc(readSourceLocation());
1374 E->setIsConditionTrue(
Record.readInt());
1379 E->setTokenLocation(readSourceLocation());
1385 unsigned NumExprs =
Record.readInt();
1387 Exprs.push_back(
Record.readSubExpr());
1388 E->setExprs(
Record.getContext(), Exprs);
1389 E->setBuiltinLoc(readSourceLocation());
1390 E->setRParenLoc(readSourceLocation());
1395 bool HasFPFeatures = CurrentUnpackingBits->getNextBit();
1396 assert(HasFPFeatures ==
E->hasStoredFPFeatures());
1397 E->BuiltinLoc = readSourceLocation();
1398 E->RParenLoc = readSourceLocation();
1399 E->TInfo = readTypeSourceInfo();
1400 E->SrcExpr =
Record.readSubExpr();
1402 E->setStoredFPFeatures(
1406void ASTStmtReader::VisitBlockExpr(
BlockExpr *
E) {
1408 E->setBlockDecl(readDeclAs<BlockDecl>());
1414 unsigned NumAssocs =
Record.readInt();
1415 assert(NumAssocs ==
E->getNumAssocs() &&
"Wrong NumAssocs!");
1416 E->IsExprPredicate =
Record.readInt();
1417 E->ResultIndex =
Record.readInt();
1419 E->DefaultLoc = readSourceLocation();
1420 E->RParenLoc = readSourceLocation();
1422 Stmt **Stmts =
E->getTrailingObjects<
Stmt *>();
1426 for (
unsigned I = 0, N = NumAssocs + 1; I < N; ++I)
1427 Stmts[I] =
Record.readSubExpr();
1430 for (
unsigned I = 0, N = NumAssocs; I < N; ++I)
1431 TSIs[I] = readTypeSourceInfo();
1436 unsigned numSemanticExprs =
Record.readInt();
1441 E->getTrailingObjects()[0] =
Record.readSubExpr();
1444 for (
unsigned i = 0; i != numSemanticExprs; ++i) {
1446 E->getTrailingObjects()[i + 1] = subExpr;
1450void ASTStmtReader::VisitAtomicExpr(
AtomicExpr *
E) {
1454 for (
unsigned I = 0; I !=
E->NumSubExprs; ++I)
1455 E->SubExprs[I] =
Record.readSubExpr();
1456 E->BuiltinLoc = readSourceLocation();
1457 E->RParenLoc = readSourceLocation();
1465 E->setString(cast<StringLiteral>(
Record.readSubStmt()));
1466 E->setAtLoc(readSourceLocation());
1472 E->SubExpr =
Record.readSubStmt();
1473 E->BoxingMethod = readDeclAs<ObjCMethodDecl>();
1474 E->Range = readSourceRange();
1479 unsigned NumElements =
Record.readInt();
1480 assert(NumElements ==
E->getNumElements() &&
"Wrong number of elements");
1481 Expr **Elements =
E->getElements();
1482 for (
unsigned I = 0, N = NumElements; I != N; ++I)
1483 Elements[I] =
Record.readSubExpr();
1484 E->ArrayWithObjectsMethod = readDeclAs<ObjCMethodDecl>();
1485 E->Range = readSourceRange();
1490 unsigned NumElements =
Record.readInt();
1491 assert(NumElements ==
E->getNumElements() &&
"Wrong number of elements");
1492 bool HasPackExpansions =
Record.readInt();
1493 assert(HasPackExpansions ==
E->HasPackExpansions &&
"Pack expansion mismatch");
1498 for (
unsigned I = 0; I != NumElements; ++I) {
1499 KeyValues[I].Key =
Record.readSubExpr();
1500 KeyValues[I].Value =
Record.readSubExpr();
1501 if (HasPackExpansions) {
1502 Expansions[I].EllipsisLoc = readSourceLocation();
1503 Expansions[I].NumExpansionsPlusOne =
Record.readInt();
1506 E->DictWithObjectsMethod = readDeclAs<ObjCMethodDecl>();
1507 E->Range = readSourceRange();
1512 E->setEncodedTypeSourceInfo(readTypeSourceInfo());
1513 E->setAtLoc(readSourceLocation());
1514 E->setRParenLoc(readSourceLocation());
1519 E->setSelector(
Record.readSelector());
1520 E->setAtLoc(readSourceLocation());
1521 E->setRParenLoc(readSourceLocation());
1526 E->setProtocol(readDeclAs<ObjCProtocolDecl>());
1527 E->setAtLoc(readSourceLocation());
1528 E->ProtoLoc = readSourceLocation();
1529 E->setRParenLoc(readSourceLocation());
1534 E->setDecl(readDeclAs<ObjCIvarDecl>());
1535 E->setLocation(readSourceLocation());
1536 E->setOpLoc(readSourceLocation());
1537 E->setBase(
Record.readSubExpr());
1538 E->setIsArrow(
Record.readInt());
1539 E->setIsFreeIvar(
Record.readInt());
1544 unsigned MethodRefFlags =
Record.readInt();
1547 auto *Getter = readDeclAs<ObjCMethodDecl>();
1548 auto *Setter = readDeclAs<ObjCMethodDecl>();
1549 E->setImplicitProperty(Getter, Setter, MethodRefFlags);
1551 E->setExplicitProperty(readDeclAs<ObjCPropertyDecl>(), MethodRefFlags);
1553 E->setLocation(readSourceLocation());
1554 E->setReceiverLocation(readSourceLocation());
1555 switch (
Record.readInt()) {
1557 E->setBase(
Record.readSubExpr());
1560 E->setSuperReceiver(
Record.readType());
1563 E->setClassReceiver(readDeclAs<ObjCInterfaceDecl>());
1570 E->setRBracket(readSourceLocation());
1571 E->setBaseExpr(
Record.readSubExpr());
1572 E->setKeyExpr(
Record.readSubExpr());
1573 E->GetAtIndexMethodDecl = readDeclAs<ObjCMethodDecl>();
1574 E->SetAtIndexMethodDecl = readDeclAs<ObjCMethodDecl>();
1579 assert(
Record.peekInt() ==
E->getNumArgs());
1581 unsigned NumStoredSelLocs =
Record.readInt();
1582 E->SelLocsKind =
Record.readInt();
1583 E->setDelegateInitCall(
Record.readInt());
1584 E->IsImplicit =
Record.readInt();
1588 E->setInstanceReceiver(
Record.readSubExpr());
1592 E->setClassReceiver(readTypeSourceInfo());
1604 assert(Kind ==
E->getReceiverKind());
1607 E->setMethodDecl(readDeclAs<ObjCMethodDecl>());
1609 E->setSelector(
Record.readSelector());
1611 E->LBracLoc = readSourceLocation();
1612 E->RBracLoc = readSourceLocation();
1614 for (
unsigned I = 0, N =
E->getNumArgs(); I != N; ++I)
1615 E->setArg(I,
Record.readSubExpr());
1618 for (
unsigned I = 0; I != NumStoredSelLocs; ++I)
1619 Locs[I] = readSourceLocation();
1624 S->setElement(
Record.readSubStmt());
1625 S->setCollection(
Record.readSubExpr());
1626 S->setBody(
Record.readSubStmt());
1627 S->setForLoc(readSourceLocation());
1628 S->setRParenLoc(readSourceLocation());
1633 S->setCatchBody(
Record.readSubStmt());
1634 S->setCatchParamDecl(readDeclAs<VarDecl>());
1635 S->setAtCatchLoc(readSourceLocation());
1636 S->setRParenLoc(readSourceLocation());
1641 S->setFinallyBody(
Record.readSubStmt());
1642 S->setAtFinallyLoc(readSourceLocation());
1647 S->setSubStmt(
Record.readSubStmt());
1648 S->setAtLoc(readSourceLocation());
1653 assert(
Record.peekInt() == S->getNumCatchStmts());
1655 bool HasFinally =
Record.readInt();
1656 S->setTryBody(
Record.readSubStmt());
1657 for (
unsigned I = 0, N = S->getNumCatchStmts(); I != N; ++I)
1658 S->setCatchStmt(I, cast_or_null<ObjCAtCatchStmt>(
Record.readSubStmt()));
1661 S->setFinallyStmt(
Record.readSubStmt());
1662 S->setAtTryLoc(readSourceLocation());
1667 S->setSynchExpr(
Record.readSubStmt());
1668 S->setSynchBody(
Record.readSubStmt());
1669 S->setAtSynchronizedLoc(readSourceLocation());
1674 S->setThrowExpr(
Record.readSubStmt());
1675 S->setThrowLoc(readSourceLocation());
1680 E->setValue(
Record.readInt());
1681 E->setLocation(readSourceLocation());
1689 E->VersionToCheck =
Record.readVersionTuple();
1696void ASTStmtReader::VisitCXXCatchStmt(
CXXCatchStmt *S) {
1698 S->CatchLoc = readSourceLocation();
1699 S->ExceptionDecl = readDeclAs<VarDecl>();
1700 S->HandlerBlock =
Record.readSubStmt();
1703void ASTStmtReader::VisitCXXTryStmt(
CXXTryStmt *S) {
1705 assert(
Record.peekInt() == S->getNumHandlers() &&
"NumStmtFields is wrong ?");
1707 S->TryLoc = readSourceLocation();
1708 S->getStmts()[0] =
Record.readSubStmt();
1709 for (
unsigned i = 0, e = S->getNumHandlers(); i != e; ++i)
1710 S->getStmts()[i + 1] =
Record.readSubStmt();
1715 S->ForLoc = readSourceLocation();
1716 S->CoawaitLoc = readSourceLocation();
1717 S->ColonLoc = readSourceLocation();
1718 S->RParenLoc = readSourceLocation();
1719 S->setInit(
Record.readSubStmt());
1720 S->setRangeStmt(
Record.readSubStmt());
1721 S->setBeginStmt(
Record.readSubStmt());
1722 S->setEndStmt(
Record.readSubStmt());
1723 S->setCond(
Record.readSubExpr());
1724 S->setInc(
Record.readSubExpr());
1725 S->setLoopVarStmt(
Record.readSubStmt());
1726 S->setBody(
Record.readSubStmt());
1731 S->KeywordLoc = readSourceLocation();
1732 S->IsIfExists =
Record.readInt();
1733 S->QualifierLoc =
Record.readNestedNameSpecifierLoc();
1734 S->NameInfo =
Record.readDeclarationNameInfo();
1735 S->SubStmt =
Record.readSubStmt();
1741 E->BeginLoc =
Record.readSourceLocation();
1744void ASTStmtReader::VisitCXXRewrittenBinaryOperator(
1748 E->SemanticForm =
Record.readSubExpr();
1754 unsigned NumArgs =
Record.readInt();
1755 assert((NumArgs ==
E->getNumArgs()) &&
"Wrong NumArgs!");
1765 E->Constructor = readDeclAs<CXXConstructorDecl>();
1766 E->ParenOrBraceRange = readSourceRange();
1768 for (
unsigned I = 0; I != NumArgs; ++I)
1769 E->setArg(I,
Record.readSubExpr());
1774 E->Constructor = readDeclAs<CXXConstructorDecl>();
1775 E->Loc = readSourceLocation();
1776 E->ConstructsVirtualBase =
Record.readInt();
1777 E->InheritedFromVirtualBase =
Record.readInt();
1781 VisitCXXConstructExpr(
E);
1782 E->TSI = readTypeSourceInfo();
1785void ASTStmtReader::VisitLambdaExpr(
LambdaExpr *
E) {
1787 unsigned NumCaptures =
Record.readInt();
1790 E->IntroducerRange = readSourceRange();
1792 E->CaptureDefaultLoc = readSourceLocation();
1795 E->ClosingBrace = readSourceLocation();
1799 CEnd =
E->capture_init_end();
1810 E->SubExpr =
Record.readSubExpr();
1814 VisitExplicitCastExpr(
E);
1818 if (CurrentUnpackingBits->getNextBit())
1819 E->AngleBrackets = readSourceRange();
1823 return VisitCXXNamedCastExpr(
E);
1827 return VisitCXXNamedCastExpr(
E);
1831 return VisitCXXNamedCastExpr(
E);
1835 return VisitCXXNamedCastExpr(
E);
1839 return VisitCXXNamedCastExpr(
E);
1843 VisitExplicitCastExpr(
E);
1844 E->setLParenLoc(readSourceLocation());
1845 E->setRParenLoc(readSourceLocation());
1849 VisitExplicitCastExpr(
E);
1850 E->KWLoc = readSourceLocation();
1851 E->RParenLoc = readSourceLocation();
1856 E->UDSuffixLoc = readSourceLocation();
1861 E->setValue(
Record.readInt());
1862 E->setLocation(readSourceLocation());
1867 E->setLocation(readSourceLocation());
1872 E->setSourceRange(readSourceRange());
1873 if (
E->isTypeOperand())
1874 E->Operand = readTypeSourceInfo();
1876 E->Operand =
Record.readSubExpr();
1881 E->setLocation(readSourceLocation());
1882 E->setImplicit(
Record.readInt());
1883 E->setCapturedByCopyInLambdaWithExplicitObjectParameter(
Record.readInt());
1889 E->Operand =
Record.readSubExpr();
1895 E->Param = readDeclAs<ParmVarDecl>();
1896 E->UsedContext = readDeclAs<DeclContext>();
1900 *
E->getTrailingObjects() =
Record.readSubExpr();
1906 E->Field = readDeclAs<FieldDecl>();
1907 E->UsedContext = readDeclAs<DeclContext>();
1910 *
E->getTrailingObjects() =
Record.readSubExpr();
1915 E->setTemporary(
Record.readCXXTemporary());
1916 E->setSubExpr(
Record.readSubExpr());
1921 E->TypeInfo = readTypeSourceInfo();
1925void ASTStmtReader::VisitCXXNewExpr(
CXXNewExpr *
E) {
1928 bool IsArray =
Record.readInt();
1929 bool HasInit =
Record.readInt();
1930 unsigned NumPlacementArgs =
Record.readInt();
1931 bool IsParenTypeId =
Record.readInt();
1940 assert((IsArray ==
E->isArray()) &&
"Wrong IsArray!");
1941 assert((HasInit ==
E->hasInitializer()) &&
"Wrong HasInit!");
1942 assert((NumPlacementArgs ==
E->getNumPlacementArgs()) &&
1943 "Wrong NumPlacementArgs!");
1944 assert((IsParenTypeId ==
E->isParenTypeId()) &&
"Wrong IsParenTypeId!");
1947 (void)NumPlacementArgs;
1949 E->setOperatorNew(readDeclAs<FunctionDecl>());
1950 E->setOperatorDelete(readDeclAs<FunctionDecl>());
1951 E->AllocatedTypeInfo = readTypeSourceInfo();
1953 E->getTrailingObjects<
SourceRange>()[0] = readSourceRange();
1954 E->Range = readSourceRange();
1955 E->DirectInitRange = readSourceRange();
1959 N =
E->raw_arg_end();
1961 *I =
Record.readSubStmt();
1970 E->OperatorDelete = readDeclAs<FunctionDecl>();
1971 E->Argument =
Record.readSubExpr();
1978 E->Base =
Record.readSubExpr();
1979 E->IsArrow =
Record.readInt();
1980 E->OperatorLoc = readSourceLocation();
1981 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
1982 E->ScopeType = readTypeSourceInfo();
1983 E->ColonColonLoc = readSourceLocation();
1984 E->TildeLoc = readSourceLocation();
1988 E->setDestroyedType(II, readSourceLocation());
1990 E->setDestroyedType(readTypeSourceInfo());
1996 unsigned NumObjects =
Record.readInt();
1997 assert(NumObjects ==
E->getNumObjects());
1998 for (
unsigned i = 0; i != NumObjects; ++i) {
2002 Obj = readDeclAs<BlockDecl>();
2004 Obj = cast<CompoundLiteralExpr>(
Record.readSubExpr());
2006 llvm_unreachable(
"unexpected cleanup object type");
2007 E->getTrailingObjects()[i] = Obj;
2011 E->SubExpr =
Record.readSubExpr();
2014void ASTStmtReader::VisitCXXDependentScopeMemberExpr(
2018 unsigned NumTemplateArgs =
Record.readInt();
2019 CurrentUnpackingBits.emplace(
Record.readInt());
2020 bool HasTemplateKWAndArgsInfo = CurrentUnpackingBits->getNextBit();
2021 bool HasFirstQualifierFoundInScope = CurrentUnpackingBits->getNextBit();
2023 assert((HasTemplateKWAndArgsInfo ==
E->hasTemplateKWAndArgsInfo()) &&
2024 "Wrong HasTemplateKWAndArgsInfo!");
2026 (HasFirstQualifierFoundInScope ==
E->hasFirstQualifierFoundInScope()) &&
2027 "Wrong HasFirstQualifierFoundInScope!");
2029 if (HasTemplateKWAndArgsInfo)
2034 assert((NumTemplateArgs ==
E->getNumTemplateArgs()) &&
2035 "Wrong NumTemplateArgs!");
2038 CurrentUnpackingBits->getNextBit();
2040 E->BaseType =
Record.readType();
2041 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
2043 if (CurrentUnpackingBits->getNextBit())
2044 E->Base =
Record.readSubExpr();
2050 if (HasFirstQualifierFoundInScope)
2051 *
E->getTrailingObjects<
NamedDecl *>() = readDeclAs<NamedDecl>();
2053 E->MemberNameInfo =
Record.readDeclarationNameInfo();
2060 if (CurrentUnpackingBits->getNextBit())
2064 CurrentUnpackingBits->getNextBits(16));
2066 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
2067 E->NameInfo =
Record.readDeclarationNameInfo();
2073 assert(
Record.peekInt() ==
E->getNumArgs() &&
2074 "Read wrong record during creation ?");
2076 for (
unsigned I = 0, N =
E->getNumArgs(); I != N; ++I)
2077 E->setArg(I,
Record.readSubExpr());
2078 E->TypeAndInitForm.setPointer(readTypeSourceInfo());
2079 E->setLParenLoc(readSourceLocation());
2080 E->setRParenLoc(readSourceLocation());
2081 E->TypeAndInitForm.setInt(
Record.readInt());
2087 unsigned NumResults =
Record.readInt();
2088 CurrentUnpackingBits.emplace(
Record.readInt());
2089 bool HasTemplateKWAndArgsInfo = CurrentUnpackingBits->getNextBit();
2090 assert((
E->getNumDecls() == NumResults) &&
"Wrong NumResults!");
2091 assert((
E->hasTemplateKWAndArgsInfo() == HasTemplateKWAndArgsInfo) &&
2092 "Wrong HasTemplateKWAndArgsInfo!");
2094 unsigned NumTemplateArgs = 0;
2095 if (HasTemplateKWAndArgsInfo) {
2096 NumTemplateArgs =
Record.readInt();
2098 E->getTrailingTemplateArgumentLoc(),
2103 for (
unsigned I = 0; I != NumResults; ++I) {
2104 auto *
D = readDeclAs<NamedDecl>();
2111 for (
unsigned I = 0; I != NumResults; ++I) {
2112 Results[I] = (
Iter + I).getPair();
2115 assert((
E->getNumTemplateArgs() == NumTemplateArgs) &&
2116 "Wrong NumTemplateArgs!");
2118 E->NameInfo =
Record.readDeclarationNameInfo();
2119 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
2123 VisitOverloadExpr(
E);
2126 CurrentUnpackingBits->getNextBit();
2128 if (CurrentUnpackingBits->getNextBit())
2129 E->Base =
Record.readSubExpr();
2133 E->OperatorLoc = readSourceLocation();
2135 E->BaseType =
Record.readType();
2139 VisitOverloadExpr(
E);
2141 E->NamingClass = readDeclAs<CXXRecordDecl>();
2160 for (
unsigned I = 0, N =
E->getNumArgs(); I != N; ++I)
2161 Args[I] = readTypeSourceInfo();
2171 E->QueriedType = readTypeSourceInfo();
2172 E->Dimension =
Record.readSubExpr();
2180 E->QueriedExpression =
Record.readSubExpr();
2188 E->Range = readSourceRange();
2189 E->Operand =
Record.readSubExpr();
2194 E->EllipsisLoc = readSourceLocation();
2195 E->NumExpansions =
Record.readInt();
2196 E->Pattern =
Record.readSubExpr();
2201 unsigned NumPartialArgs =
Record.readInt();
2202 E->OperatorLoc = readSourceLocation();
2203 E->PackLoc = readSourceLocation();
2204 E->RParenLoc = readSourceLocation();
2206 if (
E->isPartiallySubstituted()) {
2207 assert(
E->Length == NumPartialArgs);
2208 for (
auto *I =
E->getTrailingObjects(), *
E = I + NumPartialArgs; I !=
E;
2220 E->EllipsisLoc = readSourceLocation();
2221 E->RSquareLoc = readSourceLocation();
2222 E->SubExprs[0] =
Record.readStmt();
2223 E->SubExprs[1] =
Record.readStmt();
2224 auto **Exprs =
E->getTrailingObjects();
2226 Exprs[I] =
Record.readExpr();
2229void ASTStmtReader::VisitSubstNonTypeTemplateParmExpr(
2232 E->AssociatedDeclAndRef.setPointer(readDeclAs<Decl>());
2233 E->AssociatedDeclAndRef.setInt(CurrentUnpackingBits->getNextBit());
2234 E->Index = CurrentUnpackingBits->getNextBits(12);
2235 E->PackIndex =
Record.readUnsignedOrNone().toInternalRepresentation();
2236 E->Final = CurrentUnpackingBits->getNextBit();
2238 E->Replacement =
Record.readSubExpr();
2241void ASTStmtReader::VisitSubstNonTypeTemplateParmPackExpr(
2244 E->AssociatedDecl = readDeclAs<Decl>();
2245 E->Final = CurrentUnpackingBits->getNextBit();
2253 E->NameLoc = readSourceLocation();
2258 E->NumParameters =
Record.readInt();
2259 E->ParamPack = readDeclAs<ValueDecl>();
2260 E->NameLoc = readSourceLocation();
2261 auto **Parms =
E->getTrailingObjects();
2262 for (
unsigned i = 0, n =
E->NumParameters; i != n; ++i)
2263 Parms[i] = readDeclAs<ValueDecl>();
2268 bool HasMaterialzedDecl =
Record.readInt();
2269 if (HasMaterialzedDecl)
2270 E->State = cast<LifetimeExtendedTemporaryDecl>(
Record.readDecl());
2272 E->State =
Record.readSubExpr();
2277 E->LParenLoc = readSourceLocation();
2278 E->EllipsisLoc = readSourceLocation();
2279 E->RParenLoc = readSourceLocation();
2280 E->NumExpansions =
Record.readUnsignedOrNone();
2281 E->SubExprs[0] =
Record.readSubExpr();
2282 E->SubExprs[1] =
Record.readSubExpr();
2283 E->SubExprs[2] =
Record.readSubExpr();
2289 unsigned ExpectedNumExprs =
Record.readInt();
2290 assert(
E->NumExprs == ExpectedNumExprs &&
2291 "expected number of expressions does not equal the actual number of "
2292 "serialized expressions.");
2293 E->NumUserSpecifiedExprs =
Record.readInt();
2294 E->InitLoc = readSourceLocation();
2295 E->LParenLoc = readSourceLocation();
2296 E->RParenLoc = readSourceLocation();
2297 for (
unsigned I = 0; I < ExpectedNumExprs; I++)
2298 E->getTrailingObjects()[I] =
Record.readSubExpr();
2300 bool HasArrayFillerOrUnionDecl =
Record.readBool();
2301 if (HasArrayFillerOrUnionDecl) {
2302 bool HasArrayFiller =
Record.readBool();
2303 if (HasArrayFiller) {
2304 E->setArrayFiller(
Record.readSubExpr());
2306 E->setInitializedFieldInUnion(readDeclAs<FieldDecl>());
2309 E->updateDependence();
2314 E->SourceExpr =
Record.readSubExpr();
2316 E->setIsUnique(
Record.readInt());
2321 unsigned NumArgs =
Record.readInt();
2322 E->BeginLoc = readSourceLocation();
2323 E->EndLoc = readSourceLocation();
2324 assert((NumArgs + 0LL ==
2329 Child =
Record.readSubStmt();
2337 E->IsArrow = (
Record.readInt() != 0);
2338 E->BaseExpr =
Record.readSubExpr();
2339 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
2340 E->MemberLoc = readSourceLocation();
2341 E->TheDecl = readDeclAs<MSPropertyDecl>();
2346 E->setBase(
Record.readSubExpr());
2347 E->setIdx(
Record.readSubExpr());
2348 E->setRBracketLoc(readSourceLocation());
2353 E->setSourceRange(readSourceRange());
2354 E->Guid = readDeclAs<MSGuidDecl>();
2355 if (
E->isTypeOperand())
2356 E->Operand = readTypeSourceInfo();
2358 E->Operand =
Record.readSubExpr();
2361void ASTStmtReader::VisitSEHLeaveStmt(
SEHLeaveStmt *S) {
2363 S->setLeaveLoc(readSourceLocation());
2368 S->Loc = readSourceLocation();
2369 S->Children[SEHExceptStmt::FILTER_EXPR] =
Record.readSubStmt();
2370 S->Children[SEHExceptStmt::BLOCK] =
Record.readSubStmt();
2375 S->Loc = readSourceLocation();
2376 S->Block =
Record.readSubStmt();
2379void ASTStmtReader::VisitSEHTryStmt(
SEHTryStmt *S) {
2381 S->IsCXXTry =
Record.readInt();
2382 S->TryLoc = readSourceLocation();
2383 S->Children[SEHTryStmt::TRY] =
Record.readSubStmt();
2384 S->Children[SEHTryStmt::HANDLER] =
Record.readSubStmt();
2393 E->setPreArg(CUDAKernelCallExpr::CONFIG,
Record.readSubExpr());
2399void ASTStmtReader::VisitAsTypeExpr(
AsTypeExpr *
E) {
2401 E->BuiltinLoc = readSourceLocation();
2402 E->RParenLoc = readSourceLocation();
2403 E->SrcExpr =
Record.readSubExpr();
2412 for (
Stmt *&SubStmt : S->SubStmts)
2413 SubStmt =
Record.readSubStmt();
2417 Record.readOMPChildren(
E->Data);
2418 E->setLocStart(readSourceLocation());
2419 E->setLocEnd(readSourceLocation());
2426 VisitOMPExecutableDirective(
D);
2430 VisitOMPLoopBasedDirective(
D);
2437 VisitOMPExecutableDirective(
D);
2442 VisitOMPExecutableDirective(
D);
2443 D->setHasCancel(
Record.readBool());
2447 VisitOMPLoopDirective(
D);
2450void ASTStmtReader::VisitOMPLoopTransformationDirective(
2452 VisitOMPLoopBasedDirective(
D);
2453 D->setNumGeneratedLoops(
Record.readUInt32());
2457 VisitOMPLoopTransformationDirective(
D);
2461 VisitOMPLoopTransformationDirective(
D);
2465 VisitOMPLoopTransformationDirective(
D);
2469 VisitOMPLoopTransformationDirective(
D);
2473 VisitOMPLoopTransformationDirective(
D);
2477 VisitOMPLoopDirective(
D);
2478 D->setHasCancel(
Record.readBool());
2482 VisitOMPLoopDirective(
D);
2487 VisitOMPExecutableDirective(
D);
2488 D->setHasCancel(
Record.readBool());
2493 VisitOMPExecutableDirective(
D);
2494 D->setHasCancel(
Record.readBool());
2499 VisitOMPExecutableDirective(
D);
2504 VisitOMPExecutableDirective(
D);
2509 VisitOMPExecutableDirective(
D);
2514 VisitOMPExecutableDirective(
D);
2515 D->DirName =
Record.readDeclarationNameInfo();
2519 VisitOMPLoopDirective(
D);
2520 D->setHasCancel(
Record.readBool());
2523void ASTStmtReader::VisitOMPParallelForSimdDirective(
2525 VisitOMPLoopDirective(
D);
2528void ASTStmtReader::VisitOMPParallelMasterDirective(
2531 VisitOMPExecutableDirective(
D);
2534void ASTStmtReader::VisitOMPParallelMaskedDirective(
2537 VisitOMPExecutableDirective(
D);
2540void ASTStmtReader::VisitOMPParallelSectionsDirective(
2543 VisitOMPExecutableDirective(
D);
2544 D->setHasCancel(
Record.readBool());
2549 VisitOMPExecutableDirective(
D);
2550 D->setHasCancel(
Record.readBool());
2555 VisitOMPExecutableDirective(
D);
2560 VisitOMPExecutableDirective(
D);
2567 VisitOMPExecutableDirective(
D);
2572 VisitOMPExecutableDirective(
D);
2579 VisitOMPExecutableDirective(
D);
2584 VisitOMPExecutableDirective(
D);
2589 VisitOMPExecutableDirective(
D);
2594 VisitOMPExecutableDirective(
D);
2599 VisitOMPExecutableDirective(
D);
2604 VisitOMPExecutableDirective(
D);
2609 VisitOMPExecutableDirective(
D);
2610 D->Flags.IsXLHSInRHSPart =
Record.readBool() ? 1 : 0;
2611 D->Flags.IsPostfixUpdate =
Record.readBool() ? 1 : 0;
2612 D->Flags.IsFailOnly =
Record.readBool() ? 1 : 0;
2617 VisitOMPExecutableDirective(
D);
2622 VisitOMPExecutableDirective(
D);
2625void ASTStmtReader::VisitOMPTargetEnterDataDirective(
2628 VisitOMPExecutableDirective(
D);
2631void ASTStmtReader::VisitOMPTargetExitDataDirective(
2634 VisitOMPExecutableDirective(
D);
2637void ASTStmtReader::VisitOMPTargetParallelDirective(
2640 VisitOMPExecutableDirective(
D);
2641 D->setHasCancel(
Record.readBool());
2644void ASTStmtReader::VisitOMPTargetParallelForDirective(
2646 VisitOMPLoopDirective(
D);
2647 D->setHasCancel(
Record.readBool());
2652 VisitOMPExecutableDirective(
D);
2655void ASTStmtReader::VisitOMPCancellationPointDirective(
2658 VisitOMPExecutableDirective(
D);
2664 VisitOMPExecutableDirective(
D);
2669 VisitOMPLoopDirective(
D);
2670 D->setHasCancel(
Record.readBool());
2674 VisitOMPLoopDirective(
D);
2677void ASTStmtReader::VisitOMPMasterTaskLoopDirective(
2679 VisitOMPLoopDirective(
D);
2680 D->setHasCancel(
Record.readBool());
2683void ASTStmtReader::VisitOMPMaskedTaskLoopDirective(
2685 VisitOMPLoopDirective(
D);
2686 D->setHasCancel(
Record.readBool());
2689void ASTStmtReader::VisitOMPMasterTaskLoopSimdDirective(
2691 VisitOMPLoopDirective(
D);
2694void ASTStmtReader::VisitOMPMaskedTaskLoopSimdDirective(
2696 VisitOMPLoopDirective(
D);
2699void ASTStmtReader::VisitOMPParallelMasterTaskLoopDirective(
2701 VisitOMPLoopDirective(
D);
2702 D->setHasCancel(
Record.readBool());
2705void ASTStmtReader::VisitOMPParallelMaskedTaskLoopDirective(
2707 VisitOMPLoopDirective(
D);
2708 D->setHasCancel(
Record.readBool());
2711void ASTStmtReader::VisitOMPParallelMasterTaskLoopSimdDirective(
2713 VisitOMPLoopDirective(
D);
2716void ASTStmtReader::VisitOMPParallelMaskedTaskLoopSimdDirective(
2718 VisitOMPLoopDirective(
D);
2722 VisitOMPLoopDirective(
D);
2727 VisitOMPExecutableDirective(
D);
2730void ASTStmtReader::VisitOMPDistributeParallelForDirective(
2732 VisitOMPLoopDirective(
D);
2733 D->setHasCancel(
Record.readBool());
2736void ASTStmtReader::VisitOMPDistributeParallelForSimdDirective(
2738 VisitOMPLoopDirective(
D);
2741void ASTStmtReader::VisitOMPDistributeSimdDirective(
2743 VisitOMPLoopDirective(
D);
2746void ASTStmtReader::VisitOMPTargetParallelForSimdDirective(
2748 VisitOMPLoopDirective(
D);
2752 VisitOMPLoopDirective(
D);
2755void ASTStmtReader::VisitOMPTeamsDistributeDirective(
2757 VisitOMPLoopDirective(
D);
2760void ASTStmtReader::VisitOMPTeamsDistributeSimdDirective(
2762 VisitOMPLoopDirective(
D);
2765void ASTStmtReader::VisitOMPTeamsDistributeParallelForSimdDirective(
2767 VisitOMPLoopDirective(
D);
2770void ASTStmtReader::VisitOMPTeamsDistributeParallelForDirective(
2772 VisitOMPLoopDirective(
D);
2773 D->setHasCancel(
Record.readBool());
2778 VisitOMPExecutableDirective(
D);
2781void ASTStmtReader::VisitOMPTargetTeamsDistributeDirective(
2783 VisitOMPLoopDirective(
D);
2786void ASTStmtReader::VisitOMPTargetTeamsDistributeParallelForDirective(
2788 VisitOMPLoopDirective(
D);
2789 D->setHasCancel(
Record.readBool());
2792void ASTStmtReader::VisitOMPTargetTeamsDistributeParallelForSimdDirective(
2794 VisitOMPLoopDirective(
D);
2797void ASTStmtReader::VisitOMPTargetTeamsDistributeSimdDirective(
2799 VisitOMPLoopDirective(
D);
2804 VisitOMPExecutableDirective(
D);
2809 VisitOMPExecutableDirective(
D);
2810 D->setTargetCallLoc(
Record.readSourceLocation());
2815 VisitOMPExecutableDirective(
D);
2819 VisitOMPLoopDirective(
D);
2822void ASTStmtReader::VisitOMPTeamsGenericLoopDirective(
2824 VisitOMPLoopDirective(
D);
2827void ASTStmtReader::VisitOMPTargetTeamsGenericLoopDirective(
2829 VisitOMPLoopDirective(
D);
2830 D->setCanBeParallelFor(
Record.readBool());
2833void ASTStmtReader::VisitOMPParallelGenericLoopDirective(
2835 VisitOMPLoopDirective(
D);
2838void ASTStmtReader::VisitOMPTargetParallelGenericLoopDirective(
2840 VisitOMPLoopDirective(
D);
2849 S->Range =
Record.readSourceRange();
2850 S->DirectiveLoc =
Record.readSourceLocation();
2851 Record.readOpenACCClauseList(S->Clauses);
2854void ASTStmtReader::VisitOpenACCAssociatedStmtConstruct(
2856 VisitOpenACCConstructStmt(S);
2857 S->setAssociatedStmt(
Record.readSubStmt());
2862 VisitOpenACCAssociatedStmtConstruct(S);
2867 VisitOpenACCAssociatedStmtConstruct(S);
2873 VisitOpenACCAssociatedStmtConstruct(S);
2878 VisitOpenACCAssociatedStmtConstruct(S);
2881void ASTStmtReader::VisitOpenACCEnterDataConstruct(
2884 VisitOpenACCConstructStmt(S);
2889 VisitOpenACCConstructStmt(S);
2894 VisitOpenACCConstructStmt(S);
2899 VisitOpenACCConstructStmt(S);
2904 VisitOpenACCConstructStmt(S);
2909 VisitOpenACCConstructStmt(S);
2914 VisitOpenACCAssociatedStmtConstruct(S);
2921 VisitOpenACCConstructStmt(S);
2922 S->LParenLoc =
Record.readSourceLocation();
2923 S->RParenLoc =
Record.readSourceLocation();
2924 S->QueuesLoc =
Record.readSourceLocation();
2926 for (
unsigned I = 0; I < S->NumExprs; ++I) {
2927 S->getExprPtr()[I] = cast_if_present<Expr>(
Record.readSubStmt());
2928 assert((I == 0 || S->getExprPtr()[I] !=
nullptr) &&
2929 "Only first expression should be null");
2936 VisitOpenACCConstructStmt(S);
2937 S->ParensLoc =
Record.readSourceRange();
2938 S->ReadOnlyLoc =
Record.readSourceLocation();
2939 for (
unsigned I = 0; I < S->NumVars; ++I)
2940 S->getVarList()[I] = cast<Expr>(
Record.readSubStmt());
2945 VisitOpenACCConstructStmt(S);
2947 S->setAssociatedStmt(
Record.readSubStmt());
2956 S->SubExprs[HLSLOutArgExpr::BaseLValue] =
Record.readSubExpr();
2957 S->SubExprs[HLSLOutArgExpr::CastedTemporary] =
Record.readSubExpr();
2958 S->SubExprs[HLSLOutArgExpr::WritebackCast] =
Record.readSubExpr();
2959 S->IsInOut =
Record.readBool();
2967 switch (ReadingKind) {
2969 llvm_unreachable(
"should not call this when not reading anything");
2972 return ReadStmtFromStream(F);
2977 llvm_unreachable(
"ReadingKind not set ?");
2981 return cast_or_null<Expr>(
ReadStmt(F));
2996 ReadingKindTracker ReadingKind(Read_Stmt, *
this);
3001 llvm::DenseMap<uint64_t, Stmt *> StmtEntries;
3004 unsigned PrevNumStmts = StmtStack.size();
3013 Cursor.advanceSkippingSubblocks();
3015 Error(
toString(MaybeEntry.takeError()));
3018 llvm::BitstreamEntry Entry = MaybeEntry.get();
3020 switch (Entry.Kind) {
3021 case llvm::BitstreamEntry::SubBlock:
3022 case llvm::BitstreamEntry::Error:
3023 Error(
"malformed block record in AST file");
3025 case llvm::BitstreamEntry::EndBlock:
3027 case llvm::BitstreamEntry::Record:
3034 bool Finished =
false;
3035 bool IsStmtReference =
false;
3037 if (!MaybeStmtCode) {
3038 Error(
toString(MaybeStmtCode.takeError()));
3041 switch ((
StmtCode)MaybeStmtCode.get()) {
3047 IsStmtReference =
true;
3048 assert(StmtEntries.contains(
Record[0]) &&
3049 "No stmt was recorded for this offset reference!");
3050 S = StmtEntries[
Record.readInt()];
3090 bool HasElse = IfStmtBits.getNextBit();
3091 bool HasVar = IfStmtBits.getNextBit();
3092 bool HasInit = IfStmtBits.getNextBit();
3182 DeclRefExprBits.advance(5);
3183 bool HasFoundDecl = DeclRefExprBits.getNextBit();
3184 bool HasQualifier = DeclRefExprBits.getNextBit();
3185 bool HasTemplateKWAndArgsInfo = DeclRefExprBits.getNextBit();
3186 unsigned NumTemplateArgs = HasTemplateKWAndArgsInfo
3190 HasTemplateKWAndArgsInfo, NumTemplateArgs);
3235 bool HasFPFeatures = UnaryOperatorBits.getNextBit();
3275 CallExprBits.advance(1);
3276 auto HasFPFeatures = CallExprBits.getNextBit();
3288 bool HasQualifier = ExprMemberBits.getNextBit();
3289 bool HasFoundDecl = ExprMemberBits.getNextBit();
3290 bool HasTemplateInfo = ExprMemberBits.getNextBit();
3293 HasTemplateInfo, NumTemplateArgs);
3299 BinaryOperatorBits.advance( 6);
3300 bool HasFPFeatures = BinaryOperatorBits.getNextBit();
3307 BinaryOperatorBits.advance( 6);
3308 bool HasFPFeatures = BinaryOperatorBits.getNextBit();
3324 CastExprBits.advance(7);
3325 bool HasFPFeatures = CastExprBits.getNextBit();
3333 CastExprBits.advance(7);
3334 bool HasFPFeatures = CastExprBits.getNextBit();
3412 bool HasFPFeatures = ConvertVectorExprBits.getNextBit();
3471 llvm_unreachable(
"mismatching AST file");
3585 CollapsedNum,
Empty);
3613 "Reverse directive has no clauses");
3673 CollapsedNum,
Empty);
3681 CollapsedNum,
Empty);
3747 !HasAssociatedStmt,
Empty);
3785 CollapsedNum,
Empty);
3820 CollapsedNum,
Empty);
3828 CollapsedNum,
Empty);
3836 CollapsedNum,
Empty);
3844 CollapsedNum,
Empty);
3852 CollapsedNum,
Empty);
3860 CollapsedNum,
Empty);
3868 CollapsedNum,
Empty);
3876 Context, NumClauses, CollapsedNum,
Empty);
3884 Context, NumClauses, CollapsedNum,
Empty);
3900 CollapsedNum,
Empty);
3917 CollapsedNum,
Empty);
3925 CollapsedNum,
Empty);
3941 CollapsedNum,
Empty);
3949 CollapsedNum,
Empty);
3957 Context, NumClauses, CollapsedNum,
Empty);
3965 Context, NumClauses, CollapsedNum,
Empty);
3978 CollapsedNum,
Empty);
3986 Context, NumClauses, CollapsedNum,
Empty);
3994 Context, NumClauses, CollapsedNum,
Empty);
4002 Context, NumClauses, CollapsedNum,
Empty);
4025 CollapsedNum,
Empty);
4033 CollapsedNum,
Empty);
4041 CollapsedNum,
Empty);
4049 CollapsedNum,
Empty);
4057 Context, NumClauses, CollapsedNum,
Empty);
4070 CallExprBits.advance(1);
4071 auto HasFPFeatures = CallExprBits.getNextBit();
4080 CallExprBits.advance(1);
4081 auto HasFPFeatures = CallExprBits.getNextBit();
4110 CastExprBits.advance(7);
4111 bool HasFPFeatures = CastExprBits.getNextBit();
4139 CastExprBits.advance(7);
4140 bool HasFPFeatures = CastExprBits.getNextBit();
4148 assert(PathSize == 0 &&
"Wrong PathSize!");
4157 CallExprBits.advance(1);
4158 auto HasFPFeatures = CallExprBits.getNextBit();
4252 bool HasTemplateKWAndArgsInfo = DependentScopeMemberBits.getNextBit();
4254 bool HasFirstQualifierFoundInScope =
4255 DependentScopeMemberBits.getNextBit();
4257 Context, HasTemplateKWAndArgsInfo, NumTemplateArgs,
4258 HasFirstQualifierFoundInScope);
4266 bool HasTemplateKWAndArgsInfo = DependentScopeDeclRefBits.getNextBit();
4267 unsigned NumTemplateArgs =
4268 HasTemplateKWAndArgsInfo
4269 ? DependentScopeDeclRefBits.getNextBits(16)
4272 Context, HasTemplateKWAndArgsInfo, NumTemplateArgs);
4284 auto HasTemplateKWAndArgsInfo = OverloadExprBits.getNextBit();
4285 auto NumTemplateArgs = HasTemplateKWAndArgsInfo
4289 Context, NumResults, HasTemplateKWAndArgsInfo, NumTemplateArgs);
4296 auto HasTemplateKWAndArgsInfo = OverloadExprBits.getNextBit();
4297 auto NumTemplateArgs = HasTemplateKWAndArgsInfo
4301 Context, NumResults, HasTemplateKWAndArgsInfo, NumTemplateArgs);
4372 CallExprBits.advance(1);
4373 auto HasFPFeatures = CallExprBits.getNextBit();
4512 ++NumStatementsRead;
4514 if (S && !IsStmtReference) {
4516 StmtEntries[
Cursor.GetCurrentBitNo()] = S;
4520 "Invalid deserialization of statement");
4521 StmtStack.push_back(S);
4524 assert(StmtStack.size() > PrevNumStmts &&
"Read too many sub-stmts!");
4525 assert(StmtStack.size() == PrevNumStmts + 1 &&
"Extra expressions on stack!");
4526 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.
APValue - This class implements a discriminated union of [uninitialized] [APSInt] [APFloat],...
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.
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.
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...
ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.
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.
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".
static BinaryOperator * CreateEmpty(const ASTContext &C, bool hasFPFeatures)
A simple helper class to unpack an integer to bits and consuming the bits in order.
BlockExpr - Adaptor class for mixing a BlockDecl with expressions.
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)
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 a base class of a C++ class.
Represents binding an expression to a temporary.
A boolean literal, per ([C++ lex.bool] Boolean literals).
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.
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...
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...
Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr....
static CXXFunctionalCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize, bool HasFPFeatures)
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.
Represents a C++11 noexcept expression (C++ [expr.unary.noexcept]).
The null pointer literal (C++11 [lex.nullptr])
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.
static CXXParenListInitExpr * CreateEmpty(ASTContext &C, unsigned numExprs, EmptyShell Empty)
Represents a C++ pseudo-destructor (C++ [expr.pseudo]).
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++.
static CXXThisExpr * CreateEmpty(const ASTContext &Ctx)
A C++ throw-expression (C++ [except.throw]).
CXXTryStmt - A C++ try block, including all handlers.
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...
Describes an explicit type conversion that uses functional notion but could not be resolved because o...
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...
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
static CallExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPFeatures, EmptyShell Empty)
Create an empty call expression, for deserialization.
This captures a statement into a function.
static CapturedStmt * CreateDeserialized(const ASTContext &Context, unsigned NumCaptures)
VariableCaptureKind
The different capture forms: by 'this', by reference, capture for variable-length array type etc.
CaseStmt - Represent a case statement.
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...
ChooseExpr - GNU builtin-in function __builtin_choose_expr.
Represents a 'co_await' expression.
CompoundAssignOperator - For compound assignments (e.g.
static CompoundAssignOperator * CreateEmpty(const ASTContext &C, bool hasFPFeatures)
CompoundLiteralExpr - [C99 6.5.2.5].
CompoundStmt - This represents a group of statements like { stmt stmt }.
static CompoundStmt * CreateEmpty(const ASTContext &C, unsigned NumStmts, bool HasFPFeatures)
Represents the specialization of a concept - evaluates to a prvalue of type bool.
ConditionalOperator - The ?: ternary operator.
ConstantExpr - An expression that occurs in a constant context and optionally the result of evaluatin...
static ConstantExpr * CreateEmpty(const ASTContext &Context, ConstantResultStorageKind StorageKind)
The result of a constraint satisfaction check, containing the necessary information to diagnose an un...
std::pair< SourceLocation, StringRef > SubstitutionDiagnostic
llvm::SmallVector< Detail, 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)
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.
A POD class for pairing a NamedDecl* with an access specifier.
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.
static DeclRefExpr * CreateEmpty(const ASTContext &Context, bool HasQualifier, bool HasFoundDecl, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
Construct an empty declaration reference expression.
DeclStmt - Adaptor class for mixing declarations with statements and expressions.
Decl - This represents one declaration (or definition), e.g.
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 single C99 designator.
Represents a C99 designated initializer expression.
static DesignatedInitExpr * CreateEmpty(const ASTContext &C, unsigned NumIndexExprs)
Designator - A designator in a C99 designated initializer.
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.
Represents a reference to #emded data.
ExplicitCastExpr - An explicit cast written in the source code.
Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...
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 ...
static FPOptionsOverride getFromOpaqueInt(storage_type I)
static FixedPointLiteral * Create(const ASTContext &C, EmptyShell Empty)
Returns an empty fixed-point literal.
static FloatingLiteral * Create(const ASTContext &C, const llvm::APFloat &V, bool isexact, QualType Type, SourceLocation L)
ForStmt - This represents a 'for (init;cond;inc)' stmt.
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.
GNUNullExpr - Implements the GNU __null extension, which is a name for a null pointer constant that h...
Represents a C11 generic selection.
static GenericSelectionExpr * CreateEmpty(const ASTContext &Context, unsigned NumAssocs)
Create an empty generic selection expression for deserialization.
GotoStmt - This represents a direct goto.
This class represents temporary values used to represent inout and out arguments in HLSL.
static HLSLOutArgExpr * CreateEmpty(const ASTContext &Ctx)
One of these records is kept for each identifier that is lexed.
IfStmt - This represents an if/then/else.
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...
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)
Represents an implicitly-generated value initialization of an object of a given type.
IndirectGotoStmt - This represents an indirect goto.
Describes an C or C++ initializer list.
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.
A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...
static LambdaExpr * CreateDeserialized(const ASTContext &C, unsigned NumCaptures)
Construct a new lambda expression that will be deserialized from an external source.
Base class for BreakStmt and ContinueStmt.
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.
Represents a prvalue temporary that is written into memory so that a reference can bind to it.
MatrixSubscriptExpr - Matrix subscript expression for the MatrixType extension.
MemberExpr - [C99 6.5.2.3] Structure and Union Members.
static MemberExpr * CreateEmpty(const ASTContext &Context, bool HasQualifier, bool HasFoundDecl, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
This represents a decl that may have a name.
A C++ nested-name-specifier augmented with source location information.
Represents a place-holder for an object not to be initialized by anything.
NullStmt - This is the null statement ";": C99 6.8.3p3.
An explicit cast in C or a C-style cast in C++, which uses the syntax ([s1][s2]......
static OMPArrayShapingExpr * CreateEmpty(const ASTContext &Context, unsigned NumDims)
static OMPAssumeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
This represents '#pragma omp atomic' directive.
static OMPAtomicDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp barrier' directive.
static OMPBarrierDirective * CreateEmpty(const ASTContext &C, EmptyShell)
Creates an empty directive.
This represents '#pragma omp cancel' directive.
static OMPCancelDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
This represents '#pragma omp cancellation point' directive.
static OMPCancellationPointDirective * CreateEmpty(const ASTContext &C, EmptyShell)
Creates an empty directive.
Representation of an OpenMP canonical loop.
static OMPCanonicalLoop * createEmpty(const ASTContext &Ctx)
Create an empty OMPCanonicalLoop for deserialization.
This represents '#pragma omp critical' directive.
static OMPCriticalDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
This represents '#pragma omp depobj' directive.
static OMPDepobjDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp dispatch' directive.
static OMPDispatchDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp distribute' directive.
static OMPDistributeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp distribute parallel for' composite directive.
static OMPDistributeParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp distribute parallel for simd' composite directive.
static OMPDistributeParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp distribute simd' composite directive.
static OMPDistributeSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp error' directive.
static OMPErrorDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
This is a basic class for representing single OpenMP executable directive.
This represents '#pragma omp flush' directive.
static OMPFlushDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp for' directive.
static OMPForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp for simd' directive.
static OMPForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp loop' directive.
static OMPGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with a place for NumClauses clauses.
Represents the '#pragma omp interchange' loop transformation directive.
static OMPInterchangeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned NumLoops)
Build an empty '#pragma omp interchange' AST node for deserialization.
This represents '#pragma omp interop' directive.
static OMPInteropDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
OpenMP 5.0 [2.1.6 Iterators] Iterators are identifiers that expand to multiple values in the clause o...
static OMPIteratorExpr * CreateEmpty(const ASTContext &Context, unsigned NumIterators)
The base class for all loop-based directives, including loop transformation directives.
This is a common base class for loop directives ('omp simd', 'omp for', 'omp for simd' etc....
This represents '#pragma omp masked' directive.
static OMPMaskedDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
This represents '#pragma omp masked taskloop' directive.
static OMPMaskedTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp masked taskloop simd' directive.
static OMPMaskedTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp master' directive.
static OMPMasterDirective * CreateEmpty(const ASTContext &C, EmptyShell)
Creates an empty directive.
This represents '#pragma omp master taskloop' directive.
static OMPMasterTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp master taskloop simd' directive.
static OMPMasterTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp ordered' directive.
static OMPOrderedDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, bool IsStandalone, EmptyShell)
Creates an empty directive.
This represents '#pragma omp parallel' directive.
static OMPParallelDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for N clauses.
This represents '#pragma omp parallel for' directive.
static OMPParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp parallel for simd' directive.
static OMPParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp parallel loop' directive.
static OMPParallelGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp parallel masked' directive.
static OMPParallelMaskedDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp parallel masked taskloop' directive.
static OMPParallelMaskedTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp parallel masked taskloop simd' directive.
static OMPParallelMaskedTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp parallel master' directive.
static OMPParallelMasterDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp parallel master taskloop' directive.
static OMPParallelMasterTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp parallel master taskloop simd' directive.
static OMPParallelMasterTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp parallel sections' directive.
static OMPParallelSectionsDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
Represents the '#pragma omp reverse' loop transformation directive.
static OMPReverseDirective * CreateEmpty(const ASTContext &C, unsigned NumLoops)
Build an empty '#pragma omp reverse' AST node for deserialization.
This represents '#pragma omp scan' directive.
static OMPScanDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp scope' directive.
static OMPScopeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
This represents '#pragma omp section' directive.
static OMPSectionDirective * CreateEmpty(const ASTContext &C, EmptyShell)
Creates an empty directive.
This represents '#pragma omp sections' directive.
static OMPSectionsDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp simd' directive.
static OMPSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp single' directive.
static OMPSingleDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents the '#pragma omp stripe' loop transformation directive.
static OMPStripeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned NumLoops)
Build an empty '#pragma omp stripe' AST node for deserialization.
This represents '#pragma omp target data' directive.
static OMPTargetDataDirective * CreateEmpty(const ASTContext &C, unsigned N, EmptyShell)
Creates an empty directive with the place for N clauses.
This represents '#pragma omp target' directive.
static OMPTargetDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp target enter data' directive.
static OMPTargetEnterDataDirective * CreateEmpty(const ASTContext &C, unsigned N, EmptyShell)
Creates an empty directive with the place for N clauses.
This represents '#pragma omp target exit data' directive.
static OMPTargetExitDataDirective * CreateEmpty(const ASTContext &C, unsigned N, EmptyShell)
Creates an empty directive with the place for N clauses.
This represents '#pragma omp target parallel' directive.
static OMPTargetParallelDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp target parallel for' directive.
static OMPTargetParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp target parallel for simd' directive.
static OMPTargetParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp target parallel loop' directive.
static OMPTargetParallelGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp target simd' directive.
static OMPTargetSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp target teams' directive.
static OMPTargetTeamsDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp target teams distribute' combined directive.
static OMPTargetTeamsDistributeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp target teams distribute parallel for' combined directive.
static OMPTargetTeamsDistributeParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp target teams distribute parallel for simd' combined directive.
static OMPTargetTeamsDistributeParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp target teams distribute simd' combined directive.
static OMPTargetTeamsDistributeSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp target teams loop' directive.
static OMPTargetTeamsGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp target update' directive.
static OMPTargetUpdateDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp task' directive.
static OMPTaskDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp taskloop' directive.
static OMPTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp taskloop simd' directive.
static OMPTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp taskgroup' directive.
static OMPTaskgroupDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
This represents '#pragma omp taskwait' directive.
static OMPTaskwaitDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
This represents '#pragma omp taskyield' directive.
static OMPTaskyieldDirective * CreateEmpty(const ASTContext &C, EmptyShell)
Creates an empty directive.
This represents '#pragma omp teams' directive.
static OMPTeamsDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp teams distribute' directive.
static OMPTeamsDistributeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp teams distribute parallel for' composite directive.
static OMPTeamsDistributeParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp teams distribute parallel for simd' composite directive.
static OMPTeamsDistributeParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp teams distribute simd' combined directive.
static OMPTeamsDistributeSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp teams loop' directive.
static OMPTeamsGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents the '#pragma omp tile' loop transformation directive.
static OMPTileDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned NumLoops)
Build an empty '#pragma omp tile' AST node for deserialization.
This represents the '#pragma omp unroll' loop transformation directive.
static OMPUnrollDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses)
Build an empty '#pragma omp unroll' AST node for deserialization.
ObjCArrayLiteral - used for objective-c array containers; as in: @["Hello", NSApp,...
static ObjCArrayLiteral * CreateEmpty(const ASTContext &C, unsigned NumElements)
Represents Objective-C's @catch statement.
Represents Objective-C's @finally statement.
Represents Objective-C's @synchronized statement.
Represents Objective-C's @throw statement.
Represents Objective-C's @try ... @catch ... @finally statement.
static ObjCAtTryStmt * CreateEmpty(const ASTContext &Context, unsigned NumCatchStmts, bool HasFinally)
Represents Objective-C's @autoreleasepool Statement.
A runtime availability query.
ObjCBoolLiteralExpr - Objective-C Boolean Literal.
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)
ObjCEncodeExpr, used for @encode in Objective-C.
Represents Objective-C's collection statement.
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.
ObjCIvarRefExpr - A reference to an ObjC instance variable.
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.
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.
ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.
ObjCProtocolExpr used for protocol expression in Objective-C.
ObjCSelectorExpr used for @selector in Objective-C.
ObjCStringLiteral, used for Objective-C string literals i.e.
ObjCSubscriptRefExpr - used for array and dictionary subscripting.
OffsetOfExpr - [C99 7.17] - This represents an expression of the form offsetof(record-type,...
static OffsetOfExpr * CreateEmpty(const ASTContext &C, unsigned NumComps, unsigned NumExprs)
Helper class for OffsetOfExpr.
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.
This expression type represents an asterisk in an OpenACC Size-Expr, used in the 'tile' and 'gang' cl...
static OpenACCAsteriskSizeExpr * CreateEmpty(const ASTContext &C)
static OpenACCAtomicConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCCacheConstruct * CreateEmpty(const ASTContext &C, unsigned NumVars)
static OpenACCCombinedConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
This class represents a compute construct, representing a 'Kind' of ‘parallel’, 'serial',...
static OpenACCComputeConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
This is the base class for an OpenACC statement-level construct, other construct types are expected t...
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)
This class represents a 'loop' construct.
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)
A reference to an overloaded function set, either an UnresolvedLookupExpr or an UnresolvedMemberExpr.
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.
static ParenListExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumExprs)
Create an empty paren list.
Represents a parameter to a function.
[C99 6.4.2.2] - A predefined identifier such as func.
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)
A (possibly-)qualified type.
Frontend produces RecoveryExprs on semantic errors that prevent creating other well-formed expression...
static RecoveryExpr * CreateEmpty(ASTContext &Ctx, unsigned NumSubExprs)
Represents the body of a requires-expression.
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;.
static ReturnStmt * CreateEmpty(const ASTContext &Ctx, bool HasNRVOCandidate)
Create an empty return statement, optionally with storage for an NRVO candidate.
Represents a __leave statement.
SYCLKernelCallStmt represents the transformation that is applied to the body of a function declared w...
static SYCLUniqueStableNameExpr * CreateEmpty(const ASTContext &Ctx)
ShuffleVectorExpr - clang-specific builtin-in function __builtin_shufflevector.
Represents an expression that computes the length of a parameter pack.
static SizeOfPackExpr * CreateDeserialized(ASTContext &Context, unsigned NumPartialArgs)
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;}).
StmtVisitor - This class implements a simple visitor for Stmt subclasses.
Stmt - This represents one statement.
ExpressionTraitExprBitfields ExpressionTraitExprBits
GenericSelectionExprBitfields GenericSelectionExprBits
LambdaExprBitfields LambdaExprBits
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
ArrayTypeTraitExprBitfields ArrayTypeTraitExprBits
PredefinedExprBitfields PredefinedExprBits
UnresolvedMemberExprBitfields UnresolvedMemberExprBits
PseudoObjectExprBitfields PseudoObjectExprBits
CXXDeleteExprBitfields CXXDeleteExprBits
CXXDefaultArgExprBitfields CXXDefaultArgExprBits
StringLiteral - This represents a string literal expression, e.g.
static StringLiteral * CreateEmpty(const ASTContext &Ctx, unsigned NumConcatenated, unsigned Length, unsigned CharByteWidth)
Construct an empty string literal.
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 setNextSwitchCase(SwitchCase *SC)
SwitchStmt - This represents a 'switch' stmt.
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...
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.
Represents a template argument.
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.
Stores a list of template parameters for a TemplateDecl and its derived classes.
A container of type source information.
A type trait used in the implementation of various C++11 and Library TR1 trait templates.
static TypeTraitExpr * CreateDeserialized(const ASTContext &C, bool IsStoredAsBool, unsigned NumArgs)
UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand.
UnaryOperator - This represents the unary-expression's (except sizeof and alignof),...
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)
The iterator over UnresolvedSets.
A set of unresolved declarations.
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.
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
WhileStmt - This represents a 'while' stmt.
static WhileStmt * CreateEmpty(const ASTContext &Ctx, bool HasVar)
Create an empty while statement optionally with storage for a condition variable.
A requires-expression requirement which queries the validity and properties of an expression ('simple...
@ SS_ConstraintsNotSatisfied
@ SS_ExprSubstitutionFailure
A requires-expression requirement which is satisfied when a general constraint expression is satisfie...
A static requirement that can be used in a requires-expression to check properties of types and expre...
A requires-expression requirement which queries the existence of a type name or type template special...
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_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.
llvm::omp::Directive OpenMPDirectiveKind
OpenMP directives.
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...
CapturedRegionKind
The different kinds of captured statement.
UnaryExprOrTypeTrait
Names for the "expression or type" traits.
CastKind
CastKind - The kind of operation required for a conversion.
ExprValueKind
The categorization of expression values, currently following the C++11 scheme.
const FunctionProtoType * T
@ 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)
DeclarationNameInfo - A collector data type for bundling together a DeclarationName and the correspon...
Stores data related to a single #embed directive.
Helper expressions and declaration for OMPIteratorExpr class for each iteration space.
Expr * CounterUpdate
Updater for the internal counter: ++CounterVD;.
Expr * Upper
Normalized upper bound.
Expr * Update
Update expression for the originally specified iteration variable, calculated as VD = Begin + Counter...
VarDecl * CounterVD
Internal normalized counter.
Internal struct to describes an element that is a pack expansion, used if any of the elements in the ...
Internal struct for storing Key/value pair.
A placeholder type used to construct an empty shell of a type, that will be filled in later (e....