21 #include "llvm/ADT/SmallString.h"
22 using namespace clang;
23 using namespace clang::serialization;
33 llvm::BitstreamCursor &DeclsCursor;
38 return Reader.ReadToken(F, R, I);
41 SourceLocation ReadSourceLocation(
const RecordData &R,
unsigned &I) {
42 return Reader.ReadSourceLocation(F, R, I);
45 SourceRange ReadSourceRange(
const RecordData &R,
unsigned &I) {
46 return Reader.ReadSourceRange(F, R, I);
49 std::string ReadString(
const RecordData &R,
unsigned &I) {
50 return Reader.ReadString(R, I);
53 TypeSourceInfo *GetTypeSourceInfo(
const RecordData &R,
unsigned &I) {
54 return Reader.GetTypeSourceInfo(F, R, I);
58 return Reader.ReadDeclID(F, R, I);
61 Decl *ReadDecl(
const RecordData &R,
unsigned &I) {
62 return Reader.ReadDecl(F, R, I);
66 T *ReadDeclAs(
const RecordData &R,
unsigned &I) {
67 return Reader.ReadDeclAs<T>(F, R,
I);
72 Reader.ReadDeclarationNameLoc(F, DNLoc, Name, R, I);
77 Reader.ReadDeclarationNameInfo(F, NameInfo, R, I);
82 llvm::BitstreamCursor &
Cursor,
84 : Reader(Reader), F(F), DeclsCursor(Cursor), Record(Record), Idx(Idx) { }
88 static const unsigned NumStmtFields = 0;
92 static const unsigned NumExprFields = NumStmtFields + 7;
95 void ReadTemplateKWAndArgsInfo(ASTTemplateKWAndArgsInfo &Args,
97 unsigned NumTemplateArgs);
100 unsigned NumTemplateArgs);
102 void VisitStmt(
Stmt *
S);
103 #define STMT(Type, Base) \
104 void Visit##Type(Type *);
105 #include "clang/AST/StmtNodes.inc"
111 unsigned NumTemplateArgs) {
116 for (
unsigned i = 0; i != NumTemplateArgs; ++i)
118 Reader.ReadTemplateArgumentLoc(F, Record, Idx));
119 Args.initializeFrom(TemplateKWLoc, ArgInfo, ArgsLocArray);
123 assert(Idx == NumStmtFields &&
"Incorrect statement field count");
126 void ASTStmtReader::VisitNullStmt(
NullStmt *
S) {
128 S->
setSemiLoc(ReadSourceLocation(Record, Idx));
129 S->HasLeadingEmptyMacro = Record[Idx++];
132 void ASTStmtReader::VisitCompoundStmt(
CompoundStmt *S) {
135 unsigned NumStmts = Record[Idx++];
137 Stmts.push_back(Reader.ReadSubStmt());
138 S->
setStmts(Reader.getContext(), Stmts);
139 S->LBraceLoc = ReadSourceLocation(Record, Idx);
140 S->RBraceLoc = ReadSourceLocation(Record, Idx);
143 void ASTStmtReader::VisitSwitchCase(
SwitchCase *S) {
145 Reader.RecordSwitchCaseID(S, Record[Idx++]);
150 void ASTStmtReader::VisitCaseStmt(
CaseStmt *S) {
152 S->
setLHS(Reader.ReadSubExpr());
153 S->
setRHS(Reader.ReadSubExpr());
158 void ASTStmtReader::VisitDefaultStmt(
DefaultStmt *S) {
163 void ASTStmtReader::VisitLabelStmt(
LabelStmt *S) {
165 LabelDecl *LD = ReadDeclAs<LabelDecl>(Record, Idx);
174 uint64_t NumAttrs = Record[Idx++];
176 Reader.ReadAttributes(F, Attrs, Record, Idx);
178 assert(NumAttrs == S->NumAttrs);
179 assert(NumAttrs == Attrs.size());
180 std::copy(Attrs.begin(), Attrs.end(), S->getAttrArrayPtr());
181 S->SubStmt = Reader.ReadSubStmt();
182 S->AttrLoc = ReadSourceLocation(Record, Idx);
185 void ASTStmtReader::VisitIfStmt(
IfStmt *S) {
188 S->
setInit(Reader.ReadSubStmt());
190 ReadDeclAs<VarDecl>(Record, Idx));
191 S->
setCond(Reader.ReadSubExpr());
192 S->
setThen(Reader.ReadSubStmt());
193 S->
setElse(Reader.ReadSubStmt());
194 S->
setIfLoc(ReadSourceLocation(Record, Idx));
195 S->
setElseLoc(ReadSourceLocation(Record, Idx));
198 void ASTStmtReader::VisitSwitchStmt(
SwitchStmt *S) {
200 S->
setInit(Reader.ReadSubStmt());
202 ReadDeclAs<VarDecl>(Record, Idx));
203 S->
setCond(Reader.ReadSubExpr());
204 S->
setBody(Reader.ReadSubStmt());
210 for (
unsigned N = Record.size(); Idx != N; ++Idx) {
211 SwitchCase *SC = Reader.getSwitchCaseWithID(Record[Idx]);
221 void ASTStmtReader::VisitWhileStmt(
WhileStmt *S) {
224 ReadDeclAs<VarDecl>(Record, Idx));
226 S->
setCond(Reader.ReadSubExpr());
227 S->
setBody(Reader.ReadSubStmt());
231 void ASTStmtReader::VisitDoStmt(
DoStmt *S) {
233 S->
setCond(Reader.ReadSubExpr());
234 S->
setBody(Reader.ReadSubStmt());
235 S->
setDoLoc(ReadSourceLocation(Record, Idx));
240 void ASTStmtReader::VisitForStmt(
ForStmt *S) {
242 S->
setInit(Reader.ReadSubStmt());
243 S->
setCond(Reader.ReadSubExpr());
245 ReadDeclAs<VarDecl>(Record, Idx));
246 S->
setInc(Reader.ReadSubExpr());
247 S->
setBody(Reader.ReadSubStmt());
248 S->
setForLoc(ReadSourceLocation(Record, Idx));
253 void ASTStmtReader::VisitGotoStmt(
GotoStmt *S) {
255 S->
setLabel(ReadDeclAs<LabelDecl>(Record, Idx));
256 S->
setGotoLoc(ReadSourceLocation(Record, Idx));
262 S->
setGotoLoc(ReadSourceLocation(Record, Idx));
263 S->
setStarLoc(ReadSourceLocation(Record, Idx));
267 void ASTStmtReader::VisitContinueStmt(
ContinueStmt *S) {
272 void ASTStmtReader::VisitBreakStmt(
BreakStmt *S) {
277 void ASTStmtReader::VisitReturnStmt(
ReturnStmt *S) {
284 void ASTStmtReader::VisitDeclStmt(
DeclStmt *S) {
287 S->
setEndLoc(ReadSourceLocation(Record, Idx));
289 if (Idx + 1 == Record.size()) {
294 Decls.reserve(Record.size() - Idx);
295 for (
unsigned N = Record.size(); Idx != N; )
296 Decls.push_back(ReadDecl(Record, Idx));
303 void ASTStmtReader::VisitAsmStmt(
AsmStmt *S) {
308 S->
setAsmLoc(ReadSourceLocation(Record, Idx));
313 void ASTStmtReader::VisitGCCAsmStmt(
GCCAsmStmt *S) {
316 S->
setAsmString(cast_or_null<StringLiteral>(Reader.ReadSubStmt()));
326 for (
unsigned I = 0, N = NumOutputs + NumInputs; I != N; ++
I) {
327 Names.push_back(Reader.GetIdentifierInfo(F, Record, Idx));
328 Constraints.push_back(cast_or_null<StringLiteral>(Reader.ReadSubStmt()));
329 Exprs.push_back(Reader.ReadSubStmt());
334 for (
unsigned I = 0; I != NumClobbers; ++
I)
335 Clobbers.push_back(cast_or_null<StringLiteral>(Reader.ReadSubStmt()));
337 S->setOutputsAndInputsAndClobbers(Reader.getContext(),
338 Names.data(), Constraints.data(),
339 Exprs.data(), NumOutputs, NumInputs,
340 Clobbers.data(), NumClobbers);
343 void ASTStmtReader::VisitMSAsmStmt(
MSAsmStmt *S) {
345 S->LBraceLoc = ReadSourceLocation(Record, Idx);
346 S->EndLoc = ReadSourceLocation(Record, Idx);
347 S->NumAsmToks = Record[Idx++];
348 std::string AsmStr = ReadString(Record, Idx);
352 AsmToks.reserve(S->NumAsmToks);
353 for (
unsigned i = 0, e = S->NumAsmToks; i != e; ++i) {
354 AsmToks.push_back(ReadToken(Record, Idx));
365 for (
unsigned i = 0, e = S->
NumClobbers; i != e; ++i) {
366 ClobbersData.push_back(ReadString(Record, Idx));
367 Clobbers.push_back(ClobbersData.back());
375 Exprs.reserve(NumOperands);
376 ConstraintsData.reserve(NumOperands);
377 Constraints.reserve(NumOperands);
378 for (
unsigned i = 0; i != NumOperands; ++i) {
379 Exprs.push_back(cast<Expr>(Reader.ReadSubStmt()));
380 ConstraintsData.push_back(ReadString(Record, Idx));
381 Constraints.push_back(ConstraintsData.back());
384 S->initialize(Reader.getContext(), AsmStr, AsmToks,
385 Constraints, Exprs, Clobbers);
390 llvm_unreachable(
"unimplemented");
393 void ASTStmtReader::VisitCoreturnStmt(
CoreturnStmt *S) {
395 llvm_unreachable(
"unimplemented");
398 void ASTStmtReader::VisitCoawaitExpr(
CoawaitExpr *S) {
400 llvm_unreachable(
"unimplemented");
403 void ASTStmtReader::VisitCoyieldExpr(
CoyieldExpr *S) {
405 llvm_unreachable(
"unimplemented");
408 void ASTStmtReader::VisitCapturedStmt(
CapturedStmt *S) {
419 *I = Reader.ReadSubExpr();
422 S->setCapturedStmt(Reader.ReadSubStmt());
427 I.VarAndKind.setPointer(ReadDeclAs<VarDecl>(Record, Idx));
429 .setInt(static_cast<CapturedStmt::VariableCaptureKind>(Record[Idx++]));
430 I.Loc = ReadSourceLocation(Record, Idx);
434 void ASTStmtReader::VisitExpr(
Expr *
E) {
436 E->
setType(Reader.readType(F, Record, Idx));
440 E->ExprBits.ContainsUnexpandedParameterPack = Record[Idx++];
441 E->
setValueKind(static_cast<ExprValueKind>(Record[Idx++]));
442 E->
setObjectKind(static_cast<ExprObjectKind>(Record[Idx++]));
443 assert(Idx == NumExprFields &&
"Incorrect expression field count");
450 E->FnName = cast_or_null<StringLiteral>(Reader.ReadSubExpr());
453 void ASTStmtReader::VisitDeclRefExpr(
DeclRefExpr *E) {
456 E->DeclRefExprBits.HasQualifier = Record[Idx++];
457 E->DeclRefExprBits.HasFoundDecl = Record[Idx++];
458 E->DeclRefExprBits.HasTemplateKWAndArgsInfo = Record[Idx++];
459 E->DeclRefExprBits.HadMultipleCandidates = Record[Idx++];
460 E->DeclRefExprBits.RefersToEnclosingVariableOrCapture = Record[Idx++];
461 unsigned NumTemplateArgs = 0;
463 NumTemplateArgs = Record[Idx++];
468 Reader.ReadNestedNameSpecifierLoc(F, Record, Idx));
470 if (E->hasFoundDecl())
471 *E->getTrailingObjects<
NamedDecl *>() = ReadDeclAs<NamedDecl>(Record, Idx);
474 ReadTemplateKWAndArgsInfo(
475 *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(),
478 E->
setDecl(ReadDeclAs<ValueDecl>(Record, Idx));
486 E->
setValue(Reader.getContext(), Reader.ReadAPInt(Record, Idx));
491 E->
setRawSemantics(static_cast<Stmt::APFloatSemantics>(Record[Idx++]));
505 unsigned Len = Record[Idx++];
507 "Wrong number of concatenated tokens!");
511 bool isPascal = Record[Idx++];
527 E->
setKind(static_cast<CharacterLiteral::CharacterKind>(Record[Idx++]));
530 void ASTStmtReader::VisitParenExpr(
ParenExpr *E) {
532 E->
setLParen(ReadSourceLocation(Record, Idx));
533 E->
setRParen(ReadSourceLocation(Record, Idx));
539 unsigned NumExprs = Record[Idx++];
540 E->Exprs =
new (Reader.getContext())
Stmt*[NumExprs];
541 for (
unsigned i = 0; i != NumExprs; ++i)
542 E->Exprs[i] = Reader.ReadSubStmt();
543 E->NumExprs = NumExprs;
544 E->LParenLoc = ReadSourceLocation(Record, Idx);
545 E->RParenLoc = ReadSourceLocation(Record, Idx);
555 void ASTStmtReader::VisitOffsetOfExpr(
OffsetOfExpr *E) {
575 I,
OffsetOfNode(Start, ReadDeclAs<FieldDecl>(Record, Idx), End));
586 *Base = Reader.ReadCXXBaseSpecifier(F, Record, Idx);
599 E->
setKind(static_cast<UnaryExprOrTypeTrait>(Record[Idx++]));
600 if (Record[Idx] == 0) {
612 E->
setLHS(Reader.ReadSubExpr());
613 E->
setRHS(Reader.ReadSubExpr());
619 E->
setBase(Reader.ReadSubExpr());
626 void ASTStmtReader::VisitCallExpr(
CallExpr *E) {
628 E->
setNumArgs(Reader.getContext(), Record[Idx++]);
631 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++
I)
632 E->
setArg(I, Reader.ReadSubExpr());
639 void ASTStmtReader::VisitMemberExpr(
MemberExpr *E) {
641 assert(E->getStmtClass() == Stmt::MemberExprClass &&
642 "It's a subclass, we must advance Idx!");
645 void ASTStmtReader::VisitObjCIsaExpr(
ObjCIsaExpr *E) {
647 E->
setBase(Reader.ReadSubExpr());
649 E->
setOpLoc(ReadSourceLocation(Record, Idx));
656 E->Operand = Reader.ReadSubExpr();
657 E->setShouldCopy(Record[Idx++]);
661 VisitExplicitCastExpr(E);
662 E->LParenLoc = ReadSourceLocation(Record, Idx);
663 E->BridgeKeywordLoc = ReadSourceLocation(Record, Idx);
664 E->Kind = Record[Idx++];
667 void ASTStmtReader::VisitCastExpr(
CastExpr *E) {
669 unsigned NumBaseSpecs = Record[Idx++];
674 while (NumBaseSpecs--) {
676 *BaseSpec = Reader.ReadCXXBaseSpecifier(F, Record, Idx);
683 E->
setLHS(Reader.ReadSubExpr());
684 E->
setRHS(Reader.ReadSubExpr());
691 VisitBinaryOperator(E);
698 E->SubExprs[ConditionalOperator::COND] = Reader.ReadSubExpr();
699 E->SubExprs[ConditionalOperator::LHS] = Reader.ReadSubExpr();
700 E->SubExprs[ConditionalOperator::RHS] = Reader.ReadSubExpr();
701 E->QuestionLoc = ReadSourceLocation(Record, Idx);
702 E->ColonLoc = ReadSourceLocation(Record, Idx);
708 E->OpaqueValue = cast<OpaqueValueExpr>(Reader.ReadSubExpr());
709 E->SubExprs[BinaryConditionalOperator::COMMON] = Reader.ReadSubExpr();
710 E->SubExprs[BinaryConditionalOperator::COND] = Reader.ReadSubExpr();
711 E->SubExprs[BinaryConditionalOperator::LHS] = Reader.ReadSubExpr();
712 E->SubExprs[BinaryConditionalOperator::RHS] = Reader.ReadSubExpr();
713 E->QuestionLoc = ReadSourceLocation(Record, Idx);
714 E->ColonLoc = ReadSourceLocation(Record, Idx);
727 VisitExplicitCastExpr(E);
742 E->
setBase(Reader.ReadSubExpr());
743 E->
setAccessor(Reader.GetIdentifierInfo(F, Record, Idx));
747 void ASTStmtReader::VisitInitListExpr(
InitListExpr *E) {
749 if (
InitListExpr *SyntForm = cast_or_null<InitListExpr>(Reader.ReadSubStmt()))
753 bool isArrayFiller = Record[Idx++];
754 Expr *filler =
nullptr;
756 filler = Reader.ReadSubExpr();
757 E->ArrayFillerOrUnionFieldInit = filler;
759 E->ArrayFillerOrUnionFieldInit = ReadDeclAs<FieldDecl>(Record, Idx);
761 unsigned NumInits = Record[Idx++];
764 for (
unsigned I = 0; I != NumInits; ++
I) {
765 Expr *init = Reader.ReadSubExpr();
766 E->
updateInit(Reader.getContext(),
I, init ? init : filler);
769 for (
unsigned I = 0; I != NumInits; ++
I)
770 E->
updateInit(Reader.getContext(),
I, Reader.ReadSubExpr());
778 unsigned NumSubExprs = Record[Idx++];
779 assert(NumSubExprs == E->
getNumSubExprs() &&
"Wrong number of subexprs");
780 for (
unsigned I = 0; I != NumSubExprs; ++
I)
786 while (Idx < Record.size()) {
791 = ReadSourceLocation(Record, Idx);
793 = ReadSourceLocation(Record, Idx);
794 Designators.push_back(Designator(Field->
getIdentifier(), DotLoc,
796 Designators.back().setField(Field);
803 = ReadSourceLocation(Record, Idx);
805 = ReadSourceLocation(Record, Idx);
806 Designators.push_back(Designator(Name, DotLoc, FieldLoc));
811 unsigned Index = Record[Idx++];
813 = ReadSourceLocation(Record, Idx);
815 = ReadSourceLocation(Record, Idx);
816 Designators.push_back(Designator(Index, LBracketLoc, RBracketLoc));
821 unsigned Index = Record[Idx++];
823 = ReadSourceLocation(Record, Idx);
825 = ReadSourceLocation(Record, Idx);
827 = ReadSourceLocation(Record, Idx);
828 Designators.push_back(Designator(Index, LBracketLoc, EllipsisLoc,
835 Designators.data(), Designators.size());
840 E->
setBase(Reader.ReadSubExpr());
844 void ASTStmtReader::VisitNoInitExpr(
NoInitExpr *E) {
852 void ASTStmtReader::VisitVAArgExpr(
VAArgExpr *E) {
865 E->
setLabel(ReadDeclAs<LabelDecl>(Record, Idx));
868 void ASTStmtReader::VisitStmtExpr(
StmtExpr *E) {
872 E->
setSubStmt(cast_or_null<CompoundStmt>(Reader.ReadSubStmt()));
875 void ASTStmtReader::VisitChooseExpr(
ChooseExpr *E) {
877 E->
setCond(Reader.ReadSubExpr());
878 E->
setLHS(Reader.ReadSubExpr());
879 E->
setRHS(Reader.ReadSubExpr());
885 void ASTStmtReader::VisitGNUNullExpr(
GNUNullExpr *E) {
893 unsigned NumExprs = Record[Idx++];
895 Exprs.push_back(Reader.ReadSubExpr());
896 E->
setExprs(Reader.getContext(), Exprs);
903 E->BuiltinLoc = ReadSourceLocation(Record, Idx);
904 E->RParenLoc = ReadSourceLocation(Record, Idx);
905 E->TInfo = GetTypeSourceInfo(Record, Idx);
906 E->SrcExpr = Reader.ReadSubExpr();
909 void ASTStmtReader::VisitBlockExpr(
BlockExpr *E) {
916 E->NumAssocs = Record[Idx++];
917 E->AssocTypes =
new (Reader.getContext())
TypeSourceInfo*[E->NumAssocs];
919 new(Reader.getContext())
Stmt*[GenericSelectionExpr::END_EXPR+E->NumAssocs];
921 E->SubExprs[GenericSelectionExpr::CONTROLLING] = Reader.ReadSubExpr();
923 E->AssocTypes[
I] = GetTypeSourceInfo(Record, Idx);
924 E->SubExprs[GenericSelectionExpr::END_EXPR+
I] = Reader.ReadSubExpr();
926 E->ResultIndex = Record[Idx++];
928 E->GenericLoc = ReadSourceLocation(Record, Idx);
929 E->DefaultLoc = ReadSourceLocation(Record, Idx);
930 E->RParenLoc = ReadSourceLocation(Record, Idx);
935 unsigned numSemanticExprs = Record[Idx++];
936 assert(numSemanticExprs + 1 == E->PseudoObjectExprBits.NumSubExprs);
937 E->PseudoObjectExprBits.ResultIndex = Record[Idx++];
940 E->getSubExprsBuffer()[0] = Reader.ReadSubExpr();
943 for (
unsigned i = 0; i != numSemanticExprs; ++i) {
944 Expr *subExpr = Reader.ReadSubExpr();
945 E->getSubExprsBuffer()[i+1] = subExpr;
949 void ASTStmtReader::VisitAtomicExpr(
AtomicExpr *E) {
953 for (
unsigned I = 0; I != E->NumSubExprs; ++
I)
954 E->SubExprs[I] = Reader.ReadSubExpr();
955 E->BuiltinLoc = ReadSourceLocation(Record, Idx);
956 E->RParenLoc = ReadSourceLocation(Record, Idx);
964 E->
setString(cast<StringLiteral>(Reader.ReadSubStmt()));
965 E->
setAtLoc(ReadSourceLocation(Record, Idx));
971 E->SubExpr = Reader.ReadSubStmt();
972 E->BoxingMethod = ReadDeclAs<ObjCMethodDecl>(Record, Idx);
973 E->Range = ReadSourceRange(Record, Idx);
978 unsigned NumElements = Record[Idx++];
979 assert(NumElements == E->
getNumElements() &&
"Wrong number of elements");
981 for (
unsigned I = 0, N = NumElements; I != N; ++
I)
982 Elements[I] = Reader.ReadSubExpr();
983 E->ArrayWithObjectsMethod = ReadDeclAs<ObjCMethodDecl>(Record, Idx);
984 E->Range = ReadSourceRange(Record, Idx);
989 unsigned NumElements = Record[Idx++];
990 assert(NumElements == E->
getNumElements() &&
"Wrong number of elements");
991 bool HasPackExpansions = Record[Idx++];
992 assert(HasPackExpansions == E->HasPackExpansions &&
"Pack expansion mismatch");
997 for (
unsigned I = 0; I != NumElements; ++
I) {
998 KeyValues[
I].
Key = Reader.ReadSubExpr();
999 KeyValues[
I].
Value = Reader.ReadSubExpr();
1000 if (HasPackExpansions) {
1001 Expansions[
I].EllipsisLoc = ReadSourceLocation(Record, Idx);
1002 Expansions[
I].NumExpansionsPlusOne = Record[Idx++];
1005 E->DictWithObjectsMethod = ReadDeclAs<ObjCMethodDecl>(Record, Idx);
1006 E->Range = ReadSourceRange(Record, Idx);
1012 E->
setAtLoc(ReadSourceLocation(Record, Idx));
1018 E->
setSelector(Reader.ReadSelector(F, Record, Idx));
1019 E->
setAtLoc(ReadSourceLocation(Record, Idx));
1025 E->
setProtocol(ReadDeclAs<ObjCProtocolDecl>(Record, Idx));
1026 E->
setAtLoc(ReadSourceLocation(Record, Idx));
1027 E->ProtoLoc = ReadSourceLocation(Record, Idx);
1033 E->
setDecl(ReadDeclAs<ObjCIvarDecl>(Record, Idx));
1035 E->
setOpLoc(ReadSourceLocation(Record, Idx));
1036 E->
setBase(Reader.ReadSubExpr());
1043 unsigned MethodRefFlags = Record[Idx++];
1044 bool Implicit = Record[Idx++] != 0;
1046 ObjCMethodDecl *Getter = ReadDeclAs<ObjCMethodDecl>(Record, Idx);
1047 ObjCMethodDecl *Setter = ReadDeclAs<ObjCMethodDecl>(Record, Idx);
1048 E->setImplicitProperty(Getter, Setter, MethodRefFlags);
1050 E->setExplicitProperty(ReadDeclAs<ObjCPropertyDecl>(Record, Idx),
1053 E->setLocation(ReadSourceLocation(Record, Idx));
1054 E->setReceiverLocation(ReadSourceLocation(Record, Idx));
1055 switch (Record[Idx++]) {
1057 E->setBase(Reader.ReadSubExpr());
1060 E->setSuperReceiver(Reader.readType(F, Record, Idx));
1063 E->setClassReceiver(ReadDeclAs<ObjCInterfaceDecl>(Record, Idx));
1073 E->GetAtIndexMethodDecl = ReadDeclAs<ObjCMethodDecl>(Record, Idx);
1074 E->SetAtIndexMethodDecl = ReadDeclAs<ObjCMethodDecl>(Record, Idx);
1081 unsigned NumStoredSelLocs = Record[Idx++];
1082 E->SelLocsKind = Record[Idx++];
1084 E->IsImplicit = Record[Idx++];
1098 QualType T = Reader.readType(F, Record, Idx);
1110 E->
setSelector(Reader.ReadSelector(F, Record, Idx));
1112 E->LBracLoc = ReadSourceLocation(Record, Idx);
1113 E->RBracLoc = ReadSourceLocation(Record, Idx);
1115 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++
I)
1116 E->
setArg(I, Reader.ReadSubExpr());
1119 for (
unsigned I = 0; I != NumStoredSelLocs; ++
I)
1120 Locs[I] = ReadSourceLocation(Record, Idx);
1127 S->
setBody(Reader.ReadSubStmt());
1128 S->
setForLoc(ReadSourceLocation(Record, Idx));
1149 S->
setAtLoc(ReadSourceLocation(Record, Idx));
1156 bool HasFinally = Record[Idx++];
1159 S->
setCatchStmt(I, cast_or_null<ObjCAtCatchStmt>(Reader.ReadSubStmt()));
1187 SourceRange R = Reader.ReadSourceRange(F, Record, Idx);
1190 E->VersionToCheck = Reader.ReadVersionTuple(Record, Idx);
1197 void ASTStmtReader::VisitCXXCatchStmt(
CXXCatchStmt *S) {
1199 S->CatchLoc = ReadSourceLocation(Record, Idx);
1200 S->ExceptionDecl = ReadDeclAs<VarDecl>(Record, Idx);
1201 S->HandlerBlock = Reader.ReadSubStmt();
1204 void ASTStmtReader::VisitCXXTryStmt(
CXXTryStmt *S) {
1206 assert(Record[Idx] == S->
getNumHandlers() &&
"NumStmtFields is wrong ?");
1208 S->TryLoc = ReadSourceLocation(Record, Idx);
1209 S->getStmts()[0] = Reader.ReadSubStmt();
1211 S->getStmts()[i + 1] = Reader.ReadSubStmt();
1216 S->ForLoc = ReadSourceLocation(Record, Idx);
1217 S->CoawaitLoc = ReadSourceLocation(Record, Idx);
1218 S->ColonLoc = ReadSourceLocation(Record, Idx);
1219 S->RParenLoc = ReadSourceLocation(Record, Idx);
1223 S->
setCond(Reader.ReadSubExpr());
1224 S->
setInc(Reader.ReadSubExpr());
1226 S->
setBody(Reader.ReadSubStmt());
1231 S->KeywordLoc = ReadSourceLocation(Record, Idx);
1232 S->IsIfExists = Record[Idx++];
1233 S->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx);
1234 ReadDeclarationNameInfo(S->NameInfo, Record, Idx);
1235 S->SubStmt = Reader.ReadSubStmt();
1241 E->Range = Reader.ReadSourceRange(F, Record, Idx);
1247 E->NumArgs = Record[Idx++];
1249 E->Args =
new (Reader.getContext())
Stmt*[E->NumArgs];
1251 E->
setArg(I, Reader.ReadSubExpr());
1252 E->setConstructor(ReadDeclAs<CXXConstructorDecl>(Record, Idx));
1260 E->ParenOrBraceRange = ReadSourceRange(Record, Idx);
1265 E->Constructor = ReadDeclAs<CXXConstructorDecl>(Record, Idx);
1266 E->Loc = ReadSourceLocation(Record, Idx);
1267 E->ConstructsVirtualBase = Record[Idx++];
1268 E->InheritedFromVirtualBase = Record[Idx++];
1272 VisitCXXConstructExpr(E);
1273 E->Type = GetTypeSourceInfo(Record, Idx);
1276 void ASTStmtReader::VisitLambdaExpr(
LambdaExpr *E) {
1278 unsigned NumCaptures = Record[Idx++];
1279 assert(NumCaptures == E->NumCaptures);(void)NumCaptures;
1280 unsigned NumArrayIndexVars = Record[Idx++];
1281 E->IntroducerRange = ReadSourceRange(Record, Idx);
1283 E->CaptureDefaultLoc = ReadSourceLocation(Record, Idx);
1284 E->ExplicitParams = Record[Idx++];
1285 E->ExplicitResultType = Record[Idx++];
1286 E->ClosingBrace = ReadSourceLocation(Record, Idx);
1292 *
C = Reader.ReadSubExpr();
1295 if (NumArrayIndexVars > 0) {
1296 unsigned *ArrayIndexStarts = E->getArrayIndexStarts();
1297 for (
unsigned I = 0; I != NumCaptures + 1; ++
I)
1298 ArrayIndexStarts[I] = Record[Idx++];
1300 VarDecl **ArrayIndexVars = E->getArrayIndexVars();
1301 for (
unsigned I = 0; I != NumArrayIndexVars; ++
I)
1302 ArrayIndexVars[I] = ReadDeclAs<VarDecl>(Record, Idx);
1309 E->SubExpr = Reader.ReadSubExpr();
1313 VisitExplicitCastExpr(E);
1316 E->RParenLoc = R.
getEnd();
1317 R = ReadSourceRange(Record, Idx);
1318 E->AngleBrackets = R;
1322 return VisitCXXNamedCastExpr(E);
1326 return VisitCXXNamedCastExpr(E);
1330 return VisitCXXNamedCastExpr(E);
1334 return VisitCXXNamedCastExpr(E);
1338 VisitExplicitCastExpr(E);
1345 E->UDSuffixLoc = ReadSourceLocation(Record, Idx);
1364 GetTypeSourceInfo(Record, Idx));
1372 void ASTStmtReader::VisitCXXThisExpr(
CXXThisExpr *E) {
1378 void ASTStmtReader::VisitCXXThrowExpr(
CXXThrowExpr *E) {
1380 E->ThrowLoc = ReadSourceLocation(Record, Idx);
1381 E->Op = Reader.ReadSubExpr();
1382 E->IsThrownVariableInScope = Record[Idx++];
1387 E->Param = ReadDeclAs<ParmVarDecl>(Record, Idx);
1388 E->Loc = ReadSourceLocation(Record, Idx);
1393 E->Field = ReadDeclAs<FieldDecl>(Record, Idx);
1394 E->Loc = ReadSourceLocation(Record, Idx);
1399 E->
setTemporary(Reader.ReadCXXTemporary(F, Record, Idx));
1405 E->TypeInfo = GetTypeSourceInfo(Record, Idx);
1406 E->RParenLoc = ReadSourceLocation(Record, Idx);
1409 void ASTStmtReader::VisitCXXNewExpr(
CXXNewExpr *E) {
1411 E->GlobalNew = Record[Idx++];
1412 bool isArray = Record[Idx++];
1413 E->UsualArrayDeleteWantsSize = Record[Idx++];
1414 unsigned NumPlacementArgs = Record[Idx++];
1415 E->StoredInitializationStyle = Record[Idx++];
1418 E->AllocatedTypeInfo = GetTypeSourceInfo(Record, Idx);
1419 E->TypeIdParens = ReadSourceRange(Record, Idx);
1420 E->Range = ReadSourceRange(Record, Idx);
1421 E->DirectInitRange = ReadSourceRange(Record, Idx);
1424 E->StoredInitializationStyle != 0);
1429 *I = Reader.ReadSubStmt();
1434 E->GlobalDelete = Record[Idx++];
1435 E->ArrayForm = Record[Idx++];
1436 E->ArrayFormAsWritten = Record[Idx++];
1437 E->UsualArrayDeleteWantsSize = Record[Idx++];
1438 E->OperatorDelete = ReadDeclAs<FunctionDecl>(Record, Idx);
1439 E->Argument = Reader.ReadSubExpr();
1440 E->Loc = ReadSourceLocation(Record, Idx);
1446 E->Base = Reader.ReadSubExpr();
1447 E->IsArrow = Record[Idx++];
1448 E->OperatorLoc = ReadSourceLocation(Record, Idx);
1449 E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx);
1450 E->ScopeType = GetTypeSourceInfo(Record, Idx);
1451 E->ColonColonLoc = ReadSourceLocation(Record, Idx);
1452 E->TildeLoc = ReadSourceLocation(Record, Idx);
1464 unsigned NumObjects = Record[Idx++];
1466 for (
unsigned i = 0; i != NumObjects; ++i)
1467 E->getTrailingObjects<
BlockDecl *>()[i] =
1468 ReadDeclAs<BlockDecl>(Record, Idx);
1470 E->ExprWithCleanupsBits.CleanupsHaveSideEffects = Record[Idx++];
1471 E->SubExpr = Reader.ReadSubExpr();
1479 ReadTemplateKWAndArgsInfo(
1480 *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(),
1484 E->Base = Reader.ReadSubExpr();
1485 E->BaseType = Reader.readType(F, Record, Idx);
1486 E->IsArrow = Record[Idx++];
1487 E->OperatorLoc = ReadSourceLocation(Record, Idx);
1488 E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx);
1489 E->FirstQualifierFoundInScope = ReadDeclAs<NamedDecl>(Record, Idx);
1490 ReadDeclarationNameInfo(E->MemberNameInfo, Record, Idx);
1498 ReadTemplateKWAndArgsInfo(
1499 *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(),
1503 E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx);
1504 ReadDeclarationNameInfo(E->NameInfo, Record, Idx);
1510 assert(Record[Idx] == E->
arg_size() &&
"Read wrong record during creation ?");
1512 for (
unsigned I = 0, N = E->
arg_size(); I != N; ++
I)
1513 E->
setArg(I, Reader.ReadSubExpr());
1514 E->Type = GetTypeSourceInfo(Record, Idx);
1519 void ASTStmtReader::VisitOverloadExpr(
OverloadExpr *E) {
1527 unsigned NumDecls = Record[Idx++];
1529 for (
unsigned i = 0; i != NumDecls; ++i) {
1530 NamedDecl *D = ReadDeclAs<NamedDecl>(Record, Idx);
1536 ReadDeclarationNameInfo(E->NameInfo, Record, Idx);
1537 E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx);
1541 VisitOverloadExpr(E);
1542 E->IsArrow = Record[Idx++];
1543 E->HasUnresolvedUsing = Record[Idx++];
1544 E->Base = Reader.ReadSubExpr();
1545 E->BaseType = Reader.readType(F, Record, Idx);
1546 E->OperatorLoc = ReadSourceLocation(Record, Idx);
1550 VisitOverloadExpr(E);
1551 E->RequiresADL = Record[Idx++];
1552 E->Overloaded = Record[Idx++];
1553 E->NamingClass = ReadDeclAs<CXXRecordDecl>(Record, Idx);
1558 E->TypeTraitExprBits.NumArgs = Record[Idx++];
1559 E->TypeTraitExprBits.Kind = Record[Idx++];
1560 E->TypeTraitExprBits.Value = Record[Idx++];
1563 E->RParenLoc = Range.
getEnd();
1566 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++
I)
1567 Args[I] = GetTypeSourceInfo(Record, Idx);
1573 E->Value = (
unsigned int)Record[Idx++];
1576 E->RParen = Range.
getEnd();
1577 E->QueriedType = GetTypeSourceInfo(Record, Idx);
1583 E->Value = (
bool)Record[Idx++];
1585 E->QueriedExpression = Reader.ReadSubExpr();
1587 E->RParen = Range.
getEnd();
1592 E->Value = (
bool)Record[Idx++];
1593 E->Range = ReadSourceRange(Record, Idx);
1594 E->Operand = Reader.ReadSubExpr();
1599 E->EllipsisLoc = ReadSourceLocation(Record, Idx);
1600 E->NumExpansions = Record[Idx++];
1601 E->Pattern = Reader.ReadSubExpr();
1606 unsigned NumPartialArgs = Record[Idx++];
1607 E->OperatorLoc = ReadSourceLocation(Record, Idx);
1608 E->PackLoc = ReadSourceLocation(Record, Idx);
1609 E->RParenLoc = ReadSourceLocation(Record, Idx);
1610 E->Pack = Reader.ReadDeclAs<
NamedDecl>(F, Record, Idx);
1612 assert(E->Length == NumPartialArgs);
1614 *E = I + NumPartialArgs;
1618 E->Length = Record[Idx++];
1622 void ASTStmtReader::VisitSubstNonTypeTemplateParmExpr(
1625 E->Param = ReadDeclAs<NonTypeTemplateParmDecl>(Record, Idx);
1626 E->NameLoc = ReadSourceLocation(Record, Idx);
1627 E->Replacement = Reader.ReadSubExpr();
1630 void ASTStmtReader::VisitSubstNonTypeTemplateParmPackExpr(
1633 E->Param = ReadDeclAs<NonTypeTemplateParmDecl>(Record, Idx);
1639 E->NumArguments = ArgPack.pack_size();
1640 E->NameLoc = ReadSourceLocation(Record, Idx);
1645 E->NumParameters = Record[Idx++];
1646 E->ParamPack = ReadDeclAs<ParmVarDecl>(Record, Idx);
1647 E->NameLoc = ReadSourceLocation(Record, Idx);
1649 for (
unsigned i = 0, n = E->NumParameters; i != n; ++i)
1650 Parms[i] = ReadDeclAs<ParmVarDecl>(Record, Idx);
1655 E->State = Reader.ReadSubExpr();
1656 auto VD = ReadDeclAs<ValueDecl>(Record, Idx);
1657 unsigned ManglingNumber = Record[Idx++];
1661 void ASTStmtReader::VisitCXXFoldExpr(
CXXFoldExpr *E) {
1663 E->LParenLoc = ReadSourceLocation(Record, Idx);
1664 E->EllipsisLoc = ReadSourceLocation(Record, Idx);
1665 E->RParenLoc = ReadSourceLocation(Record, Idx);
1666 E->SubExprs[0] = Reader.ReadSubExpr();
1667 E->SubExprs[1] = Reader.ReadSubExpr();
1673 E->SourceExpr = Reader.ReadSubExpr();
1674 E->Loc = ReadSourceLocation(Record, Idx);
1677 void ASTStmtReader::VisitTypoExpr(
TypoExpr *E) {
1678 llvm_unreachable(
"Cannot read TypoExpr nodes");
1686 E->IsArrow = (Record[Idx++] != 0);
1687 E->BaseExpr = Reader.ReadSubExpr();
1688 E->QualifierLoc = Reader.ReadNestedNameSpecifierLoc(F, Record, Idx);
1689 E->MemberLoc = ReadSourceLocation(Record, Idx);
1690 E->TheDecl = ReadDeclAs<MSPropertyDecl>(Record, Idx);
1695 E->setBase(Reader.ReadSubExpr());
1696 E->setIdx(Reader.ReadSubExpr());
1703 std::string UuidStr = ReadString(Record, Idx);
1704 E->
setUuidStr(StringRef(UuidStr).copy(Reader.getContext()));
1707 GetTypeSourceInfo(Record, Idx));
1715 void ASTStmtReader::VisitSEHLeaveStmt(
SEHLeaveStmt *S) {
1722 S->Loc = ReadSourceLocation(Record, Idx);
1723 S->Children[SEHExceptStmt::FILTER_EXPR] = Reader.ReadSubStmt();
1729 S->Loc = ReadSourceLocation(Record, Idx);
1730 S->Block = Reader.ReadSubStmt();
1733 void ASTStmtReader::VisitSEHTryStmt(
SEHTryStmt *S) {
1735 S->IsCXXTry = Record[Idx++];
1736 S->TryLoc = ReadSourceLocation(Record, Idx);
1737 S->Children[SEHTryStmt::TRY] = Reader.ReadSubStmt();
1738 S->Children[SEHTryStmt::HANDLER] = Reader.ReadSubStmt();
1747 E->
setConfig(cast<CallExpr>(Reader.ReadSubExpr()));
1753 void ASTStmtReader::VisitAsTypeExpr(
AsTypeExpr *E) {
1755 E->BuiltinLoc = ReadSourceLocation(Record, Idx);
1756 E->RParenLoc = ReadSourceLocation(Record, Idx);
1757 E->SrcExpr = Reader.ReadSubExpr();
1773 : Reader(R),
Context(C), Record(Record), Idx(Idx) { }
1774 #define OPENMP_CLAUSE(Name, Class) void Visit##Class(Class *C);
1775 #include "clang/Basic/OpenMPKinds.def"
1784 switch (Record[Idx++]) {
1791 case OMPC_num_threads:
1806 case OMPC_proc_bind:
1821 case OMPC_mergeable:
1851 case OMPC_firstprivate:
1854 case OMPC_lastprivate:
1860 case OMPC_reduction:
1872 case OMPC_copyprivate:
1885 unsigned NumVars = Record[Idx++];
1886 unsigned NumDeclarations = Record[Idx++];
1887 unsigned NumLists = Record[Idx++];
1888 unsigned NumComponents = Record[Idx++];
1893 case OMPC_num_teams:
1896 case OMPC_thread_limit:
1902 case OMPC_grainsize:
1905 case OMPC_num_tasks:
1911 case OMPC_dist_schedule:
1914 case OMPC_defaultmap:
1918 unsigned NumVars = Record[Idx++];
1919 unsigned NumDeclarations = Record[Idx++];
1920 unsigned NumLists = Record[Idx++];
1921 unsigned NumComponents = Record[Idx++];
1927 unsigned NumVars = Record[Idx++];
1928 unsigned NumDeclarations = Record[Idx++];
1929 unsigned NumLists = Record[Idx++];
1930 unsigned NumComponents = Record[Idx++];
1935 case OMPC_use_device_ptr:
1938 case OMPC_is_device_ptr:
1943 C->
setLocStart(Reader->ReadSourceLocation(Record, Idx));
1944 C->
setLocEnd(Reader->ReadSourceLocation(Record, Idx));
1954 VisitOMPClauseWithPreInit(C);
1958 void OMPClauseReader::VisitOMPIfClause(
OMPIfClause *C) {
1959 C->setNameModifier(static_cast<OpenMPDirectiveKind>(Record[Idx++]));
1960 C->setNameModifierLoc(Reader->ReadSourceLocation(Record, Idx));
1961 C->setColonLoc(Reader->ReadSourceLocation(Record, Idx));
1962 C->setCondition(Reader->Reader.ReadSubExpr());
1963 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
1967 C->setCondition(Reader->Reader.ReadSubExpr());
1968 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
1972 C->setNumThreads(Reader->Reader.ReadSubExpr());
1973 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
1977 C->setSafelen(Reader->Reader.ReadSubExpr());
1978 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
1982 C->setSimdlen(Reader->Reader.ReadSubExpr());
1983 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
1987 C->setNumForLoops(Reader->Reader.ReadSubExpr());
1988 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
1993 static_cast<OpenMPDefaultClauseKind>(Record[Idx++]));
1994 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
1995 C->setDefaultKindKwLoc(Reader->ReadSourceLocation(Record, Idx));
2000 static_cast<OpenMPProcBindClauseKind>(Record[Idx++]));
2001 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2002 C->setProcBindKindKwLoc(Reader->ReadSourceLocation(Record, Idx));
2006 VisitOMPClauseWithPreInit(C);
2008 static_cast<OpenMPScheduleClauseKind>(Record[Idx++]));
2009 C->setFirstScheduleModifier(
2010 static_cast<OpenMPScheduleClauseModifier>(Record[Idx++]));
2011 C->setSecondScheduleModifier(
2012 static_cast<OpenMPScheduleClauseModifier>(Record[Idx++]));
2013 C->setChunkSize(Reader->Reader.ReadSubExpr());
2014 C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2015 C->setFirstScheduleModifierLoc(Reader->ReadSourceLocation(Record, Idx));
2016 C->setSecondScheduleModifierLoc(Reader->ReadSourceLocation(Record, Idx));
2017 C->setScheduleKindLoc(Reader->ReadSourceLocation(Record, Idx));
2018 C->setCommaLoc(Reader->ReadSourceLocation(Record, Idx));
2022 C->setNumForLoops(Reader->Reader.ReadSubExpr());
2023 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2032 void OMPClauseReader::VisitOMPReadClause(
OMPReadClause *) {}
2044 void OMPClauseReader::VisitOMPSIMDClause(
OMPSIMDClause *) {}
2049 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2052 Vars.reserve(NumVars);
2053 for (
unsigned i = 0; i != NumVars; ++i)
2054 Vars.push_back(Reader->Reader.ReadSubExpr());
2057 for (
unsigned i = 0; i != NumVars; ++i)
2058 Vars.push_back(Reader->Reader.ReadSubExpr());
2059 C->setPrivateCopies(Vars);
2063 VisitOMPClauseWithPreInit(C);
2064 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2067 Vars.reserve(NumVars);
2068 for (
unsigned i = 0; i != NumVars; ++i)
2069 Vars.push_back(Reader->Reader.ReadSubExpr());
2072 for (
unsigned i = 0; i != NumVars; ++i)
2073 Vars.push_back(Reader->Reader.ReadSubExpr());
2074 C->setPrivateCopies(Vars);
2076 for (
unsigned i = 0; i != NumVars; ++i)
2077 Vars.push_back(Reader->Reader.ReadSubExpr());
2082 VisitOMPClauseWithPostUpdate(C);
2083 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2086 Vars.reserve(NumVars);
2087 for (
unsigned i = 0; i != NumVars; ++i)
2088 Vars.push_back(Reader->Reader.ReadSubExpr());
2091 for (
unsigned i = 0; i != NumVars; ++i)
2092 Vars.push_back(Reader->Reader.ReadSubExpr());
2095 for (
unsigned i = 0; i != NumVars; ++i)
2096 Vars.push_back(Reader->Reader.ReadSubExpr());
2097 C->setSourceExprs(Vars);
2099 for (
unsigned i = 0; i != NumVars; ++i)
2100 Vars.push_back(Reader->Reader.ReadSubExpr());
2101 C->setDestinationExprs(Vars);
2103 for (
unsigned i = 0; i != NumVars; ++i)
2104 Vars.push_back(Reader->Reader.ReadSubExpr());
2105 C->setAssignmentOps(Vars);
2109 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2112 Vars.reserve(NumVars);
2113 for (
unsigned i = 0; i != NumVars; ++i)
2114 Vars.push_back(Reader->Reader.ReadSubExpr());
2119 VisitOMPClauseWithPostUpdate(C);
2120 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2121 C->setColonLoc(Reader->ReadSourceLocation(Record, Idx));
2123 Reader->Reader.ReadNestedNameSpecifierLoc(Reader->F, Record, Idx);
2125 Reader->ReadDeclarationNameInfo(DNI, Record, Idx);
2126 C->setQualifierLoc(NNSL);
2127 C->setNameInfo(DNI);
2131 Vars.reserve(NumVars);
2132 for (
unsigned i = 0; i != NumVars; ++i)
2133 Vars.push_back(Reader->Reader.ReadSubExpr());
2136 for (
unsigned i = 0; i != NumVars; ++i)
2137 Vars.push_back(Reader->Reader.ReadSubExpr());
2138 C->setPrivates(Vars);
2140 for (
unsigned i = 0; i != NumVars; ++i)
2141 Vars.push_back(Reader->Reader.ReadSubExpr());
2142 C->setLHSExprs(Vars);
2144 for (
unsigned i = 0; i != NumVars; ++i)
2145 Vars.push_back(Reader->Reader.ReadSubExpr());
2146 C->setRHSExprs(Vars);
2148 for (
unsigned i = 0; i != NumVars; ++i)
2149 Vars.push_back(Reader->Reader.ReadSubExpr());
2150 C->setReductionOps(Vars);
2154 VisitOMPClauseWithPostUpdate(C);
2155 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2156 C->setColonLoc(Reader->ReadSourceLocation(Record, Idx));
2157 C->setModifier(static_cast<OpenMPLinearClauseKind>(Record[Idx++]));
2158 C->setModifierLoc(Reader->ReadSourceLocation(Record, Idx));
2161 Vars.reserve(NumVars);
2162 for (
unsigned i = 0; i != NumVars; ++i)
2163 Vars.push_back(Reader->Reader.ReadSubExpr());
2166 for (
unsigned i = 0; i != NumVars; ++i)
2167 Vars.push_back(Reader->Reader.ReadSubExpr());
2168 C->setPrivates(Vars);
2170 for (
unsigned i = 0; i != NumVars; ++i)
2171 Vars.push_back(Reader->Reader.ReadSubExpr());
2174 for (
unsigned i = 0; i != NumVars; ++i)
2175 Vars.push_back(Reader->Reader.ReadSubExpr());
2176 C->setUpdates(Vars);
2178 for (
unsigned i = 0; i != NumVars; ++i)
2179 Vars.push_back(Reader->Reader.ReadSubExpr());
2181 C->setStep(Reader->Reader.ReadSubExpr());
2182 C->setCalcStep(Reader->Reader.ReadSubExpr());
2186 C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2187 C->
setColonLoc(Reader->ReadSourceLocation(Record, Idx));
2188 unsigned NumVars = C->varlist_size();
2190 Vars.reserve(NumVars);
2191 for (
unsigned i = 0; i != NumVars; ++i)
2192 Vars.push_back(Reader->Reader.ReadSubExpr());
2193 C->setVarRefs(Vars);
2194 C->setAlignment(Reader->Reader.ReadSubExpr());
2198 C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2199 unsigned NumVars = C->varlist_size();
2201 Exprs.reserve(NumVars);
2202 for (
unsigned i = 0; i != NumVars; ++i)
2203 Exprs.push_back(Reader->Reader.ReadSubExpr());
2204 C->setVarRefs(Exprs);
2206 for (
unsigned i = 0; i != NumVars; ++i)
2207 Exprs.push_back(Reader->Reader.ReadSubExpr());
2208 C->setSourceExprs(Exprs);
2210 for (
unsigned i = 0; i != NumVars; ++i)
2211 Exprs.push_back(Reader->Reader.ReadSubExpr());
2212 C->setDestinationExprs(Exprs);
2214 for (
unsigned i = 0; i != NumVars; ++i)
2215 Exprs.push_back(Reader->Reader.ReadSubExpr());
2216 C->setAssignmentOps(Exprs);
2220 C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2221 unsigned NumVars = C->varlist_size();
2223 Exprs.reserve(NumVars);
2224 for (
unsigned i = 0; i != NumVars; ++i)
2225 Exprs.push_back(Reader->Reader.ReadSubExpr());
2226 C->setVarRefs(Exprs);
2228 for (
unsigned i = 0; i != NumVars; ++i)
2229 Exprs.push_back(Reader->Reader.ReadSubExpr());
2230 C->setSourceExprs(Exprs);
2232 for (
unsigned i = 0; i != NumVars; ++i)
2233 Exprs.push_back(Reader->Reader.ReadSubExpr());
2234 C->setDestinationExprs(Exprs);
2236 for (
unsigned i = 0; i != NumVars; ++i)
2237 Exprs.push_back(Reader->Reader.ReadSubExpr());
2238 C->setAssignmentOps(Exprs);
2242 C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2243 unsigned NumVars = C->varlist_size();
2245 Vars.reserve(NumVars);
2246 for (
unsigned i = 0; i != NumVars; ++i)
2247 Vars.push_back(Reader->Reader.ReadSubExpr());
2248 C->setVarRefs(Vars);
2252 C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2253 C->setDependencyKind(static_cast<OpenMPDependClauseKind>(Record[Idx++]));
2254 C->setDependencyLoc(Reader->ReadSourceLocation(Record, Idx));
2255 C->setColonLoc(Reader->ReadSourceLocation(Record, Idx));
2256 unsigned NumVars = C->varlist_size();
2258 Vars.reserve(NumVars);
2259 for (
unsigned i = 0; i != NumVars; ++i)
2260 Vars.push_back(Reader->Reader.ReadSubExpr());
2261 C->setVarRefs(Vars);
2266 C->setDevice(Reader->Reader.ReadSubExpr());
2267 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2270 void OMPClauseReader::VisitOMPMapClause(
OMPMapClause *C) {
2271 C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2272 C->setMapTypeModifier(
2273 static_cast<OpenMPMapClauseKind>(Record[Idx++]));
2275 static_cast<OpenMPMapClauseKind>(Record[Idx++]));
2276 C->setMapLoc(Reader->ReadSourceLocation(Record, Idx));
2277 C->setColonLoc(Reader->ReadSourceLocation(Record, Idx));
2278 auto NumVars = C->varlist_size();
2284 Vars.reserve(NumVars);
2285 for (
unsigned i = 0; i != NumVars; ++i)
2286 Vars.push_back(Reader->Reader.ReadSubExpr());
2287 C->setVarRefs(Vars);
2290 Decls.reserve(UniqueDecls);
2291 for (
unsigned i = 0; i < UniqueDecls; ++i)
2293 Reader->Reader.ReadDeclAs<
ValueDecl>(Reader->F, Record, Idx));
2297 ListsPerDecl.reserve(UniqueDecls);
2298 for (
unsigned i = 0; i < UniqueDecls; ++i)
2299 ListsPerDecl.push_back(Record[Idx++]);
2303 ListSizes.reserve(TotalLists);
2304 for (
unsigned i = 0; i < TotalLists; ++i)
2305 ListSizes.push_back(Record[Idx++]);
2309 Components.reserve(TotalComponents);
2310 for (
unsigned i = 0; i < TotalComponents; ++i) {
2311 Expr *AssociatedExpr = Reader->Reader.ReadSubExpr();
2313 Reader->Reader.ReadDeclAs<
ValueDecl>(Reader->F, Record, Idx);
2315 AssociatedExpr, AssociatedDecl));
2321 C->setNumTeams(Reader->Reader.ReadSubExpr());
2322 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2326 C->setThreadLimit(Reader->Reader.ReadSubExpr());
2327 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2331 C->setPriority(Reader->Reader.ReadSubExpr());
2332 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2336 C->setGrainsize(Reader->Reader.ReadSubExpr());
2337 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2341 C->setNumTasks(Reader->Reader.ReadSubExpr());
2342 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2345 void OMPClauseReader::VisitOMPHintClause(
OMPHintClause *C) {
2346 C->setHint(Reader->Reader.ReadSubExpr());
2347 C->
setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2351 VisitOMPClauseWithPreInit(C);
2352 C->setDistScheduleKind(
2353 static_cast<OpenMPDistScheduleClauseKind>(Record[Idx++]));
2354 C->setChunkSize(Reader->Reader.ReadSubExpr());
2355 C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2356 C->setDistScheduleKindLoc(Reader->ReadSourceLocation(Record, Idx));
2357 C->setCommaLoc(Reader->ReadSourceLocation(Record, Idx));
2361 C->setDefaultmapKind(
2362 static_cast<OpenMPDefaultmapClauseKind>(Record[Idx++]));
2363 C->setDefaultmapModifier(
2364 static_cast<OpenMPDefaultmapClauseModifier>(Record[Idx++]));
2365 C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2366 C->setDefaultmapModifierLoc(Reader->ReadSourceLocation(Record, Idx));
2367 C->setDefaultmapKindLoc(Reader->ReadSourceLocation(Record, Idx));
2370 void OMPClauseReader::VisitOMPToClause(
OMPToClause *C) {
2371 C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2372 auto NumVars = C->varlist_size();
2378 Vars.reserve(NumVars);
2379 for (
unsigned i = 0; i != NumVars; ++i)
2380 Vars.push_back(Reader->Reader.ReadSubExpr());
2381 C->setVarRefs(Vars);
2384 Decls.reserve(UniqueDecls);
2385 for (
unsigned i = 0; i < UniqueDecls; ++i)
2387 Reader->Reader.ReadDeclAs<
ValueDecl>(Reader->F, Record, Idx));
2391 ListsPerDecl.reserve(UniqueDecls);
2392 for (
unsigned i = 0; i < UniqueDecls; ++i)
2393 ListsPerDecl.push_back(Record[Idx++]);
2397 ListSizes.reserve(TotalLists);
2398 for (
unsigned i = 0; i < TotalLists; ++i)
2399 ListSizes.push_back(Record[Idx++]);
2403 Components.reserve(TotalComponents);
2404 for (
unsigned i = 0; i < TotalComponents; ++i) {
2405 Expr *AssociatedExpr = Reader->Reader.ReadSubExpr();
2407 Reader->Reader.ReadDeclAs<
ValueDecl>(Reader->F, Record, Idx);
2409 AssociatedExpr, AssociatedDecl));
2414 void OMPClauseReader::VisitOMPFromClause(
OMPFromClause *C) {
2415 C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2416 auto NumVars = C->varlist_size();
2422 Vars.reserve(NumVars);
2423 for (
unsigned i = 0; i != NumVars; ++i)
2424 Vars.push_back(Reader->Reader.ReadSubExpr());
2425 C->setVarRefs(Vars);
2428 Decls.reserve(UniqueDecls);
2429 for (
unsigned i = 0; i < UniqueDecls; ++i)
2431 Reader->Reader.ReadDeclAs<
ValueDecl>(Reader->F, Record, Idx));
2435 ListsPerDecl.reserve(UniqueDecls);
2436 for (
unsigned i = 0; i < UniqueDecls; ++i)
2437 ListsPerDecl.push_back(Record[Idx++]);
2441 ListSizes.reserve(TotalLists);
2442 for (
unsigned i = 0; i < TotalLists; ++i)
2443 ListSizes.push_back(Record[Idx++]);
2447 Components.reserve(TotalComponents);
2448 for (
unsigned i = 0; i < TotalComponents; ++i) {
2449 Expr *AssociatedExpr = Reader->Reader.ReadSubExpr();
2451 Reader->Reader.ReadDeclAs<
ValueDecl>(Reader->F, Record, Idx);
2453 AssociatedExpr, AssociatedDecl));
2459 C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2460 unsigned NumVars = C->varlist_size();
2462 Vars.reserve(NumVars);
2463 for (
unsigned i = 0; i != NumVars; ++i)
2464 Vars.push_back(Reader->Reader.ReadSubExpr());
2465 C->setVarRefs(Vars);
2470 C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));
2471 unsigned NumVars = C->varlist_size();
2473 Vars.reserve(NumVars);
2474 for (
unsigned i = 0; i != NumVars; ++i)
2475 Vars.push_back(Reader->Reader.ReadSubExpr());
2476 C->setVarRefs(Vars);
2485 E->
setLocEnd(ReadSourceLocation(Record, Idx));
2489 Clauses.push_back(ClauseReader.readClause());
2499 VisitOMPExecutableDirective(D);
2504 D->
setCond(Reader.ReadSubExpr());
2505 D->
setInit(Reader.ReadSubExpr());
2506 D->
setInc(Reader.ReadSubExpr());
2526 Sub.reserve(CollapsedNum);
2527 for (
unsigned i = 0; i < CollapsedNum; ++i)
2528 Sub.push_back(Reader.ReadSubExpr());
2531 for (
unsigned i = 0; i < CollapsedNum; ++i)
2532 Sub.push_back(Reader.ReadSubExpr());
2535 for (
unsigned i = 0; i < CollapsedNum; ++i)
2536 Sub.push_back(Reader.ReadSubExpr());
2539 for (
unsigned i = 0; i < CollapsedNum; ++i)
2540 Sub.push_back(Reader.ReadSubExpr());
2543 for (
unsigned i = 0; i < CollapsedNum; ++i)
2544 Sub.push_back(Reader.ReadSubExpr());
2552 VisitOMPExecutableDirective(D);
2553 D->setHasCancel(Record[Idx++]);
2557 VisitOMPLoopDirective(D);
2561 VisitOMPLoopDirective(D);
2562 D->setHasCancel(Record[Idx++]);
2566 VisitOMPLoopDirective(D);
2573 VisitOMPExecutableDirective(D);
2574 D->setHasCancel(Record[Idx++]);
2579 VisitOMPExecutableDirective(D);
2587 VisitOMPExecutableDirective(D);
2592 VisitOMPExecutableDirective(D);
2599 VisitOMPExecutableDirective(D);
2600 ReadDeclarationNameInfo(D->DirName, Record, Idx);
2604 VisitOMPLoopDirective(D);
2605 D->setHasCancel(Record[Idx++]);
2608 void ASTStmtReader::VisitOMPParallelForSimdDirective(
2610 VisitOMPLoopDirective(D);
2613 void ASTStmtReader::VisitOMPParallelSectionsDirective(
2618 VisitOMPExecutableDirective(D);
2619 D->setHasCancel(Record[Idx++]);
2626 VisitOMPExecutableDirective(D);
2627 D->setHasCancel(Record[Idx++]);
2632 VisitOMPExecutableDirective(D);
2637 VisitOMPExecutableDirective(D);
2642 VisitOMPExecutableDirective(D);
2647 VisitOMPExecutableDirective(D);
2654 VisitOMPExecutableDirective(D);
2661 VisitOMPExecutableDirective(D);
2668 VisitOMPExecutableDirective(D);
2669 D->setX(Reader.ReadSubExpr());
2670 D->setV(Reader.ReadSubExpr());
2671 D->setExpr(Reader.ReadSubExpr());
2672 D->setUpdateExpr(Reader.ReadSubExpr());
2673 D->IsXLHSInRHSPart = Record[Idx++] != 0;
2674 D->IsPostfixUpdate = Record[Idx++] != 0;
2681 VisitOMPExecutableDirective(D);
2687 VisitOMPExecutableDirective(D);
2690 void ASTStmtReader::VisitOMPTargetEnterDataDirective(
2694 VisitOMPExecutableDirective(D);
2697 void ASTStmtReader::VisitOMPTargetExitDataDirective(
2701 VisitOMPExecutableDirective(D);
2704 void ASTStmtReader::VisitOMPTargetParallelDirective(
2708 VisitOMPExecutableDirective(D);
2711 void ASTStmtReader::VisitOMPTargetParallelForDirective(
2713 VisitOMPLoopDirective(D);
2714 D->setHasCancel(Record[Idx++]);
2721 VisitOMPExecutableDirective(D);
2724 void ASTStmtReader::VisitOMPCancellationPointDirective(
2727 VisitOMPExecutableDirective(D);
2728 D->setCancelRegion(static_cast<OpenMPDirectiveKind>(Record[Idx++]));
2735 VisitOMPExecutableDirective(D);
2736 D->setCancelRegion(static_cast<OpenMPDirectiveKind>(Record[Idx++]));
2740 VisitOMPLoopDirective(D);
2744 VisitOMPLoopDirective(D);
2748 VisitOMPLoopDirective(D);
2754 VisitOMPExecutableDirective(D);
2756 void ASTStmtReader::VisitOMPDistributeParallelForDirective(
2758 VisitOMPLoopDirective(D);
2761 void ASTStmtReader::VisitOMPDistributeParallelForSimdDirective(
2763 VisitOMPLoopDirective(D);
2766 void ASTStmtReader::VisitOMPDistributeSimdDirective(
2768 VisitOMPLoopDirective(D);
2771 void ASTStmtReader::VisitOMPTargetParallelForSimdDirective(
2773 VisitOMPLoopDirective(D);
2781 switch (ReadingKind) {
2783 llvm_unreachable(
"should not call this when not reading anything");
2786 return ReadStmtFromStream(F);
2788 return ReadSubStmt();
2791 llvm_unreachable(
"ReadingKind not set ?");
2795 return cast_or_null<Expr>(ReadStmt(F));
2799 return cast_or_null<Expr>(ReadSubStmt());
2809 Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) {
2811 ReadingKindTracker ReadingKind(Read_Stmt, *
this);
2812 llvm::BitstreamCursor &
Cursor = F.DeclsCursor;
2816 llvm::DenseMap<uint64_t, Stmt *> StmtEntries;
2819 unsigned PrevNumStmts = StmtStack.size();
2825 Stmt::EmptyShell Empty;
2828 llvm::BitstreamEntry Entry = Cursor.advanceSkippingSubblocks();
2830 switch (Entry.Kind) {
2831 case llvm::BitstreamEntry::SubBlock:
2833 Error(
"malformed block record in AST file");
2835 case llvm::BitstreamEntry::EndBlock:
2837 case llvm::BitstreamEntry::Record:
2845 bool Finished =
false;
2846 bool IsStmtReference =
false;
2847 switch ((
StmtCode)Cursor.readRecord(Entry.ID, Record)) {
2853 IsStmtReference =
true;
2854 assert(StmtEntries.find(Record[0]) != StmtEntries.end() &&
2855 "No stmt was recorded for this offset reference!");
2856 S = StmtEntries[Record[Idx++]];
2954 Record[ASTStmtReader::NumExprFields + 1],
2955 Record[ASTStmtReader::NumExprFields + 2],
2956 Record[ASTStmtReader::NumExprFields + 2] ?
2957 Record[ASTStmtReader::NumExprFields + 5] : 0);
2996 Record[ASTStmtReader::NumExprFields + 1]);
3022 if (Record[Idx++]) {
3023 QualifierLoc = ReadNestedNameSpecifierLoc(F, Record, Idx);
3028 bool HasTemplateKWAndArgsInfo = Record[Idx++];
3029 if (HasTemplateKWAndArgsInfo) {
3030 TemplateKWLoc = ReadSourceLocation(F, Record, Idx);
3031 unsigned NumTemplateArgs = Record[Idx++];
3032 ArgInfo.
setLAngleLoc(ReadSourceLocation(F, Record, Idx));
3033 ArgInfo.
setRAngleLoc(ReadSourceLocation(F, Record, Idx));
3034 for (
unsigned i = 0; i != NumTemplateArgs; ++i)
3035 ArgInfo.
addArgument(ReadTemplateArgumentLoc(F, Record, Idx));
3038 bool HadMultipleCandidates = Record[Idx++];
3040 NamedDecl *FoundD = ReadDeclAs<NamedDecl>(F, Record, Idx);
3044 QualType T = readType(F, Record, Idx);
3047 Expr *Base = ReadSubExpr();
3048 ValueDecl *MemberD = ReadDeclAs<ValueDecl>(F, Record, Idx);
3051 bool IsArrow = Record[Idx++];
3055 TemplateKWLoc, MemberD, FoundDecl, MemberNameInfo,
3056 HasTemplateKWAndArgsInfo ? &ArgInfo :
nullptr, T,
3058 ReadDeclarationNameLoc(F, cast<MemberExpr>(S)->MemberDNLoc,
3060 if (HadMultipleCandidates)
3061 cast<MemberExpr>(
S)->setHadMultipleCandidates(
true);
3170 Record[ASTStmtReader::NumExprFields + 1]);
3191 llvm_unreachable(
"mismatching AST file");
3195 Record[ASTStmtReader::NumExprFields + 1]);
3218 Record[ASTStmtReader::NumStmtFields + 1]);
3278 CollapsedNum, Empty);
3325 CollapsedNum, Empty);
3333 CollapsedNum, Empty);
3407 CollapsedNum, Empty);
3442 CollapsedNum, Empty);
3458 CollapsedNum, Empty);
3475 CollapsedNum, Empty);
3483 CollapsedNum, Empty);
3601 Record[ASTStmtReader::NumExprFields]
3602 ? Record[ASTStmtReader::NumExprFields + 1]
3609 Record[ASTStmtReader::NumExprFields]
3610 ? Record[ASTStmtReader::NumExprFields + 1]
3622 Record[ASTStmtReader::NumExprFields]
3623 ? Record[ASTStmtReader::NumExprFields + 1]
3630 Record[ASTStmtReader::NumExprFields]
3631 ? Record[ASTStmtReader::NumExprFields + 1]
3718 ++NumStatementsRead;
3720 if (S && !IsStmtReference) {
3722 StmtEntries[Cursor.GetCurrentBitNo()] =
S;
3726 assert(Idx == Record.size() &&
"Invalid deserialization of statement");
3727 StmtStack.push_back(S);
3730 assert(StmtStack.size() > PrevNumStmts &&
"Read too many sub-stmts!");
3731 assert(StmtStack.size() == PrevNumStmts + 1 &&
"Extra expressions on stack!");
3732 return StmtStack.pop_back_val();
void setPreInits(Stmt *PreInits)
A CXXConstCastExpr record.
static AttributedStmt * CreateEmpty(const ASTContext &C, unsigned NumAttrs)
ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.
A call to an overloaded operator written using operator syntax.
ObjCIndirectCopyRestoreExpr - Represents the passing of a function argument by indirect copy-restore ...
The receiver is the instance of the superclass object.
Represents a single C99 designator.
void setConditionVariable(const ASTContext &C, VarDecl *V)
static OMPDependClause * CreateEmpty(const ASTContext &C, unsigned N)
Creates an empty clause with N variables.
void setValueDependent(bool VD)
Set whether this expression is value-dependent or not.
Defines the clang::ASTContext interface.
void setRParenLoc(SourceLocation L)
A CompoundLiteralExpr record.
This represents '#pragma omp distribute simd' composite directive.
This represents '#pragma omp master' directive.
DesignatorTypes
The kinds of designators that can occur in a DesignatedInitExpr.
SourceLocation getEnd() const
void setRangeStmt(Stmt *S)
The null pointer literal (C++11 [lex.nullptr])
This represents '#pragma omp task' directive.
void setEnsureUpperBound(Expr *EUB)
This represents a GCC inline-assembly statement extension.
unsigned arg_size() const
Retrieve the number of arguments.
void setSubStmt(CompoundStmt *S)
unsigned getNumOutputs() const
This represents 'thread_limit' clause in the '#pragma omp ...' directive.
A UserDefinedLiteral record.
The receiver is an object instance.
static OMPMasterDirective * CreateEmpty(const ASTContext &C, EmptyShell)
Creates an empty directive.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
static OMPCopyinClause * CreateEmpty(const ASTContext &C, unsigned N)
Creates an empty clause with N variables.
An IndirectGotoStmt record.
This represents clause 'copyin' in the '#pragma omp ...' directives.
A (possibly-)qualified type.
capture_init_iterator capture_init_begin()
Retrieve the first initialization argument.
void setOperatorLoc(SourceLocation L)
static StringLiteral * CreateEmpty(const ASTContext &C, unsigned NumStrs)
Construct an empty string literal.
void setStmts(const ASTContext &C, ArrayRef< Stmt * > Stmts)
void setRawSemantics(APFloatSemantics Sem)
Set the raw enumeration value representing the floating-point semantics of this literal (32-bit IEEE...
void setNRVOCandidate(const VarDecl *Var)
void setLocation(SourceLocation L)
A CXXStaticCastExpr record.
A type trait used in the implementation of various C++11 and Library TR1 trait templates.
An AttributedStmt record.
IdentifierInfo * getIdentifier() const
getIdentifier - Get the identifier that names this declaration, if there is one.
A CXXReinterpretCastExpr record.
An ObjCBoolLiteralExpr record.
static OMPTaskwaitDirective * CreateEmpty(const ASTContext &C, EmptyShell)
Creates an empty directive.
static OMPTargetParallelDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
void setHasCancel(bool Has)
Set cancel state.
Represents a 'co_return' statement in the C++ Coroutines TS.
void setLastIteration(Expr *LI)
IfStmt - This represents an if/then/else.
Class that handles pre-initialization statement for some clauses, like 'shedule', 'firstprivate' etc...
This represents '#pragma omp for simd' directive.
void setRParenLoc(SourceLocation L)
void setContinueLoc(SourceLocation L)
void setThrowExpr(Stmt *S)
void setAtLoc(SourceLocation L)
An ImplicitValueInitExpr record.
static OMPFirstprivateClause * CreateEmpty(const ASTContext &C, unsigned N)
Creates an empty clause with the place for N variables.
void setDeclGroup(DeclGroupRef DGR)
This represents 'grainsize' clause in the '#pragma omp ...' directive.
An ImplicitCastExpr record.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
void setRBracket(SourceLocation RB)
LambdaCaptureDefault
The default, if any, capture method for a lambda expression.
A reference to a name which we were able to look up during parsing but could not resolve to a specifi...
This represents 'if' clause in the '#pragma omp ...' directive.
Defines the C++ template declaration subclasses.
ASTStmtReader(ASTReader &Reader, ModuleFile &F, llvm::BitstreamCursor &Cursor, const ASTReader::RecordData &Record, unsigned &Idx)
Represents an attribute applied to a statement.
void setUpperBoundVariable(Expr *UB)
void setComputationResultType(QualType T)
void setNumIterations(Expr *NI)
static OMPMapClause * CreateEmpty(const ASTContext &C, unsigned NumVars, unsigned NumUniqueDeclarations, unsigned NumComponentLists, unsigned NumComponents)
Creates an empty clause with the place for for NumVars original expressions, NumUniqueDeclarations de...
ParenExpr - This represents a parethesized expression, e.g.
A CXXOperatorCallExpr record.
pack_iterator pack_begin() const
Iterator referencing the first argument of a template argument pack.
void setSuper(SourceLocation Loc, QualType T, bool IsInstanceSuper)
This represents 'priority' clause in the '#pragma omp ...' directive.
A CXXTemporaryObjectExpr record.
Represents Objective-C's @throw statement.
uint32_t DeclID
An ID number that refers to a declaration in an AST file.
static OMPUseDevicePtrClause * CreateEmpty(const ASTContext &C, unsigned N)
Creates an empty clause with the place for N variables.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
void setNextLowerBound(Expr *NLB)
Represents a call to a C++ constructor.
ObjCSubscriptRefExpr - used for array and dictionary subscripting.
An Embarcadero array type trait, as used in the implementation of __array_rank and __array_extent...
AccessSpecifier
A C++ access specifier (public, private, protected), plus the special value "none" which means differ...
A container of type source information.
This represents 'update' clause in the '#pragma omp atomic' directive.
void setSwitchCaseList(SwitchCase *SC)
Set the case list for this switch statement.
void setComponents(ArrayRef< MappableComponent > Components, ArrayRef< unsigned > CLSs)
Set the components that are in the trailing objects of the class.
void setInstanceReceiver(Expr *rec)
Turn this message send into an instance message that computes the receiver object with the given expr...
This represents '#pragma omp parallel for' directive.
MS property subscript expression.
void setStartLoc(SourceLocation L)
void setForLoc(SourceLocation L)
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
void setLocation(SourceLocation Loc)
static ObjCDictionaryLiteral * CreateEmpty(const ASTContext &C, unsigned NumElements, bool HasPackExpansions)
void setConditionVariable(const ASTContext &C, VarDecl *V)
Represents a prvalue temporary that is written into memory so that a reference can bind to it...
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
void setLocation(SourceLocation L)
void setDelegateInitCall(bool isDelegate)
void setProtocol(ObjCProtocolDecl *P)
void setRParenLoc(SourceLocation L)
static OMPReductionClause * CreateEmpty(const ASTContext &C, unsigned N)
Creates an empty clause with the place for N variables.
void setIsLastIterVariable(Expr *IL)
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
This represents '#pragma omp target exit data' directive.
void setRAngleLoc(SourceLocation Loc)
static OffsetOfExpr * CreateEmpty(const ASTContext &C, unsigned NumComps, unsigned NumExprs)
This represents 'read' clause in the '#pragma omp atomic' directive.
VarDecl - An instance of this class is created to represent a variable declaration or definition...
This represents clause 'private' in the '#pragma omp ...' directives.
static OMPParallelDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for N clauses.
ObjCIsaExpr - Represent X->isa and X.isa when X is an ObjC 'id' type.
This represents 'num_threads' clause in the '#pragma omp ...' directive.
CompoundLiteralExpr - [C99 6.5.2.5].
void setSubExpr(unsigned Idx, Expr *E)
void setFPContractable(bool FPC)
void setInitializer(Expr *E)
void setLength(Expr *E)
Set length of the array section.
void setOpLoc(SourceLocation L)
This represents 'defaultmap' clause in the '#pragma omp ...' directive.
static FunctionParmPackExpr * CreateEmpty(const ASTContext &Context, unsigned NumParams)
void setAsmLoc(SourceLocation L)
static DependentScopeDeclRefExpr * CreateEmpty(const ASTContext &C, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
ObjCMethodDecl - Represents an instance or class method declaration.
void setValue(unsigned Val)
A ConditionOperator record.
Represents an explicit template argument list in C++, e.g., the "<int>" in "sort<int>".
Implicit construction of a std::initializer_list<T> object from an array temporary within list-initia...
static DeclRefExpr * CreateEmpty(const ASTContext &Context, bool HasQualifier, bool HasFoundDecl, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
Construct an empty declaration reference expression.
void setGNUSyntax(bool GNU)
This represents implicit clause 'flush' for the '#pragma omp flush' directive.
A CXXConstructExpr record.
void setBeginStmt(Stmt *S)
void setBase(Expr *E)
Set base of the array section.
ReceiverKind
The kind of receiver this message is sending to.
raw_arg_iterator raw_arg_begin()
void initializeResults(const ASTContext &C, UnresolvedSetIterator Begin, UnresolvedSetIterator End)
A C++ throw-expression (C++ [except.throw]).
Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...
ParmVarDecl - Represents a parameter to a function.
unsigned path_size() const
This represents 'nogroup' clause in the '#pragma omp ...' directive.
A ShuffleVectorExpr record.
This represents 'safelen' clause in the '#pragma omp ...' directive.
A C++ static_cast expression (C++ [expr.static.cast]).
OpenMPDirectiveKind getDirectiveKind() const
LabelStmt - Represents a label, which has a substatement.
void AllocateArgsArray(const ASTContext &C, bool isArray, unsigned numPlaceArgs, bool hasInitializer)
static OMPTargetExitDataDirective * CreateEmpty(const ASTContext &C, unsigned N, EmptyShell)
Creates an empty directive with the place for N clauses.
void setStrTokenLoc(unsigned TokNum, SourceLocation L)
void setAtLoc(SourceLocation L)
Represents a C99 designated initializer expression.
void setFinals(ArrayRef< Expr * > A)
One of these records is kept for each identifier that is lexed.
unsigned getTotalComponentListNum() const
Return the number of lists derived from the clause expressions.
An ObjCAtThrowStmt record.
static OMPTargetDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
A DesignatedInitExpr record.
This represents '#pragma omp parallel' directive.
unsigned getNumInputs() const
ShuffleVectorExpr - clang-specific builtin-in function __builtin_shufflevector.
class LLVM_ALIGNAS(8) DependentTemplateSpecializationType const IdentifierInfo * Name
Represents a template specialization type whose template cannot be resolved, e.g. ...
void setExprOperand(Expr *E)
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
A C++ nested-name-specifier augmented with source location information.
This represents 'simd' clause in the '#pragma omp ...' directive.
static OMPTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
Internal struct for storing Key/value pair.
unsigned getNumAssocs() const
An ObjCProtocolExpr record.
An ObjCSelectorExpr record.
static OMPTargetParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
static ObjCMessageExpr * CreateEmpty(const ASTContext &Context, unsigned NumArgs, unsigned NumStoredSelLocs)
Create an empty Objective-C message expression, to be filled in by subsequent calls.
FieldDecl - An instance of this class is created by Sema::ActOnField to represent a member of a struc...
This represents clause 'lastprivate' in the '#pragma omp ...' directives.
void setIsMicrosoftABI(bool IsMS)
Represents a place-holder for an object not to be initialized by anything.
void setNumArgs(const ASTContext &C, unsigned NumArgs)
setNumArgs - This changes the number of arguments present in this call.
void setRequiresZeroInitialization(bool ZeroInit)
static OMPFlushDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
GNUNullExpr - Implements the GNU __null extension, which is a name for a null pointer constant that h...
This represents clause 'map' in the '#pragma omp ...' directives.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
void setArg(unsigned I, Expr *E)
void setArg(unsigned Arg, Expr *ArgExpr)
setArg - Set the specified argument.
This represents clause 'to' in the '#pragma omp ...' directives.
void setColonLoc(SourceLocation Loc)
Sets the location of ':'.
Token - This structure provides full information about a lexed token.
void setRParen(SourceLocation Loc)
void setCapturedDecl(CapturedDecl *D)
Set the outlined function declaration.
void setReturnLoc(SourceLocation L)
Represents a C++ member access expression for which lookup produced a set of overloaded functions...
void setPreInitStmt(Stmt *S)
Set pre-initialization statement for the clause.
ExtVectorElementExpr - This represents access to specific elements of a vector, and may occur on the ...
void VisitOMPClauseWithPostUpdate(OMPClauseWithPostUpdate *C)
This represents '#pragma omp barrier' directive.
void setComponent(unsigned Idx, OffsetOfNode ON)
ObjCArrayLiteral - used for objective-c array containers; as in: @["Hello", NSApp, [NSNumber numberWithInt:42]];.
This is a common base class for loop directives ('omp simd', 'omp for', 'omp for simd' etc...
Represents a reference to a non-type template parameter pack that has been substituted with a non-tem...
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
This represents '#pragma omp critical' directive.
static OMPCriticalDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
void setRParenLoc(SourceLocation L)
unsigned getTotalComponentsNum() const
Return the total number of components in all lists derived from the clause.
Represents Objective-C's @catch statement.
void setLBraceLoc(SourceLocation Loc)
This represents clause 'copyprivate' in the '#pragma omp ...' directives.
static OMPTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
IndirectGotoStmt - This represents an indirect goto.
Describes an C or C++ initializer list.
A C++ typeid expression (C++ [expr.typeid]), which gets the type_info that corresponds to the supplie...
This represents '#pragma omp distribute parallel for' composite directive.
void setValue(const ASTContext &C, const llvm::APInt &Val)
void setBuiltinLoc(SourceLocation L)
ForStmt - This represents a 'for (init;cond;inc)' stmt.
void setOperatorNew(FunctionDecl *D)
static DeclAccessPair make(NamedDecl *D, AccessSpecifier AS)
void setLocation(SourceLocation L)
static OMPIsDevicePtrClause * CreateEmpty(const ASTContext &C, unsigned N)
Creates an empty clause with the place for N variables.
void setCounters(ArrayRef< Expr * > A)
static OMPDistributeSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
void setSynchBody(Stmt *S)
A convenient class for passing around template argument information.
void setSelector(Selector S)
A reference to a previously [de]serialized Stmt record.
void setEndLoc(SourceLocation L)
capture_init_iterator capture_init_begin()
Retrieve the first initialization argument for this lambda expression (which initializes the first ca...
path_iterator path_begin()
void setLocation(SourceLocation L)
A builtin binary operation expression such as "x + y" or "x <= y".
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
bool isValueDependent() const
isValueDependent - Determines whether this expression is value-dependent (C++ [temp.dep.constexpr]).
static CXXTryStmt * Create(const ASTContext &C, SourceLocation tryLoc, Stmt *tryBlock, ArrayRef< Stmt * > handlers)
void setAccessor(IdentifierInfo *II)
static OMPToClause * CreateEmpty(const ASTContext &C, unsigned NumVars, unsigned NumUniqueDeclarations, unsigned NumComponentLists, unsigned NumComponents)
Creates an empty clause with the place for NumVars variables.
CXXForRangeStmt - This represents C++0x [stmt.ranged]'s ranged for statement, represented as 'for (ra...
Class that handles post-update expression for some clauses, like 'lastprivate', 'reduction' etc...
static const unsigned NumStmtFields
The number of record fields required for the Stmt class itself.
This represents '#pragma omp cancellation point' directive.
void setString(StringLiteral *S)
void setAsmString(StringLiteral *E)
This represents 'default' clause in the '#pragma omp ...' directive.
ObjCStringLiteral, used for Objective-C string literals i.e.
TypoExpr - Internal placeholder for expressions where typo correction still needs to be performed and...
This represents 'final' clause in the '#pragma omp ...' directive.
This represents 'mergeable' clause in the '#pragma omp ...' directive.
void setListInitialization(bool V)
This represents '#pragma omp teams' directive.
void setOperatorLoc(SourceLocation L)
CastExpr - Base class for type casts, including both implicit casts (ImplicitCastExpr) and explicit c...
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
This represents clause 'reduction' in the '#pragma omp ...' directives.
Helper class for OffsetOfExpr.
A marker record that indicates that we are at the end of an expression.
static OMPTargetParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
Represents binding an expression to a temporary.
void setDestroyedType(IdentifierInfo *II, SourceLocation Loc)
Set the name of destroyed type for a dependent pseudo-destructor expression.
ArrayTypeTrait
Names for the array type traits.
bool isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a worksharing directive.
A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...
static OMPTaskyieldDirective * CreateEmpty(const ASTContext &C, EmptyShell)
Creates an empty directive.
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'.
void ReadTemplateKWAndArgsInfo(ASTTemplateKWAndArgsInfo &Args, TemplateArgumentLoc *ArgsLocArray, unsigned NumTemplateArgs)
Read and initialize a ExplicitTemplateArgumentList structure.
Represents a C++ member access expression where the actual member referenced could not be resolved be...
This represents clause 'is_device_ptr' in the '#pragma omp ...' directives.
void setRParenLoc(SourceLocation Loc)
detail::InMemoryDirectory::const_iterator I
void setRParenLoc(SourceLocation R)
A default argument (C++ [dcl.fct.default]).
void setStmt(LabelStmt *T)
void setSourceRange(SourceRange R)
void setRParenLoc(SourceLocation L)
This represents clause 'from' in the '#pragma omp ...' directives.
Represents the this expression in C++.
void setCastKind(CastKind K)
static OMPTargetDataDirective * CreateEmpty(const ASTContext &C, unsigned N, EmptyShell)
Creates an empty directive with the place for N clauses.
void setEqualOrColonLoc(SourceLocation L)
This represents '#pragma omp target parallel for simd' directive.
void setArgument(Expr *E)
OpenMP 4.0 [2.4, Array Sections].
void setTypeSourceInfo(TypeSourceInfo *tsi)
ConditionalOperator - The ?: ternary operator.
static LambdaExpr * CreateDeserialized(const ASTContext &C, unsigned NumCaptures, unsigned NumArrayIndexVars)
Construct a new lambda expression that will be deserialized from an external source.
Represents a C++ pseudo-destructor (C++ [expr.pseudo]).
void setAmpAmpLoc(SourceLocation L)
static OMPTaskgroupDirective * CreateEmpty(const ASTContext &C, EmptyShell)
Creates an empty directive.
void setBreakLoc(SourceLocation L)
ASTTemplateKWAndArgsInfo * getTrailingASTTemplateKWAndArgsInfo()
Return the optional template keyword and arguments info.
CompoundStmt - This represents a group of statements like { stmt stmt }.
void setBlockDecl(BlockDecl *BD)
This represents 'threads' clause in the '#pragma omp ...' directive.
This represents '#pragma omp taskgroup' directive.
unsigned getNumArgs() const
Determine the number of arguments to this type trait.
static OMPSingleDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
unsigned getNumObjects() const
CastKind
CastKind - The kind of operation required for a conversion.
void setSemiLoc(SourceLocation L)
This represents clause 'aligned' in the '#pragma omp ...' directives.
static OMPAlignedClause * CreateEmpty(const ASTContext &C, unsigned NumVars)
Creates an empty clause with the place for NumVars variables.
UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand...
void setLocEnd(SourceLocation Loc)
Sets the ending location of the clause.
void setLParen(SourceLocation Loc)
Represents a call to the builtin function __builtin_va_arg.
static OMPTeamsDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
void setLeaveLoc(SourceLocation L)
This represents '#pragma omp distribute' directive.
This represents implicit clause 'depend' for the '#pragma omp task' directive.
void setString(const ASTContext &C, StringRef Str, StringKind Kind, bool IsPascal)
Sets the string data to the given string data.
void setOperatorDelete(FunctionDecl *D)
void setRParenLoc(SourceLocation L)
An expression "T()" which creates a value-initialized rvalue of type T, which is a non-class type...
void setLocation(SourceLocation Location)
void setRParenLoc(SourceLocation Loc)
BlockDecl - This represents a block literal declaration, which is like an unnamed FunctionDecl...
This represents 'proc_bind' clause in the '#pragma omp ...' directive.
static OMPSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents 'capture' clause in the '#pragma omp atomic' directive.
ValueDecl - Represent the declaration of a variable (in which case it is an lvalue) a function (in wh...
Expr - This represents one expression.
void setDesignators(const ASTContext &C, const Designator *Desigs, unsigned NumDesigs)
void setRBraceLoc(SourceLocation Loc)
void setWhileLoc(SourceLocation L)
ExprValueKind
The categorization of expression values, currently following the C++11 scheme.
void setRParenLoc(SourceLocation L)
This represents 'simdlen' clause in the '#pragma omp ...' directive.
void setLParenLoc(SourceLocation L)
Stmt * ReadStmt(ModuleFile &F)
Reads a statement.
void setSyntacticForm(InitListExpr *Init)
Represents a C++ functional cast expression that builds a temporary object.
void setRBracketLoc(SourceLocation L)
A C++ const_cast expression (C++ [expr.const.cast]).
unsigned getNumExpressions() const
void setTypeDependent(bool TD)
Set whether this expression is type-dependent or not.
void setTypeOperandSourceInfo(TypeSourceInfo *TSI)
BlockExpr - Adaptor class for mixing a BlockDecl with expressions.
Field designator where only the field name is known.
static OMPDistributeParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
An ObjCSubscriptRefExpr record.
raw_arg_iterator raw_arg_end()
static CXXReinterpretCastExpr * CreateEmpty(const ASTContext &Context, unsigned pathSize)
void setUuidStr(StringRef US)
void setWrittenTypeInfo(TypeSourceInfo *TI)
void setRetValue(Expr *E)
ObjCDictionaryLiteral - AST node to represent objective-c dictionary literals; as in:"name" : NSUserN...
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
void setObjectKind(ExprObjectKind Cat)
setObjectKind - Set the object kind produced by this expression.
Represents Objective-C's @synchronized statement.
ObjCSelectorExpr used for @selector in Objective-C.
A CXXStdInitializerListExpr record.
void setFinallyBody(Stmt *S)
Represents an expression that computes the length of a parameter pack.
CXXTryStmt - A C++ try block, including all handlers.
AsTypeExpr - Clang builtin function __builtin_astype [OpenCL 6.2.4.2] This AST node provides support ...
An ArraySubscriptExpr record.
static FloatingLiteral * Create(const ASTContext &C, const llvm::APFloat &V, bool isexact, QualType Type, SourceLocation L)
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
Information about a module that has been loaded by the ASTReader.
void setDeclNumLists(ArrayRef< unsigned > DNLs)
Set the number of lists per declaration that are in the trailing objects of the class.
This represents 'ordered' clause in the '#pragma omp ...' directive.
static OMPFlushClause * CreateEmpty(const ASTContext &C, unsigned N)
Creates an empty clause with N variables.
A PseudoObjectExpr record.
void setColonLoc(SourceLocation L)
unsigned getNumElements() const
getNumElements - Return number of elements of objective-c array literal.
void setFinallyStmt(Stmt *S)
unsigned getNumSubExprs() const
An ObjCIndirectCopyRestoreExpr record.
This represents '#pragma omp for' directive.
static OMPTargetEnterDataDirective * CreateEmpty(const ASTContext &C, unsigned N, EmptyShell)
Creates an empty directive with the place for N clauses.
void setValueKind(ExprValueKind Cat)
setValueKind - Set the value kind produced by this expression.
static OMPLinearClause * CreateEmpty(const ASTContext &C, unsigned NumVars)
Creates an empty clause with the place for NumVars variables.
void setRParenLoc(SourceLocation L)
Represents a folding of a pack over an operator.
ReturnStmt - This represents a return, optionally of an expression: return; return 4;...
void setAssociatedStmt(Stmt *S)
Set the associated statement for the directive.
static OMPDistributeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
An expression that sends a message to the given Objective-C object or class.
unsigned getNumComponents() const
This represents a Microsoft inline-assembly statement extension.
void setColonLoc(SourceLocation L)
void setPrivateCopies(ArrayRef< Expr * > PrivateCopies)
Set list of helper expressions, required for generation of private copies of original lastprivate var...
void setRParenLoc(SourceLocation L)
A DesignatedInitUpdateExpr record.
void setAtLoc(SourceLocation L)
UnaryOperator - This represents the unary-expression's (except sizeof and alignof), the postinc/postdec operators from postfix-expression, and various extensions.
bool isOpenMPTaskLoopDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a taskloop directive.
A member reference to an MSPropertyDecl.
DeclarationName getDeclName() const
getDeclName - Get the actual, stored name of the declaration, which may be a special name...
static OMPParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
Represents a reference to a non-type template parameter that has been substituted with a template arg...
static OMPPrivateClause * CreateEmpty(const ASTContext &C, unsigned N)
Creates an empty clause with the place for N variables.
void setForLoc(SourceLocation Loc)
This represents '#pragma omp cancel' directive.
This represents 'collapse' clause in the '#pragma omp ...' directive.
This represents clause 'firstprivate' in the '#pragma omp ...' directives.
An ObjCAvailabilityCheckExpr record.
void setRParenLoc(SourceLocation L)
unsigned getNumClauses() const
Get number of clauses.
CStyleCastExpr - An explicit cast in C (C99 6.5.4) or a C-style cast in C++ (C++ [expr.cast]), which uses the syntax (Type)expr.
static OMPDistributeParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
An ObjCPropertyRefExpr record.
ImaginaryLiteral - We support imaginary integer and floating point literals, like "1...
An ObjCForCollectionStmt record.
This represents '#pragma omp flush' directive.
unsigned getNumSubExprs() const
Retrieve the total number of subexpressions in this designated initializer expression, including the actual initialized value and any expressions that occur within array and array-range designators.
This represents '#pragma omp parallel for simd' directive.
void setRParenLoc(SourceLocation L)
void setAtTryLoc(SourceLocation Loc)
DoStmt - This represents a 'do/while' stmt.
AsmStmt is the base class for GCCAsmStmt and MSAsmStmt.
This represents 'seq_cst' clause in the '#pragma omp atomic' directive.
This represents 'untied' clause in the '#pragma omp ...' directive.
void setTypeOperandSourceInfo(TypeSourceInfo *TSI)
A MS-style AsmStmt record.
void setLocStart(SourceLocation Loc)
Set starting location of directive kind.
static OMPParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
void setSynchExpr(Stmt *S)
const llvm::fltSemantics & getSemantics() const
Return the APFloat semantics this literal uses.
This represents '#pragma omp target enter data' directive.
void setPostUpdateExpr(Expr *S)
Set pre-initialization statement for the clause.
void setLowerBoundVariable(Expr *LB)
void setLParenLoc(SourceLocation L)
void setUniqueDecls(ArrayRef< ValueDecl * > UDs)
Set the unique declarations that are in the trailing objects of the class.
This represents 'num_teams' clause in the '#pragma omp ...' directive.
void setTypeSourceInfo(TypeSourceInfo *tinfo)
A C++ dynamic_cast expression (C++ [expr.dynamic.cast]).
OpaqueValueExpr - An expression referring to an opaque object of a fixed type and value class...
void setComputationLHSType(QualType T)
ConvertVectorExpr - Clang builtin function __builtin_convertvector This AST node provides support for...
static OMPSectionDirective * CreateEmpty(const ASTContext &C, EmptyShell)
Creates an empty directive.
void setDecl(LabelDecl *D)
A reference to an overloaded function set, either an UnresolvedLookupExpr or an UnresolvedMemberExpr...
A field in a dependent type, known only by its name.
This captures a statement into a function.
Represents a call to an inherited base class constructor from an inheriting constructor.
PseudoObjectExpr - An expression which accesses a pseudo-object l-value.
void setLParenLoc(SourceLocation L)
OMPClauseReader(ASTStmtReader *R, ASTContext &C, const ASTReader::RecordData &Record, unsigned &Idx)
void setAccessorLoc(SourceLocation L)
void setGotoLoc(SourceLocation L)
static CXXDynamicCastExpr * CreateEmpty(const ASTContext &Context, unsigned pathSize)
void setHadMultipleCandidates(bool V)
void setLocation(SourceLocation L)
This represents '#pragma omp single' directive.
Encodes a location in the source.
void setLocation(SourceLocation L)
void setPrevLowerBoundVariable(Expr *PrevLB)
void setIterationVariable(Expr *IV)
This represents 'hint' clause in the '#pragma omp ...' directive.
void setUpdater(Expr *Updater)
static OMPTaskDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This is a basic class for representing single OpenMP executable directive.
static CXXDependentScopeMemberExpr * CreateEmpty(const ASTContext &C, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
static OMPTargetUpdateDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
void setDoLoc(SourceLocation L)
static CXXConstCastExpr * CreateEmpty(const ASTContext &Context)
Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)"...
void setAtCatchLoc(SourceLocation Loc)
void setVarRefs(ArrayRef< Expr * > VL)
Sets the list of variables for this clause.
A call to a literal operator (C++11 [over.literal]) written as a user-defined literal (C++11 [lit...
void setSourceRange(SourceRange R)
This represents 'schedule' clause in the '#pragma omp ...' directive.
static ObjCAtTryStmt * CreateEmpty(const ASTContext &Context, unsigned NumCatchStmts, bool HasFinally)
void setConstexpr(bool C)
Represents a call to a member function that may be written either with member call syntax (e...
unsigned getCollapsedNumber() const
Get number of collapsed loops.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
void setIdentLoc(SourceLocation L)
DeclStmt - Adaptor class for mixing declarations with statements and expressions. ...
LabelDecl - Represents the declaration of a label.
This represents clause 'shared' in the '#pragma omp ...' directives.
void setLabelLoc(SourceLocation L)
ExprObjectKind
A further classification of the kind of object referenced by an l-value or x-value.
A CXXFunctionalCastExpr record.
void setTemporary(CXXTemporary *T)
A FloatingLiteral record.
static ExprWithCleanups * Create(const ASTContext &C, EmptyShell empty, unsigned numObjects)
void setAllEnumCasesCovered()
Set a flag in the SwitchStmt indicating that if the 'switch (X)' is a switch over an enum value then ...
StmtVisitor - This class implements a simple visitor for Stmt subclasses.
void setClassReceiver(TypeSourceInfo *TSInfo)
void setCatchParamDecl(VarDecl *D)
An ObjCEncodeExpr record.
static OMPAtomicDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
This represents '#pragma omp taskwait' directive.
An ImaginaryLiteral record.
void setConfig(CallExpr *E)
Sets the kernel configuration expression.
void setConditionVariable(const ASTContext &C, VarDecl *V)
This is a basic class for representing single OpenMP clause.
void setIsFreeIvar(bool A)
AtomicExpr - Variadic atomic builtins: __atomic_exchange, __atomic_fetch_*, __atomic_load, __atomic_store, and __atomic_compare_exchange_*, for the similarly-named C++11 instructions, and __c11 variants for <stdatomic.h>.
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...
static OMPOrderedDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
bool isOpenMPLoopBoundSharingDirective(OpenMPDirectiveKind Kind)
Checks if the specified directive kind is one of the composite or combined directives that need loop ...
void addDecl(NamedDecl *D)
ObjCProtocolExpr used for protocol expression in Objective-C.
void setDecl(ValueDecl *NewD)
void setThrowLoc(SourceLocation Loc)
ImplicitCastExpr - Allows us to explicitly represent implicit type conversions, which have no direct ...
Stmt * getCapturedStmt()
Retrieve the statement being captured.
This represents '#pragma omp target' directive.
SourceLocation getBegin() const
void setClauses(ArrayRef< OMPClause * > Clauses)
Sets the list of variables for this clause.
static DesignatedInitExpr * CreateEmpty(const ASTContext &C, unsigned NumIndexExprs)
static DeclGroup * Create(ASTContext &C, Decl **Decls, unsigned NumDecls)
void setBaseExpr(Stmt *S)
An expression trait intrinsic.
void setEncodedTypeSourceInfo(TypeSourceInfo *EncType)
This represents '#pragma omp ordered' directive.
StmtExpr - This is the GNU Statement Expression extension: ({int X=4; X;}).
static SizeOfPackExpr * CreateDeserialized(ASTContext &Context, unsigned NumPartialArgs)
This represents '#pragma omp target update' directive.
ObjCBoxedExpr - used for generalized expression boxing.
void VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C)
void setLAngleLoc(SourceLocation Loc)
void sawArrayRangeDesignator(bool ARD=true)
void addArgument(const TemplateArgumentLoc &Loc)
void setCapturedRecordDecl(RecordDecl *D)
Set the record declaration for captured variables.
Representation of a Microsoft __if_exists or __if_not_exists statement with a dependent name...
static MemberExpr * Create(const ASTContext &C, Expr *base, bool isarrow, SourceLocation OperatorLoc, NestedNameSpecifierLoc QualifierLoc, SourceLocation TemplateKWLoc, ValueDecl *memberdecl, DeclAccessPair founddecl, DeclarationNameInfo MemberNameInfo, const TemplateArgumentListInfo *targs, QualType ty, ExprValueKind VK, ExprObjectKind OK)
void setPrivateCounters(ArrayRef< Expr * > A)
A qualified reference to a name whose declaration cannot yet be resolved.
void setRBracketLoc(SourceLocation L)
CompoundAssignOperator - For compound assignments (e.g.
bool isPartiallySubstituted() const
Determine whether this represents a partially-substituted sizeof...
Expr ** getElements()
Retrieve elements of array of literals.
A POD class for pairing a NamedDecl* with an access specifier.
DeclarationNameLoc - Additional source/type location info for a declaration name. ...
Represents a C11 generic selection.
AddrLabelExpr - The GNU address of label extension, representing &&label.
An Objective-C "bridged" cast expression, which casts between Objective-C pointers and C pointers...
Represents a reference to a function parameter pack that has been substituted but not yet expanded...
Represents a template argument.
void setGotoLoc(SourceLocation L)
void setPrevUpperBoundVariable(Expr *PrevUB)
static OMPForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
void setLocation(SourceLocation L)
NullStmt - This is the null statement ";": C99 6.8.3p3.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
void setExtendingDecl(const ValueDecl *ExtendedBy, unsigned ManglingNumber)
This represents 'device' clause in the '#pragma omp ...' directive.
An IntegerLiteral record.
void setExprs(const ASTContext &C, ArrayRef< Expr * > Exprs)
void setBuiltinLoc(SourceLocation L)
[C99 6.4.2.2] - A predefined identifier such as func.
A CXXBoolLiteralExpr record.
Represents a delete expression for memory deallocation and destructor calls, e.g. ...
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
OverloadedOperatorKind
Enumeration specifying the different kinds of C++ overloaded operators.
void setRParenLoc(SourceLocation L)
static CapturedStmt * CreateDeserialized(const ASTContext &Context, unsigned NumCaptures)
An ExtVectorElementExpr record.
void setLabel(LabelDecl *L)
void setTypeInfoAsWritten(TypeSourceInfo *writtenTy)
This represents '#pragma omp section' directive.
void setAtLoc(SourceLocation L)
Reads an AST files chain containing the contents of a translation unit.
Expr * ReadExpr(ModuleFile &F)
Reads an expression.
void setCollection(Expr *E)
An ObjCIvarRefExpr record.
void setDecl(ObjCIvarDecl *d)
void setFileScope(bool FS)
A runtime availability query.
A C++ reinterpret_cast expression (C++ [expr.reinterpret.cast]).
This represents '#pragma omp simd' directive.
void setConstructionKind(ConstructionKind CK)
Represents a 'co_yield' expression.
An ObjCAutoreleasePoolStmt record.
DeclarationName - The name of a declaration.
unsigned getNumHandlers() const
A CharacterLiteral record.
void setCounterValue(Expr *V)
Set the loop counter value for the depend clauses with 'sink|source' kind of dependency.
Represents a C++11 pack expansion that produces a sequence of expressions.
unsigned getUniqueDeclarationsNum() const
Return the number of unique base declarations in this clause.
An ObjCStringLiteral record.
A CXXDynamicCastExpr record.
This represents clause 'linear' in the '#pragma omp ...' directives.
void setInstantiationDependent(bool ID)
Set whether this expression is instantiation-dependent or not.
void setEllipsisLoc(SourceLocation L)
A CXXForRangeStmt record.
Kind
The kind of offsetof node we have.
bool isTypeOperand() const
detail::InMemoryDirectory::const_iterator E
for(auto typeArg:T->getTypeArgsAsWritten())
unsigned getNumArgs() const
getNumArgs - Return the number of actual arguments to this call.
void setLParenLoc(SourceLocation L)
void setSelector(Selector S)
ExplicitCastExpr - An explicit cast written in the source code.
DeclarationNameInfo - A collector data type for bundling together a DeclarationName and the correspnd...
unsigned getNumArgs() const
unsigned getNumConcatenated() const
getNumConcatenated - Get the number of string literal tokens that were concatenated in translation ph...
void setMethodDecl(ObjCMethodDecl *MD)
This represents '#pragma omp atomic' directive.
void setLocStart(SourceLocation Loc)
Sets the starting location of the clause.
static PseudoObjectExpr * Create(const ASTContext &Context, Expr *syntactic, ArrayRef< Expr * > semantic, unsigned resultIndex)
static OMPSharedClause * CreateEmpty(const ASTContext &C, unsigned N)
Creates an empty clause with N variables.
An ObjCAtFinallyStmt record.
Represents a __leave statement.
void setRBracketLoc(SourceLocation L)
void setComponentListSizes(ArrayRef< unsigned > CLSs)
Set the cumulative component lists sizes that are in the trailing objects of the class.
Represents a C++11 noexcept expression (C++ [expr.unary.noexcept]).
bool hasQualifier() const
Determine whether this declaration reference was preceded by a C++ nested-name-specifier, e.g., N::foo.
SwitchStmt - This represents a 'switch' stmt.
static OMPForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
Represents the body of a coroutine.
TemplateArgumentLoc * getTrailingTemplateArgumentLoc()
Return the optional template arguments.
Location wrapper for a TemplateArgument.
void setConditionVariable(const ASTContext &C, VarDecl *V)
bool isOpenMPDistributeDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a distribute directive.
static const unsigned NumExprFields
The number of record fields required for the Expr class itself.
void setCatchStmt(unsigned I, ObjCAtCatchStmt *S)
Set a particular catch statement.
ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.
static OMPBarrierDirective * CreateEmpty(const ASTContext &C, EmptyShell)
Creates an empty directive.
Represents Objective-C's collection statement.
An ObjCAtSynchronizedStmt record.
void setIndexExpr(unsigned Idx, Expr *E)
ObjCEncodeExpr, used for @encode in Objective-C.
static OMPCopyprivateClause * CreateEmpty(const ASTContext &C, unsigned N)
Creates an empty clause with N variables.
void setLowerBound(Expr *E)
Set lower bound of the array section.
An implicit indirection through a C++ base class, when the field found is in a base class...
static UnresolvedMemberExpr * CreateEmpty(const ASTContext &C, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
A SizefAlignOfExpr record.
Represents a call to a CUDA kernel function.
Represents a 'co_await' expression.
static ImplicitCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize)
void setSwitchLoc(SourceLocation L)
A CXXMemberCallExpr record.
void setAtFinallyLoc(SourceLocation Loc)
void setArg(unsigned Arg, Expr *ArgExpr)
Set the specified argument.
void setKind(UnaryExprOrTypeTrait K)
void setRParenLoc(SourceLocation L)
void setOperatorLoc(SourceLocation L)
void setValue(const ASTContext &C, const llvm::APFloat &Val)
Represents Objective-C's @finally statement.
void setCatchBody(Stmt *S)
static CXXFunctionalCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize)
void setLParenLoc(SourceLocation L)
unsigned getNumArgs() const
Return the number of actual arguments in this message, not counting the receiver. ...
The template argument is actually a parameter pack.
void setFPContractable(bool FPC)
Represents a base class of a C++ class.
This represents 'write' clause in the '#pragma omp atomic' directive.
void setRParenLoc(SourceLocation L)
unsigned getNumCatchStmts() const
Retrieve the number of @catch statements in this try-catch-finally block.
ObjCIvarRefExpr - A reference to an ObjC instance variable.
void setAtSynchronizedLoc(SourceLocation Loc)
void setOperatorLoc(SourceLocation L)
void setLocation(SourceLocation Location)
A ConvertVectorExpr record.
void setStarLoc(SourceLocation L)
bool hasAssociatedStmt() const
Returns true if directive has associated statement.
void setLParenLoc(SourceLocation L)
Describes an explicit type conversion that uses functional notion but could not be resolved because o...
GotoStmt - This represents a direct goto.
A use of a default initializer in a constructor or in aggregate initialization.
static CStyleCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize)
void setLocation(SourceLocation L)
static UnresolvedLookupExpr * CreateEmpty(const ASTContext &C, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
CapturedDecl * getCapturedDecl()
Retrieve the outlined function declaration.
void setBuiltinLoc(SourceLocation L)
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate.h) and friends (in DeclFriend.h).
MemberExpr - [C99 6.5.2.3] Structure and Union Members.
GNU array range designator.
A GCC-style AsmStmt record.
This represents '#pragma omp target parallel' directive.
This represents 'nowait' clause in the '#pragma omp ...' directive.
void setStrideVariable(Expr *ST)
ContinueStmt - This represents a continue.
static CXXStaticCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize)
This represents 'num_tasks' clause in the '#pragma omp ...' directive.
ChooseExpr - GNU builtin-in function __builtin_choose_expr.
static OMPParallelSectionsDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
void setElseLoc(SourceLocation L)
BinaryConditionalOperator - The GNU extension to the conditional operator which allows the middle ope...
CXXCatchStmt - This represents a C++ catch block.
static CXXUnresolvedConstructExpr * CreateEmpty(const ASTContext &C, unsigned NumArgs)
Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr.type.conv]).
void setUpdates(ArrayRef< Expr * > A)
An ObjCAtCatchStmt record.
static TypeTraitExpr * CreateDeserialized(const ASTContext &C, unsigned NumArgs)
Expr * ReadSubExpr()
Reads a sub-expression operand during statement reading.
WhileStmt - This represents a 'while' stmt.
void setIfLoc(SourceLocation L)
Field designator where the field has been resolved to a declaration.
void setIsaMemberLoc(SourceLocation L)
A CXXInheritedCtorInitExpr record.
unsigned kind
All of the diagnostics that can be emitted by the frontend.
void setExprOperand(Expr *E)
Represents Objective-C's @try ... @catch ... @finally statement.
This represents '#pragma omp taskloop simd' directive.
bool hasTemplateKWAndArgsInfo() const
void setTokenLocation(SourceLocation L)
static OMPSectionsDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
StringLiteral - This represents a string literal expression, e.g.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
void setOpLoc(SourceLocation L)
void setLoopVarStmt(Stmt *S)
Internal struct to describes an element that is a pack expansion, used if any of the elements in the ...
void setPreCond(Expr *PC)
This represents 'dist_schedule' clause in the '#pragma omp ...' directive.
void setRParenLoc(SourceLocation L)
void reserveInits(const ASTContext &C, unsigned NumInits)
Reserve space for some number of initializers.
static OMPCancelDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
An ObjCMessageExpr record.
static OMPFromClause * CreateEmpty(const ASTContext &C, unsigned NumVars, unsigned NumUniqueDeclarations, unsigned NumComponentLists, unsigned NumComponents)
Creates an empty clause with the place for NumVars variables.
Abstract class common to all of the C++ "named"/"keyword" casts.
This represents '#pragma omp sections' directive.
void setNextSwitchCase(SwitchCase *SC)
ObjCBoolLiteralExpr - Objective-C Boolean Literal.
A CompoundAssignOperator record.
This represents '#pragma omp target data' directive.
void setNextUpperBound(Expr *NUB)
capture_init_iterator capture_init_end()
Retrieve the iterator pointing one past the last initialization argument for this lambda expression...
void setKind(CharacterKind kind)
A reference to a declared variable, function, enum, etc.
Designator - A designator in a C99 designated initializer.
void setLabel(LabelDecl *D)
BreakStmt - This represents a break.
void setSubStmt(Stmt *SS)
static ObjCArrayLiteral * CreateEmpty(const ASTContext &C, unsigned NumElements)
unsigned getNumClobbers() const
A trivial tuple used to represent a source range.
This represents '#pragma omp taskyield' directive.
NamedDecl - This represents a decl with a name.
This represents '#pragma omp distribute parallel for simd' composite directive.
A boolean literal, per ([C++ lex.bool] Boolean literals).
OffsetOfExpr - [C99 7.17] - This represents an expression of the form offsetof(record-type, member-designator).
This represents '#pragma omp parallel sections' directive.
A Microsoft C++ __uuidof expression, which gets the _GUID that corresponds to the supplied type or ex...
void setCalcLastIteration(Expr *CLI)
void setStdInitListInitialization(bool V)
bool isTypeOperand() const
The receiver is a superclass.
static OMPLastprivateClause * CreateEmpty(const ASTContext &C, unsigned N)
Creates an empty clause with the place for N variables.
capture_init_iterator capture_init_end()
Retrieve the iterator pointing one past the last initialization argument.
void setLParenLoc(SourceLocation Loc)
Sets the location of '('.
ReceiverKind getReceiverKind() const
Determine the kind of receiver that this message is being sent to.
Represents Objective-C's @autoreleasepool Statement.
void setWhileLoc(SourceLocation L)
unsigned varlist_size() const
StmtCode
Record codes for each kind of statement or expression.
void setLocEnd(SourceLocation Loc)
Set ending location of directive.
void setArg(unsigned Arg, Expr *ArgExpr)
setArg - Set the specified argument.
Represents an implicitly-generated value initialization of an object of a given type.
void setInits(ArrayRef< Expr * > A)
void setKeywordLoc(SourceLocation L)
unsigned getNumElements() const
getNumElements - Return number of elements of objective-c dictionary literal.
void setCapturedRegionKind(CapturedRegionKind Kind)
Set the captured region kind.
A GenericSelectionExpr record.
This represents '#pragma omp target parallel for' directive.
This represents clause 'use_device_ptr' in the '#pragma omp ...' directives.
static OMPCancellationPointDirective * CreateEmpty(const ASTContext &C, EmptyShell)
Creates an empty directive.
void setLabelLoc(SourceLocation L)
#define BLOCK(DERIVED, BASE)
void setAtLoc(SourceLocation Loc)
void setIsConditionTrue(bool isTrue)
This represents '#pragma omp taskloop' directive.