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"
67 using namespace clang;
68 using 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();
109 static const unsigned NumStmtFields = 0;
113 static const unsigned NumExprFields = NumStmtFields + 2;
116 static const unsigned NumExprBits = 10;
121 unsigned NumTemplateArgs);
123 void VisitStmt(
Stmt *S);
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)
144 assert(
Record.getIdx() == NumStmtFields &&
"Incorrect statement field count");
147 void ASTStmtReader::VisitNullStmt(
NullStmt *S) {
149 S->setSemiLoc(readSourceLocation());
150 S->NullStmtBits.HasLeadingEmptyMacro =
Record.readInt();
153 void ASTStmtReader::VisitCompoundStmt(
CompoundStmt *S) {
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();
169 void ASTStmtReader::VisitSwitchCase(
SwitchCase *S) {
172 S->setKeywordLoc(readSourceLocation());
173 S->setColonLoc(readSourceLocation());
176 void 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());
187 void ASTStmtReader::VisitDefaultStmt(
DefaultStmt *S) {
189 S->setSubStmt(
Record.readSubStmt());
192 void 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();
219 void 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());
245 void 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);
277 void 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());
292 void 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());
301 void 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());
313 void 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());
327 void ASTStmtReader::VisitContinueStmt(
ContinueStmt *S) {
329 S->setContinueLoc(readSourceLocation());
332 void ASTStmtReader::VisitBreakStmt(
BreakStmt *S) {
334 S->setBreakLoc(readSourceLocation());
337 void 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());
349 void 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());
369 void 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());
379 void 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);
418 void 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();
473 void ASTStmtReader::VisitCoreturnStmt(
CoreturnStmt *S) {
475 S->CoreturnLoc =
Record.readSourceLocation();
476 for (
auto &SubStmt: S->SubStmts)
477 SubStmt =
Record.readSubStmt();
478 S->IsImplicit =
Record.readInt() != 0;
481 void ASTStmtReader::VisitCoawaitExpr(
CoawaitExpr *E) {
483 E->KeywordLoc = readSourceLocation();
484 for (
auto &SubExpr: E->SubExprs)
485 SubExpr =
Record.readSubStmt();
486 E->OpaqueValue = cast_or_null<OpaqueValueExpr>(
Record.readSubStmt());
490 void ASTStmtReader::VisitCoyieldExpr(
CoyieldExpr *E) {
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();
505 void ASTStmtReader::VisitCapturedStmt(
CapturedStmt *S) {
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();
531 void ASTStmtReader::VisitExpr(
Expr *E) {
533 CurrentUnpackingBits.emplace(
Record.readInt());
535 CurrentUnpackingBits->getNextBits(5)));
537 CurrentUnpackingBits->getNextBits(2)));
539 CurrentUnpackingBits->getNextBits(3)));
542 assert(
Record.getIdx() == NumExprFields &&
543 "Incorrect expression field count");
546 void ASTStmtReader::VisitConstantExpr(
ConstantExpr *E) {
558 switch (StorageKind) {
563 E->Int64Result() =
Record.readInt();
567 E->APValueResult() =
Record.readAPValue();
570 Record.getContext().addDestruction(&E->APValueResult());
581 E->setLocation(readSourceLocation());
582 E->setLParenLocation(readSourceLocation());
583 E->setRParenLocation(readSourceLocation());
585 E->setTypeSourceInfo(
Record.readTypeSourceInfo());
591 E->setLocation(readSourceLocation());
592 E->setLParenLocation(readSourceLocation());
593 E->setRParenLocation(readSourceLocation());
595 E->setExpr(
Record.readSubExpr());
600 bool HasFunctionName =
Record.readInt();
606 E->setFunctionName(cast<StringLiteral>(
Record.readSubExpr()));
609 void ASTStmtReader::VisitDeclRefExpr(
DeclRefExpr *E) {
612 CurrentUnpackingBits.emplace(
Record.readInt());
613 E->
DeclRefExprBits.HadMultipleCandidates = CurrentUnpackingBits->getNextBit();
615 CurrentUnpackingBits->getNextBit();
617 CurrentUnpackingBits->getNextBits(2);
618 E->
DeclRefExprBits.IsImmediateEscalating = CurrentUnpackingBits->getNextBit();
622 CurrentUnpackingBits->getNextBit();
623 E->
DeclRefExprBits.CapturedByCopyInLambdaWithExplicitObjectParameter =
false;
624 unsigned NumTemplateArgs = 0;
626 NumTemplateArgs =
Record.readInt();
632 if (E->hasFoundDecl())
633 *E->getTrailingObjects<
NamedDecl *>() = readDeclAs<NamedDecl>();
636 ReadTemplateKWAndArgsInfo(
640 E->D = readDeclAs<ValueDecl>();
661 static_cast<llvm::APFloatBase::Semantics
>(
Record.readInt()));
677 unsigned NumConcatenated =
Record.readInt();
678 unsigned Length =
Record.readInt();
679 unsigned CharByteWidth =
Record.readInt();
681 "Wrong number of concatenated tokens!");
682 assert((Length == E->
getLength()) &&
"Wrong Length!");
683 assert((CharByteWidth == E->
getCharByteWidth()) &&
"Wrong character width!");
690 assert((CharByteWidth ==
691 StringLiteral::mapCharByteWidth(
Record.getContext().getTargetInfo(),
693 "Wrong character width!");
696 for (
unsigned I = 0; I < NumConcatenated; ++I)
697 E->setStrTokenLoc(I, readSourceLocation());
700 char *StrData = E->getStrDataAsChar();
701 for (
unsigned I = 0; I < Length * CharByteWidth; ++I)
702 StrData[I] =
Record.readInt();
712 void ASTStmtReader::VisitParenExpr(
ParenExpr *E) {
721 unsigned NumExprs =
Record.readInt();
722 assert((NumExprs == E->
getNumExprs()) &&
"Wrong NumExprs!");
723 for (
unsigned I = 0; I != NumExprs; ++I)
724 E->getTrailingObjects<
Stmt *>()[I] =
Record.readSubStmt();
725 E->LParenLoc = readSourceLocation();
726 E->RParenLoc = readSourceLocation();
731 bool hasFP_Features = CurrentUnpackingBits->getNextBit();
743 void ASTStmtReader::VisitOffsetOfExpr(
OffsetOfExpr *E) {
788 if (
Record.peekInt() == 0) {
804 unsigned NumDetailRecords =
Record.readInt();
805 for (
unsigned i = 0; i != NumDetailRecords; ++i) {
809 std::string DiagMessage =
Record.readString();
810 Satisfaction.
Details.emplace_back(
811 ConstraintExpr,
new (
Record.getContext())
813 DiagLocation, DiagMessage});
815 Satisfaction.
Details.emplace_back(ConstraintExpr,
Record.readExpr());
821 void ASTStmtReader::VisitConceptSpecializationExpr(
826 E->ConceptRef =
Record.readConceptReference();
834 std::string SubstitutedEntity =
Record.readString();
836 std::string DiagMessage =
Record.readString();
837 return new (
Record.getContext())
842 void ASTStmtReader::VisitRequiresExpr(
RequiresExpr *E) {
844 unsigned NumLocalParameters =
Record.readInt();
845 unsigned NumRequirements =
Record.readInt();
850 for (
unsigned i = 0; i < NumLocalParameters; ++i)
851 LocalParameters.push_back(cast<ParmVarDecl>(
Record.readDecl()));
852 std::copy(LocalParameters.begin(), LocalParameters.end(),
855 for (
unsigned i = 0; i < NumRequirements; ++i) {
865 R =
new (
Record.getContext())
868 R =
new (
Record.getContext())
883 std::optional<concepts::ExprRequirement::ReturnTypeRequirement> Req;
889 NoexceptLoc =
Record.readSourceLocation();
890 switch (
Record.readInt()) {
900 SubstitutedConstraintExpr =
901 cast<ConceptSpecializationExpr>(
Record.readExpr());
910 if (
Expr *Ex = E.dyn_cast<
Expr *>())
913 std::move(*Req), Status, SubstitutedConstraintExpr);
921 bool HasInvalidConstraint =
Record.readInt();
922 if (HasInvalidConstraint) {
923 std::string InvalidConstraint =
Record.readString();
924 char *InvalidConstraintBuf =
925 new (
Record.getContext())
char[InvalidConstraint.size()];
926 std::copy(InvalidConstraint.begin(), InvalidConstraint.end(),
927 InvalidConstraintBuf);
930 StringRef(InvalidConstraintBuf, InvalidConstraint.size()),
938 R =
new (
Record.getContext())
945 Requirements.push_back(R);
947 std::copy(Requirements.begin(), Requirements.end(),
949 E->LParenLoc =
Record.readSourceLocation();
950 E->RParenLoc =
Record.readSourceLocation();
951 E->RBraceLoc =
Record.readSourceLocation();
973 E->setBase(
Record.readSubExpr());
974 E->setLowerBound(
Record.readSubExpr());
975 E->setLength(
Record.readSubExpr());
978 E->setStride(
Record.readSubExpr());
980 E->setColonLocFirst(readSourceLocation());
983 E->setColonLocSecond(readSourceLocation());
985 E->setRBracketLoc(readSourceLocation());
990 unsigned NumDims =
Record.readInt();
991 E->setBase(
Record.readSubExpr());
993 for (
unsigned I = 0; I < NumDims; ++I)
994 Dims[I] =
Record.readSubExpr();
995 E->setDimensions(Dims);
997 for (
unsigned I = 0; I < NumDims; ++I)
998 SRs[I] = readSourceRange();
999 E->setBracketsRanges(SRs);
1006 unsigned NumIters =
Record.readInt();
1010 for (
unsigned I = 0; I < NumIters; ++I) {
1011 E->setIteratorDeclaration(I,
Record.readDeclRef());
1012 E->setAssignmentLoc(I, readSourceLocation());
1019 SecColonLoc = readSourceLocation();
1020 E->setIteratorRange(I,
Begin, ColonLoc,
End, SecColonLoc, Step);
1027 E->setHelper(I, HD);
1031 void ASTStmtReader::VisitCallExpr(
CallExpr *E) {
1034 unsigned NumArgs =
Record.readInt();
1035 CurrentUnpackingBits.emplace(
Record.readInt());
1038 bool HasFPFeatures = CurrentUnpackingBits->getNextBit();
1039 assert((NumArgs == E->
getNumArgs()) &&
"Wrong NumArgs!");
1042 for (
unsigned I = 0; I != NumArgs; ++I)
1054 void ASTStmtReader::VisitMemberExpr(
MemberExpr *E) {
1057 CurrentUnpackingBits.emplace(
Record.readInt());
1058 bool HasQualifier = CurrentUnpackingBits->getNextBit();
1059 bool HasFoundDecl = CurrentUnpackingBits->getNextBit();
1060 bool HasTemplateInfo = CurrentUnpackingBits->getNextBit();
1061 unsigned NumTemplateArgs =
Record.readInt();
1063 E->Base =
Record.readSubExpr();
1066 E->MemberLoc =
Record.readSourceLocation();
1071 E->
MemberExprBits.HadMultipleCandidates = CurrentUnpackingBits->getNextBit();
1073 CurrentUnpackingBits->getNextBits(2);
1086 if (HasTemplateInfo)
1087 ReadTemplateKWAndArgsInfo(
1092 void ASTStmtReader::VisitObjCIsaExpr(
ObjCIsaExpr *E) {
1100 void ASTStmtReader::
1103 E->Operand =
Record.readSubExpr();
1104 E->setShouldCopy(
Record.readInt());
1108 VisitExplicitCastExpr(E);
1109 E->LParenLoc = readSourceLocation();
1110 E->BridgeKeywordLoc = readSourceLocation();
1111 E->Kind =
Record.readInt();
1114 void ASTStmtReader::VisitCastExpr(
CastExpr *E) {
1116 unsigned NumBaseSpecs =
Record.readInt();
1119 CurrentUnpackingBits.emplace(
Record.readInt());
1121 unsigned HasFPFeatures = CurrentUnpackingBits->getNextBit();
1127 while (NumBaseSpecs--) {
1129 *BaseSpec =
Record.readCXXBaseSpecifier();
1130 *BaseI++ = BaseSpec;
1139 CurrentUnpackingBits.emplace(
Record.readInt());
1142 bool hasFP_Features = CurrentUnpackingBits->getNextBit();
1153 VisitBinaryOperator(E);
1160 E->SubExprs[ConditionalOperator::COND] =
Record.readSubExpr();
1161 E->SubExprs[ConditionalOperator::LHS] =
Record.readSubExpr();
1162 E->SubExprs[ConditionalOperator::RHS] =
Record.readSubExpr();
1163 E->QuestionLoc = readSourceLocation();
1164 E->ColonLoc = readSourceLocation();
1170 E->OpaqueValue = cast<OpaqueValueExpr>(
Record.readSubExpr());
1171 E->SubExprs[BinaryConditionalOperator::COMMON] =
Record.readSubExpr();
1172 E->SubExprs[BinaryConditionalOperator::COND] =
Record.readSubExpr();
1173 E->SubExprs[BinaryConditionalOperator::LHS] =
Record.readSubExpr();
1174 E->SubExprs[BinaryConditionalOperator::RHS] =
Record.readSubExpr();
1175 E->QuestionLoc = readSourceLocation();
1176 E->ColonLoc = readSourceLocation();
1190 VisitExplicitCastExpr(E);
1210 void ASTStmtReader::VisitInitListExpr(
InitListExpr *E) {
1212 if (
auto *SyntForm = cast_or_null<InitListExpr>(
Record.readSubStmt()))
1216 bool isArrayFiller =
Record.readInt();
1217 Expr *filler =
nullptr;
1218 if (isArrayFiller) {
1219 filler =
Record.readSubExpr();
1220 E->ArrayFillerOrUnionFieldInit = filler;
1222 E->ArrayFillerOrUnionFieldInit = readDeclAs<FieldDecl>();
1224 unsigned NumInits =
Record.readInt();
1226 if (isArrayFiller) {
1227 for (
unsigned I = 0; I != NumInits; ++I) {
1232 for (
unsigned I = 0; I != NumInits; ++I)
1241 unsigned NumSubExprs =
Record.readInt();
1242 assert(NumSubExprs == E->
getNumSubExprs() &&
"Wrong number of subexprs");
1243 for (
unsigned I = 0; I != NumSubExprs; ++I)
1252 auto *
Field = readDeclAs<FieldDecl>();
1256 Field->getIdentifier(), DotLoc, FieldLoc));
1257 Designators.back().setFieldDecl(Field);
1271 unsigned Index =
Record.readInt();
1281 unsigned Index =
Record.readInt();
1286 Index, LBracketLoc, EllipsisLoc, RBracketLoc));
1292 Designators.data(), Designators.size());
1301 void ASTStmtReader::VisitNoInitExpr(
NoInitExpr *E) {
1307 E->SubExprs[0] =
Record.readSubExpr();
1308 E->SubExprs[1] =
Record.readSubExpr();
1319 void ASTStmtReader::VisitVAArgExpr(
VAArgExpr *E) {
1330 E->ParentContext = readDeclAs<DeclContext>();
1331 E->BuiltinLoc = readSourceLocation();
1332 E->RParenLoc = readSourceLocation();
1340 E->
setLabel(readDeclAs<LabelDecl>());
1343 void ASTStmtReader::VisitStmtExpr(
StmtExpr *E) {
1351 void ASTStmtReader::VisitChooseExpr(
ChooseExpr *E) {
1361 void ASTStmtReader::VisitGNUNullExpr(
GNUNullExpr *E) {
1369 unsigned NumExprs =
Record.readInt();
1371 Exprs.push_back(
Record.readSubExpr());
1379 E->BuiltinLoc = readSourceLocation();
1380 E->RParenLoc = readSourceLocation();
1381 E->TInfo = readTypeSourceInfo();
1382 E->SrcExpr =
Record.readSubExpr();
1385 void ASTStmtReader::VisitBlockExpr(
BlockExpr *E) {
1393 unsigned NumAssocs =
Record.readInt();
1394 assert(NumAssocs == E->
getNumAssocs() &&
"Wrong NumAssocs!");
1395 E->IsExprPredicate =
Record.readInt();
1396 E->ResultIndex =
Record.readInt();
1398 E->DefaultLoc = readSourceLocation();
1399 E->RParenLoc = readSourceLocation();
1401 Stmt **Stmts = E->getTrailingObjects<
Stmt *>();
1405 for (
unsigned I = 0, N = NumAssocs + 1; I < N; ++I)
1406 Stmts[I] =
Record.readSubExpr();
1409 for (
unsigned I = 0, N = NumAssocs; I < N; ++I)
1410 TSIs[I] = readTypeSourceInfo();
1415 unsigned numSemanticExprs =
Record.readInt();
1420 E->getSubExprsBuffer()[0] =
Record.readSubExpr();
1423 for (
unsigned i = 0; i != numSemanticExprs; ++i) {
1425 E->getSubExprsBuffer()[i+1] = subExpr;
1429 void ASTStmtReader::VisitAtomicExpr(
AtomicExpr *E) {
1433 for (
unsigned I = 0; I != E->NumSubExprs; ++I)
1434 E->SubExprs[I] =
Record.readSubExpr();
1435 E->BuiltinLoc = readSourceLocation();
1436 E->RParenLoc = readSourceLocation();
1451 E->SubExpr =
Record.readSubStmt();
1452 E->BoxingMethod = readDeclAs<ObjCMethodDecl>();
1453 E->Range = readSourceRange();
1458 unsigned NumElements =
Record.readInt();
1459 assert(NumElements == E->
getNumElements() &&
"Wrong number of elements");
1461 for (
unsigned I = 0, N = NumElements; I != N; ++I)
1462 Elements[I] =
Record.readSubExpr();
1463 E->ArrayWithObjectsMethod = readDeclAs<ObjCMethodDecl>();
1464 E->Range = readSourceRange();
1469 unsigned NumElements =
Record.readInt();
1470 assert(NumElements == E->
getNumElements() &&
"Wrong number of elements");
1471 bool HasPackExpansions =
Record.readInt();
1472 assert(HasPackExpansions == E->HasPackExpansions &&
"Pack expansion mismatch");
1477 for (
unsigned I = 0; I != NumElements; ++I) {
1478 KeyValues[I].Key =
Record.readSubExpr();
1479 KeyValues[I].Value =
Record.readSubExpr();
1480 if (HasPackExpansions) {
1481 Expansions[I].EllipsisLoc = readSourceLocation();
1482 Expansions[I].NumExpansionsPlusOne =
Record.readInt();
1485 E->DictWithObjectsMethod = readDeclAs<ObjCMethodDecl>();
1486 E->Range = readSourceRange();
1507 E->ProtoLoc = readSourceLocation();
1513 E->
setDecl(readDeclAs<ObjCIvarDecl>());
1523 unsigned MethodRefFlags =
Record.readInt();
1526 auto *Getter = readDeclAs<ObjCMethodDecl>();
1527 auto *Setter = readDeclAs<ObjCMethodDecl>();
1528 E->setImplicitProperty(Getter, Setter, MethodRefFlags);
1530 E->setExplicitProperty(readDeclAs<ObjCPropertyDecl>(), MethodRefFlags);
1532 E->setLocation(readSourceLocation());
1533 E->setReceiverLocation(readSourceLocation());
1534 switch (
Record.readInt()) {
1536 E->setBase(
Record.readSubExpr());
1539 E->setSuperReceiver(
Record.readType());
1542 E->setClassReceiver(readDeclAs<ObjCInterfaceDecl>());
1552 E->GetAtIndexMethodDecl = readDeclAs<ObjCMethodDecl>();
1553 E->SetAtIndexMethodDecl = readDeclAs<ObjCMethodDecl>();
1560 unsigned NumStoredSelLocs =
Record.readInt();
1561 E->SelLocsKind =
Record.readInt();
1563 E->IsImplicit =
Record.readInt();
1590 E->LBracLoc = readSourceLocation();
1591 E->RBracLoc = readSourceLocation();
1593 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
1597 for (
unsigned I = 0; I != NumStoredSelLocs; ++I)
1598 Locs[I] = readSourceLocation();
1603 S->setElement(
Record.readSubStmt());
1604 S->setCollection(
Record.readSubExpr());
1605 S->setBody(
Record.readSubStmt());
1606 S->setForLoc(readSourceLocation());
1607 S->setRParenLoc(readSourceLocation());
1612 S->setCatchBody(
Record.readSubStmt());
1613 S->setCatchParamDecl(readDeclAs<VarDecl>());
1614 S->setAtCatchLoc(readSourceLocation());
1615 S->setRParenLoc(readSourceLocation());
1620 S->setFinallyBody(
Record.readSubStmt());
1621 S->setAtFinallyLoc(readSourceLocation());
1626 S->setSubStmt(
Record.readSubStmt());
1627 S->setAtLoc(readSourceLocation());
1632 assert(
Record.peekInt() == S->getNumCatchStmts());
1634 bool HasFinally =
Record.readInt();
1635 S->setTryBody(
Record.readSubStmt());
1636 for (
unsigned I = 0, N = S->getNumCatchStmts(); I != N; ++I)
1637 S->setCatchStmt(I, cast_or_null<ObjCAtCatchStmt>(
Record.readSubStmt()));
1640 S->setFinallyStmt(
Record.readSubStmt());
1641 S->setAtTryLoc(readSourceLocation());
1646 S->setSynchExpr(
Record.readSubStmt());
1647 S->setSynchBody(
Record.readSubStmt());
1648 S->setAtSynchronizedLoc(readSourceLocation());
1653 S->setThrowExpr(
Record.readSubStmt());
1654 S->setThrowLoc(readSourceLocation());
1668 E->VersionToCheck =
Record.readVersionTuple();
1675 void ASTStmtReader::VisitCXXCatchStmt(
CXXCatchStmt *S) {
1677 S->CatchLoc = readSourceLocation();
1678 S->ExceptionDecl = readDeclAs<VarDecl>();
1679 S->HandlerBlock =
Record.readSubStmt();
1682 void ASTStmtReader::VisitCXXTryStmt(
CXXTryStmt *S) {
1684 assert(
Record.peekInt() == S->getNumHandlers() &&
"NumStmtFields is wrong ?");
1686 S->TryLoc = readSourceLocation();
1687 S->getStmts()[0] =
Record.readSubStmt();
1688 for (
unsigned i = 0, e = S->getNumHandlers(); i != e; ++i)
1689 S->getStmts()[i + 1] =
Record.readSubStmt();
1694 S->ForLoc = readSourceLocation();
1695 S->CoawaitLoc = readSourceLocation();
1696 S->ColonLoc = readSourceLocation();
1697 S->RParenLoc = readSourceLocation();
1698 S->setInit(
Record.readSubStmt());
1699 S->setRangeStmt(
Record.readSubStmt());
1700 S->setBeginStmt(
Record.readSubStmt());
1701 S->setEndStmt(
Record.readSubStmt());
1702 S->setCond(
Record.readSubExpr());
1703 S->setInc(
Record.readSubExpr());
1704 S->setLoopVarStmt(
Record.readSubStmt());
1705 S->setBody(
Record.readSubStmt());
1710 S->KeywordLoc = readSourceLocation();
1711 S->IsIfExists =
Record.readInt();
1712 S->QualifierLoc =
Record.readNestedNameSpecifierLoc();
1713 S->NameInfo =
Record.readDeclarationNameInfo();
1714 S->SubStmt =
Record.readSubStmt();
1720 E->Range =
Record.readSourceRange();
1723 void ASTStmtReader::VisitCXXRewrittenBinaryOperator(
1727 E->SemanticForm =
Record.readSubExpr();
1733 unsigned NumArgs =
Record.readInt();
1734 assert((NumArgs == E->
getNumArgs()) &&
"Wrong NumArgs!");
1744 E->Constructor = readDeclAs<CXXConstructorDecl>();
1745 E->ParenOrBraceRange = readSourceRange();
1747 for (
unsigned I = 0; I != NumArgs; ++I)
1753 E->Constructor = readDeclAs<CXXConstructorDecl>();
1754 E->Loc = readSourceLocation();
1755 E->ConstructsVirtualBase =
Record.readInt();
1756 E->InheritedFromVirtualBase =
Record.readInt();
1760 VisitCXXConstructExpr(E);
1761 E->TSI = readTypeSourceInfo();
1764 void ASTStmtReader::VisitLambdaExpr(
LambdaExpr *E) {
1766 unsigned NumCaptures =
Record.readInt();
1769 E->IntroducerRange = readSourceRange();
1771 E->CaptureDefaultLoc = readSourceLocation();
1774 E->ClosingBrace = readSourceLocation();
1789 E->SubExpr =
Record.readSubExpr();
1793 VisitExplicitCastExpr(E);
1796 E->RParenLoc = R.
getEnd();
1797 if (CurrentUnpackingBits->getNextBit())
1798 E->AngleBrackets = readSourceRange();
1802 return VisitCXXNamedCastExpr(E);
1806 return VisitCXXNamedCastExpr(E);
1810 return VisitCXXNamedCastExpr(E);
1814 return VisitCXXNamedCastExpr(E);
1818 return VisitCXXNamedCastExpr(E);
1822 VisitExplicitCastExpr(E);
1828 VisitExplicitCastExpr(E);
1829 E->KWLoc = readSourceLocation();
1830 E->RParenLoc = readSourceLocation();
1835 E->SourceTy =
Record.readType();
1840 E->SourceTy =
Record.readType();
1841 E->Index =
Record.readExpr();
1846 E->SourceTy =
Record.readType();
1851 E->SourceTy =
Record.readType();
1852 E->Index =
Record.readExpr();
1857 E->UDSuffixLoc = readSourceLocation();
1875 E->Operand = readTypeSourceInfo();
1877 E->Operand =
Record.readSubExpr();
1880 void ASTStmtReader::VisitCXXThisExpr(
CXXThisExpr *E) {
1887 void ASTStmtReader::VisitCXXThrowExpr(
CXXThrowExpr *E) {
1890 E->Operand =
Record.readSubExpr();
1896 E->Param = readDeclAs<ParmVarDecl>();
1897 E->UsedContext = readDeclAs<DeclContext>();
1901 *E->getTrailingObjects<
Expr *>() =
Record.readSubExpr();
1907 E->Field = readDeclAs<FieldDecl>();
1908 E->UsedContext = readDeclAs<DeclContext>();
1911 *E->getTrailingObjects<
Expr *>() =
Record.readSubExpr();
1922 E->TypeInfo = readTypeSourceInfo();
1926 void ASTStmtReader::VisitCXXNewExpr(
CXXNewExpr *E) {
1929 bool IsArray =
Record.readInt();
1930 bool HasInit =
Record.readInt();
1931 unsigned NumPlacementArgs =
Record.readInt();
1932 bool IsParenTypeId =
Record.readInt();
1940 assert((IsArray == E->
isArray()) &&
"Wrong IsArray!");
1943 "Wrong NumPlacementArgs!");
1944 assert((IsParenTypeId == E->
isParenTypeId()) &&
"Wrong IsParenTypeId!");
1947 (void)NumPlacementArgs;
1951 E->AllocatedTypeInfo = readTypeSourceInfo();
1953 E->getTrailingObjects<
SourceRange>()[0] = readSourceRange();
1954 E->Range = readSourceRange();
1955 E->DirectInitRange = readSourceRange();
1961 *I =
Record.readSubStmt();
1970 E->OperatorDelete = readDeclAs<FunctionDecl>();
1971 E->Argument =
Record.readSubExpr();
1978 E->Base =
Record.readSubExpr();
1979 E->IsArrow =
Record.readInt();
1980 E->OperatorLoc = readSourceLocation();
1981 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
1982 E->ScopeType = readTypeSourceInfo();
1983 E->ColonColonLoc = readSourceLocation();
1984 E->TildeLoc = readSourceLocation();
1996 unsigned NumObjects =
Record.readInt();
1998 for (
unsigned i = 0; i != NumObjects; ++i) {
2002 Obj = readDeclAs<BlockDecl>();
2004 Obj = cast<CompoundLiteralExpr>(
Record.readSubExpr());
2006 llvm_unreachable(
"unexpected cleanup object type");
2014 void ASTStmtReader::VisitCXXDependentScopeMemberExpr(
2018 unsigned NumTemplateArgs =
Record.readInt();
2019 CurrentUnpackingBits.emplace(
Record.readInt());
2020 bool HasTemplateKWAndArgsInfo = CurrentUnpackingBits->getNextBit();
2021 bool HasFirstQualifierFoundInScope = CurrentUnpackingBits->getNextBit();
2023 assert((HasTemplateKWAndArgsInfo == E->hasTemplateKWAndArgsInfo()) &&
2024 "Wrong HasTemplateKWAndArgsInfo!");
2026 (HasFirstQualifierFoundInScope == E->hasFirstQualifierFoundInScope()) &&
2027 "Wrong HasFirstQualifierFoundInScope!");
2029 if (HasTemplateKWAndArgsInfo)
2030 ReadTemplateKWAndArgsInfo(
2035 "Wrong NumTemplateArgs!");
2038 CurrentUnpackingBits->getNextBit();
2040 E->BaseType =
Record.readType();
2041 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
2043 if (CurrentUnpackingBits->getNextBit())
2044 E->Base =
Record.readSubExpr();
2050 if (HasFirstQualifierFoundInScope)
2051 *E->getTrailingObjects<
NamedDecl *>() = readDeclAs<NamedDecl>();
2053 E->MemberNameInfo =
Record.readDeclarationNameInfo();
2060 if (CurrentUnpackingBits->getNextBit())
2061 ReadTemplateKWAndArgsInfo(
2064 CurrentUnpackingBits->getNextBits(16));
2066 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
2067 E->NameInfo =
Record.readDeclarationNameInfo();
2074 "Read wrong record during creation ?");
2076 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
2078 E->TypeAndInitForm.setPointer(readTypeSourceInfo());
2081 E->TypeAndInitForm.setInt(
Record.readInt());
2084 void ASTStmtReader::VisitOverloadExpr(
OverloadExpr *E) {
2087 unsigned NumResults =
Record.readInt();
2088 CurrentUnpackingBits.emplace(
Record.readInt());
2089 bool HasTemplateKWAndArgsInfo = CurrentUnpackingBits->getNextBit();
2090 assert((E->
getNumDecls() == NumResults) &&
"Wrong NumResults!");
2092 "Wrong HasTemplateKWAndArgsInfo!");
2094 if (HasTemplateKWAndArgsInfo) {
2095 unsigned NumTemplateArgs =
Record.readInt();
2100 "Wrong NumTemplateArgs!");
2104 for (
unsigned I = 0; I != NumResults; ++I) {
2105 auto *D = readDeclAs<NamedDecl>();
2112 for (
unsigned I = 0; I != NumResults; ++I) {
2113 Results[I] = (
Iter + I).getPair();
2116 E->NameInfo =
Record.readDeclarationNameInfo();
2117 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
2121 VisitOverloadExpr(E);
2124 CurrentUnpackingBits->getNextBit();
2126 if (CurrentUnpackingBits->getNextBit())
2127 E->Base =
Record.readSubExpr();
2131 E->OperatorLoc = readSourceLocation();
2133 E->BaseType =
Record.readType();
2137 VisitOverloadExpr(E);
2139 E->NamingClass = readDeclAs<CXXRecordDecl>();
2152 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
2153 Args[I] = readTypeSourceInfo();
2159 E->Value = (
unsigned int)
Record.readInt();
2163 E->QueriedType = readTypeSourceInfo();
2164 E->Dimension =
Record.readSubExpr();
2172 E->QueriedExpression =
Record.readSubExpr();
2180 E->Range = readSourceRange();
2181 E->Operand =
Record.readSubExpr();
2186 E->EllipsisLoc = readSourceLocation();
2187 E->NumExpansions =
Record.readInt();
2188 E->Pattern =
Record.readSubExpr();
2193 unsigned NumPartialArgs =
Record.readInt();
2194 E->OperatorLoc = readSourceLocation();
2195 E->PackLoc = readSourceLocation();
2196 E->RParenLoc = readSourceLocation();
2199 assert(E->Length == NumPartialArgs);
2201 *E = I + NumPartialArgs;
2205 E->Length =
Record.readInt();
2211 E->TransformedExpressions =
Record.readInt();
2212 E->ExpandedToEmptyPack =
Record.readInt();
2213 E->EllipsisLoc = readSourceLocation();
2214 E->RSquareLoc = readSourceLocation();
2215 E->SubExprs[0] =
Record.readStmt();
2216 E->SubExprs[1] =
Record.readStmt();
2217 auto **Exprs = E->getTrailingObjects<
Expr *>();
2218 for (
unsigned I = 0; I < E->TransformedExpressions; ++I)
2219 Exprs[I] =
Record.readExpr();
2222 void ASTStmtReader::VisitSubstNonTypeTemplateParmExpr(
2225 E->AssociatedDeclAndRef.setPointer(readDeclAs<Decl>());
2226 E->AssociatedDeclAndRef.setInt(CurrentUnpackingBits->getNextBit());
2227 E->Index = CurrentUnpackingBits->getNextBits(12);
2228 if (CurrentUnpackingBits->getNextBit())
2229 E->PackIndex =
Record.readInt();
2233 E->Replacement =
Record.readSubExpr();
2236 void ASTStmtReader::VisitSubstNonTypeTemplateParmPackExpr(
2239 E->AssociatedDecl = readDeclAs<Decl>();
2240 E->Index =
Record.readInt();
2247 E->NameLoc = readSourceLocation();
2252 E->NumParameters =
Record.readInt();
2253 E->ParamPack = readDeclAs<ParmVarDecl>();
2254 E->NameLoc = readSourceLocation();
2255 auto **Parms = E->getTrailingObjects<
VarDecl *>();
2256 for (
unsigned i = 0, n = E->NumParameters; i != n; ++i)
2257 Parms[i] = readDeclAs<VarDecl>();
2262 bool HasMaterialzedDecl =
Record.readInt();
2263 if (HasMaterialzedDecl)
2264 E->State = cast<LifetimeExtendedTemporaryDecl>(
Record.readDecl());
2266 E->State =
Record.readSubExpr();
2269 void ASTStmtReader::VisitCXXFoldExpr(
CXXFoldExpr *E) {
2271 E->LParenLoc = readSourceLocation();
2272 E->EllipsisLoc = readSourceLocation();
2273 E->RParenLoc = readSourceLocation();
2274 E->NumExpansions =
Record.readInt();
2275 E->SubExprs[0] =
Record.readSubExpr();
2276 E->SubExprs[1] =
Record.readSubExpr();
2277 E->SubExprs[2] =
Record.readSubExpr();
2283 unsigned ExpectedNumExprs =
Record.readInt();
2284 assert(E->NumExprs == ExpectedNumExprs &&
2285 "expected number of expressions does not equal the actual number of "
2286 "serialized expressions.");
2287 E->NumUserSpecifiedExprs =
Record.readInt();
2288 E->InitLoc = readSourceLocation();
2289 E->LParenLoc = readSourceLocation();
2290 E->RParenLoc = readSourceLocation();
2291 for (
unsigned I = 0; I < ExpectedNumExprs; I++)
2292 E->getTrailingObjects<
Expr *>()[I] =
Record.readSubExpr();
2294 bool HasArrayFillerOrUnionDecl =
Record.readBool();
2295 if (HasArrayFillerOrUnionDecl) {
2296 bool HasArrayFiller =
Record.readBool();
2297 if (HasArrayFiller) {
2308 E->SourceExpr =
Record.readSubExpr();
2313 void ASTStmtReader::VisitTypoExpr(
TypoExpr *E) {
2314 llvm_unreachable(
"Cannot read TypoExpr nodes");
2317 void ASTStmtReader::VisitRecoveryExpr(
RecoveryExpr *E) {
2319 unsigned NumArgs =
Record.readInt();
2320 E->BeginLoc = readSourceLocation();
2321 E->EndLoc = readSourceLocation();
2322 assert((NumArgs + 0LL ==
2327 Child =
Record.readSubStmt();
2335 E->IsArrow = (
Record.readInt() != 0);
2336 E->BaseExpr =
Record.readSubExpr();
2337 E->QualifierLoc =
Record.readNestedNameSpecifierLoc();
2338 E->MemberLoc = readSourceLocation();
2339 E->TheDecl = readDeclAs<MSPropertyDecl>();
2344 E->setBase(
Record.readSubExpr());
2345 E->setIdx(
Record.readSubExpr());
2352 E->Guid = readDeclAs<MSGuidDecl>();
2354 E->Operand = readTypeSourceInfo();
2356 E->Operand =
Record.readSubExpr();
2359 void ASTStmtReader::VisitSEHLeaveStmt(
SEHLeaveStmt *S) {
2361 S->setLeaveLoc(readSourceLocation());
2366 S->Loc = readSourceLocation();
2367 S->Children[SEHExceptStmt::FILTER_EXPR] =
Record.readSubStmt();
2368 S->Children[SEHExceptStmt::BLOCK] =
Record.readSubStmt();
2373 S->Loc = readSourceLocation();
2374 S->Block =
Record.readSubStmt();
2377 void ASTStmtReader::VisitSEHTryStmt(
SEHTryStmt *S) {
2379 S->IsCXXTry =
Record.readInt();
2380 S->TryLoc = readSourceLocation();
2381 S->Children[SEHTryStmt::TRY] =
Record.readSubStmt();
2382 S->Children[SEHTryStmt::HANDLER] =
Record.readSubStmt();
2397 void ASTStmtReader::VisitAsTypeExpr(
AsTypeExpr *E) {
2399 E->BuiltinLoc = readSourceLocation();
2400 E->RParenLoc = readSourceLocation();
2401 E->SrcExpr =
Record.readSubExpr();
2410 for (
Stmt *&SubStmt : S->SubStmts)
2411 SubStmt =
Record.readSubStmt();
2425 VisitOMPExecutableDirective(D);
2429 VisitOMPLoopBasedDirective(D);
2436 VisitOMPExecutableDirective(D);
2441 VisitOMPExecutableDirective(D);
2442 D->setHasCancel(
Record.readBool());
2446 VisitOMPLoopDirective(D);
2449 void ASTStmtReader::VisitOMPLoopTransformationDirective(
2451 VisitOMPLoopBasedDirective(D);
2456 VisitOMPLoopTransformationDirective(D);
2460 VisitOMPLoopTransformationDirective(D);
2464 VisitOMPLoopDirective(D);
2465 D->setHasCancel(
Record.readBool());
2469 VisitOMPLoopDirective(D);
2474 VisitOMPExecutableDirective(D);
2475 D->setHasCancel(
Record.readBool());
2480 VisitOMPExecutableDirective(D);
2486 VisitOMPExecutableDirective(D);
2491 VisitOMPExecutableDirective(D);
2496 VisitOMPExecutableDirective(D);
2501 VisitOMPExecutableDirective(D);
2502 D->DirName =
Record.readDeclarationNameInfo();
2506 VisitOMPLoopDirective(D);
2507 D->setHasCancel(
Record.readBool());
2510 void ASTStmtReader::VisitOMPParallelForSimdDirective(
2512 VisitOMPLoopDirective(D);
2515 void ASTStmtReader::VisitOMPParallelMasterDirective(
2518 VisitOMPExecutableDirective(D);
2521 void ASTStmtReader::VisitOMPParallelMaskedDirective(
2524 VisitOMPExecutableDirective(D);
2527 void ASTStmtReader::VisitOMPParallelSectionsDirective(
2530 VisitOMPExecutableDirective(D);
2531 D->setHasCancel(
Record.readBool());
2536 VisitOMPExecutableDirective(D);
2537 D->setHasCancel(
Record.readBool());
2542 VisitOMPExecutableDirective(D);
2547 VisitOMPExecutableDirective(D);
2554 VisitOMPExecutableDirective(D);
2561 VisitOMPExecutableDirective(D);
2566 VisitOMPExecutableDirective(D);
2571 VisitOMPExecutableDirective(D);
2576 VisitOMPExecutableDirective(D);
2581 VisitOMPExecutableDirective(D);
2586 VisitOMPExecutableDirective(D);
2591 VisitOMPExecutableDirective(D);
2592 D->Flags.IsXLHSInRHSPart =
Record.readBool() ? 1 : 0;
2593 D->Flags.IsPostfixUpdate =
Record.readBool() ? 1 : 0;
2594 D->Flags.IsFailOnly =
Record.readBool() ? 1 : 0;
2599 VisitOMPExecutableDirective(D);
2604 VisitOMPExecutableDirective(D);
2607 void ASTStmtReader::VisitOMPTargetEnterDataDirective(
2610 VisitOMPExecutableDirective(D);
2613 void ASTStmtReader::VisitOMPTargetExitDataDirective(
2616 VisitOMPExecutableDirective(D);
2619 void ASTStmtReader::VisitOMPTargetParallelDirective(
2622 VisitOMPExecutableDirective(D);
2623 D->setHasCancel(
Record.readBool());
2626 void ASTStmtReader::VisitOMPTargetParallelForDirective(
2628 VisitOMPLoopDirective(D);
2629 D->setHasCancel(
Record.readBool());
2634 VisitOMPExecutableDirective(D);
2637 void ASTStmtReader::VisitOMPCancellationPointDirective(
2640 VisitOMPExecutableDirective(D);
2646 VisitOMPExecutableDirective(D);
2651 VisitOMPLoopDirective(D);
2652 D->setHasCancel(
Record.readBool());
2656 VisitOMPLoopDirective(D);
2659 void ASTStmtReader::VisitOMPMasterTaskLoopDirective(
2661 VisitOMPLoopDirective(D);
2662 D->setHasCancel(
Record.readBool());
2665 void ASTStmtReader::VisitOMPMaskedTaskLoopDirective(
2667 VisitOMPLoopDirective(D);
2668 D->setHasCancel(
Record.readBool());
2671 void ASTStmtReader::VisitOMPMasterTaskLoopSimdDirective(
2673 VisitOMPLoopDirective(D);
2676 void ASTStmtReader::VisitOMPMaskedTaskLoopSimdDirective(
2678 VisitOMPLoopDirective(D);
2681 void ASTStmtReader::VisitOMPParallelMasterTaskLoopDirective(
2683 VisitOMPLoopDirective(D);
2684 D->setHasCancel(
Record.readBool());
2687 void ASTStmtReader::VisitOMPParallelMaskedTaskLoopDirective(
2689 VisitOMPLoopDirective(D);
2690 D->setHasCancel(
Record.readBool());
2693 void ASTStmtReader::VisitOMPParallelMasterTaskLoopSimdDirective(
2695 VisitOMPLoopDirective(D);
2698 void ASTStmtReader::VisitOMPParallelMaskedTaskLoopSimdDirective(
2700 VisitOMPLoopDirective(D);
2704 VisitOMPLoopDirective(D);
2709 VisitOMPExecutableDirective(D);
2712 void ASTStmtReader::VisitOMPDistributeParallelForDirective(
2714 VisitOMPLoopDirective(D);
2715 D->setHasCancel(
Record.readBool());
2718 void ASTStmtReader::VisitOMPDistributeParallelForSimdDirective(
2720 VisitOMPLoopDirective(D);
2723 void ASTStmtReader::VisitOMPDistributeSimdDirective(
2725 VisitOMPLoopDirective(D);
2728 void ASTStmtReader::VisitOMPTargetParallelForSimdDirective(
2730 VisitOMPLoopDirective(D);
2734 VisitOMPLoopDirective(D);
2737 void ASTStmtReader::VisitOMPTeamsDistributeDirective(
2739 VisitOMPLoopDirective(D);
2742 void ASTStmtReader::VisitOMPTeamsDistributeSimdDirective(
2744 VisitOMPLoopDirective(D);
2747 void ASTStmtReader::VisitOMPTeamsDistributeParallelForSimdDirective(
2749 VisitOMPLoopDirective(D);
2752 void ASTStmtReader::VisitOMPTeamsDistributeParallelForDirective(
2754 VisitOMPLoopDirective(D);
2755 D->setHasCancel(
Record.readBool());
2760 VisitOMPExecutableDirective(D);
2763 void ASTStmtReader::VisitOMPTargetTeamsDistributeDirective(
2765 VisitOMPLoopDirective(D);
2768 void ASTStmtReader::VisitOMPTargetTeamsDistributeParallelForDirective(
2770 VisitOMPLoopDirective(D);
2771 D->setHasCancel(
Record.readBool());
2774 void ASTStmtReader::VisitOMPTargetTeamsDistributeParallelForSimdDirective(
2776 VisitOMPLoopDirective(D);
2779 void ASTStmtReader::VisitOMPTargetTeamsDistributeSimdDirective(
2781 VisitOMPLoopDirective(D);
2786 VisitOMPExecutableDirective(D);
2791 VisitOMPExecutableDirective(D);
2792 D->setTargetCallLoc(
Record.readSourceLocation());
2797 VisitOMPExecutableDirective(D);
2801 VisitOMPLoopDirective(D);
2804 void ASTStmtReader::VisitOMPTeamsGenericLoopDirective(
2806 VisitOMPLoopDirective(D);
2809 void ASTStmtReader::VisitOMPTargetTeamsGenericLoopDirective(
2811 VisitOMPLoopDirective(D);
2812 D->setCanBeParallelFor(
Record.readBool());
2815 void ASTStmtReader::VisitOMPParallelGenericLoopDirective(
2817 VisitOMPLoopDirective(D);
2820 void ASTStmtReader::VisitOMPTargetParallelGenericLoopDirective(
2822 VisitOMPLoopDirective(D);
2831 S->Range =
Record.readSourceRange();
2832 Record.readOpenACCClauseList(S->Clauses);
2835 void ASTStmtReader::VisitOpenACCAssociatedStmtConstruct(
2837 VisitOpenACCConstructStmt(S);
2838 S->setAssociatedStmt(
Record.readSubStmt());
2843 VisitOpenACCAssociatedStmtConstruct(S);
2851 switch (ReadingKind) {
2853 llvm_unreachable(
"should not call this when not reading anything");
2856 return ReadStmtFromStream(F);
2858 return ReadSubStmt();
2861 llvm_unreachable(
"ReadingKind not set ?");
2865 return cast_or_null<Expr>(ReadStmt(F));
2869 return cast_or_null<Expr>(ReadSubStmt());
2880 ReadingKindTracker ReadingKind(Read_Stmt, *
this);
2885 llvm::DenseMap<uint64_t, Stmt *> StmtEntries;
2888 unsigned PrevNumStmts = StmtStack.size();
2897 Cursor.advanceSkippingSubblocks();
2899 Error(
toString(MaybeEntry.takeError()));
2902 llvm::BitstreamEntry Entry = MaybeEntry.get();
2904 switch (Entry.Kind) {
2905 case llvm::BitstreamEntry::SubBlock:
2907 Error(
"malformed block record in AST file");
2909 case llvm::BitstreamEntry::EndBlock:
2918 bool Finished =
false;
2919 bool IsStmtReference =
false;
2921 if (!MaybeStmtCode) {
2925 switch ((
StmtCode)MaybeStmtCode.get()) {
2931 IsStmtReference =
true;
2932 assert(StmtEntries.contains(
Record[0]) &&
2933 "No stmt was recorded for this offset reference!");
2934 S = StmtEntries[
Record.readInt()];
2974 bool HasElse = IfStmtBits.getNextBit();
2975 bool HasVar = IfStmtBits.getNextBit();
2976 bool HasInit = IfStmtBits.getNextBit();
2995 S =
new (Context)
DoStmt(Empty);
2999 S =
new (Context)
ForStmt(Empty);
3062 DeclRefExprBits.advance(5);
3063 bool HasFoundDecl = DeclRefExprBits.getNextBit();
3064 bool HasQualifier = DeclRefExprBits.getNextBit();
3065 bool HasTemplateKWAndArgsInfo = DeclRefExprBits.getNextBit();
3066 unsigned NumTemplateArgs = HasTemplateKWAndArgsInfo
3070 HasTemplateKWAndArgsInfo, NumTemplateArgs);
3115 bool HasFPFeatures = UnaryOperatorBits.getNextBit();
3155 CallExprBits.advance(1);
3156 auto HasFPFeatures = CallExprBits.getNextBit();
3168 bool HasQualifier = ExprMemberBits.getNextBit();
3169 bool HasFoundDecl = ExprMemberBits.getNextBit();
3170 bool HasTemplateInfo = ExprMemberBits.getNextBit();
3173 HasTemplateInfo, NumTemplateArgs);
3179 BinaryOperatorBits.advance( 6);
3180 bool HasFPFeatures = BinaryOperatorBits.getNextBit();
3187 BinaryOperatorBits.advance( 6);
3188 bool HasFPFeatures = BinaryOperatorBits.getNextBit();
3204 CastExprBits.advance(7);
3205 bool HasFPFeatures = CastExprBits.getNextBit();
3213 CastExprBits.advance(7);
3214 bool HasFPFeatures = CastExprBits.getNextBit();
3343 llvm_unreachable(
"mismatching AST file");
3457 CollapsedNum, Empty);
3523 CollapsedNum, Empty);
3531 CollapsedNum, Empty);
3597 !HasAssociatedStmt, Empty);
3635 CollapsedNum, Empty);
3670 CollapsedNum, Empty);
3678 CollapsedNum, Empty);
3686 CollapsedNum, Empty);
3694 CollapsedNum, Empty);
3702 CollapsedNum, Empty);
3710 CollapsedNum, Empty);
3718 CollapsedNum, Empty);
3726 Context, NumClauses, CollapsedNum, Empty);
3734 Context, NumClauses, CollapsedNum, Empty);
3750 CollapsedNum, Empty);
3767 CollapsedNum, Empty);
3775 CollapsedNum, Empty);
3791 CollapsedNum, Empty);
3799 CollapsedNum, Empty);
3807 Context, NumClauses, CollapsedNum, Empty);
3815 Context, NumClauses, CollapsedNum, Empty);
3828 CollapsedNum, Empty);
3836 Context, NumClauses, CollapsedNum, Empty);
3844 Context, NumClauses, CollapsedNum, Empty);
3852 Context, NumClauses, CollapsedNum, Empty);
3875 CollapsedNum, Empty);
3883 CollapsedNum, Empty);
3891 CollapsedNum, Empty);
3899 CollapsedNum, Empty);
3907 Context, NumClauses, CollapsedNum, Empty);
3914 CallExprBits.advance(1);
3915 auto HasFPFeatures = CallExprBits.getNextBit();
3924 CallExprBits.advance(1);
3925 auto HasFPFeatures = CallExprBits.getNextBit();
3954 CastExprBits.advance(7);
3955 bool HasFPFeatures = CastExprBits.getNextBit();
3983 CastExprBits.advance(7);
3984 bool HasFPFeatures = CastExprBits.getNextBit();
3992 assert(PathSize == 0 &&
"Wrong PathSize!");
4017 CallExprBits.advance(1);
4018 auto HasFPFeatures = CallExprBits.getNextBit();
4112 bool HasTemplateKWAndArgsInfo = DependentScopeMemberBits.getNextBit();
4114 bool HasFirstQualifierFoundInScope =
4115 DependentScopeMemberBits.getNextBit();
4117 Context, HasTemplateKWAndArgsInfo, NumTemplateArgs,
4118 HasFirstQualifierFoundInScope);
4126 bool HasTemplateKWAndArgsInfo = DependentScopeDeclRefBits.getNextBit();
4127 unsigned NumTemplateArgs =
4128 HasTemplateKWAndArgsInfo
4129 ? DependentScopeDeclRefBits.getNextBits(16)
4132 Context, HasTemplateKWAndArgsInfo, NumTemplateArgs);
4144 auto HasTemplateKWAndArgsInfo = OverloadExprBits.getNextBit();
4145 auto NumTemplateArgs = HasTemplateKWAndArgsInfo
4149 Context, NumResults, HasTemplateKWAndArgsInfo, NumTemplateArgs);
4156 auto HasTemplateKWAndArgsInfo = OverloadExprBits.getNextBit();
4157 auto NumTemplateArgs = HasTemplateKWAndArgsInfo
4161 Context, NumResults, HasTemplateKWAndArgsInfo, NumTemplateArgs);
4231 CallExprBits.advance(1);
4232 auto HasFPFeatures = CallExprBits.getNextBit();
4301 ++NumStatementsRead;
4303 if (S && !IsStmtReference) {
4305 StmtEntries[
Cursor.GetCurrentBitNo()] = S;
4309 "Invalid deserialization of statement");
4310 StmtStack.push_back(S);
4313 assert(StmtStack.size() > PrevNumStmts &&
"Read too many sub-stmts!");
4314 assert(StmtStack.size() == PrevNumStmts + 1 &&
"Extra expressions on stack!");
4315 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.
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.
void setValue(const ASTContext &C, const llvm::APInt &Val)
bool needsCleanup() const
Returns whether the object performed allocations.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
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.
void setLabel(LabelDecl *L)
void setLabelLoc(SourceLocation L)
void setAmpAmpLoc(SourceLocation L)
Represents the index of the current element of an array being initialized by an ArrayInitLoopExpr.
Represents a loop initializing the elements of an array.
This class represents BOTH the OpenMP Array Section and OpenACC 'subarray', with a boolean differenti...
bool isOMPArraySection() const
ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.
void setRBracketLoc(SourceLocation L)
An Embarcadero array type trait, as used in the implementation of __array_rank and __array_extent.
AsTypeExpr - Clang builtin function __builtin_astype [OpenCL 6.2.4.2] This AST node provides support ...
AsmStmt is the base class for GCCAsmStmt and MSAsmStmt.
AtomicExpr - Variadic atomic builtins: __atomic_exchange, __atomic_fetch_*, __atomic_load,...
unsigned getNumSubExprs() const
Represents an attribute applied to a statement.
static AttributedStmt * CreateEmpty(const ASTContext &C, unsigned NumAttrs)
BinaryConditionalOperator - The GNU extension to the conditional operator which allows the middle ope...
A builtin binary operation expression such as "x + y" or "x <= y".
void setHasStoredFPFeatures(bool B)
Set and fetch the bit that shows whether FPFeatures needs to be allocated in Trailing Storage.
void setOperatorLoc(SourceLocation L)
static BinaryOperator * CreateEmpty(const ASTContext &C, bool hasFPFeatures)
void setStoredFPFeatures(FPOptionsOverride F)
Set FPFeatures in trailing storage, used only by Serialization.
void setOpcode(Opcode Opc)
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.
void setBlockDecl(BlockDecl *BD)
BreakStmt - This represents a break.
Represents a C++2a __builtin_bit_cast(T, v) expression.
CStyleCastExpr - An explicit cast in C (C99 6.5.4) or a C-style cast in C++ (C++ [expr....
static CStyleCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize, bool HasFPFeatures)
void setRParenLoc(SourceLocation L)
void setLParenLoc(SourceLocation L)
Represents a call to a CUDA kernel function.
static CUDAKernelCallExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPFeatures, EmptyShell Empty)
A C++ addrspace_cast expression (currently only enabled for OpenCL).
static CXXAddrspaceCastExpr * CreateEmpty(const ASTContext &Context)
Represents a base class of a C++ class.
Represents binding an expression to a temporary.
void setTemporary(CXXTemporary *T)
A boolean literal, per ([C++ lex.bool] Boolean literals).
void setLocation(SourceLocation L)
CXXCatchStmt - This represents a C++ catch block.
A C++ const_cast expression (C++ [expr.const.cast]).
static CXXConstCastExpr * CreateEmpty(const ASTContext &Context)
Represents a call to a C++ constructor.
void setArg(unsigned Arg, Expr *ArgExpr)
Set the specified argument.
unsigned getNumArgs() const
Return the number of arguments to the constructor call.
static CXXConstructExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs)
Create an empty C++ construction expression.
A default argument (C++ [dcl.fct.default]).
static CXXDefaultArgExpr * CreateEmpty(const ASTContext &C, bool HasRewrittenInit)
A use of a default initializer in a constructor or in aggregate initialization.
static CXXDefaultInitExpr * CreateEmpty(const ASTContext &C, bool HasRewrittenInit)
Represents a delete expression for memory deallocation and destructor calls, e.g.
Represents a C++ member access expression where the actual member referenced could not be resolved be...
unsigned getNumTemplateArgs() const
Retrieve the number of template arguments provided as part of this template-id.
static CXXDependentScopeMemberExpr * CreateEmpty(const ASTContext &Ctx, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs, bool HasFirstQualifierFoundInScope)
A C++ dynamic_cast expression (C++ [expr.dynamic.cast]).
static CXXDynamicCastExpr * CreateEmpty(const ASTContext &Context, unsigned pathSize)
Represents a folding of a pack over an operator.
CXXForRangeStmt - This represents C++0x [stmt.ranged]'s ranged for statement, represented as 'for (ra...
Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr....
void setLParenLoc(SourceLocation L)
static CXXFunctionalCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize, bool HasFPFeatures)
void setRParenLoc(SourceLocation L)
Represents a call to an inherited base class constructor from an inheriting constructor.
Represents a call to a member function that may be written either with member call syntax (e....
static CXXMemberCallExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPFeatures, EmptyShell Empty)
Abstract class common to all of the C++ "named"/"keyword" casts.
Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)".
static CXXNewExpr * CreateEmpty(const ASTContext &Ctx, bool IsArray, bool HasInit, unsigned NumPlacementArgs, bool IsParenTypeId)
Create an empty c++ new expression.
bool hasInitializer() const
Whether this new-expression has any initializer at all.
void setOperatorDelete(FunctionDecl *D)
unsigned getNumPlacementArgs() const
bool isParenTypeId() const
raw_arg_iterator raw_arg_end()
raw_arg_iterator raw_arg_begin()
void setOperatorNew(FunctionDecl *D)
Represents a C++11 noexcept expression (C++ [expr.unary.noexcept]).
The null pointer literal (C++11 [lex.nullptr])
void setLocation(SourceLocation L)
A call to an overloaded operator written using operator syntax.
static CXXOperatorCallExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPFeatures, EmptyShell Empty)
Represents a list-initialization with parenthesis.
void setInitializedFieldInUnion(FieldDecl *FD)
static CXXParenListInitExpr * CreateEmpty(ASTContext &C, unsigned numExprs, EmptyShell Empty)
void setArrayFiller(Expr *E)
Represents a C++ pseudo-destructor (C++ [expr.pseudo]).
void setDestroyedType(IdentifierInfo *II, SourceLocation Loc)
Set the name of destroyed type for a dependent pseudo-destructor expression.
A C++ reinterpret_cast expression (C++ [expr.reinterpret.cast]).
static CXXReinterpretCastExpr * CreateEmpty(const ASTContext &Context, unsigned pathSize)
A rewritten comparison expression that was originally written using operator syntax.
An expression "T()" which creates a value-initialized rvalue of type T, which is a non-class type.
A C++ static_cast expression (C++ [expr.static.cast]).
static CXXStaticCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize, bool hasFPFeatures)
Implicit construction of a std::initializer_list<T> object from an array temporary within list-initia...
Represents a C++ functional cast expression that builds a temporary object.
static CXXTemporaryObjectExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs)
Represents the this expression in C++.
void setCapturedByCopyInLambdaWithExplicitObjectParameter(bool Set)
void setLocation(SourceLocation L)
static CXXThisExpr * CreateEmpty(const ASTContext &Ctx)
A C++ throw-expression (C++ [except.throw]).
CXXTryStmt - A C++ try block, including all handlers.
static CXXTryStmt * Create(const ASTContext &C, SourceLocation tryLoc, CompoundStmt *tryBlock, ArrayRef< Stmt * > handlers)
A C++ typeid expression (C++ [expr.typeid]), which gets the type_info that corresponds to the supplie...
bool isTypeOperand() const
void setSourceRange(SourceRange R)
Describes an explicit type conversion that uses functional notion but could not be resolved because o...
void setRParenLoc(SourceLocation L)
void setArg(unsigned I, Expr *E)
void setLParenLoc(SourceLocation L)
unsigned getNumArgs() const
Retrieve the number of arguments.
static CXXUnresolvedConstructExpr * CreateEmpty(const ASTContext &Context, unsigned NumArgs)
A Microsoft C++ __uuidof expression, which gets the _GUID that corresponds to the supplied type or ex...
bool isTypeOperand() const
void setSourceRange(SourceRange R)
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
void setRParenLoc(SourceLocation L)
void setArg(unsigned Arg, Expr *ArgExpr)
setArg - Set the specified argument.
void setADLCallKind(ADLCallKind V=UsesADL)
static CallExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPFeatures, EmptyShell Empty)
Create an empty call expression, for deserialization.
void setPreArg(unsigned I, Stmt *PreArg)
void setStoredFPFeatures(FPOptionsOverride F)
Set FPOptionsOverride in trailing storage. Used only by Serialization.
unsigned getNumArgs() const
getNumArgs - Return the number of actual arguments to this call.
This captures a statement into a function.
static CapturedStmt * CreateDeserialized(const ASTContext &Context, unsigned NumCaptures)
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...
FPOptionsOverride * getTrailingFPFeatures()
Return a pointer to the trailing FPOptions.
path_iterator path_begin()
unsigned path_size() const
void setCastKind(CastKind K)
bool hasStoredFPFeatures() const
void setValue(unsigned Val)
void setLocation(SourceLocation Location)
void setKind(CharacterLiteralKind kind)
ChooseExpr - GNU builtin-in function __builtin_choose_expr.
void setRParenLoc(SourceLocation L)
void setIsConditionTrue(bool isTrue)
void setBuiltinLoc(SourceLocation L)
Represents a 'co_await' expression.
void setIsImplicit(bool value=true)
CompoundAssignOperator - For compound assignments (e.g.
void setComputationResultType(QualType T)
static CompoundAssignOperator * CreateEmpty(const ASTContext &C, bool hasFPFeatures)
void setComputationLHSType(QualType T)
CompoundLiteralExpr - [C99 6.5.2.5].
void setFileScope(bool FS)
void setTypeSourceInfo(TypeSourceInfo *tinfo)
void setLParenLoc(SourceLocation L)
void setInitializer(Expr *E)
CompoundStmt - This represents a group of statements like { stmt stmt }.
static CompoundStmt * CreateEmpty(const ASTContext &C, unsigned NumStmts, bool HasFPFeatures)
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...
ConstantResultStorageKind getResultStorageKind() const
static ConstantExpr * CreateEmpty(const ASTContext &Context, ConstantResultStorageKind StorageKind)
The result of a constraint satisfaction check, containing the necessary information to diagnose an un...
llvm::SmallVector< std::pair< const Expr *, Detail >, 4 > Details
Pairs of unsatisfied atomic constraint expressions along with the substituted constraint expr,...
std::pair< SourceLocation, StringRef > SubstitutionDiagnostic
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.
bool hasTemplateKWAndArgsInfo() const
static DeclRefExpr * CreateEmpty(const ASTContext &Context, bool HasQualifier, bool HasFoundDecl, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
Construct an empty declaration reference expression.
void setLocation(SourceLocation L)
bool hasQualifier() const
Determine whether this declaration reference was preceded by a C++ nested-name-specifier,...
DeclStmt - Adaptor class for mixing declarations with statements and expressions.
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)
void setSubExpr(unsigned Idx, Expr *E)
void setGNUSyntax(bool GNU)
void setEqualOrColonLoc(SourceLocation L)
void setDesignators(const ASTContext &C, const Designator *Desigs, unsigned NumDesigs)
unsigned getNumSubExprs() const
Retrieve the total number of subexpressions in this designated initializer expression,...
void setUpdater(Expr *Updater)
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.
ExplicitCastExpr - An explicit cast written in the source code.
void setTypeInfoAsWritten(TypeSourceInfo *writtenTy)
Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...
unsigned getNumObjects() const
llvm::PointerUnion< BlockDecl *, CompoundLiteralExpr * > CleanupObject
The type of objects that are kept in the cleanup.
static ExprWithCleanups * Create(const ASTContext &C, EmptyShell empty, unsigned numObjects)
This represents one expression.
bool isValueDependent() const
Determines whether the value of this expression depends on.
bool isInstantiationDependent() const
Whether this expression is instantiation-dependent, meaning that it depends in some way on.
void setValueKind(ExprValueKind Cat)
setValueKind - Set the value kind produced by this expression.
void setObjectKind(ExprObjectKind Cat)
setObjectKind - Set the object kind produced by this expression.
void setDependence(ExprDependence Deps)
Each concrete expr subclass is expected to compute its dependence and call this in the constructor.
An expression trait intrinsic.
ExtVectorElementExpr - This represents access to specific elements of a vector, and may occur on the ...
void setAccessor(IdentifierInfo *II)
void setAccessorLoc(SourceLocation L)
static FPOptionsOverride getFromOpaqueInt(storage_type I)
static FixedPointLiteral * Create(const ASTContext &C, EmptyShell Empty)
Returns an empty fixed-point literal.
void setLocation(SourceLocation Location)
void setScale(unsigned S)
const llvm::fltSemantics & getSemantics() const
Return the APFloat semantics this literal uses.
static FloatingLiteral * Create(const ASTContext &C, const llvm::APFloat &V, bool isexact, QualType Type, SourceLocation L)
void setValue(const ASTContext &C, const llvm::APFloat &Val)
void setRawSemantics(llvm::APFloatBase::Semantics Sem)
Set the raw enumeration value representing the floating-point semantics of this literal (32-bit IEEE,...
void setLocation(SourceLocation L)
ForStmt - This represents a 'for (init;cond;inc)' stmt.
void setSubExpr(Expr *E)
As with any mutator of the AST, be very careful when modifying an existing AST to preserve its invari...
Represents a reference to a function parameter pack 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...
void setTokenLocation(SourceLocation L)
Represents a C11 generic selection.
unsigned getNumAssocs() const
The number of association expressions.
static GenericSelectionExpr * CreateEmpty(const ASTContext &Context, unsigned NumAssocs)
Create an empty generic selection expression for deserialization.
GotoStmt - This represents a direct goto.
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)
void setIsPartOfExplicitCast(bool PartOfExplicitCast)
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.
void setSyntacticForm(InitListExpr *Init)
Expr * updateInit(const ASTContext &C, unsigned Init, Expr *expr)
Updates the initializer at index Init with the new expression expr, and returns the old expression at...
void setLBraceLoc(SourceLocation Loc)
void setRBraceLoc(SourceLocation Loc)
void sawArrayRangeDesignator(bool ARD=true)
void reserveInits(const ASTContext &C, unsigned NumInits)
Reserve space for some number of initializers.
void setLocation(SourceLocation Location)
static IntegerLiteral * Create(const ASTContext &C, const llvm::APInt &V, QualType type, SourceLocation l)
Returns a new integer literal with value 'V' and type 'type'.
LabelStmt - Represents a label, which has a substatement.
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.
capture_init_iterator capture_init_end()
Retrieve the iterator pointing one past the last initialization argument for this lambda expression.
capture_init_iterator capture_init_begin()
Retrieve the first initialization argument for this lambda expression (which initializes the first ca...
This represents a Microsoft inline-assembly statement extension.
Representation of a Microsoft __if_exists or __if_not_exists statement with a dependent name.
A member reference to an MSPropertyDecl.
MS property subscript expression.
void setRBracketLoc(SourceLocation L)
Represents a prvalue temporary that is written into memory so that a reference can bind to it.
MatrixSubscriptExpr - Matrix subscript expression for the MatrixType extension.
void setColumnIdx(Expr *E)
void setRBracketLoc(SourceLocation L)
MemberExpr - [C99 6.5.2.3] Structure and Union Members.
static MemberExpr * CreateEmpty(const ASTContext &Context, bool HasQualifier, bool HasFoundDecl, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
This represents a decl that may have a name.
DeclarationName getDeclName() const
Get the actual, stored name of the declaration, which may be a special 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]......
void setLParenLoc(SourceLocation L)
static OMPArrayShapingExpr * CreateEmpty(const ASTContext &Context, unsigned NumDims)
void setRParenLoc(SourceLocation L)
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.
void setLocStart(SourceLocation Loc)
Set starting location of directive kind.
OMPChildren * Data
Data, associated with the directive.
void setLocEnd(SourceLocation Loc)
Set ending location of directive.
void setMappedDirective(OpenMPDirectiveKind MappedDirective)
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.
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...
void setLParenLoc(SourceLocation L)
static OMPIteratorExpr * CreateEmpty(const ASTContext &Context, unsigned NumIterators)
void setRParenLoc(SourceLocation L)
void setIteratorKwLoc(SourceLocation L)
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.
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.
void setHasCancel(bool Has)
Set cancel state.
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)
unsigned getNumElements() const
getNumElements - Return number of elements of objective-c array literal.
Expr ** getElements()
Retrieve elements of array of literals.
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.
void setLocation(SourceLocation L)
ObjCBoxedExpr - used for generalized expression boxing.
An Objective-C "bridged" cast expression, which casts between Objective-C pointers and C pointers,...
ObjCDictionaryLiteral - AST node to represent objective-c dictionary literals; as in:"name" : NSUserN...
static ObjCDictionaryLiteral * CreateEmpty(const ASTContext &C, unsigned NumElements, bool HasPackExpansions)
unsigned getNumElements() const
getNumElements - Return number of elements of objective-c dictionary literal.
ObjCEncodeExpr, used for @encode in Objective-C.
void setEncodedTypeSourceInfo(TypeSourceInfo *EncType)
void setRParenLoc(SourceLocation L)
void setAtLoc(SourceLocation L)
Represents Objective-C's collection statement.
ObjCIndirectCopyRestoreExpr - Represents the passing of a function argument by indirect copy-restore ...
ObjCIsaExpr - Represent X->isa and X.isa when X is an ObjC 'id' type.
void setIsaMemberLoc(SourceLocation L)
void setOpLoc(SourceLocation L)
ObjCIvarRefExpr - A reference to an ObjC instance variable.
void setDecl(ObjCIvarDecl *d)
void setIsFreeIvar(bool A)
void setOpLoc(SourceLocation L)
void setLocation(SourceLocation L)
An expression that sends a message to the given Objective-C object or class.
static ObjCMessageExpr * CreateEmpty(const ASTContext &Context, unsigned NumArgs, unsigned NumStoredSelLocs)
Create an empty Objective-C message expression, to be filled in by subsequent calls.
void setMethodDecl(ObjCMethodDecl *MD)
void setClassReceiver(TypeSourceInfo *TSInfo)
void setInstanceReceiver(Expr *rec)
Turn this message send into an instance message that computes the receiver object with the given expr...
void setSuper(SourceLocation Loc, QualType T, bool IsInstanceSuper)
ReceiverKind
The kind of receiver this message is sending to.
@ SuperInstance
The receiver is the instance of the superclass object.
@ Instance
The receiver is an object instance.
@ SuperClass
The receiver is a superclass.
@ Class
The receiver is a class.
void setDelegateInitCall(bool isDelegate)
ReceiverKind getReceiverKind() const
Determine the kind of receiver that this message is being sent to.
unsigned getNumArgs() const
Return the number of actual arguments in this message, not counting the receiver.
void setSelector(Selector S)
void setArg(unsigned Arg, Expr *ArgExpr)
setArg - Set the specified argument.
ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.
ObjCProtocolExpr used for protocol expression in Objective-C.
void setProtocol(ObjCProtocolDecl *P)
void setRParenLoc(SourceLocation L)
void setAtLoc(SourceLocation L)
ObjCSelectorExpr used for @selector in Objective-C.
void setSelector(Selector S)
void setAtLoc(SourceLocation L)
void setRParenLoc(SourceLocation L)
ObjCStringLiteral, used for Objective-C string literals i.e.
void setAtLoc(SourceLocation L)
void setString(StringLiteral *S)
ObjCSubscriptRefExpr - used for array and dictionary subscripting.
void setRBracket(SourceLocation RB)
void setBaseExpr(Stmt *S)
OffsetOfExpr - [C99 7.17] - This represents an expression of the form offsetof(record-type,...
void setOperatorLoc(SourceLocation L)
static OffsetOfExpr * CreateEmpty(const ASTContext &C, unsigned NumComps, unsigned NumExprs)
void setIndexExpr(unsigned Idx, Expr *E)
void setTypeSourceInfo(TypeSourceInfo *tsi)
void setComponent(unsigned Idx, OffsetOfNode ON)
unsigned getNumExpressions() const
void setRParenLoc(SourceLocation R)
unsigned getNumComponents() const
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 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...
A reference to an overloaded function set, either an UnresolvedLookupExpr or an UnresolvedMemberExpr.
ASTTemplateKWAndArgsInfo * getTrailingASTTemplateKWAndArgsInfo()
Return the optional template keyword and arguments info.
unsigned getNumDecls() const
Gets the number of declarations in the unresolved set.
TemplateArgumentLoc * getTrailingTemplateArgumentLoc()
Return the optional template arguments.
DeclAccessPair * getTrailingResults()
Return the results. Defined after UnresolvedMemberExpr.
bool hasTemplateKWAndArgsInfo() const
unsigned getNumTemplateArgs() const
Represents a C++11 pack expansion that produces a sequence of expressions.
static PackIndexingExpr * CreateDeserialized(ASTContext &Context, unsigned NumTransformedExprs)
ParenExpr - This represents a parethesized expression, e.g.
void setLParen(SourceLocation Loc)
void setRParen(SourceLocation Loc)
static ParenListExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumExprs)
Create an empty paren list.
unsigned getNumExprs() const
Return the number of expressions in this paren list.
Represents a parameter to a function.
[C99 6.4.2.2] - A predefined identifier such as func.
void setLocation(SourceLocation L)
static PredefinedExpr * CreateEmpty(const ASTContext &Ctx, bool HasFunctionName)
Create an empty PredefinedExpr.
PseudoObjectExpr - An expression which accesses a pseudo-object l-value.
static PseudoObjectExpr * Create(const ASTContext &Context, Expr *syntactic, ArrayRef< Expr * > semantic, unsigned resultIndex)
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.
Represents a __builtin_base_type expression.
void setLocation(SourceLocation L)
Represents a __builtin_field_type expression.
void setLocation(SourceLocation L)
Represents a __builtin_num_bases expression.
void setLocation(SourceLocation L)
Represents a __builtin_num_fields expression.
void setLocation(SourceLocation L)
static SYCLUniqueStableIdExpr * CreateEmpty(const ASTContext &Ctx)
static SYCLUniqueStableNameExpr * CreateEmpty(const ASTContext &Ctx)
ShuffleVectorExpr - clang-specific builtin-in function __builtin_shufflevector.
void setExprs(const ASTContext &C, ArrayRef< Expr * > Exprs)
void setRParenLoc(SourceLocation L)
void setBuiltinLoc(SourceLocation L)
Represents an expression that computes the length of a parameter pack.
static SizeOfPackExpr * CreateDeserialized(ASTContext &Context, unsigned NumPartialArgs)
bool isPartiallySubstituted() const
Determine whether this represents a partially-substituted sizeof...
Represents a function call to one of __builtin_LINE(), __builtin_COLUMN(), __builtin_FUNCTION(),...
Encodes a location in the source.
A trivial tuple used to represent a source range.
SourceLocation getEnd() const
SourceLocation getBegin() const
StmtExpr - This is the GNU Statement Expression extension: ({int X=4; X;}).
void setRParenLoc(SourceLocation L)
void setLParenLoc(SourceLocation L)
void setSubStmt(CompoundStmt *S)
StmtVisitor - This class implements a simple visitor for Stmt subclasses.
Stmt - This represents one statement.
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.
unsigned getLength() const
StringLiteralKind getKind() const
static StringLiteral * CreateEmpty(const ASTContext &Ctx, unsigned NumConcatenated, unsigned Length, unsigned CharByteWidth)
Construct an empty string literal.
unsigned getNumConcatenated() const
getNumConcatenated - Get the number of string literal tokens that were concatenated in translation ph...
unsigned getCharByteWidth() const
Represents a reference to a non-type template parameter that has been substituted with a template arg...
Represents a reference to a non-type template parameter pack that has been substituted with a non-tem...
void 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)
unsigned getNumArgs() const
Determine the number of arguments to this type trait.
TypoExpr - Internal placeholder for expressions where typo correction still needs to be performed and...
UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand.
void setKind(UnaryExprOrTypeTrait K)
void setOperatorLoc(SourceLocation L)
void setRParenLoc(SourceLocation L)
void setArgument(Expr *E)
UnaryOperator - This represents the unary-expression's (except sizeof and alignof),...
void setOperatorLoc(SourceLocation L)
void setCanOverflow(bool C)
bool hasStoredFPFeatures() const
Is FPFeatures in Trailing Storage?
void setOpcode(Opcode Opc)
void setStoredFPFeatures(FPOptionsOverride F)
Set FPFeatures in trailing storage, used by Serialization & ASTImporter.
static UnaryOperator * CreateEmpty(const ASTContext &C, bool hasFPFeatures)
A reference to a name which we were able to look up during parsing but could not resolve to a specifi...
static UnresolvedLookupExpr * CreateEmpty(const ASTContext &Context, unsigned NumResults, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
Represents a C++ member access expression for which lookup produced a set of overloaded functions.
static UnresolvedMemberExpr * CreateEmpty(const ASTContext &Context, unsigned NumResults, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
void addDecl(NamedDecl *D)
The iterator over UnresolvedSets.
A call to a literal operator (C++11 [over.literal]) written as a user-defined literal (C++11 [lit....
static UserDefinedLiteral * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPOptions, EmptyShell Empty)
Represents a call to the builtin function __builtin_va_arg.
void setRParenLoc(SourceLocation L)
void setIsMicrosoftABI(bool IsMS)
void setBuiltinLoc(SourceLocation L)
void setWrittenTypeInfo(TypeSourceInfo *TI)
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
@ EXPR_DESIGNATED_INIT
A DesignatedInitExpr record.
@ EXPR_COMPOUND_LITERAL
A CompoundLiteralExpr record.
@ STMT_OMP_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE
@ EXPR_OBJC_IVAR_REF_EXPR
An ObjCIvarRefExpr record.
@ STMT_OMP_SCOPE_DIRECTIVE
@ STMT_OMP_PARALLEL_FOR_SIMD_DIRECTIVE
@ EXPR_MEMBER
A MemberExpr record.
@ STMT_OMP_TARGET_TEAMS_DIRECTIVE
@ EXPR_CXX_TEMPORARY_OBJECT
A CXXTemporaryObjectExpr record.
@ EXPR_CXX_UNRESOLVED_LOOKUP
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE
@ EXPR_COMPOUND_ASSIGN_OPERATOR
A CompoundAssignOperator record.
@ EXPR_EXPR_WITH_CLEANUPS
@ EXPR_CXX_STATIC_CAST
A CXXStaticCastExpr record.
@ STMT_OMP_META_DIRECTIVE
@ EXPR_OBJC_STRING_LITERAL
An ObjCStringLiteral record.
@ EXPR_CXX_PROPERTY_REF_EXPR
@ EXPR_SYCL_UNIQUE_STABLE_NAME
@ STMT_OMP_TARGET_DATA_DIRECTIVE
@ STMT_OMP_BARRIER_DIRECTIVE
@ EXPR_VA_ARG
A VAArgExpr record.
@ STMT_OMP_TEAMS_DISTRIBUTE_SIMD_DIRECTIVE
@ EXPR_OBJC_ISA
An ObjCIsa Expr record.
@ STMT_OMP_SINGLE_DIRECTIVE
@ EXPR_CXX_OPERATOR_CALL
A CXXOperatorCallExpr record.
@ STMT_OBJC_AT_TRY
An ObjCAtTryStmt record.
@ STMT_OMP_TARGET_EXIT_DATA_DIRECTIVE
@ EXPR_CXX_UNRESOLVED_CONSTRUCT
@ EXPR_FIXEDPOINT_LITERAL
@ STMT_DO
A DoStmt record.
@ STMT_OBJC_CATCH
An ObjCAtCatchStmt record.
@ STMT_OMP_TARGET_DIRECTIVE
@ STMT_IF
An IfStmt record.
@ EXPR_CXX_EXPRESSION_TRAIT
@ EXPR_STRING_LITERAL
A StringLiteral record.
@ EXPR_OBJC_AVAILABILITY_CHECK
An ObjCAvailabilityCheckExpr record.
@ STMT_OMP_PARALLEL_MASKED_TASKLOOP_DIRECTIVE
@ EXPR_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_WHILE
A WhileStmt record.
@ EXPR_CONVERT_VECTOR
A ConvertVectorExpr record.
@ EXPR_OBJC_SUBSCRIPT_REF_EXPR
An ObjCSubscriptRefExpr record.
@ STMT_OPENACC_COMPUTE_CONSTRUCT
@ STMT_OMP_TASKWAIT_DIRECTIVE
@ STMT_OMP_TASKYIELD_DIRECTIVE
@ EXPR_SYCL_BUILTIN_NUM_FIELDS
@ EXPR_STMT
A StmtExpr record.
@ STMT_OMP_PARALLEL_GENERIC_LOOP_DIRECTIVE
@ EXPR_CXX_REINTERPRET_CAST
A CXXReinterpretCastExpr record.
@ EXPR_DESIGNATED_INIT_UPDATE
A DesignatedInitUpdateExpr record.
@ STMT_OBJC_AT_SYNCHRONIZED
An ObjCAtSynchronizedStmt record.
@ STMT_OMP_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE
@ STMT_OMP_TASKLOOP_SIMD_DIRECTIVE
@ STMT_MS_DEPENDENT_EXISTS
@ EXPR_BUILTIN_BIT_CAST
A BuiltinBitCastExpr record.
@ EXPR_CXX_PROPERTY_SUBSCRIPT_EXPR
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD_DIRECTIVE
@ EXPR_CXX_PSEUDO_DESTRUCTOR
@ STMT_OMP_MASKED_DIRECTIVE
@ STMT_OMP_TARGET_ENTER_DATA_DIRECTIVE
@ EXPR_CHARACTER_LITERAL
A CharacterLiteral record.
@ EXPR_OBJC_ENCODE
An ObjCEncodeExpr record.
@ STMT_OMP_PARALLEL_SECTIONS_DIRECTIVE
@ STMT_OMP_PARALLEL_FOR_DIRECTIVE
@ EXPR_CSTYLE_CAST
A CStyleCastExpr record.
@ STMT_OMP_PARALLEL_DIRECTIVE
@ EXPR_OBJC_BOXED_EXPRESSION
@ EXPR_OBJC_BOOL_LITERAL
An ObjCBoolLiteralExpr record.
@ EXPR_CXX_BIND_TEMPORARY
@ EXPR_SYCL_BUILTIN_BASE_TYPE
@ STMT_OMP_ATOMIC_DIRECTIVE
@ STMT_OMP_ORDERED_DIRECTIVE
@ EXPR_EXT_VECTOR_ELEMENT
An ExtVectorElementExpr record.
@ STMT_OMP_TEAMS_GENERIC_LOOP_DIRECTIVE
@ STMT_OMP_CRITICAL_DIRECTIVE
@ EXPR_ATOMIC
An AtomicExpr record.
@ STMT_OMP_CANCEL_DIRECTIVE
@ EXPR_OFFSETOF
An OffsetOfExpr record.
@ STMT_RETURN
A ReturnStmt record.
@ STMT_OBJC_FOR_COLLECTION
An ObjCForCollectionStmt record.
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_DIRECTIVE
@ EXPR_ARRAY_INIT_LOOP
An ArrayInitLoopExpr record.
@ STMT_OMP_PARALLEL_MASTER_TASKLOOP_DIRECTIVE
@ STMT_OMP_PARALLEL_MASKED_TASKLOOP_SIMD_DIRECTIVE
@ STMT_CONTINUE
A ContinueStmt record.
@ EXPR_PREDEFINED
A PredefinedExpr record.
@ STMT_OMP_DEPOBJ_DIRECTIVE
@ EXPR_CXX_BOOL_LITERAL
A CXXBoolLiteralExpr record.
@ EXPR_PAREN_LIST
A ParenListExpr record.
@ EXPR_CXX_PAREN_LIST_INIT
A CXXParenListInitExpr record.
@ STMT_OMP_DISPATCH_DIRECTIVE
@ STMT_OMP_MASTER_TASKLOOP_SIMD_DIRECTIVE
@ STMT_OMP_TASKLOOP_DIRECTIVE
@ STMT_COMPOUND
A CompoundStmt record.
@ STMT_OMP_CANONICAL_LOOP
@ STMT_FOR
A ForStmt record.
@ STMT_ATTRIBUTED
An AttributedStmt record.
@ STMT_OMP_PARALLEL_MASTER_DIRECTIVE
@ STMT_OMP_TARGET_TEAMS_GENERIC_LOOP_DIRECTIVE
@ STMT_OMP_TEAMS_DIRECTIVE
@ STMT_OMP_TARGET_PARALLEL_DIRECTIVE
@ EXPR_CXX_REWRITTEN_BINARY_OPERATOR
A CXXRewrittenBinaryOperator record.
@ STMT_GOTO
A GotoStmt record.
@ EXPR_NO_INIT
An NoInitExpr record.
@ EXPR_OBJC_ARRAY_LITERAL
@ STMT_OMP_ERROR_DIRECTIVE
@ EXPR_OBJC_PROTOCOL_EXPR
An ObjCProtocolExpr record.
@ STMT_OMP_GENERIC_LOOP_DIRECTIVE
@ EXPR_ARRAY_INIT_INDEX
An ArrayInitIndexExpr record.
@ STMT_OMP_TASK_DIRECTIVE
@ EXPR_CXX_CONSTRUCT
A CXXConstructExpr record.
@ STMT_OMP_PARALLEL_MASKED_DIRECTIVE
@ STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE
@ STMT_OMP_PARALLEL_MASTER_TASKLOOP_SIMD_DIRECTIVE
@ EXPR_OBJC_DICTIONARY_LITERAL
@ EXPR_SYCL_BUILTIN_NUM_BASES
@ STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE
@ EXPR_CXX_DYNAMIC_CAST
A CXXDynamicCastExpr record.
@ STMT_CXX_TRY
A CXXTryStmt record.
@ EXPR_GENERIC_SELECTION
A GenericSelectionExpr record.
@ STMT_OMP_TARGET_SIMD_DIRECTIVE
@ EXPR_OBJC_INDIRECT_COPY_RESTORE
An ObjCIndirectCopyRestoreExpr record.
@ EXPR_CXX_INHERITED_CTOR_INIT
A CXXInheritedCtorInitExpr record.
@ EXPR_CALL
A CallExpr record.
@ EXPR_GNU_NULL
A GNUNullExpr record.
@ EXPR_BINARY_CONDITIONAL_OPERATOR
@ EXPR_OBJC_PROPERTY_REF_EXPR
An ObjCPropertyRefExpr record.
@ STMT_OMP_TARGET_PARALLEL_FOR_DIRECTIVE
@ STMT_OMP_FOR_SIMD_DIRECTIVE
@ STMT_OMP_MASKED_TASKLOOP_DIRECTIVE
@ EXPR_CXX_CONST_CAST
A CXXConstCastExpr record.
@ STMT_OMP_SCAN_DIRECTIVE
@ STMT_REF_PTR
A reference to a previously [de]serialized Stmt record.
@ EXPR_OBJC_MESSAGE_EXPR
An ObjCMessageExpr record.
@ EXPR_CXX_DEPENDENT_SCOPE_DECL_REF
@ EXPR_SYCL_BUILTIN_FIELD_TYPE
@ STMT_OMP_TEAMS_DISTRIBUTE_DIRECTIVE
@ STMT_CASE
A CaseStmt record.
@ EXPR_CONSTANT
A constant expression context.
@ EXPR_FUNCTION_PARM_PACK
@ STMT_STOP
A marker record that indicates that we are at the end of an expression.
@ EXPR_CXX_NULL_PTR_LITERAL
@ STMT_OMP_TARGET_UPDATE_DIRECTIVE
@ STMT_MSASM
A MS-style AsmStmt record.
@ STMT_OMP_DISTRIBUTE_DIRECTIVE
@ EXPR_CONDITIONAL_OPERATOR
A ConditionOperator record.
@ EXPR_BINARY_OPERATOR
A BinaryOperator record.
@ EXPR_CXX_STD_INITIALIZER_LIST
A CXXStdInitializerListExpr record.
@ STMT_OMP_TASKGROUP_DIRECTIVE
@ EXPR_SHUFFLE_VECTOR
A ShuffleVectorExpr record.
@ STMT_OBJC_FINALLY
An ObjCAtFinallyStmt record.
@ EXPR_OBJC_SELECTOR_EXPR
An ObjCSelectorExpr record.
@ EXPR_FLOATING_LITERAL
A FloatingLiteral record.
@ STMT_OMP_MASTER_DIRECTIVE
@ EXPR_CXX_DEPENDENT_SCOPE_MEMBER
@ STMT_NULL_PTR
A NULL expression.
@ STMT_DEFAULT
A DefaultStmt record.
@ EXPR_CHOOSE
A ChooseExpr record.
@ STMT_OMP_UNROLL_DIRECTIVE
@ STMT_NULL
A NullStmt record.
@ STMT_OMP_SIMD_DIRECTIVE
@ EXPR_DECL_REF
A DeclRefExpr record.
@ EXPR_SUBST_NON_TYPE_TEMPLATE_PARM
@ EXPR_INIT_LIST
An InitListExpr record.
@ EXPR_IMPLICIT_VALUE_INIT
An ImplicitValueInitExpr record.
@ STMT_OBJC_AUTORELEASE_POOL
An ObjCAutoreleasePoolStmt record.
@ EXPR_RECOVERY
A RecoveryExpr record.
@ EXPR_PAREN
A ParenExpr record.
@ STMT_OMP_TARGET_PARALLEL_GENERIC_LOOP_DIRECTIVE
@ STMT_LABEL
A LabelStmt record.
@ EXPR_CXX_FUNCTIONAL_CAST
A CXXFunctionalCastExpr record.
@ EXPR_USER_DEFINED_LITERAL
A UserDefinedLiteral record.
@ EXPR_INTEGER_LITERAL
An IntegerLiteral record.
@ EXPR_SOURCE_LOC
A SourceLocExpr record.
@ EXPR_MATERIALIZE_TEMPORARY
@ EXPR_CXX_MEMBER_CALL
A CXXMemberCallExpr record.
@ STMT_OMP_INTEROP_DIRECTIVE
@ STMT_SWITCH
A SwitchStmt record.
@ STMT_DECL
A DeclStmt record.
@ EXPR_CXX_UNRESOLVED_MEMBER
@ EXPR_SYCL_UNIQUE_STABLE_ID
@ 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.
@ 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.
std::string toString(const til::SExpr *E)
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
AccessSpecifier
A C++ access specifier (public, private, protected), plus the special value "none" which means differ...
float __ovld __cnfn distance(float, float)
Returns the distance between p0 and p1.
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...
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....