53#include "llvm/ADT/BitmaskEnum.h"
54#include "llvm/ADT/DenseMap.h"
55#include "llvm/ADT/SmallString.h"
56#include "llvm/ADT/SmallVector.h"
57#include "llvm/ADT/StringRef.h"
58#include "llvm/Bitstream/BitstreamReader.h"
59#include "llvm/Support/Casting.h"
60#include "llvm/Support/ErrorHandling.h"
68using namespace serialization;
74 llvm::BitstreamCursor &DeclsCursor;
76 std::optional<BitsUnpacker> CurrentUnpackingBits;
79 return Record.readSourceLocation();
83 return Record.readSourceRange();
86 std::string readString() {
87 return Record.readString();
91 return Record.readTypeSourceInfo();
121 unsigned NumTemplateArgs);
124#define STMT(Type, Base) \
125 void Visit##Type(Type *);
126#include "clang/AST/StmtNodes.inc"
133 unsigned NumTemplateArgs) {
138 for (
unsigned i = 0; i != NumTemplateArgs; ++i)
147void ASTStmtReader::VisitNullStmt(
NullStmt *S) {
149 S->setSemiLoc(readSourceLocation());
150 S->NullStmtBits.HasLeadingEmptyMacro =
Record.readInt();
156 unsigned NumStmts =
Record.readInt();
157 unsigned HasFPFeatures =
Record.readInt();
158 assert(S->hasStoredFPFeatures() == HasFPFeatures);
160 Stmts.push_back(
Record.readSubStmt());
163 S->setStoredFPFeatures(
165 S->LBraceLoc = readSourceLocation();
166 S->RBraceLoc = readSourceLocation();
169void ASTStmtReader::VisitSwitchCase(
SwitchCase *S) {
172 S->setKeywordLoc(readSourceLocation());
173 S->setColonLoc(readSourceLocation());
176void ASTStmtReader::VisitCaseStmt(
CaseStmt *S) {
178 bool CaseStmtIsGNURange =
Record.readInt();
179 S->setLHS(
Record.readSubExpr());
180 S->setSubStmt(
Record.readSubStmt());
181 if (CaseStmtIsGNURange) {
182 S->setRHS(
Record.readSubExpr());
183 S->setEllipsisLoc(readSourceLocation());
187void ASTStmtReader::VisitDefaultStmt(
DefaultStmt *S) {
189 S->setSubStmt(
Record.readSubStmt());
192void ASTStmtReader::VisitLabelStmt(
LabelStmt *S) {
194 bool IsSideEntry =
Record.readInt();
195 auto *LD = readDeclAs<LabelDecl>();
198 S->setSubStmt(
Record.readSubStmt());
199 S->setIdentLoc(readSourceLocation());
200 S->setSideEntry(IsSideEntry);
210 Record.readAttributes(Attrs);
212 assert(NumAttrs == S->AttributedStmtBits.NumAttrs);
213 assert(NumAttrs == Attrs.size());
214 std::copy(Attrs.begin(), Attrs.end(), S->getAttrArrayPtr());
215 S->SubStmt =
Record.readSubStmt();
216 S->AttributedStmtBits.AttrLoc = readSourceLocation();
219void ASTStmtReader::VisitIfStmt(
IfStmt *S) {
222 CurrentUnpackingBits.emplace(
Record.readInt());
224 bool HasElse = CurrentUnpackingBits->getNextBit();
225 bool HasVar = CurrentUnpackingBits->getNextBit();
226 bool HasInit = CurrentUnpackingBits->getNextBit();
229 S->setCond(
Record.readSubExpr());
230 S->setThen(
Record.readSubStmt());
232 S->setElse(
Record.readSubStmt());
234 S->setConditionVariableDeclStmt(cast<DeclStmt>(
Record.readSubStmt()));
236 S->setInit(
Record.readSubStmt());
238 S->setIfLoc(readSourceLocation());
239 S->setLParenLoc(readSourceLocation());
240 S->setRParenLoc(readSourceLocation());
242 S->setElseLoc(readSourceLocation());
245void ASTStmtReader::VisitSwitchStmt(
SwitchStmt *S) {
248 bool HasInit =
Record.readInt();
249 bool HasVar =
Record.readInt();
250 bool AllEnumCasesCovered =
Record.readInt();
251 if (AllEnumCasesCovered)
252 S->setAllEnumCasesCovered();
254 S->setCond(
Record.readSubExpr());
255 S->setBody(
Record.readSubStmt());
257 S->setInit(
Record.readSubStmt());
259 S->setConditionVariableDeclStmt(cast<DeclStmt>(
Record.readSubStmt()));
261 S->setSwitchLoc(readSourceLocation());
262 S->setLParenLoc(readSourceLocation());
263 S->setRParenLoc(readSourceLocation());
271 S->setSwitchCaseList(SC);
277void ASTStmtReader::VisitWhileStmt(
WhileStmt *S) {
280 bool HasVar =
Record.readInt();
282 S->setCond(
Record.readSubExpr());
283 S->setBody(
Record.readSubStmt());
285 S->setConditionVariableDeclStmt(cast<DeclStmt>(
Record.readSubStmt()));
287 S->setWhileLoc(readSourceLocation());
288 S->setLParenLoc(readSourceLocation());
289 S->setRParenLoc(readSourceLocation());
292void ASTStmtReader::VisitDoStmt(
DoStmt *S) {
294 S->setCond(
Record.readSubExpr());
295 S->setBody(
Record.readSubStmt());
296 S->setDoLoc(readSourceLocation());
297 S->setWhileLoc(readSourceLocation());
298 S->setRParenLoc(readSourceLocation());
301void ASTStmtReader::VisitForStmt(
ForStmt *S) {
303 S->setInit(
Record.readSubStmt());
304 S->setCond(
Record.readSubExpr());
305 S->setConditionVariableDeclStmt(cast_or_null<DeclStmt>(
Record.readSubStmt()));
306 S->setInc(
Record.readSubExpr());
307 S->setBody(
Record.readSubStmt());
308 S->setForLoc(readSourceLocation());
309 S->setLParenLoc(readSourceLocation());
310 S->setRParenLoc(readSourceLocation());
313void ASTStmtReader::VisitGotoStmt(
GotoStmt *S) {
315 S->setLabel(readDeclAs<LabelDecl>());
316 S->setGotoLoc(readSourceLocation());
317 S->setLabelLoc(readSourceLocation());
322 S->setGotoLoc(readSourceLocation());
323 S->setStarLoc(readSourceLocation());
324 S->setTarget(
Record.readSubExpr());
329 S->setContinueLoc(readSourceLocation());
332void ASTStmtReader::VisitBreakStmt(
BreakStmt *S) {
334 S->setBreakLoc(readSourceLocation());
337void ASTStmtReader::VisitReturnStmt(
ReturnStmt *S) {
340 bool HasNRVOCandidate =
Record.readInt();
342 S->setRetValue(
Record.readSubExpr());
343 if (HasNRVOCandidate)
344 S->setNRVOCandidate(readDeclAs<VarDecl>());
346 S->setReturnLoc(readSourceLocation());
349void ASTStmtReader::VisitDeclStmt(
DeclStmt *S) {
351 S->setStartLoc(readSourceLocation());
352 S->setEndLoc(readSourceLocation());
361 for (
int I = 0; I < N; ++I)
362 Decls.push_back(readDecl());
369void ASTStmtReader::VisitAsmStmt(
AsmStmt *S) {
371 S->NumOutputs =
Record.readInt();
372 S->NumInputs =
Record.readInt();
373 S->NumClobbers =
Record.readInt();
374 S->setAsmLoc(readSourceLocation());
375 S->setVolatile(
Record.readInt());
376 S->setSimple(
Record.readInt());
379void ASTStmtReader::VisitGCCAsmStmt(
GCCAsmStmt *S) {
381 S->NumLabels =
Record.readInt();
382 S->setRParenLoc(readSourceLocation());
383 S->setAsmString(cast_or_null<StringLiteral>(
Record.readSubStmt()));
385 unsigned NumOutputs = S->getNumOutputs();
386 unsigned NumInputs = S->getNumInputs();
387 unsigned NumClobbers = S->getNumClobbers();
388 unsigned NumLabels = S->getNumLabels();
394 for (
unsigned I = 0, N = NumOutputs + NumInputs; I != N; ++I) {
395 Names.push_back(
Record.readIdentifier());
396 Constraints.push_back(cast_or_null<StringLiteral>(
Record.readSubStmt()));
397 Exprs.push_back(
Record.readSubStmt());
402 for (
unsigned I = 0; I != NumClobbers; ++I)
403 Clobbers.push_back(cast_or_null<StringLiteral>(
Record.readSubStmt()));
406 for (
unsigned I = 0, N = NumLabels; I != N; ++I) {
407 Names.push_back(
Record.readIdentifier());
408 Exprs.push_back(
Record.readSubStmt());
411 S->setOutputsAndInputsAndClobbers(
Record.getContext(),
412 Names.data(), Constraints.data(),
413 Exprs.data(), NumOutputs, NumInputs,
415 Clobbers.data(), NumClobbers);
418void ASTStmtReader::VisitMSAsmStmt(
MSAsmStmt *S) {
420 S->LBraceLoc = readSourceLocation();
421 S->EndLoc = readSourceLocation();
422 S->NumAsmToks =
Record.readInt();
423 std::string AsmStr = readString();
427 AsmToks.reserve(S->NumAsmToks);
428 for (
unsigned i = 0, e = S->NumAsmToks; i != e; ++i) {
429 AsmToks.push_back(
Record.readToken());
438 ClobbersData.reserve(S->NumClobbers);
439 Clobbers.reserve(S->NumClobbers);
440 for (
unsigned i = 0, e = S->NumClobbers; i != e; ++i) {
441 ClobbersData.push_back(readString());
442 Clobbers.push_back(ClobbersData.back());
446 unsigned NumOperands = S->NumOutputs + S->NumInputs;
450 Exprs.reserve(NumOperands);
451 ConstraintsData.reserve(NumOperands);
452 Constraints.reserve(NumOperands);
453 for (
unsigned i = 0; i != NumOperands; ++i) {
454 Exprs.push_back(cast<Expr>(
Record.readSubStmt()));
455 ConstraintsData.push_back(readString());
456 Constraints.push_back(ConstraintsData.back());
459 S->initialize(
Record.getContext(), AsmStr, AsmToks,
460 Constraints, Exprs, Clobbers);
465 assert(
Record.peekInt() == S->NumParams);
467 auto *StoredStmts = S->getStoredStmts();
469 i < CoroutineBodyStmt::SubStmt::FirstParamMove + S->NumParams; ++i)
470 StoredStmts[i] =
Record.readSubStmt();
475 S->CoreturnLoc =
Record.readSourceLocation();
476 for (
auto &SubStmt: S->SubStmts)
477 SubStmt =
Record.readSubStmt();
478 S->IsImplicit =
Record.readInt() != 0;
483 E->KeywordLoc = readSourceLocation();
484 for (
auto &SubExpr:
E->SubExprs)
485 SubExpr =
Record.readSubStmt();
486 E->OpaqueValue = cast_or_null<OpaqueValueExpr>(
Record.readSubStmt());
487 E->setIsImplicit(
Record.readInt() != 0);
492 E->KeywordLoc = readSourceLocation();
493 for (
auto &SubExpr:
E->SubExprs)
494 SubExpr =
Record.readSubStmt();
495 E->OpaqueValue = cast_or_null<OpaqueValueExpr>(
Record.readSubStmt());
500 E->KeywordLoc = readSourceLocation();
501 for (
auto &SubExpr:
E->SubExprs)
502 SubExpr =
Record.readSubStmt();
508 S->setCapturedDecl(readDeclAs<CapturedDecl>());
510 S->setCapturedRecordDecl(readDeclAs<RecordDecl>());
514 E = S->capture_init_end();
516 *I =
Record.readSubExpr();
519 S->setCapturedStmt(
Record.readSubStmt());
520 S->getCapturedDecl()->setBody(S->getCapturedStmt());
523 for (
auto &I : S->captures()) {
524 I.VarAndKind.setPointer(readDeclAs<VarDecl>());
527 I.Loc = readSourceLocation();
531void ASTStmtReader::VisitExpr(
Expr *
E) {
533 CurrentUnpackingBits.emplace(
Record.readInt());
535 CurrentUnpackingBits->getNextBits(5)));
537 CurrentUnpackingBits->getNextBits(2)));
539 CurrentUnpackingBits->getNextBits(3)));
543 "Incorrect expression field count");
550 assert(
E->getResultStorageKind() == StorageKind &&
"Wrong ResultKind!");
558 switch (StorageKind) {
563 E->Int64Result() =
Record.readInt();
567 E->APValueResult() =
Record.readAPValue();
568 if (
E->APValueResult().needsCleanup()) {
570 Record.getContext().addDestruction(&
E->APValueResult());
575 E->setSubExpr(
Record.readSubExpr());
580 E->setAsteriskLocation(readSourceLocation());
586 E->setLocation(readSourceLocation());
587 E->setLParenLocation(readSourceLocation());
588 E->setRParenLocation(readSourceLocation());
590 E->setTypeSourceInfo(
Record.readTypeSourceInfo());
595 bool HasFunctionName =
Record.readInt();
599 E->setLocation(readSourceLocation());
601 E->setFunctionName(cast<StringLiteral>(
Record.readSubExpr()));
607 CurrentUnpackingBits.emplace(
Record.readInt());
608 E->
DeclRefExprBits.HadMultipleCandidates = CurrentUnpackingBits->getNextBit();
610 CurrentUnpackingBits->getNextBit();
612 CurrentUnpackingBits->getNextBits(2);
613 E->
DeclRefExprBits.IsImmediateEscalating = CurrentUnpackingBits->getNextBit();
617 CurrentUnpackingBits->getNextBit();
618 E->
DeclRefExprBits.CapturedByCopyInLambdaWithExplicitObjectParameter =
false;
619 unsigned NumTemplateArgs = 0;
620 if (
E->hasTemplateKWAndArgsInfo())
621 NumTemplateArgs =
Record.readInt();
623 if (
E->hasQualifier())
627 if (
E->hasFoundDecl())
628 *
E->getTrailingObjects<
NamedDecl *>() = readDeclAs<NamedDecl>();
630 if (
E->hasTemplateKWAndArgsInfo())
635 E->D = readDeclAs<ValueDecl>();
636 E->setLocation(readSourceLocation());
637 E->DNLoc =
Record.readDeclarationNameLoc(
E->getDecl()->getDeclName());
642 E->setLocation(readSourceLocation());
648 E->setLocation(readSourceLocation());
656 static_cast<llvm::APFloatBase::Semantics
>(
Record.readInt()));
658 E->setValue(
Record.getContext(),
Record.readAPFloat(
E->getSemantics()));
659 E->setLocation(readSourceLocation());
664 E->setSubExpr(
Record.readSubExpr());
672 unsigned NumConcatenated =
Record.readInt();
673 unsigned Length =
Record.readInt();
674 unsigned CharByteWidth =
Record.readInt();
675 assert((NumConcatenated ==
E->getNumConcatenated()) &&
676 "Wrong number of concatenated tokens!");
677 assert((Length ==
E->getLength()) &&
"Wrong Length!");
678 assert((CharByteWidth ==
E->getCharByteWidth()) &&
"Wrong character width!");
685 assert((CharByteWidth ==
686 StringLiteral::mapCharByteWidth(
Record.getContext().getTargetInfo(),
688 "Wrong character width!");
691 for (
unsigned I = 0; I < NumConcatenated; ++I)
692 E->setStrTokenLoc(I, readSourceLocation());
695 char *StrData =
E->getStrDataAsChar();
696 for (
unsigned I = 0; I < Length * CharByteWidth; ++I)
697 StrData[I] =
Record.readInt();
703 E->setLocation(readSourceLocation());
707void ASTStmtReader::VisitParenExpr(
ParenExpr *
E) {
709 E->setIsProducedByFoldExpansion(
Record.readInt());
710 E->setLParen(readSourceLocation());
711 E->setRParen(readSourceLocation());
712 E->setSubExpr(
Record.readSubExpr());
717 unsigned NumExprs =
Record.readInt();
718 assert((NumExprs ==
E->getNumExprs()) &&
"Wrong NumExprs!");
719 for (
unsigned I = 0; I != NumExprs; ++I)
720 E->getTrailingObjects<
Stmt *>()[I] =
Record.readSubStmt();
721 E->LParenLoc = readSourceLocation();
722 E->RParenLoc = readSourceLocation();
727 bool hasFP_Features = CurrentUnpackingBits->getNextBit();
728 assert(hasFP_Features ==
E->hasStoredFPFeatures());
729 E->setSubExpr(
Record.readSubExpr());
732 E->setOperatorLoc(readSourceLocation());
733 E->setCanOverflow(CurrentUnpackingBits->getNextBit());
735 E->setStoredFPFeatures(
741 assert(
E->getNumComponents() ==
Record.peekInt());
743 assert(
E->getNumExpressions() ==
Record.peekInt());
745 E->setOperatorLoc(readSourceLocation());
746 E->setRParenLoc(readSourceLocation());
747 E->setTypeSourceInfo(readTypeSourceInfo());
748 for (
unsigned I = 0, N =
E->getNumComponents(); I != N; ++I) {
777 for (
unsigned I = 0, N =
E->getNumExpressions(); I != N; ++I)
778 E->setIndexExpr(I,
Record.readSubExpr());
784 if (
Record.peekInt() == 0) {
785 E->setArgument(
Record.readSubExpr());
788 E->setArgument(readTypeSourceInfo());
790 E->setOperatorLoc(readSourceLocation());
791 E->setRParenLoc(readSourceLocation());
801 unsigned NumDetailRecords =
Record.readInt();
802 for (
unsigned i = 0; i != NumDetailRecords; ++i) {
805 StringRef DiagMessage =
C.backupStr(
Record.readString());
807 Satisfaction.
Details.emplace_back(
809 DiagLocation, DiagMessage));
817void ASTStmtReader::VisitConceptSpecializationExpr(
822 E->ConceptRef =
Record.readConceptReference();
831 StringRef SubstitutedEntity =
C.backupStr(
Record.readString());
833 StringRef DiagMessage =
C.backupStr(
Record.readString());
835 return new (
Record.getContext())
842 unsigned NumLocalParameters =
Record.readInt();
843 unsigned NumRequirements =
Record.readInt();
848 for (
unsigned i = 0; i < NumLocalParameters; ++i)
849 LocalParameters.push_back(cast<ParmVarDecl>(
Record.readDecl()));
850 std::copy(LocalParameters.begin(), LocalParameters.end(),
853 for (
unsigned i = 0; i < NumRequirements; ++i) {
863 R =
new (
Record.getContext())
866 R =
new (
Record.getContext())
881 std::optional<concepts::ExprRequirement::ReturnTypeRequirement> Req;
887 NoexceptLoc =
Record.readSourceLocation();
888 switch (
Record.readInt()) {
898 SubstitutedConstraintExpr =
899 cast<ConceptSpecializationExpr>(
Record.readExpr());
911 std::move(*Req), Status, SubstitutedConstraintExpr);
914 cast<concepts::Requirement::SubstitutionDiagnostic *>(
E),
920 bool HasInvalidConstraint =
Record.readInt();
921 if (HasInvalidConstraint) {
922 StringRef InvalidConstraint =
C.backupStr(
Record.readString());
924 Record.getContext(), InvalidConstraint,
938 Requirements.push_back(R);
940 std::copy(Requirements.begin(), Requirements.end(),
942 E->LParenLoc =
Record.readSourceLocation();
943 E->RParenLoc =
Record.readSourceLocation();
944 E->RBraceLoc =
Record.readSourceLocation();
949 E->setLHS(
Record.readSubExpr());
950 E->setRHS(
Record.readSubExpr());
951 E->setRBracketLoc(readSourceLocation());
956 E->setBase(
Record.readSubExpr());
957 E->setRowIdx(
Record.readSubExpr());
958 E->setColumnIdx(
Record.readSubExpr());
959 E->setRBracketLoc(readSourceLocation());
966 E->setBase(
Record.readSubExpr());
967 E->setLowerBound(
Record.readSubExpr());
968 E->setLength(
Record.readSubExpr());
970 if (
E->isOMPArraySection())
971 E->setStride(
Record.readSubExpr());
973 E->setColonLocFirst(readSourceLocation());
975 if (
E->isOMPArraySection())
976 E->setColonLocSecond(readSourceLocation());
978 E->setRBracketLoc(readSourceLocation());
983 unsigned NumDims =
Record.readInt();
984 E->setBase(
Record.readSubExpr());
986 for (
unsigned I = 0; I < NumDims; ++I)
987 Dims[I] =
Record.readSubExpr();
988 E->setDimensions(Dims);
990 for (
unsigned I = 0; I < NumDims; ++I)
991 SRs[I] = readSourceRange();
992 E->setBracketsRanges(SRs);
993 E->setLParenLoc(readSourceLocation());
994 E->setRParenLoc(readSourceLocation());
999 unsigned NumIters =
Record.readInt();
1000 E->setIteratorKwLoc(readSourceLocation());
1001 E->setLParenLoc(readSourceLocation());
1002 E->setRParenLoc(readSourceLocation());
1003 for (
unsigned I = 0; I < NumIters; ++I) {
1004 E->setIteratorDeclaration(I,
Record.readDeclRef());
1005 E->setAssignmentLoc(I, readSourceLocation());
1012 SecColonLoc = readSourceLocation();
1013 E->setIteratorRange(I,
Begin, ColonLoc, End, SecColonLoc, Step);
1020 E->setHelper(I, HD);
1024void ASTStmtReader::VisitCallExpr(
CallExpr *
E) {
1027 unsigned NumArgs =
Record.readInt();
1028 CurrentUnpackingBits.emplace(
Record.readInt());
1031 bool HasFPFeatures = CurrentUnpackingBits->getNextBit();
1032 assert((NumArgs ==
E->getNumArgs()) &&
"Wrong NumArgs!");
1033 E->setRParenLoc(readSourceLocation());
1034 E->setCallee(
Record.readSubExpr());
1035 for (
unsigned I = 0; I != NumArgs; ++I)
1036 E->setArg(I,
Record.readSubExpr());
1039 E->setStoredFPFeatures(
1047void ASTStmtReader::VisitMemberExpr(
MemberExpr *
E) {
1050 CurrentUnpackingBits.emplace(
Record.readInt());
1051 bool HasQualifier = CurrentUnpackingBits->getNextBit();
1052 bool HasFoundDecl = CurrentUnpackingBits->getNextBit();
1053 bool HasTemplateInfo = CurrentUnpackingBits->getNextBit();
1054 unsigned NumTemplateArgs =
Record.readInt();
1056 E->Base =
Record.readSubExpr();
1058 E->MemberDNLoc =
Record.readDeclarationNameLoc(
E->MemberDecl->getDeclName());
1059 E->MemberLoc =
Record.readSourceLocation();
1064 E->
MemberExprBits.HadMultipleCandidates = CurrentUnpackingBits->getNextBit();
1066 CurrentUnpackingBits->getNextBits(2);
1079 if (HasTemplateInfo)
1087 E->setBase(
Record.readSubExpr());
1088 E->setIsaMemberLoc(readSourceLocation());
1089 E->setOpLoc(readSourceLocation());
1090 E->setArrow(
Record.readInt());
1096 E->Operand =
Record.readSubExpr();
1097 E->setShouldCopy(
Record.readInt());
1101 VisitExplicitCastExpr(
E);
1102 E->LParenLoc = readSourceLocation();
1103 E->BridgeKeywordLoc = readSourceLocation();
1107void ASTStmtReader::VisitCastExpr(
CastExpr *
E) {
1109 unsigned NumBaseSpecs =
Record.readInt();
1110 assert(NumBaseSpecs ==
E->path_size());
1112 CurrentUnpackingBits.emplace(
Record.readInt());
1113 E->setCastKind((
CastKind)CurrentUnpackingBits->getNextBits(7));
1114 unsigned HasFPFeatures = CurrentUnpackingBits->getNextBit();
1115 assert(
E->hasStoredFPFeatures() == HasFPFeatures);
1117 E->setSubExpr(
Record.readSubExpr());
1120 while (NumBaseSpecs--) {
1122 *BaseSpec =
Record.readCXXBaseSpecifier();
1123 *BaseI++ = BaseSpec;
1126 *
E->getTrailingFPFeatures() =
1132 CurrentUnpackingBits.emplace(
Record.readInt());
1135 bool hasFP_Features = CurrentUnpackingBits->getNextBit();
1136 E->setHasStoredFPFeatures(hasFP_Features);
1137 E->setExcludedOverflowPattern(CurrentUnpackingBits->getNextBit());
1138 E->setLHS(
Record.readSubExpr());
1139 E->setRHS(
Record.readSubExpr());
1140 E->setOperatorLoc(readSourceLocation());
1142 E->setStoredFPFeatures(
1147 VisitBinaryOperator(
E);
1148 E->setComputationLHSType(
Record.readType());
1149 E->setComputationResultType(
Record.readType());
1154 E->SubExprs[ConditionalOperator::COND] =
Record.readSubExpr();
1155 E->SubExprs[ConditionalOperator::LHS] =
Record.readSubExpr();
1156 E->SubExprs[ConditionalOperator::RHS] =
Record.readSubExpr();
1157 E->QuestionLoc = readSourceLocation();
1158 E->ColonLoc = readSourceLocation();
1164 E->OpaqueValue = cast<OpaqueValueExpr>(
Record.readSubExpr());
1165 E->SubExprs[BinaryConditionalOperator::COMMON] =
Record.readSubExpr();
1166 E->SubExprs[BinaryConditionalOperator::COND] =
Record.readSubExpr();
1167 E->SubExprs[BinaryConditionalOperator::LHS] =
Record.readSubExpr();
1168 E->SubExprs[BinaryConditionalOperator::RHS] =
Record.readSubExpr();
1169 E->QuestionLoc = readSourceLocation();
1170 E->ColonLoc = readSourceLocation();
1175 E->setIsPartOfExplicitCast(CurrentUnpackingBits->getNextBit());
1180 E->setTypeInfoAsWritten(readTypeSourceInfo());
1184 VisitExplicitCastExpr(
E);
1185 E->setLParenLoc(readSourceLocation());
1186 E->setRParenLoc(readSourceLocation());
1191 E->setLParenLoc(readSourceLocation());
1192 E->setTypeSourceInfo(readTypeSourceInfo());
1193 E->setInitializer(
Record.readSubExpr());
1194 E->setFileScope(
Record.readInt());
1199 E->setBase(
Record.readSubExpr());
1200 E->setAccessor(
Record.readIdentifier());
1201 E->setAccessorLoc(readSourceLocation());
1206 if (
auto *SyntForm = cast_or_null<InitListExpr>(
Record.readSubStmt()))
1207 E->setSyntacticForm(SyntForm);
1208 E->setLBraceLoc(readSourceLocation());
1209 E->setRBraceLoc(readSourceLocation());
1210 bool isArrayFiller =
Record.readInt();
1211 Expr *filler =
nullptr;
1212 if (isArrayFiller) {
1213 filler =
Record.readSubExpr();
1214 E->ArrayFillerOrUnionFieldInit = filler;
1216 E->ArrayFillerOrUnionFieldInit = readDeclAs<FieldDecl>();
1217 E->sawArrayRangeDesignator(
Record.readInt());
1218 unsigned NumInits =
Record.readInt();
1219 E->reserveInits(
Record.getContext(), NumInits);
1220 if (isArrayFiller) {
1221 for (
unsigned I = 0; I != NumInits; ++I) {
1223 E->updateInit(
Record.getContext(), I, init ? init : filler);
1226 for (
unsigned I = 0; I != NumInits; ++I)
1227 E->updateInit(
Record.getContext(), I,
Record.readSubExpr());
1235 unsigned NumSubExprs =
Record.readInt();
1236 assert(NumSubExprs ==
E->getNumSubExprs() &&
"Wrong number of subexprs");
1237 for (
unsigned I = 0; I != NumSubExprs; ++I)
1238 E->setSubExpr(I,
Record.readSubExpr());
1239 E->setEqualOrColonLoc(readSourceLocation());
1240 E->setGNUSyntax(
Record.readInt());
1246 auto *
Field = readDeclAs<FieldDecl>();
1250 Field->getIdentifier(), DotLoc, FieldLoc));
1251 Designators.back().setFieldDecl(Field);
1265 unsigned Index =
Record.readInt();
1275 unsigned Index =
Record.readInt();
1280 Index, LBracketLoc, EllipsisLoc, RBracketLoc));
1285 E->setDesignators(
Record.getContext(),
1286 Designators.data(), Designators.size());
1291 E->setBase(
Record.readSubExpr());
1292 E->setUpdater(
Record.readSubExpr());
1295void ASTStmtReader::VisitNoInitExpr(
NoInitExpr *
E) {
1301 E->SubExprs[0] =
Record.readSubExpr();
1302 E->SubExprs[1] =
Record.readSubExpr();
1313void ASTStmtReader::VisitVAArgExpr(
VAArgExpr *
E) {
1315 E->setSubExpr(
Record.readSubExpr());
1316 E->setWrittenTypeInfo(readTypeSourceInfo());
1317 E->setBuiltinLoc(readSourceLocation());
1318 E->setRParenLoc(readSourceLocation());
1319 E->setIsMicrosoftABI(
Record.readInt());
1324 E->ParentContext = readDeclAs<DeclContext>();
1325 E->BuiltinLoc = readSourceLocation();
1326 E->RParenLoc = readSourceLocation();
1330void ASTStmtReader::VisitEmbedExpr(
EmbedExpr *
E) {
1332 E->EmbedKeywordLoc = readSourceLocation();
1334 Data->BinaryData = cast<StringLiteral>(
Record.readSubStmt());
1337 E->NumOfElements =
Record.readInt();
1342 E->setAmpAmpLoc(readSourceLocation());
1343 E->setLabelLoc(readSourceLocation());
1344 E->setLabel(readDeclAs<LabelDecl>());
1347void ASTStmtReader::VisitStmtExpr(
StmtExpr *
E) {
1349 E->setLParenLoc(readSourceLocation());
1350 E->setRParenLoc(readSourceLocation());
1351 E->setSubStmt(cast_or_null<CompoundStmt>(
Record.readSubStmt()));
1355void ASTStmtReader::VisitChooseExpr(
ChooseExpr *
E) {
1357 E->setCond(
Record.readSubExpr());
1358 E->setLHS(
Record.readSubExpr());
1359 E->setRHS(
Record.readSubExpr());
1360 E->setBuiltinLoc(readSourceLocation());
1361 E->setRParenLoc(readSourceLocation());
1362 E->setIsConditionTrue(
Record.readInt());
1367 E->setTokenLocation(readSourceLocation());
1373 unsigned NumExprs =
Record.readInt();
1375 Exprs.push_back(
Record.readSubExpr());
1376 E->setExprs(
Record.getContext(), Exprs);
1377 E->setBuiltinLoc(readSourceLocation());
1378 E->setRParenLoc(readSourceLocation());
1383 E->BuiltinLoc = readSourceLocation();
1384 E->RParenLoc = readSourceLocation();
1385 E->TInfo = readTypeSourceInfo();
1386 E->SrcExpr =
Record.readSubExpr();
1389void ASTStmtReader::VisitBlockExpr(
BlockExpr *
E) {
1391 E->setBlockDecl(readDeclAs<BlockDecl>());
1397 unsigned NumAssocs =
Record.readInt();
1398 assert(NumAssocs ==
E->getNumAssocs() &&
"Wrong NumAssocs!");
1399 E->IsExprPredicate =
Record.readInt();
1400 E->ResultIndex =
Record.readInt();
1402 E->DefaultLoc = readSourceLocation();
1403 E->RParenLoc = readSourceLocation();
1405 Stmt **Stmts =
E->getTrailingObjects<
Stmt *>();
1409 for (
unsigned I = 0, N = NumAssocs + 1; I < N; ++I)
1410 Stmts[I] =
Record.readSubExpr();
1413 for (
unsigned I = 0, N = NumAssocs; I < N; ++I)
1414 TSIs[I] = readTypeSourceInfo();
1419 unsigned numSemanticExprs =
Record.readInt();
1424 E->getSubExprsBuffer()[0] =
Record.readSubExpr();
1427 for (
unsigned i = 0; i != numSemanticExprs; ++i) {
1429 E->getSubExprsBuffer()[i+1] = subExpr;
1433void ASTStmtReader::VisitAtomicExpr(
AtomicExpr *
E) {
1437 for (
unsigned I = 0; I !=
E->NumSubExprs; ++I)
1438 E->SubExprs[I] =
Record.readSubExpr();
1439 E->BuiltinLoc = readSourceLocation();
1440 E->RParenLoc = readSourceLocation();
1448 E->setString(cast<StringLiteral>(
Record.readSubStmt()));
1449 E->setAtLoc(readSourceLocation());
1455 E->SubExpr =
Record.readSubStmt();
1456 E->BoxingMethod = readDeclAs<ObjCMethodDecl>();
1457 E->Range = readSourceRange();
1462 unsigned NumElements =
Record.readInt();
1463 assert(NumElements ==
E->getNumElements() &&
"Wrong number of elements");
1464 Expr **Elements =
E->getElements();
1465 for (
unsigned I = 0, N = NumElements; I != N; ++I)
1466 Elements[I] =
Record.readSubExpr();
1467 E->ArrayWithObjectsMethod = readDeclAs<ObjCMethodDecl>();
1468 E->Range = readSourceRange();
1473 unsigned NumElements =
Record.readInt();
1474 assert(NumElements ==
E->getNumElements() &&
"Wrong number of elements");
1475 bool HasPackExpansions =
Record.readInt();
1476 assert(HasPackExpansions ==
E->HasPackExpansions &&
"Pack expansion mismatch");
1481 for (
unsigned I = 0; I != NumElements; ++I) {
1482 KeyValues[I].Key =
Record.readSubExpr();
1483 KeyValues[I].Value =
Record.readSubExpr();
1484 if (HasPackExpansions) {
1485 Expansions[I].EllipsisLoc = readSourceLocation();
1486 Expansions[I].NumExpansionsPlusOne =
Record.readInt();
1489 E->DictWithObjectsMethod = readDeclAs<ObjCMethodDecl>();
1490 E->Range = readSourceRange();
1495 E->setEncodedTypeSourceInfo(readTypeSourceInfo());
1496 E->setAtLoc(readSourceLocation());
1497 E->setRParenLoc(readSourceLocation());
1502 E->setSelector(
Record.readSelector());
1503 E->setAtLoc(readSourceLocation());
1504 E->setRParenLoc(readSourceLocation());
1509 E->setProtocol(readDeclAs<ObjCProtocolDecl>());
1510 E->setAtLoc(readSourceLocation());
1511 E->ProtoLoc = readSourceLocation();
1512 E->setRParenLoc(readSourceLocation());
1517 E->setDecl(readDeclAs<ObjCIvarDecl>());
1518 E->setLocation(readSourceLocation());
1519 E->setOpLoc(readSourceLocation());
1520 E->setBase(
Record.readSubExpr());
1521 E->setIsArrow(
Record.readInt());
1522 E->setIsFreeIvar(
Record.readInt());
1527 unsigned MethodRefFlags =
Record.readInt();
1530 auto *Getter = readDeclAs<ObjCMethodDecl>();
1531 auto *Setter = readDeclAs<ObjCMethodDecl>();
1532 E->setImplicitProperty(Getter, Setter, MethodRefFlags);
1534 E->setExplicitProperty(readDeclAs<ObjCPropertyDecl>(), MethodRefFlags);
1536 E->setLocation(readSourceLocation());
1537 E->setReceiverLocation(readSourceLocation());
1538 switch (
Record.readInt()) {
1540 E->setBase(
Record.readSubExpr());
1543 E->setSuperReceiver(
Record.readType());
1546 E->setClassReceiver(readDeclAs<ObjCInterfaceDecl>());
1553 E->setRBracket(readSourceLocation());
1554 E->setBaseExpr(
Record.readSubExpr());
1555 E->setKeyExpr(
Record.readSubExpr());
1556 E->GetAtIndexMethodDecl = readDeclAs<ObjCMethodDecl>();
1557 E->SetAtIndexMethodDecl = readDeclAs<ObjCMethodDecl>();
1562 assert(
Record.peekInt() ==
E->getNumArgs());
1564 unsigned NumStoredSelLocs =
Record.readInt();
1565 E->SelLocsKind =
Record.readInt();
1566 E->setDelegateInitCall(
Record.readInt());
1567 E->IsImplicit =
Record.readInt();
1571 E->setInstanceReceiver(
Record.readSubExpr());
1575 E->setClassReceiver(readTypeSourceInfo());
1587 assert(Kind ==
E->getReceiverKind());
1590 E->setMethodDecl(readDeclAs<ObjCMethodDecl>());
1592 E->setSelector(
Record.readSelector());
1594 E->LBracLoc = readSourceLocation();
1595 E->RBracLoc = readSourceLocation();
1597 for (
unsigned I = 0, N =
E->getNumArgs(); I != N; ++I)
1598 E->setArg(I,
Record.readSubExpr());
1601 for (
unsigned I = 0; I != NumStoredSelLocs; ++I)
1602 Locs[I] = readSourceLocation();
1607 S->setElement(
Record.readSubStmt());
1608 S->setCollection(
Record.readSubExpr());
1609 S->setBody(
Record.readSubStmt());
1610 S->setForLoc(readSourceLocation());
1611 S->setRParenLoc(readSourceLocation());
1616 S->setCatchBody(
Record.readSubStmt());
1617 S->setCatchParamDecl(readDeclAs<VarDecl>());
1618 S->setAtCatchLoc(readSourceLocation());
1619 S->setRParenLoc(readSourceLocation());
1624 S->setFinallyBody(
Record.readSubStmt());
1625 S->setAtFinallyLoc(readSourceLocation());
1630 S->setSubStmt(
Record.readSubStmt());
1631 S->setAtLoc(readSourceLocation());
1636 assert(
Record.peekInt() == S->getNumCatchStmts());
1638 bool HasFinally =
Record.readInt();
1639 S->setTryBody(
Record.readSubStmt());
1640 for (
unsigned I = 0, N = S->getNumCatchStmts(); I != N; ++I)
1641 S->setCatchStmt(I, cast_or_null<ObjCAtCatchStmt>(
Record.readSubStmt()));
1644 S->setFinallyStmt(
Record.readSubStmt());
1645 S->setAtTryLoc(readSourceLocation());
1650 S->setSynchExpr(
Record.readSubStmt());
1651 S->setSynchBody(
Record.readSubStmt());
1652 S->setAtSynchronizedLoc(readSourceLocation());
1657 S->setThrowExpr(
Record.readSubStmt());
1658 S->setThrowLoc(readSourceLocation());
1663 E->setValue(
Record.readInt());
1664 E->setLocation(readSourceLocation());
1672 E->VersionToCheck =
Record.readVersionTuple();
1679void ASTStmtReader::VisitCXXCatchStmt(
CXXCatchStmt *S) {
1681 S->CatchLoc = readSourceLocation();
1682 S->ExceptionDecl = readDeclAs<VarDecl>();
1683 S->HandlerBlock =
Record.readSubStmt();
1686void ASTStmtReader::VisitCXXTryStmt(
CXXTryStmt *S) {
1688 assert(
Record.peekInt() == S->getNumHandlers() &&
"NumStmtFields is wrong ?");
1690 S->TryLoc = readSourceLocation();
1691 S->getStmts()[0] =
Record.readSubStmt();
1692 for (
unsigned i = 0, e = S->getNumHandlers(); i != e; ++i)
1693 S->getStmts()[i + 1] =
Record.readSubStmt();
1698 S->ForLoc = readSourceLocation();
1699 S->CoawaitLoc = readSourceLocation();
1700 S->ColonLoc = readSourceLocation();
1701 S->RParenLoc = readSourceLocation();
1702 S->setInit(
Record.readSubStmt());
1703 S->setRangeStmt(
Record.readSubStmt());
1704 S->setBeginStmt(
Record.readSubStmt());
1705 S->setEndStmt(
Record.readSubStmt());
1706 S->setCond(
Record.readSubExpr());
1707 S->setInc(
Record.readSubExpr());
1708 S->setLoopVarStmt(
Record.readSubStmt());
1709 S->setBody(
Record.readSubStmt());
1714 S->KeywordLoc = readSourceLocation();
1715 S->IsIfExists =
Record.readInt();
1716 S->QualifierLoc =
Record.readNestedNameSpecifierLoc();
1717 S->NameInfo =
Record.readDeclarationNameInfo();
1718 S->SubStmt =
Record.readSubStmt();
1724 E->Range =
Record.readSourceRange();
1727void ASTStmtReader::VisitCXXRewrittenBinaryOperator(
1731 E->SemanticForm =
Record.readSubExpr();
1737 unsigned NumArgs =
Record.readInt();
1738 assert((NumArgs ==
E->getNumArgs()) &&
"Wrong NumArgs!");
1748 E->Constructor = readDeclAs<CXXConstructorDecl>();
1749 E->ParenOrBraceRange = readSourceRange();
1751 for (
unsigned I = 0; I != NumArgs; ++I)
1752 E->setArg(I,
Record.readSubExpr());
1757 E->Constructor = readDeclAs<CXXConstructorDecl>();
1758 E->Loc = readSourceLocation();
1759 E->ConstructsVirtualBase =
Record.readInt();
1760 E->InheritedFromVirtualBase =
Record.readInt();
1764 VisitCXXConstructExpr(
E);
1765 E->TSI = readTypeSourceInfo();
1768void ASTStmtReader::VisitLambdaExpr(
LambdaExpr *
E) {
1770 unsigned NumCaptures =
Record.readInt();
1773 E->IntroducerRange = readSourceRange();
1775 E->CaptureDefaultLoc = readSourceLocation();
1778 E->ClosingBrace = readSourceLocation();
1782 CEnd =
E->capture_init_end();
1793 E->SubExpr =
Record.readSubExpr();
1797 VisitExplicitCastExpr(
E);
1801 if (CurrentUnpackingBits->getNextBit())
1802 E->AngleBrackets = readSourceRange();
1806 return VisitCXXNamedCastExpr(
E);
1810 return VisitCXXNamedCastExpr(
E);
1814 return VisitCXXNamedCastExpr(
E);
1818 return VisitCXXNamedCastExpr(
E);
1822 return VisitCXXNamedCastExpr(
E);
1826 VisitExplicitCastExpr(
E);
1827 E->setLParenLoc(readSourceLocation());
1828 E->setRParenLoc(readSourceLocation());
1832 VisitExplicitCastExpr(
E);
1833 E->KWLoc = readSourceLocation();
1834 E->RParenLoc = readSourceLocation();
1839 E->UDSuffixLoc = readSourceLocation();
1844 E->setValue(
Record.readInt());
1845 E->setLocation(readSourceLocation());
1850 E->setLocation(readSourceLocation());
1855 E->setSourceRange(readSourceRange());
1856 if (
E->isTypeOperand())
1857 E->Operand = readTypeSourceInfo();
1859 E->Operand =
Record.readSubExpr();
1864 E->setLocation(readSourceLocation());
1865 E->setImplicit(
Record.readInt());
1866 E->setCapturedByCopyInLambdaWithExplicitObjectParameter(
Record.readInt());
1872 E->Operand =
Record.readSubExpr();
1878 E->Param = readDeclAs<ParmVarDecl>();
1879 E->UsedContext = readDeclAs<DeclContext>();
1883 *
E->getTrailingObjects<
Expr *>() =
Record.readSubExpr();
1889 E->Field = readDeclAs<FieldDecl>();
1890 E->UsedContext = readDeclAs<DeclContext>();
1893 *
E->getTrailingObjects<
Expr *>() =
Record.readSubExpr();
1898 E->setTemporary(
Record.readCXXTemporary());
1899 E->setSubExpr(
Record.readSubExpr());
1904 E->TypeInfo = readTypeSourceInfo();
1908void ASTStmtReader::VisitCXXNewExpr(
CXXNewExpr *
E) {
1911 bool IsArray =
Record.readInt();
1912 bool HasInit =
Record.readInt();
1913 unsigned NumPlacementArgs =
Record.readInt();
1914 bool IsParenTypeId =
Record.readInt();
1922 assert((IsArray ==
E->isArray()) &&
"Wrong IsArray!");
1923 assert((HasInit ==
E->hasInitializer()) &&
"Wrong HasInit!");
1924 assert((NumPlacementArgs ==
E->getNumPlacementArgs()) &&
1925 "Wrong NumPlacementArgs!");
1926 assert((IsParenTypeId ==
E->isParenTypeId()) &&
"Wrong IsParenTypeId!");
1929 (void)NumPlacementArgs;
1931 E->setOperatorNew(readDeclAs<FunctionDecl>());
1932 E->setOperatorDelete(readDeclAs<FunctionDecl>());
1933 E->AllocatedTypeInfo = readTypeSourceInfo();
1935 E->getTrailingObjects<
SourceRange>()[0] = readSourceRange();
1936 E->Range = readSourceRange();
1937 E->DirectInitRange = readSourceRange();
1941 N =
E->raw_arg_end();
1943 *I =
Record.readSubStmt();
1952 E->OperatorDelete = readDeclAs<FunctionDecl>();
1953 E->Argument =
Record.readSubExpr();
1960 E->Base =
Record.readSubExpr();
1961 E->IsArrow =
Record.readInt();
1962 E->OperatorLoc = readSourceLocation();
1963 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
1964 E->ScopeType = readTypeSourceInfo();
1965 E->ColonColonLoc = readSourceLocation();
1966 E->TildeLoc = readSourceLocation();
1970 E->setDestroyedType(II, readSourceLocation());
1972 E->setDestroyedType(readTypeSourceInfo());
1978 unsigned NumObjects =
Record.readInt();
1979 assert(NumObjects ==
E->getNumObjects());
1980 for (
unsigned i = 0; i != NumObjects; ++i) {
1984 Obj = readDeclAs<BlockDecl>();
1986 Obj = cast<CompoundLiteralExpr>(
Record.readSubExpr());
1988 llvm_unreachable(
"unexpected cleanup object type");
1993 E->SubExpr =
Record.readSubExpr();
1996void ASTStmtReader::VisitCXXDependentScopeMemberExpr(
2000 unsigned NumTemplateArgs =
Record.readInt();
2001 CurrentUnpackingBits.emplace(
Record.readInt());
2002 bool HasTemplateKWAndArgsInfo = CurrentUnpackingBits->getNextBit();
2003 bool HasFirstQualifierFoundInScope = CurrentUnpackingBits->getNextBit();
2005 assert((HasTemplateKWAndArgsInfo ==
E->hasTemplateKWAndArgsInfo()) &&
2006 "Wrong HasTemplateKWAndArgsInfo!");
2008 (HasFirstQualifierFoundInScope ==
E->hasFirstQualifierFoundInScope()) &&
2009 "Wrong HasFirstQualifierFoundInScope!");
2011 if (HasTemplateKWAndArgsInfo)
2016 assert((NumTemplateArgs ==
E->getNumTemplateArgs()) &&
2017 "Wrong NumTemplateArgs!");
2020 CurrentUnpackingBits->getNextBit();
2022 E->BaseType =
Record.readType();
2023 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
2025 if (CurrentUnpackingBits->getNextBit())
2026 E->Base =
Record.readSubExpr();
2032 if (HasFirstQualifierFoundInScope)
2033 *
E->getTrailingObjects<
NamedDecl *>() = readDeclAs<NamedDecl>();
2035 E->MemberNameInfo =
Record.readDeclarationNameInfo();
2042 if (CurrentUnpackingBits->getNextBit())
2046 CurrentUnpackingBits->getNextBits(16));
2048 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
2049 E->NameInfo =
Record.readDeclarationNameInfo();
2055 assert(
Record.peekInt() ==
E->getNumArgs() &&
2056 "Read wrong record during creation ?");
2058 for (
unsigned I = 0, N =
E->getNumArgs(); I != N; ++I)
2059 E->setArg(I,
Record.readSubExpr());
2060 E->TypeAndInitForm.setPointer(readTypeSourceInfo());
2061 E->setLParenLoc(readSourceLocation());
2062 E->setRParenLoc(readSourceLocation());
2063 E->TypeAndInitForm.setInt(
Record.readInt());
2069 unsigned NumResults =
Record.readInt();
2070 CurrentUnpackingBits.emplace(
Record.readInt());
2071 bool HasTemplateKWAndArgsInfo = CurrentUnpackingBits->getNextBit();
2072 assert((
E->getNumDecls() == NumResults) &&
"Wrong NumResults!");
2073 assert((
E->hasTemplateKWAndArgsInfo() == HasTemplateKWAndArgsInfo) &&
2074 "Wrong HasTemplateKWAndArgsInfo!");
2076 if (HasTemplateKWAndArgsInfo) {
2077 unsigned NumTemplateArgs =
Record.readInt();
2079 E->getTrailingTemplateArgumentLoc(),
2081 assert((
E->getNumTemplateArgs() == NumTemplateArgs) &&
2082 "Wrong NumTemplateArgs!");
2086 for (
unsigned I = 0; I != NumResults; ++I) {
2087 auto *
D = readDeclAs<NamedDecl>();
2094 for (
unsigned I = 0; I != NumResults; ++I) {
2095 Results[I] = (
Iter + I).getPair();
2098 E->NameInfo =
Record.readDeclarationNameInfo();
2099 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
2103 VisitOverloadExpr(
E);
2106 CurrentUnpackingBits->getNextBit();
2108 if (CurrentUnpackingBits->getNextBit())
2109 E->Base =
Record.readSubExpr();
2113 E->OperatorLoc = readSourceLocation();
2115 E->BaseType =
Record.readType();
2119 VisitOverloadExpr(
E);
2121 E->NamingClass = readDeclAs<CXXRecordDecl>();
2134 for (
unsigned I = 0, N =
E->getNumArgs(); I != N; ++I)
2135 Args[I] = readTypeSourceInfo();
2145 E->QueriedType = readTypeSourceInfo();
2146 E->Dimension =
Record.readSubExpr();
2154 E->QueriedExpression =
Record.readSubExpr();
2162 E->Range = readSourceRange();
2163 E->Operand =
Record.readSubExpr();
2168 E->EllipsisLoc = readSourceLocation();
2169 E->NumExpansions =
Record.readInt();
2170 E->Pattern =
Record.readSubExpr();
2175 unsigned NumPartialArgs =
Record.readInt();
2176 E->OperatorLoc = readSourceLocation();
2177 E->PackLoc = readSourceLocation();
2178 E->RParenLoc = readSourceLocation();
2180 if (
E->isPartiallySubstituted()) {
2181 assert(
E->Length == NumPartialArgs);
2183 *
E = I + NumPartialArgs;
2193 E->TransformedExpressions =
Record.readInt();
2194 E->FullySubstituted =
Record.readInt();
2195 E->EllipsisLoc = readSourceLocation();
2196 E->RSquareLoc = readSourceLocation();
2197 E->SubExprs[0] =
Record.readStmt();
2198 E->SubExprs[1] =
Record.readStmt();
2199 auto **Exprs =
E->getTrailingObjects<
Expr *>();
2200 for (
unsigned I = 0; I <
E->TransformedExpressions; ++I)
2201 Exprs[I] =
Record.readExpr();
2204void ASTStmtReader::VisitSubstNonTypeTemplateParmExpr(
2207 E->AssociatedDeclAndRef.setPointer(readDeclAs<Decl>());
2208 E->AssociatedDeclAndRef.setInt(CurrentUnpackingBits->getNextBit());
2209 E->Index = CurrentUnpackingBits->getNextBits(12);
2210 if (CurrentUnpackingBits->getNextBit())
2211 E->PackIndex =
Record.readInt();
2215 E->Replacement =
Record.readSubExpr();
2218void ASTStmtReader::VisitSubstNonTypeTemplateParmPackExpr(
2221 E->AssociatedDecl = readDeclAs<Decl>();
2229 E->NameLoc = readSourceLocation();
2234 E->NumParameters =
Record.readInt();
2235 E->ParamPack = readDeclAs<ParmVarDecl>();
2236 E->NameLoc = readSourceLocation();
2237 auto **Parms =
E->getTrailingObjects<
VarDecl *>();
2238 for (
unsigned i = 0, n =
E->NumParameters; i != n; ++i)
2239 Parms[i] = readDeclAs<VarDecl>();
2244 bool HasMaterialzedDecl =
Record.readInt();
2245 if (HasMaterialzedDecl)
2246 E->State = cast<LifetimeExtendedTemporaryDecl>(
Record.readDecl());
2248 E->State =
Record.readSubExpr();
2253 E->LParenLoc = readSourceLocation();
2254 E->EllipsisLoc = readSourceLocation();
2255 E->RParenLoc = readSourceLocation();
2256 E->NumExpansions =
Record.readInt();
2257 E->SubExprs[0] =
Record.readSubExpr();
2258 E->SubExprs[1] =
Record.readSubExpr();
2259 E->SubExprs[2] =
Record.readSubExpr();
2265 unsigned ExpectedNumExprs =
Record.readInt();
2266 assert(
E->NumExprs == ExpectedNumExprs &&
2267 "expected number of expressions does not equal the actual number of "
2268 "serialized expressions.");
2269 E->NumUserSpecifiedExprs =
Record.readInt();
2270 E->InitLoc = readSourceLocation();
2271 E->LParenLoc = readSourceLocation();
2272 E->RParenLoc = readSourceLocation();
2273 for (
unsigned I = 0; I < ExpectedNumExprs; I++)
2274 E->getTrailingObjects<
Expr *>()[I] =
Record.readSubExpr();
2276 bool HasArrayFillerOrUnionDecl =
Record.readBool();
2277 if (HasArrayFillerOrUnionDecl) {
2278 bool HasArrayFiller =
Record.readBool();
2279 if (HasArrayFiller) {
2280 E->setArrayFiller(
Record.readSubExpr());
2282 E->setInitializedFieldInUnion(readDeclAs<FieldDecl>());
2285 E->updateDependence();
2290 E->SourceExpr =
Record.readSubExpr();
2292 E->setIsUnique(
Record.readInt());
2295void ASTStmtReader::VisitTypoExpr(
TypoExpr *
E) {
2296 llvm_unreachable(
"Cannot read TypoExpr nodes");
2301 unsigned NumArgs =
Record.readInt();
2302 E->BeginLoc = readSourceLocation();
2303 E->EndLoc = readSourceLocation();
2304 assert((NumArgs + 0LL ==
2309 Child =
Record.readSubStmt();
2317 E->IsArrow = (
Record.readInt() != 0);
2318 E->BaseExpr =
Record.readSubExpr();
2319 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
2320 E->MemberLoc = readSourceLocation();
2321 E->TheDecl = readDeclAs<MSPropertyDecl>();
2326 E->setBase(
Record.readSubExpr());
2327 E->setIdx(
Record.readSubExpr());
2328 E->setRBracketLoc(readSourceLocation());
2333 E->setSourceRange(readSourceRange());
2334 E->Guid = readDeclAs<MSGuidDecl>();
2335 if (
E->isTypeOperand())
2336 E->Operand = readTypeSourceInfo();
2338 E->Operand =
Record.readSubExpr();
2341void ASTStmtReader::VisitSEHLeaveStmt(
SEHLeaveStmt *S) {
2343 S->setLeaveLoc(readSourceLocation());
2348 S->Loc = readSourceLocation();
2349 S->Children[SEHExceptStmt::FILTER_EXPR] =
Record.readSubStmt();
2350 S->Children[SEHExceptStmt::BLOCK] =
Record.readSubStmt();
2355 S->Loc = readSourceLocation();
2356 S->Block =
Record.readSubStmt();
2359void ASTStmtReader::VisitSEHTryStmt(
SEHTryStmt *S) {
2361 S->IsCXXTry =
Record.readInt();
2362 S->TryLoc = readSourceLocation();
2363 S->Children[SEHTryStmt::TRY] =
Record.readSubStmt();
2364 S->Children[SEHTryStmt::HANDLER] =
Record.readSubStmt();
2373 E->setPreArg(CUDAKernelCallExpr::CONFIG,
Record.readSubExpr());
2379void ASTStmtReader::VisitAsTypeExpr(
AsTypeExpr *
E) {
2381 E->BuiltinLoc = readSourceLocation();
2382 E->RParenLoc = readSourceLocation();
2383 E->SrcExpr =
Record.readSubExpr();
2392 for (
Stmt *&SubStmt : S->SubStmts)
2393 SubStmt =
Record.readSubStmt();
2397 Record.readOMPChildren(
E->Data);
2398 E->setLocStart(readSourceLocation());
2399 E->setLocEnd(readSourceLocation());
2406 VisitOMPExecutableDirective(
D);
2410 VisitOMPLoopBasedDirective(
D);
2417 VisitOMPExecutableDirective(
D);
2422 VisitOMPExecutableDirective(
D);
2423 D->setHasCancel(
Record.readBool());
2427 VisitOMPLoopDirective(
D);
2430void ASTStmtReader::VisitOMPLoopTransformationDirective(
2432 VisitOMPLoopBasedDirective(
D);
2433 D->setNumGeneratedLoops(
Record.readUInt32());
2437 VisitOMPLoopTransformationDirective(
D);
2441 VisitOMPLoopTransformationDirective(
D);
2445 VisitOMPLoopTransformationDirective(
D);
2449 VisitOMPLoopTransformationDirective(
D);
2453 VisitOMPLoopDirective(
D);
2454 D->setHasCancel(
Record.readBool());
2458 VisitOMPLoopDirective(
D);
2463 VisitOMPExecutableDirective(
D);
2464 D->setHasCancel(
Record.readBool());
2469 VisitOMPExecutableDirective(
D);
2470 D->setHasCancel(
Record.readBool());
2475 VisitOMPExecutableDirective(
D);
2480 VisitOMPExecutableDirective(
D);
2485 VisitOMPExecutableDirective(
D);
2490 VisitOMPExecutableDirective(
D);
2491 D->DirName =
Record.readDeclarationNameInfo();
2495 VisitOMPLoopDirective(
D);
2496 D->setHasCancel(
Record.readBool());
2499void ASTStmtReader::VisitOMPParallelForSimdDirective(
2501 VisitOMPLoopDirective(
D);
2504void ASTStmtReader::VisitOMPParallelMasterDirective(
2507 VisitOMPExecutableDirective(
D);
2510void ASTStmtReader::VisitOMPParallelMaskedDirective(
2513 VisitOMPExecutableDirective(
D);
2516void ASTStmtReader::VisitOMPParallelSectionsDirective(
2519 VisitOMPExecutableDirective(
D);
2520 D->setHasCancel(
Record.readBool());
2525 VisitOMPExecutableDirective(
D);
2526 D->setHasCancel(
Record.readBool());
2531 VisitOMPExecutableDirective(
D);
2536 VisitOMPExecutableDirective(
D);
2543 VisitOMPExecutableDirective(
D);
2548 VisitOMPExecutableDirective(
D);
2555 VisitOMPExecutableDirective(
D);
2560 VisitOMPExecutableDirective(
D);
2565 VisitOMPExecutableDirective(
D);
2570 VisitOMPExecutableDirective(
D);
2575 VisitOMPExecutableDirective(
D);
2580 VisitOMPExecutableDirective(
D);
2585 VisitOMPExecutableDirective(
D);
2586 D->Flags.IsXLHSInRHSPart =
Record.readBool() ? 1 : 0;
2587 D->Flags.IsPostfixUpdate =
Record.readBool() ? 1 : 0;
2588 D->Flags.IsFailOnly =
Record.readBool() ? 1 : 0;
2593 VisitOMPExecutableDirective(
D);
2598 VisitOMPExecutableDirective(
D);
2601void ASTStmtReader::VisitOMPTargetEnterDataDirective(
2604 VisitOMPExecutableDirective(
D);
2607void ASTStmtReader::VisitOMPTargetExitDataDirective(
2610 VisitOMPExecutableDirective(
D);
2613void ASTStmtReader::VisitOMPTargetParallelDirective(
2616 VisitOMPExecutableDirective(
D);
2617 D->setHasCancel(
Record.readBool());
2620void ASTStmtReader::VisitOMPTargetParallelForDirective(
2622 VisitOMPLoopDirective(
D);
2623 D->setHasCancel(
Record.readBool());
2628 VisitOMPExecutableDirective(
D);
2631void ASTStmtReader::VisitOMPCancellationPointDirective(
2634 VisitOMPExecutableDirective(
D);
2640 VisitOMPExecutableDirective(
D);
2645 VisitOMPLoopDirective(
D);
2646 D->setHasCancel(
Record.readBool());
2650 VisitOMPLoopDirective(
D);
2653void ASTStmtReader::VisitOMPMasterTaskLoopDirective(
2655 VisitOMPLoopDirective(
D);
2656 D->setHasCancel(
Record.readBool());
2659void ASTStmtReader::VisitOMPMaskedTaskLoopDirective(
2661 VisitOMPLoopDirective(
D);
2662 D->setHasCancel(
Record.readBool());
2665void ASTStmtReader::VisitOMPMasterTaskLoopSimdDirective(
2667 VisitOMPLoopDirective(
D);
2670void ASTStmtReader::VisitOMPMaskedTaskLoopSimdDirective(
2672 VisitOMPLoopDirective(
D);
2675void ASTStmtReader::VisitOMPParallelMasterTaskLoopDirective(
2677 VisitOMPLoopDirective(
D);
2678 D->setHasCancel(
Record.readBool());
2681void ASTStmtReader::VisitOMPParallelMaskedTaskLoopDirective(
2683 VisitOMPLoopDirective(
D);
2684 D->setHasCancel(
Record.readBool());
2687void ASTStmtReader::VisitOMPParallelMasterTaskLoopSimdDirective(
2689 VisitOMPLoopDirective(
D);
2692void ASTStmtReader::VisitOMPParallelMaskedTaskLoopSimdDirective(
2694 VisitOMPLoopDirective(
D);
2698 VisitOMPLoopDirective(
D);
2703 VisitOMPExecutableDirective(
D);
2706void ASTStmtReader::VisitOMPDistributeParallelForDirective(
2708 VisitOMPLoopDirective(
D);
2709 D->setHasCancel(
Record.readBool());
2712void ASTStmtReader::VisitOMPDistributeParallelForSimdDirective(
2714 VisitOMPLoopDirective(
D);
2717void ASTStmtReader::VisitOMPDistributeSimdDirective(
2719 VisitOMPLoopDirective(
D);
2722void ASTStmtReader::VisitOMPTargetParallelForSimdDirective(
2724 VisitOMPLoopDirective(
D);
2728 VisitOMPLoopDirective(
D);
2731void ASTStmtReader::VisitOMPTeamsDistributeDirective(
2733 VisitOMPLoopDirective(
D);
2736void ASTStmtReader::VisitOMPTeamsDistributeSimdDirective(
2738 VisitOMPLoopDirective(
D);
2741void ASTStmtReader::VisitOMPTeamsDistributeParallelForSimdDirective(
2743 VisitOMPLoopDirective(
D);
2746void ASTStmtReader::VisitOMPTeamsDistributeParallelForDirective(
2748 VisitOMPLoopDirective(
D);
2749 D->setHasCancel(
Record.readBool());
2754 VisitOMPExecutableDirective(
D);
2757void ASTStmtReader::VisitOMPTargetTeamsDistributeDirective(
2759 VisitOMPLoopDirective(
D);
2762void ASTStmtReader::VisitOMPTargetTeamsDistributeParallelForDirective(
2764 VisitOMPLoopDirective(
D);
2765 D->setHasCancel(
Record.readBool());
2768void ASTStmtReader::VisitOMPTargetTeamsDistributeParallelForSimdDirective(
2770 VisitOMPLoopDirective(
D);
2773void ASTStmtReader::VisitOMPTargetTeamsDistributeSimdDirective(
2775 VisitOMPLoopDirective(
D);
2780 VisitOMPExecutableDirective(
D);
2785 VisitOMPExecutableDirective(
D);
2786 D->setTargetCallLoc(
Record.readSourceLocation());
2791 VisitOMPExecutableDirective(
D);
2795 VisitOMPLoopDirective(
D);
2798void ASTStmtReader::VisitOMPTeamsGenericLoopDirective(
2800 VisitOMPLoopDirective(
D);
2803void ASTStmtReader::VisitOMPTargetTeamsGenericLoopDirective(
2805 VisitOMPLoopDirective(
D);
2806 D->setCanBeParallelFor(
Record.readBool());
2809void ASTStmtReader::VisitOMPParallelGenericLoopDirective(
2811 VisitOMPLoopDirective(
D);
2814void ASTStmtReader::VisitOMPTargetParallelGenericLoopDirective(
2816 VisitOMPLoopDirective(
D);
2825 S->Range =
Record.readSourceRange();
2826 S->DirectiveLoc =
Record.readSourceLocation();
2827 Record.readOpenACCClauseList(S->Clauses);
2830void ASTStmtReader::VisitOpenACCAssociatedStmtConstruct(
2832 VisitOpenACCConstructStmt(S);
2833 S->setAssociatedStmt(
Record.readSubStmt());
2838 VisitOpenACCAssociatedStmtConstruct(S);
2843 VisitOpenACCAssociatedStmtConstruct(S);
2849 VisitOpenACCAssociatedStmtConstruct(S);
2854 VisitOpenACCAssociatedStmtConstruct(S);
2857void ASTStmtReader::VisitOpenACCEnterDataConstruct(
2860 VisitOpenACCConstructStmt(S);
2865 VisitOpenACCConstructStmt(S);
2870 VisitOpenACCConstructStmt(S);
2875 VisitOpenACCConstructStmt(S);
2880 VisitOpenACCAssociatedStmtConstruct(S);
2887 VisitOpenACCConstructStmt(S);
2888 S->LParenLoc =
Record.readSourceLocation();
2889 S->RParenLoc =
Record.readSourceLocation();
2890 S->QueuesLoc =
Record.readSourceLocation();
2892 for (
unsigned I = 0; I < S->NumExprs; ++I) {
2893 S->getExprPtr()[I] = cast_if_present<Expr>(
Record.readSubStmt());
2894 assert((I == 0 || S->getExprPtr()[I] !=
nullptr) &&
2895 "Only first expression should be null");
2905 S->SubExprs[HLSLOutArgExpr::BaseLValue] =
Record.readSubExpr();
2906 S->SubExprs[HLSLOutArgExpr::CastedTemporary] =
Record.readSubExpr();
2907 S->SubExprs[HLSLOutArgExpr::WritebackCast] =
Record.readSubExpr();
2908 S->IsInOut =
Record.readBool();
2916 switch (ReadingKind) {
2918 llvm_unreachable(
"should not call this when not reading anything");
2921 return ReadStmtFromStream(F);
2926 llvm_unreachable(
"ReadingKind not set ?");
2930 return cast_or_null<Expr>(
ReadStmt(F));
2945 ReadingKindTracker ReadingKind(Read_Stmt, *
this);
2950 llvm::DenseMap<uint64_t, Stmt *> StmtEntries;
2953 unsigned PrevNumStmts = StmtStack.size();
2962 Cursor.advanceSkippingSubblocks();
2964 Error(
toString(MaybeEntry.takeError()));
2967 llvm::BitstreamEntry Entry = MaybeEntry.get();
2969 switch (Entry.Kind) {
2970 case llvm::BitstreamEntry::SubBlock:
2971 case llvm::BitstreamEntry::Error:
2972 Error(
"malformed block record in AST file");
2974 case llvm::BitstreamEntry::EndBlock:
2976 case llvm::BitstreamEntry::Record:
2983 bool Finished =
false;
2984 bool IsStmtReference =
false;
2986 if (!MaybeStmtCode) {
2987 Error(
toString(MaybeStmtCode.takeError()));
2990 switch ((
StmtCode)MaybeStmtCode.get()) {
2996 IsStmtReference =
true;
2997 assert(StmtEntries.contains(
Record[0]) &&
2998 "No stmt was recorded for this offset reference!");
2999 S = StmtEntries[
Record.readInt()];
3039 bool HasElse = IfStmtBits.getNextBit();
3040 bool HasVar = IfStmtBits.getNextBit();
3041 bool HasInit = IfStmtBits.getNextBit();
3127 DeclRefExprBits.advance(5);
3128 bool HasFoundDecl = DeclRefExprBits.getNextBit();
3129 bool HasQualifier = DeclRefExprBits.getNextBit();
3130 bool HasTemplateKWAndArgsInfo = DeclRefExprBits.getNextBit();
3131 unsigned NumTemplateArgs = HasTemplateKWAndArgsInfo
3135 HasTemplateKWAndArgsInfo, NumTemplateArgs);
3180 bool HasFPFeatures = UnaryOperatorBits.getNextBit();
3220 CallExprBits.advance(1);
3221 auto HasFPFeatures = CallExprBits.getNextBit();
3233 bool HasQualifier = ExprMemberBits.getNextBit();
3234 bool HasFoundDecl = ExprMemberBits.getNextBit();
3235 bool HasTemplateInfo = ExprMemberBits.getNextBit();
3238 HasTemplateInfo, NumTemplateArgs);
3244 BinaryOperatorBits.advance( 6);
3245 bool HasFPFeatures = BinaryOperatorBits.getNextBit();
3252 BinaryOperatorBits.advance( 6);
3253 bool HasFPFeatures = BinaryOperatorBits.getNextBit();
3269 CastExprBits.advance(7);
3270 bool HasFPFeatures = CastExprBits.getNextBit();
3278 CastExprBits.advance(7);
3279 bool HasFPFeatures = CastExprBits.getNextBit();
3412 llvm_unreachable(
"mismatching AST file");
3526 CollapsedNum,
Empty);
3546 "Reverse directive accepts only a single loop");
3548 "Reverse directive has no clauses");
3608 CollapsedNum,
Empty);
3616 CollapsedNum,
Empty);
3682 !HasAssociatedStmt,
Empty);
3720 CollapsedNum,
Empty);
3755 CollapsedNum,
Empty);
3763 CollapsedNum,
Empty);
3771 CollapsedNum,
Empty);
3779 CollapsedNum,
Empty);
3787 CollapsedNum,
Empty);
3795 CollapsedNum,
Empty);
3803 CollapsedNum,
Empty);
3811 Context, NumClauses, CollapsedNum,
Empty);
3819 Context, NumClauses, CollapsedNum,
Empty);
3835 CollapsedNum,
Empty);
3852 CollapsedNum,
Empty);
3860 CollapsedNum,
Empty);
3876 CollapsedNum,
Empty);
3884 CollapsedNum,
Empty);
3892 Context, NumClauses, CollapsedNum,
Empty);
3900 Context, NumClauses, CollapsedNum,
Empty);
3913 CollapsedNum,
Empty);
3921 Context, NumClauses, CollapsedNum,
Empty);
3929 Context, NumClauses, CollapsedNum,
Empty);
3937 Context, NumClauses, CollapsedNum,
Empty);
3960 CollapsedNum,
Empty);
3968 CollapsedNum,
Empty);
3976 CollapsedNum,
Empty);
3984 CollapsedNum,
Empty);
3992 Context, NumClauses, CollapsedNum,
Empty);
4005 CallExprBits.advance(1);
4006 auto HasFPFeatures = CallExprBits.getNextBit();
4015 CallExprBits.advance(1);
4016 auto HasFPFeatures = CallExprBits.getNextBit();
4045 CastExprBits.advance(7);
4046 bool HasFPFeatures = CastExprBits.getNextBit();
4074 CastExprBits.advance(7);
4075 bool HasFPFeatures = CastExprBits.getNextBit();
4083 assert(PathSize == 0 &&
"Wrong PathSize!");
4092 CallExprBits.advance(1);
4093 auto HasFPFeatures = CallExprBits.getNextBit();
4187 bool HasTemplateKWAndArgsInfo = DependentScopeMemberBits.getNextBit();
4189 bool HasFirstQualifierFoundInScope =
4190 DependentScopeMemberBits.getNextBit();
4192 Context, HasTemplateKWAndArgsInfo, NumTemplateArgs,
4193 HasFirstQualifierFoundInScope);
4201 bool HasTemplateKWAndArgsInfo = DependentScopeDeclRefBits.getNextBit();
4202 unsigned NumTemplateArgs =
4203 HasTemplateKWAndArgsInfo
4204 ? DependentScopeDeclRefBits.getNextBits(16)
4207 Context, HasTemplateKWAndArgsInfo, NumTemplateArgs);
4219 auto HasTemplateKWAndArgsInfo = OverloadExprBits.getNextBit();
4220 auto NumTemplateArgs = HasTemplateKWAndArgsInfo
4224 Context, NumResults, HasTemplateKWAndArgsInfo, NumTemplateArgs);
4231 auto HasTemplateKWAndArgsInfo = OverloadExprBits.getNextBit();
4232 auto NumTemplateArgs = HasTemplateKWAndArgsInfo
4236 Context, NumResults, HasTemplateKWAndArgsInfo, NumTemplateArgs);
4306 CallExprBits.advance(1);
4307 auto HasFPFeatures = CallExprBits.getNextBit();
4426 ++NumStatementsRead;
4428 if (S && !IsStmtReference) {
4430 StmtEntries[
Cursor.GetCurrentBitNo()] = S;
4434 "Invalid deserialization of statement");
4435 StmtStack.push_back(S);
4438 assert(StmtStack.size() > PrevNumStmts &&
"Read too many sub-stmts!");
4439 assert(StmtStack.size() == PrevNumStmts + 1 &&
"Extra expressions on stack!");
4440 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 several types used to describe C++ lambda expressions that are shared between the parser and ...
Defines the clang::LangOptions interface.
llvm::MachO::Record Record
This file defines OpenMP AST classes for clauses.
Defines some OpenMP-specific enums and functions.
Defines an enumeration for C++ overloaded operators.
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.
Defines enumerations for the type traits support.
C Language Family Type Representation.
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...
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 or init-capture pack that has been substituted bu...
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.
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)
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 '#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 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 OpenACCShutdownConstruct * 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.
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.
GenericSelectionExprBitfields GenericSelectionExprBits
LambdaExprBitfields LambdaExprBits
UnresolvedLookupExprBitfields UnresolvedLookupExprBits
SubstNonTypeTemplateParmExprBitfields SubstNonTypeTemplateParmExprBits
CXXNoexceptExprBitfields CXXNoexceptExprBits
CXXRewrittenBinaryOperatorBitfields CXXRewrittenBinaryOperatorBits
ExprWithCleanupsBitfields ExprWithCleanupsBits
CXXScalarValueInitExprBitfields CXXScalarValueInitExprBits
CXXConstructExprBitfields CXXConstructExprBits
CXXDependentScopeMemberExprBitfields CXXDependentScopeMemberExprBits
TypeTraitExprBitfields TypeTraitExprBits
CXXNewExprBitfields CXXNewExprBits
SourceLocExprBitfields SourceLocExprBits
ConstantExprBitfields ConstantExprBits
RequiresExprBitfields RequiresExprBits
StmtExprBitfields StmtExprBits
StringLiteralBitfields StringLiteralBits
OpaqueValueExprBitfields OpaqueValueExprBits
CXXThrowExprBitfields CXXThrowExprBits
MemberExprBitfields MemberExprBits
DeclRefExprBitfields DeclRefExprBits
CXXOperatorCallExprBitfields CXXOperatorCallExprBits
CXXDefaultInitExprBitfields CXXDefaultInitExprBits
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, unsigned NumArgs)
TypoExpr - Internal placeholder for expressions where typo correction still needs to be performed and...
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 ...
Represents a variable declaration or definition.
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_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_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_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_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.
@ 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.
@ 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.
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.
AccessSpecifier
A C++ access specifier (public, private, protected), plus the special value "none" which means differ...
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....