52#include "llvm/ADT/DenseMap.h" 
   53#include "llvm/ADT/SmallVector.h" 
   54#include "llvm/ADT/StringRef.h" 
   55#include "llvm/Bitstream/BitstreamReader.h" 
   56#include "llvm/Support/ErrorHandling.h" 
   70    llvm::BitstreamCursor &DeclsCursor;
 
   72    std::optional<BitsUnpacker> CurrentUnpackingBits;
 
   75      return Record.readSourceLocation();
 
   79      return Record.readSourceRange();
 
   82    std::string readString() {
 
   83      return Record.readString();
 
   87      return Record.readTypeSourceInfo();
 
   91      return Record.readDecl();
 
   96      return Record.readDeclAs<
T>();
 
  101        : Record(Record), DeclsCursor(Cursor) {}
 
 
  117                                   unsigned NumTemplateArgs);
 
  120#define STMT(Type, Base) \ 
  121    void Visit##Type(Type *); 
 
  122#include "clang/AST/StmtNodes.inc" 
 
  129                                              unsigned NumTemplateArgs) {
 
  134  for (
unsigned i = 0; i != NumTemplateArgs; ++i)
 
  135    ArgInfo.
addArgument(Record.readTemplateArgumentLoc());
 
 
  140  assert(Record.getIdx() == 
NumStmtFields && 
"Incorrect statement field count");
 
 
  143void ASTStmtReader::VisitNullStmt(
NullStmt *S) {
 
  152  unsigned NumStmts = 
Record.readInt();
 
  153  unsigned HasFPFeatures = 
Record.readInt();
 
  156    Stmts.push_back(
Record.readSubStmt());
 
  159    S->setStoredFPFeatures(
 
  161  S->LBraceLoc = readSourceLocation();
 
  162  S->RBraceLoc = readSourceLocation();
 
  165void ASTStmtReader::VisitSwitchCase(
SwitchCase *S) {
 
  167  Record.recordSwitchCaseID(S, Record.readInt());
 
  172void ASTStmtReader::VisitCaseStmt(
CaseStmt *S) {
 
  174  bool CaseStmtIsGNURange = Record.readInt();
 
  175  S->
setLHS(Record.readSubExpr());
 
  177  if (CaseStmtIsGNURange) {
 
  178    S->
setRHS(Record.readSubExpr());
 
  183void ASTStmtReader::VisitDefaultStmt(
DefaultStmt *S) {
 
  188void ASTStmtReader::VisitLabelStmt(
LabelStmt *S) {
 
  190  bool IsSideEntry = Record.readInt();
 
  191  auto *LD = readDeclAs<LabelDecl>();
 
  204  uint64_t NumAttrs = Record.readInt();
 
  206  Record.readAttributes(Attrs);
 
  209  assert(NumAttrs == Attrs.size());
 
  210  std::copy(Attrs.begin(), Attrs.end(), S->getAttrArrayPtr());
 
  211  S->SubStmt = Record.readSubStmt();
 
  215void ASTStmtReader::VisitIfStmt(
IfStmt *S) {
 
  218  CurrentUnpackingBits.emplace(Record.readInt());
 
  220  bool HasElse = CurrentUnpackingBits->getNextBit();
 
  221  bool HasVar = CurrentUnpackingBits->getNextBit();
 
  222  bool HasInit = CurrentUnpackingBits->getNextBit();
 
  225  S->
setCond(Record.readSubExpr());
 
  226  S->
setThen(Record.readSubStmt());
 
  228    S->
setElse(Record.readSubStmt());
 
  232    S->
setInit(Record.readSubStmt());
 
  241void ASTStmtReader::VisitSwitchStmt(
SwitchStmt *S) {
 
  244  bool HasInit = Record.readInt();
 
  245  bool HasVar = Record.readInt();
 
  246  bool AllEnumCasesCovered = Record.readInt();
 
  247  if (AllEnumCasesCovered)
 
  250  S->
setCond(Record.readSubExpr());
 
  251  S->
setBody(Record.readSubStmt());
 
  253    S->
setInit(Record.readSubStmt());
 
  261  SwitchCase *PrevSC = 
nullptr;
 
  262  for (
auto E = Record.size(); Record.getIdx() != E; ) {
 
  263    SwitchCase *SC = Record.getSwitchCaseWithID(Record.readInt());
 
  273void ASTStmtReader::VisitWhileStmt(
WhileStmt *S) {
 
  276  bool HasVar = Record.readInt();
 
  278  S->
setCond(Record.readSubExpr());
 
  279  S->
setBody(Record.readSubStmt());
 
  288void ASTStmtReader::VisitDoStmt(
DoStmt *S) {
 
  290  S->
setCond(Record.readSubExpr());
 
  291  S->
setBody(Record.readSubStmt());
 
  297void ASTStmtReader::VisitForStmt(
ForStmt *S) {
 
  299  S->
setInit(Record.readSubStmt());
 
  300  S->
setCond(Record.readSubExpr());
 
  302  S->
setInc(Record.readSubExpr());
 
  303  S->
setBody(Record.readSubStmt());
 
  309void ASTStmtReader::VisitGotoStmt(
GotoStmt *S) {
 
  311  S->
setLabel(readDeclAs<LabelDecl>());
 
  326  if (Record.readBool()) {
 
  333  VisitLoopControlStmt(S);
 
  336void ASTStmtReader::VisitBreakStmt(
BreakStmt *S) { VisitLoopControlStmt(S); }
 
  338void ASTStmtReader::VisitReturnStmt(
ReturnStmt *S) {
 
  341  bool HasNRVOCandidate = Record.readInt();
 
  344  if (HasNRVOCandidate)
 
  350void ASTStmtReader::VisitDeclStmt(
DeclStmt *S) {
 
  355  if (Record.size() - Record.getIdx() == 1) {
 
  359    SmallVector<Decl *, 16> Decls;
 
  360    int N = Record.size() - Record.getIdx();
 
  362    for (
int I = 0; I < N; ++I)
 
  363      Decls.push_back(readDecl());
 
  370void ASTStmtReader::VisitAsmStmt(
AsmStmt *S) {
 
  380void ASTStmtReader::VisitGCCAsmStmt(
GCCAsmStmt *S) {
 
  382  S->NumLabels = Record.readInt();
 
  392  SmallVector<IdentifierInfo *, 16> Names;
 
  393  SmallVector<Expr *, 16> Constraints;
 
  394  SmallVector<Stmt*, 16> Exprs;
 
  395  for (
unsigned I = 0, N = NumOutputs + NumInputs; I != N; ++I) {
 
  396    Names.push_back(Record.readIdentifier());
 
  397    Constraints.push_back(cast_or_null<Expr>(Record.readSubStmt()));
 
  398    Exprs.push_back(Record.readSubStmt());
 
  402  SmallVector<Expr *, 16> Clobbers;
 
  403  for (
unsigned I = 0; I != NumClobbers; ++I)
 
  404    Clobbers.push_back(cast_or_null<Expr>(Record.readSubStmt()));
 
  407  for (
unsigned I = 0, N = NumLabels; I != N; ++I) {
 
  408    Names.push_back(Record.readIdentifier());
 
  409    Exprs.push_back(Record.readSubStmt());
 
  412  S->setOutputsAndInputsAndClobbers(Record.getContext(),
 
  413                                    Names.data(), Constraints.data(),
 
  414                                    Exprs.data(), NumOutputs, NumInputs,
 
  416                                    Clobbers.data(), NumClobbers);
 
  419void ASTStmtReader::VisitMSAsmStmt(
MSAsmStmt *S) {
 
  421  S->LBraceLoc = readSourceLocation();
 
  422  S->EndLoc = readSourceLocation();
 
  423  S->NumAsmToks = Record.readInt();
 
  424  std::string AsmStr = readString();
 
  427  SmallVector<Token, 16> AsmToks;
 
  428  AsmToks.reserve(S->NumAsmToks);
 
  429  for (
unsigned i = 0, e = S->NumAsmToks; i != e; ++i) {
 
  430    AsmToks.push_back(Record.readToken());
 
  437  SmallVector<std::string, 16> ClobbersData;
 
  438  SmallVector<StringRef, 16> Clobbers;
 
  441  for (
unsigned i = 0, e = S->
NumClobbers; i != e; ++i) {
 
  442    ClobbersData.push_back(readString());
 
  443    Clobbers.push_back(ClobbersData.back());
 
  448  SmallVector<Expr*, 16> Exprs;
 
  449  SmallVector<std::string, 16> ConstraintsData;
 
  450  SmallVector<StringRef, 16> Constraints;
 
  451  Exprs.reserve(NumOperands);
 
  452  ConstraintsData.reserve(NumOperands);
 
  453  Constraints.reserve(NumOperands);
 
  454  for (
unsigned i = 0; i != NumOperands; ++i) {
 
  455    Exprs.push_back(
cast<Expr>(Record.readSubStmt()));
 
  456    ConstraintsData.push_back(readString());
 
  457    Constraints.push_back(ConstraintsData.back());
 
  460  S->initialize(Record.getContext(), AsmStr, AsmToks,
 
  461                Constraints, Exprs, Clobbers);
 
  466  assert(Record.peekInt() == S->NumParams);
 
  468  auto *StoredStmts = S->getStoredStmts();
 
  470       i < CoroutineBodyStmt::SubStmt::FirstParamMove + S->NumParams; ++i)
 
  471    StoredStmts[i] = Record.readSubStmt();
 
  476  S->CoreturnLoc = Record.readSourceLocation();
 
  477  for (
auto &SubStmt: S->SubStmts)
 
  478    SubStmt = Record.readSubStmt();
 
  479  S->IsImplicit = Record.readInt() != 0;
 
  482void ASTStmtReader::VisitCoawaitExpr(
CoawaitExpr *E) {
 
  484  E->KeywordLoc = readSourceLocation();
 
  485  for (
auto &SubExpr: E->SubExprs)
 
  486    SubExpr = Record.readSubStmt();
 
  487  E->OpaqueValue = cast_or_null<OpaqueValueExpr>(Record.readSubStmt());
 
  491void ASTStmtReader::VisitCoyieldExpr(
CoyieldExpr *E) {
 
  493  E->KeywordLoc = readSourceLocation();
 
  494  for (
auto &SubExpr: E->SubExprs)
 
  495    SubExpr = Record.readSubStmt();
 
  496  E->OpaqueValue = cast_or_null<OpaqueValueExpr>(Record.readSubStmt());
 
  501  E->KeywordLoc = readSourceLocation();
 
  502  for (
auto &SubExpr: E->SubExprs)
 
  503    SubExpr = Record.readSubStmt();
 
  517    *I = Record.readSubExpr();
 
  520  S->setCapturedStmt(Record.readSubStmt());
 
  525    I.VarAndKind.setPointer(readDeclAs<VarDecl>());
 
  528    I.Loc = readSourceLocation();
 
  538void ASTStmtReader::VisitExpr(
Expr *E) {
 
  540  CurrentUnpackingBits.emplace(Record.readInt());
 
  542      CurrentUnpackingBits->getNextBits(5)));
 
  544      CurrentUnpackingBits->getNextBits(2)));
 
  546      CurrentUnpackingBits->getNextBits(3)));
 
  550         "Incorrect expression field count");
 
  565  switch (StorageKind) {
 
  570    E->Int64Result() = Record.readInt();
 
  574    E->APValueResult() = Record.readAPValue();
 
  577      Record.getContext().addDestruction(&E->APValueResult());
 
  587  E->setAsteriskLocation(readSourceLocation());
 
  593  E->setLocation(readSourceLocation());
 
  594  E->setLParenLocation(readSourceLocation());
 
  595  E->setRParenLocation(readSourceLocation());
 
  597  E->setTypeSourceInfo(Record.readTypeSourceInfo());
 
  602  bool HasFunctionName = Record.readInt();
 
  611void ASTStmtReader::VisitDeclRefExpr(
DeclRefExpr *E) {
 
  614  CurrentUnpackingBits.emplace(Record.readInt());
 
  615  E->
DeclRefExprBits.HadMultipleCandidates = CurrentUnpackingBits->getNextBit();
 
  617      CurrentUnpackingBits->getNextBit();
 
  619      CurrentUnpackingBits->getNextBits(2);
 
  620  E->
DeclRefExprBits.IsImmediateEscalating = CurrentUnpackingBits->getNextBit();
 
  624      CurrentUnpackingBits->getNextBit();
 
  625  E->
DeclRefExprBits.CapturedByCopyInLambdaWithExplicitObjectParameter = 
false;
 
  626  unsigned NumTemplateArgs = 0;
 
  628    NumTemplateArgs = Record.readInt();
 
  631    new (E->getTrailingObjects<NestedNameSpecifierLoc>())
 
  632        NestedNameSpecifierLoc(Record.readNestedNameSpecifierLoc());
 
  634  if (E->hasFoundDecl())
 
  635    *E->getTrailingObjects<NamedDecl *>() = readDeclAs<NamedDecl>();
 
  639        *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(),
 
  640        E->getTrailingObjects<TemplateArgumentLoc>(), NumTemplateArgs);
 
  642  E->D = readDeclAs<ValueDecl>();
 
  650  E->
setValue(Record.getContext(), Record.readAPInt());
 
  657  E->
setValue(Record.getContext(), Record.readAPInt());
 
  663      static_cast<llvm::APFloatBase::Semantics
>(Record.readInt()));
 
  679  unsigned NumConcatenated = Record.readInt();
 
  680  unsigned Length = Record.readInt();
 
  681  unsigned CharByteWidth = Record.readInt();
 
  683         "Wrong number of concatenated tokens!");
 
  684  assert((Length == E->
getLength()) && 
"Wrong Length!");
 
  685  assert((CharByteWidth == E->
getCharByteWidth()) && 
"Wrong character width!");
 
  692  assert((CharByteWidth ==
 
  693          StringLiteral::mapCharByteWidth(Record.getContext().getTargetInfo(),
 
  695         "Wrong character width!");
 
  698  for (
unsigned I = 0; I < NumConcatenated; ++I)
 
  699    E->setStrTokenLoc(I, readSourceLocation());
 
  702  char *StrData = E->getStrDataAsChar();
 
  703  for (
unsigned I = 0; I < Length * CharByteWidth; ++I)
 
  704    StrData[I] = Record.readInt();
 
  714void ASTStmtReader::VisitParenExpr(
ParenExpr *E) {
 
  724  unsigned NumExprs = Record.readInt();
 
  725  assert((NumExprs == E->
getNumExprs()) && 
"Wrong NumExprs!");
 
  726  for (
unsigned I = 0; I != NumExprs; ++I)
 
  727    E->getTrailingObjects()[I] = Record.readSubStmt();
 
  728  E->LParenLoc = readSourceLocation();
 
  729  E->RParenLoc = readSourceLocation();
 
  734  bool hasFP_Features = CurrentUnpackingBits->getNextBit();
 
  757    SourceLocation Start = readSourceLocation();
 
  758    SourceLocation End = readSourceLocation();
 
  761      E->
setComponent(I, OffsetOfNode(Start, Record.readInt(), End));
 
  766          I, OffsetOfNode(Start, readDeclAs<FieldDecl>(), End));
 
  772          OffsetOfNode(Start, Record.readIdentifier(), End));
 
  776      auto *
Base = 
new (Record.getContext()) CXXBaseSpecifier();
 
  777      *
Base = Record.readCXXBaseSpecifier();
 
  791  if (Record.peekInt() == 0) {
 
  808    unsigned NumDetailRecords = 
Record.readInt();
 
  809    for (
unsigned i = 0; i != NumDetailRecords; ++i) {
 
  810      auto Kind = 
Record.readInt();
 
  813        StringRef DiagMessage = 
C.backupStr(
Record.readString());
 
  815        Satisfaction.
Details.emplace_back(
new (
 
  817      } 
else if (Kind == 1) {
 
  821        Satisfaction.
Details.emplace_back(
Record.readConceptReference());
 
 
  828void ASTStmtReader::VisitConceptSpecializationExpr(
 
  831  E->SpecDecl = Record.readDeclAs<ImplicitConceptSpecializationDecl>();
 
  832  if (Record.readBool())
 
  833    E->ConceptRef = Record.readConceptReference();
 
  842  StringRef SubstitutedEntity = 
C.backupStr(
Record.readString());
 
  844  StringRef DiagMessage = 
C.backupStr(
Record.readString());
 
  846  return new (
Record.getContext())
 
 
  853  unsigned NumLocalParameters = Record.readInt();
 
  854  unsigned NumRequirements = Record.readInt();
 
  857  E->Body = Record.readDeclAs<RequiresExprBodyDecl>();
 
  858  llvm::SmallVector<ParmVarDecl *, 4> LocalParameters;
 
  859  for (
unsigned i = 0; i < NumLocalParameters; ++i)
 
  861  std::copy(LocalParameters.begin(), LocalParameters.end(),
 
  862            E->getTrailingObjects<ParmVarDecl *>());
 
  863  llvm::SmallVector<concepts::Requirement *, 4> Requirements;
 
  864  for (
unsigned i = 0; i < NumRequirements; ++i) {
 
  867    concepts::Requirement *R = 
nullptr;
 
  874          R = 
new (Record.getContext())
 
  877          R = 
new (Record.getContext())
 
  878              concepts::TypeRequirement(Record.readTypeSourceInfo());
 
  885        llvm::PointerUnion<concepts::Requirement::SubstitutionDiagnostic *,
 
  890          E = Record.readExpr();
 
  892        std::optional<concepts::ExprRequirement::ReturnTypeRequirement> Req;
 
  893        ConceptSpecializationExpr *SubstitutedConstraintExpr = 
nullptr;
 
  894        SourceLocation NoexceptLoc;
 
  898          NoexceptLoc = Record.readSourceLocation();
 
  899          switch (Record.readInt()) {
 
  906              TemplateParameterList *TPL = Record.readTemplateParameterList();
 
  909                SubstitutedConstraintExpr =
 
  919        if (Expr *Ex = E.dyn_cast<Expr *>())
 
  920          R = 
new (Record.getContext()) concepts::ExprRequirement(
 
  922                  std::move(*Req), Status, SubstitutedConstraintExpr);
 
  924          R = 
new (Record.getContext()) concepts::ExprRequirement(
 
  930        ASTContext &
C = Record.getContext();
 
  931        bool HasInvalidConstraint = Record.readInt();
 
  932        if (HasInvalidConstraint) {
 
  933          StringRef InvalidConstraint = 
C.backupStr(Record.readString());
 
  934          R = 
new (
C) concepts::NestedRequirement(
 
  935              Record.getContext(), InvalidConstraint,
 
  939        Expr *E = Record.readExpr();
 
  941          R = 
new (
C) concepts::NestedRequirement(E);
 
  943          R = 
new (
C) concepts::NestedRequirement(
 
  949    Requirements.push_back(R);
 
  951  std::copy(Requirements.begin(), Requirements.end(),
 
  952            E->getTrailingObjects<concepts::Requirement *>());
 
  953  E->LParenLoc = Record.readSourceLocation();
 
  954  E->RParenLoc = Record.readSourceLocation();
 
  955  E->RBraceLoc = Record.readSourceLocation();
 
  960  E->
setLHS(Record.readSubExpr());
 
  961  E->
setRHS(Record.readSubExpr());
 
  967  E->
setBase(Record.readSubExpr());
 
  977  E->setBase(Record.readSubExpr());
 
  978  E->setLowerBound(Record.readSubExpr());
 
  979  E->setLength(Record.readSubExpr());
 
  982    E->setStride(Record.readSubExpr());
 
  984  E->setColonLocFirst(readSourceLocation());
 
  987    E->setColonLocSecond(readSourceLocation());
 
  989  E->setRBracketLoc(readSourceLocation());
 
  994  unsigned NumDims = Record.readInt();
 
  995  E->setBase(Record.readSubExpr());
 
  996  SmallVector<Expr *, 4> Dims(NumDims);
 
  997  for (
unsigned I = 0; I < NumDims; ++I)
 
  998    Dims[I] = Record.readSubExpr();
 
  999  E->setDimensions(Dims);
 
 1000  SmallVector<SourceRange, 4> SRs(NumDims);
 
 1001  for (
unsigned I = 0; I < NumDims; ++I)
 
 1002    SRs[I] = readSourceRange();
 
 1003  E->setBracketsRanges(SRs);
 
 1010  unsigned NumIters = Record.readInt();
 
 1014  for (
unsigned I = 0; I < NumIters; ++I) {
 
 1015    E->setIteratorDeclaration(I, Record.readDeclRef());
 
 1016    E->setAssignmentLoc(I, readSourceLocation());
 
 1017    Expr *Begin = Record.readSubExpr();
 
 1018    Expr *End = Record.readSubExpr();
 
 1019    Expr *Step = Record.readSubExpr();
 
 1020    SourceLocation ColonLoc = readSourceLocation();
 
 1021    SourceLocation SecColonLoc;
 
 1023      SecColonLoc = readSourceLocation();
 
 1024    E->setIteratorRange(I, Begin, ColonLoc, End, SecColonLoc, Step);
 
 1026    OMPIteratorHelperData HD;
 
 1027    HD.
CounterVD = cast_or_null<VarDecl>(Record.readDeclRef());
 
 1028    HD.
Upper = Record.readSubExpr();
 
 1029    HD.
Update = Record.readSubExpr();
 
 1031    E->setHelper(I, HD);
 
 1035void ASTStmtReader::VisitCallExpr(
CallExpr *E) {
 
 1038  unsigned NumArgs = Record.readInt();
 
 1039  CurrentUnpackingBits.emplace(Record.readInt());
 
 1042  bool HasFPFeatures = CurrentUnpackingBits->getNextBit();
 
 1045  assert((NumArgs == E->
getNumArgs()) && 
"Wrong NumArgs!");
 
 1048  for (
unsigned I = 0; I != NumArgs; ++I)
 
 1049    E->
setArg(I, Record.readSubExpr());
 
 1056    E->updateTrailingSourceLoc();
 
 1063void ASTStmtReader::VisitMemberExpr(
MemberExpr *E) {
 
 1066  CurrentUnpackingBits.emplace(Record.readInt());
 
 1067  bool HasQualifier = CurrentUnpackingBits->getNextBit();
 
 1068  bool HasFoundDecl = CurrentUnpackingBits->getNextBit();
 
 1069  bool HasTemplateInfo = CurrentUnpackingBits->getNextBit();
 
 1070  unsigned NumTemplateArgs = Record.readInt();
 
 1072  E->Base = Record.readSubExpr();
 
 1073  E->MemberDecl = Record.readDeclAs<ValueDecl>();
 
 1074  E->MemberDNLoc = Record.readDeclarationNameLoc(E->MemberDecl->
getDeclName());
 
 1075  E->MemberLoc = Record.readSourceLocation();
 
 1080  E->
MemberExprBits.HadMultipleCandidates = CurrentUnpackingBits->getNextBit();
 
 1082      CurrentUnpackingBits->getNextBits(2);
 
 1086    new (E->getTrailingObjects<NestedNameSpecifierLoc>())
 
 1087        NestedNameSpecifierLoc(Record.readNestedNameSpecifierLoc());
 
 1090    auto *FoundD = Record.readDeclAs<NamedDecl>();
 
 1095  if (HasTemplateInfo)
 
 1097        *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(),
 
 1098        E->getTrailingObjects<TemplateArgumentLoc>(), NumTemplateArgs);
 
 1101void ASTStmtReader::VisitObjCIsaExpr(
ObjCIsaExpr *E) {
 
 1103  E->
setBase(Record.readSubExpr());
 
 1112  E->Operand = Record.readSubExpr();
 
 1113  E->setShouldCopy(Record.readInt());
 
 1117  VisitExplicitCastExpr(E);
 
 1118  E->LParenLoc = readSourceLocation();
 
 1119  E->BridgeKeywordLoc = readSourceLocation();
 
 1120  E->Kind = Record.readInt();
 
 1123void ASTStmtReader::VisitCastExpr(
CastExpr *E) {
 
 1125  unsigned NumBaseSpecs = Record.readInt();
 
 1128  CurrentUnpackingBits.emplace(Record.readInt());
 
 1130  unsigned HasFPFeatures = CurrentUnpackingBits->getNextBit();
 
 1136  while (NumBaseSpecs--) {
 
 1137    auto *BaseSpec = 
new (Record.getContext()) CXXBaseSpecifier;
 
 1138    *BaseSpec = Record.readCXXBaseSpecifier();
 
 1139    *BaseI++ = BaseSpec;
 
 1148  CurrentUnpackingBits.emplace(Record.readInt());
 
 1151  bool hasFP_Features = CurrentUnpackingBits->getNextBit();
 
 1154  E->
setLHS(Record.readSubExpr());
 
 1155  E->
setRHS(Record.readSubExpr());
 
 1163  VisitBinaryOperator(E);
 
 1170  E->SubExprs[ConditionalOperator::COND] = Record.readSubExpr();
 
 1171  E->SubExprs[ConditionalOperator::LHS] = Record.readSubExpr();
 
 1172  E->SubExprs[ConditionalOperator::RHS] = Record.readSubExpr();
 
 1173  E->QuestionLoc = readSourceLocation();
 
 1174  E->ColonLoc = readSourceLocation();
 
 1181  E->SubExprs[BinaryConditionalOperator::COMMON] = Record.readSubExpr();
 
 1182  E->SubExprs[BinaryConditionalOperator::COND] = Record.readSubExpr();
 
 1183  E->SubExprs[BinaryConditionalOperator::LHS] = Record.readSubExpr();
 
 1184  E->SubExprs[BinaryConditionalOperator::RHS] = Record.readSubExpr();
 
 1185  E->QuestionLoc = readSourceLocation();
 
 1186  E->ColonLoc = readSourceLocation();
 
 1200  VisitExplicitCastExpr(E);
 
 1215  E->
setBase(Record.readSubExpr());
 
 1220void ASTStmtReader::VisitInitListExpr(
InitListExpr *E) {
 
 1222  if (
auto *SyntForm = cast_or_null<InitListExpr>(Record.readSubStmt()))
 
 1226  bool isArrayFiller = Record.readInt();
 
 1227  Expr *filler = 
nullptr;
 
 1228  if (isArrayFiller) {
 
 1229    filler = Record.readSubExpr();
 
 1230    E->ArrayFillerOrUnionFieldInit = filler;
 
 1232    E->ArrayFillerOrUnionFieldInit = readDeclAs<FieldDecl>();
 
 1234  unsigned NumInits = Record.readInt();
 
 1236  if (isArrayFiller) {
 
 1237    for (
unsigned I = 0; I != NumInits; ++I) {
 
 1238      Expr *init = Record.readSubExpr();
 
 1239      E->
updateInit(Record.getContext(), I, init ? init : filler);
 
 1242    for (
unsigned I = 0; I != NumInits; ++I)
 
 1243      E->
updateInit(Record.getContext(), I, Record.readSubExpr());
 
 1248  using Designator = DesignatedInitExpr::Designator;
 
 1251  unsigned NumSubExprs = Record.readInt();
 
 1252  assert(NumSubExprs == E->
getNumSubExprs() && 
"Wrong number of subexprs");
 
 1253  for (
unsigned I = 0; I != NumSubExprs; ++I)
 
 1258  SmallVector<Designator, 4> Designators;
 
 1259  while (Record.getIdx() < Record.size()) {
 
 1262      auto *
Field = readDeclAs<FieldDecl>();
 
 1263      SourceLocation DotLoc = readSourceLocation();
 
 1264      SourceLocation FieldLoc = readSourceLocation();
 
 1266          Field->getIdentifier(), DotLoc, FieldLoc));
 
 1267      Designators.back().setFieldDecl(Field);
 
 1272      const IdentifierInfo *Name = Record.readIdentifier();
 
 1273      SourceLocation DotLoc = readSourceLocation();
 
 1274      SourceLocation FieldLoc = readSourceLocation();
 
 1281      unsigned Index = Record.readInt();
 
 1282      SourceLocation LBracketLoc = readSourceLocation();
 
 1283      SourceLocation RBracketLoc = readSourceLocation();
 
 1291      unsigned Index = Record.readInt();
 
 1292      SourceLocation LBracketLoc = readSourceLocation();
 
 1293      SourceLocation EllipsisLoc = readSourceLocation();
 
 1294      SourceLocation RBracketLoc = readSourceLocation();
 
 1296          Index, LBracketLoc, EllipsisLoc, RBracketLoc));
 
 1302                    Designators.data(), Designators.size());
 
 1307  E->
setBase(Record.readSubExpr());
 
 1311void ASTStmtReader::VisitNoInitExpr(
NoInitExpr *E) {
 
 1317  E->SubExprs[0] = Record.readSubExpr();
 
 1318  E->SubExprs[1] = Record.readSubExpr();
 
 1329void ASTStmtReader::VisitVAArgExpr(
VAArgExpr *E) {
 
 1340  E->ParentContext = readDeclAs<DeclContext>();
 
 1341  E->BuiltinLoc = readSourceLocation();
 
 1342  E->RParenLoc = readSourceLocation();
 
 1346void ASTStmtReader::VisitEmbedExpr(
EmbedExpr *E) {
 
 1348  E->EmbedKeywordLoc = readSourceLocation();
 
 1349  EmbedDataStorage *
Data = 
new (Record.getContext()) EmbedDataStorage;
 
 1352  E->Begin = Record.readInt();
 
 1353  E->NumOfElements = Record.readInt();
 
 1360  E->
setLabel(readDeclAs<LabelDecl>());
 
 1363void ASTStmtReader::VisitStmtExpr(
StmtExpr *E) {
 
 1367  E->
setSubStmt(cast_or_null<CompoundStmt>(Record.readSubStmt()));
 
 1371void ASTStmtReader::VisitChooseExpr(
ChooseExpr *E) {
 
 1373  E->
setCond(Record.readSubExpr());
 
 1374  E->
setLHS(Record.readSubExpr());
 
 1375  E->
setRHS(Record.readSubExpr());
 
 1381void ASTStmtReader::VisitGNUNullExpr(
GNUNullExpr *E) {
 
 1388  SmallVector<Expr *, 16> Exprs;
 
 1389  unsigned NumExprs = Record.readInt();
 
 1391    Exprs.push_back(Record.readSubExpr());
 
 1392  E->
setExprs(Record.getContext(), Exprs);
 
 1399  bool HasFPFeatures = CurrentUnpackingBits->getNextBit();
 
 1401  E->BuiltinLoc = readSourceLocation();
 
 1402  E->RParenLoc = readSourceLocation();
 
 1403  E->TInfo = readTypeSourceInfo();
 
 1404  E->SrcExpr = Record.readSubExpr();
 
 1410void ASTStmtReader::VisitBlockExpr(
BlockExpr *E) {
 
 1418  unsigned NumAssocs = Record.readInt();
 
 1419  assert(NumAssocs == E->
getNumAssocs() && 
"Wrong NumAssocs!");
 
 1420  E->IsExprPredicate = Record.readInt();
 
 1421  E->ResultIndex = Record.readInt();
 
 1423  E->DefaultLoc = readSourceLocation();
 
 1424  E->RParenLoc = readSourceLocation();
 
 1426  Stmt **Stmts = E->getTrailingObjects<Stmt *>();
 
 1430  for (
unsigned I = 0, N = NumAssocs + 1; I < N; ++I)
 
 1431    Stmts[I] = Record.readSubExpr();
 
 1433  TypeSourceInfo **TSIs = E->getTrailingObjects<TypeSourceInfo *>();
 
 1434  for (
unsigned I = 0, N = NumAssocs; I < N; ++I)
 
 1435    TSIs[I] = readTypeSourceInfo();
 
 1440  unsigned numSemanticExprs = Record.readInt();
 
 1445  E->getTrailingObjects()[0] = Record.readSubExpr();
 
 1448  for (
unsigned i = 0; i != numSemanticExprs; ++i) {
 
 1449    Expr *subExpr = Record.readSubExpr();
 
 1450    E->getTrailingObjects()[i + 1] = subExpr;
 
 1454void ASTStmtReader::VisitAtomicExpr(
AtomicExpr *E) {
 
 1458  for (
unsigned I = 0; I != E->NumSubExprs; ++I)
 
 1459    E->SubExprs[I] = Record.readSubExpr();
 
 1460  E->BuiltinLoc = readSourceLocation();
 
 1461  E->RParenLoc = readSourceLocation();
 
 1476  E->SubExpr = Record.readSubStmt();
 
 1477  E->BoxingMethod = readDeclAs<ObjCMethodDecl>();
 
 1478  E->Range = readSourceRange();
 
 1483  unsigned NumElements = Record.readInt();
 
 1484  assert(NumElements == E->
getNumElements() && 
"Wrong number of elements");
 
 1486  for (
unsigned I = 0, N = NumElements; I != N; ++I)
 
 1487    Elements[I] = Record.readSubExpr();
 
 1488  E->ArrayWithObjectsMethod = readDeclAs<ObjCMethodDecl>();
 
 1489  E->Range = readSourceRange();
 
 1494  unsigned NumElements = Record.readInt();
 
 1495  assert(NumElements == E->
getNumElements() && 
"Wrong number of elements");
 
 1496  bool HasPackExpansions = Record.readInt();
 
 1497  assert(HasPackExpansions == E->HasPackExpansions &&
"Pack expansion mismatch");
 
 1499      E->getTrailingObjects<ObjCDictionaryLiteral::KeyValuePair>();
 
 1501      E->getTrailingObjects<ObjCDictionaryLiteral::ExpansionData>();
 
 1502  for (
unsigned I = 0; I != NumElements; ++I) {
 
 1503    KeyValues[I].Key = Record.readSubExpr();
 
 1504    KeyValues[I].Value = Record.readSubExpr();
 
 1505    if (HasPackExpansions) {
 
 1506      Expansions[I].EllipsisLoc = readSourceLocation();
 
 1507      Expansions[I].NumExpansionsPlusOne = Record.readInt();
 
 1510  E->DictWithObjectsMethod = readDeclAs<ObjCMethodDecl>();
 
 1511  E->Range = readSourceRange();
 
 1532  E->ProtoLoc = readSourceLocation();
 
 1538  E->
setDecl(readDeclAs<ObjCIvarDecl>());
 
 1541  E->
setBase(Record.readSubExpr());
 
 1548  unsigned MethodRefFlags = Record.readInt();
 
 1549  bool Implicit = Record.readInt() != 0;
 
 1551    auto *Getter = readDeclAs<ObjCMethodDecl>();
 
 1552    auto *Setter = readDeclAs<ObjCMethodDecl>();
 
 1553    E->setImplicitProperty(Getter, Setter, MethodRefFlags);
 
 1555    E->setExplicitProperty(readDeclAs<ObjCPropertyDecl>(), MethodRefFlags);
 
 1557  E->setLocation(readSourceLocation());
 
 1558  E->setReceiverLocation(readSourceLocation());
 
 1559  switch (Record.readInt()) {
 
 1561    E->setBase(Record.readSubExpr());
 
 1564    E->setSuperReceiver(Record.readType());
 
 1567    E->setClassReceiver(readDeclAs<ObjCInterfaceDecl>());
 
 1577  E->GetAtIndexMethodDecl = readDeclAs<ObjCMethodDecl>();
 
 1578  E->SetAtIndexMethodDecl = readDeclAs<ObjCMethodDecl>();
 
 1585  unsigned NumStoredSelLocs = Record.readInt();
 
 1586  E->SelLocsKind = Record.readInt();
 
 1588  E->IsImplicit = Record.readInt();
 
 1601    QualType 
T = Record.readType();
 
 1602    SourceLocation SuperLoc = readSourceLocation();
 
 1610  if (Record.readInt())
 
 1615  E->LBracLoc = readSourceLocation();
 
 1616  E->RBracLoc = readSourceLocation();
 
 1618  for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
 
 1619    E->
setArg(I, Record.readSubExpr());
 
 1621  SourceLocation *Locs = E->getStoredSelLocs();
 
 1622  for (
unsigned I = 0; I != NumStoredSelLocs; ++I)
 
 1623    Locs[I] = readSourceLocation();
 
 1630  S->
setBody(Record.readSubStmt());
 
 1659  bool HasFinally = Record.readInt();
 
 1662    S->
setCatchStmt(I, cast_or_null<ObjCAtCatchStmt>(Record.readSubStmt()));
 
 1690  SourceRange R = Record.readSourceRange();
 
 1693  E->VersionToCheck = Record.readVersionTuple();
 
 1700void ASTStmtReader::VisitCXXCatchStmt(
CXXCatchStmt *S) {
 
 1702  S->CatchLoc = readSourceLocation();
 
 1703  S->ExceptionDecl = readDeclAs<VarDecl>();
 
 1704  S->HandlerBlock = Record.readSubStmt();
 
 1707void ASTStmtReader::VisitCXXTryStmt(
CXXTryStmt *S) {
 
 1709  assert(Record.peekInt() == S->
getNumHandlers() && 
"NumStmtFields is wrong ?");
 
 1711  S->TryLoc = readSourceLocation();
 
 1712  S->getStmts()[0] = Record.readSubStmt();
 
 1714    S->getStmts()[i + 1] = Record.readSubStmt();
 
 1719  S->ForLoc = readSourceLocation();
 
 1720  S->CoawaitLoc = readSourceLocation();
 
 1721  S->ColonLoc = readSourceLocation();
 
 1722  S->RParenLoc = readSourceLocation();
 
 1723  S->
setInit(Record.readSubStmt());
 
 1727  S->
setCond(Record.readSubExpr());
 
 1728  S->
setInc(Record.readSubExpr());
 
 1730  S->
setBody(Record.readSubStmt());
 
 1735  S->KeywordLoc = readSourceLocation();
 
 1736  S->IsIfExists = Record.readInt();
 
 1737  S->QualifierLoc = Record.readNestedNameSpecifierLoc();
 
 1738  S->NameInfo = Record.readDeclarationNameInfo();
 
 1739  S->SubStmt = Record.readSubStmt();
 
 1745  E->BeginLoc = Record.readSourceLocation();
 
 1748void ASTStmtReader::VisitCXXRewrittenBinaryOperator(
 
 1752  E->SemanticForm = Record.readSubExpr();
 
 1758  unsigned NumArgs = Record.readInt();
 
 1759  assert((NumArgs == E->
getNumArgs()) && 
"Wrong NumArgs!");
 
 1769  E->Constructor = readDeclAs<CXXConstructorDecl>();
 
 1770  E->ParenOrBraceRange = readSourceRange();
 
 1772  for (
unsigned I = 0; I != NumArgs; ++I)
 
 1773    E->
setArg(I, Record.readSubExpr());
 
 1778  E->Constructor = readDeclAs<CXXConstructorDecl>();
 
 1779  E->Loc = readSourceLocation();
 
 1780  E->ConstructsVirtualBase = Record.readInt();
 
 1781  E->InheritedFromVirtualBase = Record.readInt();
 
 1785  VisitCXXConstructExpr(E);
 
 1786  E->TSI = readTypeSourceInfo();
 
 1789void ASTStmtReader::VisitLambdaExpr(
LambdaExpr *E) {
 
 1791  unsigned NumCaptures = Record.readInt();
 
 1794  E->IntroducerRange = readSourceRange();
 
 1796  E->CaptureDefaultLoc = readSourceLocation();
 
 1799  E->ClosingBrace = readSourceLocation();
 
 1805    *
C = Record.readSubExpr();
 
 1814  E->SubExpr = Record.readSubExpr();
 
 1818  VisitExplicitCastExpr(E);
 
 1819  SourceRange R = readSourceRange();
 
 1821  E->RParenLoc = R.
getEnd();
 
 1822  if (CurrentUnpackingBits->getNextBit())
 
 1823    E->AngleBrackets = readSourceRange();
 
 1827  return VisitCXXNamedCastExpr(E);
 
 1831  return VisitCXXNamedCastExpr(E);
 
 1835  return VisitCXXNamedCastExpr(E);
 
 1839  return VisitCXXNamedCastExpr(E);
 
 1843  return VisitCXXNamedCastExpr(E);
 
 1847  VisitExplicitCastExpr(E);
 
 1853  VisitExplicitCastExpr(E);
 
 1854  E->KWLoc = readSourceLocation();
 
 1855  E->RParenLoc = readSourceLocation();
 
 1860  E->UDSuffixLoc = readSourceLocation();
 
 1878    E->Operand = readTypeSourceInfo();
 
 1880    E->Operand = Record.readSubExpr();
 
 1883void ASTStmtReader::VisitCXXThisExpr(
CXXThisExpr *E) {
 
 1890void ASTStmtReader::VisitCXXThrowExpr(
CXXThrowExpr *E) {
 
 1893  E->Operand = Record.readSubExpr();
 
 1899  E->Param = readDeclAs<ParmVarDecl>();
 
 1900  E->UsedContext = readDeclAs<DeclContext>();
 
 1904    *E->getTrailingObjects() = Record.readSubExpr();
 
 1910  E->Field = readDeclAs<FieldDecl>();
 
 1911  E->UsedContext = readDeclAs<DeclContext>();
 
 1914    *E->getTrailingObjects() = Record.readSubExpr();
 
 1925  E->TypeInfo = readTypeSourceInfo();
 
 1929void ASTStmtReader::VisitCXXNewExpr(
CXXNewExpr *E) {
 
 1932  bool IsArray = Record.readInt();
 
 1933  bool HasInit = Record.readInt();
 
 1934  unsigned NumPlacementArgs = Record.readInt();
 
 1935  bool IsParenTypeId = Record.readInt();
 
 1944  assert((IsArray == E->
isArray()) && 
"Wrong IsArray!");
 
 1947         "Wrong NumPlacementArgs!");
 
 1948  assert((IsParenTypeId == E->
isParenTypeId()) && 
"Wrong IsParenTypeId!");
 
 1951  (void)NumPlacementArgs;
 
 1955  E->AllocatedTypeInfo = readTypeSourceInfo();
 
 1957    E->getTrailingObjects<SourceRange>()[0] = readSourceRange();
 
 1958  E->Range = readSourceRange();
 
 1959  E->DirectInitRange = readSourceRange();
 
 1965    *I = Record.readSubStmt();
 
 1974  E->OperatorDelete = readDeclAs<FunctionDecl>();
 
 1975  E->Argument = Record.readSubExpr();
 
 1982  E->Base = Record.readSubExpr();
 
 1983  E->IsArrow = Record.readInt();
 
 1984  E->OperatorLoc = readSourceLocation();
 
 1985  E->QualifierLoc = Record.readNestedNameSpecifierLoc();
 
 1986  E->ScopeType = readTypeSourceInfo();
 
 1987  E->ColonColonLoc = readSourceLocation();
 
 1988  E->TildeLoc = readSourceLocation();
 
 1990  IdentifierInfo *II = Record.readIdentifier();
 
 2000  unsigned NumObjects = Record.readInt();
 
 2002  for (
unsigned i = 0; i != NumObjects; ++i) {
 
 2006      Obj = readDeclAs<BlockDecl>();
 
 2010      llvm_unreachable(
"unexpected cleanup object type");
 
 2011    E->getTrailingObjects()[i] = Obj;
 
 2015  E->
SubExpr = Record.readSubExpr();
 
 2018void ASTStmtReader::VisitCXXDependentScopeMemberExpr(
 
 2022  unsigned NumTemplateArgs = Record.readInt();
 
 2023  CurrentUnpackingBits.emplace(Record.readInt());
 
 2024  bool HasTemplateKWAndArgsInfo = CurrentUnpackingBits->getNextBit();
 
 2025  bool HasFirstQualifierFoundInScope = CurrentUnpackingBits->getNextBit();
 
 2027  assert((HasTemplateKWAndArgsInfo == E->hasTemplateKWAndArgsInfo()) &&
 
 2028         "Wrong HasTemplateKWAndArgsInfo!");
 
 2030      (HasFirstQualifierFoundInScope == E->hasFirstQualifierFoundInScope()) &&
 
 2031      "Wrong HasFirstQualifierFoundInScope!");
 
 2033  if (HasTemplateKWAndArgsInfo)
 
 2035        *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(),
 
 2036        E->getTrailingObjects<TemplateArgumentLoc>(), NumTemplateArgs);
 
 2039         "Wrong NumTemplateArgs!");
 
 2042      CurrentUnpackingBits->getNextBit();
 
 2044  E->BaseType = Record.readType();
 
 2045  E->QualifierLoc = Record.readNestedNameSpecifierLoc();
 
 2047  if (CurrentUnpackingBits->getNextBit())
 
 2048    E->Base = Record.readSubExpr();
 
 2054  if (HasFirstQualifierFoundInScope)
 
 2055    *E->getTrailingObjects<NamedDecl *>() = readDeclAs<NamedDecl>();
 
 2057  E->MemberNameInfo = Record.readDeclarationNameInfo();
 
 2064  if (CurrentUnpackingBits->getNextBit()) 
 
 2066        *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(),
 
 2067        E->getTrailingObjects<TemplateArgumentLoc>(),
 
 2068        CurrentUnpackingBits->getNextBits(16));
 
 2070  E->QualifierLoc = Record.readNestedNameSpecifierLoc();
 
 2071  E->NameInfo = Record.readDeclarationNameInfo();
 
 2077  assert(Record.peekInt() == E->
getNumArgs() &&
 
 2078         "Read wrong record during creation ?");
 
 2080  for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
 
 2081    E->
setArg(I, Record.readSubExpr());
 
 2082  E->TypeAndInitForm.setPointer(readTypeSourceInfo());
 
 2085  E->TypeAndInitForm.setInt(Record.readInt());
 
 2088void ASTStmtReader::VisitOverloadExpr(
OverloadExpr *E) {
 
 2091  unsigned NumResults = Record.readInt();
 
 2092  CurrentUnpackingBits.emplace(Record.readInt());
 
 2093  bool HasTemplateKWAndArgsInfo = CurrentUnpackingBits->getNextBit();
 
 2094  assert((E->
getNumDecls() == NumResults) && 
"Wrong NumResults!");
 
 2096         "Wrong HasTemplateKWAndArgsInfo!");
 
 2098  unsigned NumTemplateArgs = 0;
 
 2099  if (HasTemplateKWAndArgsInfo) {
 
 2100    NumTemplateArgs = Record.readInt();
 
 2106  UnresolvedSet<8> Decls;
 
 2107  for (
unsigned I = 0; I != NumResults; ++I) {
 
 2108    auto *D = readDeclAs<NamedDecl>();
 
 2114  UnresolvedSetIterator Iter = Decls.
begin();
 
 2115  for (
unsigned I = 0; I != NumResults; ++I) {
 
 2116    Results[I] = (Iter + I).getPair();
 
 2120         "Wrong NumTemplateArgs!");
 
 2122  E->NameInfo = Record.readDeclarationNameInfo();
 
 2123  E->QualifierLoc = Record.readNestedNameSpecifierLoc();
 
 2127  VisitOverloadExpr(E);
 
 2130      CurrentUnpackingBits->getNextBit();
 
 2132  if (CurrentUnpackingBits->getNextBit())
 
 2133    E->Base = Record.readSubExpr();
 
 2137  E->OperatorLoc = readSourceLocation();
 
 2139  E->BaseType = Record.readType();
 
 2143  VisitOverloadExpr(E);
 
 2145  E->NamingClass = readDeclAs<CXXRecordDecl>();
 
 2157    *E->getTrailingObjects<
APValue>() = Record.readAPValue();
 
 2159  SourceRange 
Range = readSourceRange();
 
 2160  E->Loc = 
Range.getBegin();
 
 2161  E->RParenLoc = 
Range.getEnd();
 
 2163  auto **Args = E->getTrailingObjects<TypeSourceInfo *>();
 
 2164  for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
 
 2165    Args[I] = readTypeSourceInfo();
 
 2171  E->Value = (
unsigned int)Record.readInt();
 
 2172  SourceRange 
Range = readSourceRange();
 
 2173  E->Loc = 
Range.getBegin();
 
 2174  E->RParen = 
Range.getEnd();
 
 2175  E->QueriedType = readTypeSourceInfo();
 
 2176  E->Dimension = Record.readSubExpr();
 
 2183  SourceRange 
Range = readSourceRange();
 
 2184  E->QueriedExpression = Record.readSubExpr();
 
 2185  E->Loc = 
Range.getBegin();
 
 2186  E->RParen = 
Range.getEnd();
 
 2192  E->Range = readSourceRange();
 
 2193  E->Operand = Record.readSubExpr();
 
 2198  E->EllipsisLoc = readSourceLocation();
 
 2199  E->NumExpansions = Record.readInt();
 
 2200  E->Pattern = Record.readSubExpr();
 
 2205  unsigned NumPartialArgs = Record.readInt();
 
 2206  E->OperatorLoc = readSourceLocation();
 
 2207  E->PackLoc = readSourceLocation();
 
 2208  E->RParenLoc = readSourceLocation();
 
 2209  E->Pack = Record.readDeclAs<NamedDecl>();
 
 2211    assert(E->Length == NumPartialArgs);
 
 2212    for (
auto *I = E->getTrailingObjects(), *E = I + NumPartialArgs; I != E;
 
 2214      new (I) TemplateArgument(Record.readTemplateArgument());
 
 2216    E->Length = Record.readInt();
 
 2224  E->EllipsisLoc = readSourceLocation();
 
 2225  E->RSquareLoc = readSourceLocation();
 
 2226  E->SubExprs[0] = Record.readStmt();
 
 2227  E->SubExprs[1] = Record.readStmt();
 
 2228  auto **Exprs = E->getTrailingObjects();
 
 2230    Exprs[I] = Record.readExpr();
 
 2233void ASTStmtReader::VisitSubstNonTypeTemplateParmExpr(
 
 2236  E->AssociatedDeclAndRef.setPointer(readDeclAs<Decl>());
 
 2237  E->AssociatedDeclAndRef.setInt(CurrentUnpackingBits->getNextBit());
 
 2238  E->Index = CurrentUnpackingBits->getNextBits(12);
 
 2239  E->PackIndex = Record.readUnsignedOrNone().toInternalRepresentation();
 
 2240  E->Final = CurrentUnpackingBits->getNextBit();
 
 2242  E->Replacement = Record.readSubExpr();
 
 2245void ASTStmtReader::VisitSubstNonTypeTemplateParmPackExpr(
 
 2248  E->AssociatedDecl = readDeclAs<Decl>();
 
 2249  E->Final = CurrentUnpackingBits->getNextBit();
 
 2250  E->Index = Record.readInt();
 
 2251  TemplateArgument ArgPack = Record.readTemplateArgument();
 
 2257  E->NameLoc = readSourceLocation();
 
 2262  E->NumParameters = Record.readInt();
 
 2263  E->ParamPack = readDeclAs<ValueDecl>();
 
 2264  E->NameLoc = readSourceLocation();
 
 2265  auto **Parms = E->getTrailingObjects();
 
 2266  for (
unsigned i = 0, n = E->NumParameters; i != n; ++i)
 
 2267    Parms[i] = readDeclAs<ValueDecl>();
 
 2272  bool HasMaterialzedDecl = Record.readInt();
 
 2273  if (HasMaterialzedDecl)
 
 2276    E->State = Record.readSubExpr();
 
 2279void ASTStmtReader::VisitCXXFoldExpr(
CXXFoldExpr *E) {
 
 2281  E->LParenLoc = readSourceLocation();
 
 2282  E->EllipsisLoc = readSourceLocation();
 
 2283  E->RParenLoc = readSourceLocation();
 
 2284  E->NumExpansions = Record.readUnsignedOrNone();
 
 2285  E->SubExprs[0] = Record.readSubExpr();
 
 2286  E->SubExprs[1] = Record.readSubExpr();
 
 2287  E->SubExprs[2] = Record.readSubExpr();
 
 2293  unsigned ExpectedNumExprs = Record.readInt();
 
 2294  assert(E->NumExprs == ExpectedNumExprs &&
 
 2295         "expected number of expressions does not equal the actual number of " 
 2296         "serialized expressions.");
 
 2297  E->NumUserSpecifiedExprs = Record.readInt();
 
 2298  E->InitLoc = readSourceLocation();
 
 2299  E->LParenLoc = readSourceLocation();
 
 2300  E->RParenLoc = readSourceLocation();
 
 2301  for (
unsigned I = 0; I < ExpectedNumExprs; I++)
 
 2302    E->getTrailingObjects()[I] = Record.readSubExpr();
 
 2304  bool HasArrayFillerOrUnionDecl = Record.readBool();
 
 2305  if (HasArrayFillerOrUnionDecl) {
 
 2306    bool HasArrayFiller = Record.readBool();
 
 2307    if (HasArrayFiller) {
 
 2318  E->SourceExpr = Record.readSubExpr();
 
 2323void ASTStmtReader::VisitRecoveryExpr(
RecoveryExpr *E) {
 
 2325  unsigned NumArgs = Record.readInt();
 
 2326  E->BeginLoc = readSourceLocation();
 
 2327  E->EndLoc = readSourceLocation();
 
 2328  assert((NumArgs + 0LL ==
 
 2333    Child = Record.readSubStmt();
 
 2341  E->IsArrow = (Record.readInt() != 0);
 
 2342  E->BaseExpr = Record.readSubExpr();
 
 2343  E->QualifierLoc = Record.readNestedNameSpecifierLoc();
 
 2344  E->MemberLoc = readSourceLocation();
 
 2345  E->TheDecl = readDeclAs<MSPropertyDecl>();
 
 2350  E->setBase(Record.readSubExpr());
 
 2351  E->setIdx(Record.readSubExpr());
 
 2358  E->Guid = readDeclAs<MSGuidDecl>();
 
 2360    E->Operand = readTypeSourceInfo();
 
 2362    E->Operand = Record.readSubExpr();
 
 2365void ASTStmtReader::VisitSEHLeaveStmt(
SEHLeaveStmt *S) {
 
 2372  S->Loc = readSourceLocation();
 
 2373  S->Children[SEHExceptStmt::FILTER_EXPR] = Record.readSubStmt();
 
 2374  S->Children[SEHExceptStmt::BLOCK] = Record.readSubStmt();
 
 2379  S->Loc = readSourceLocation();
 
 2380  S->Block = Record.readSubStmt();
 
 2383void ASTStmtReader::VisitSEHTryStmt(
SEHTryStmt *S) {
 
 2385  S->IsCXXTry = Record.readInt();
 
 2386  S->TryLoc = readSourceLocation();
 
 2387  S->Children[SEHTryStmt::TRY] = Record.readSubStmt();
 
 2388  S->Children[SEHTryStmt::HANDLER] = Record.readSubStmt();
 
 2397  E->
setPreArg(CUDAKernelCallExpr::CONFIG, Record.readSubExpr());
 
 2403void ASTStmtReader::VisitAsTypeExpr(
AsTypeExpr *E) {
 
 2405  E->BuiltinLoc = readSourceLocation();
 
 2406  E->RParenLoc = readSourceLocation();
 
 2407  E->SrcExpr = Record.readSubExpr();
 
 2414void ASTStmtReader::VisitOMPCanonicalLoop(OMPCanonicalLoop *S) {
 
 2416  for (Stmt *&SubStmt : S->SubStmts)
 
 2417    SubStmt = Record.readSubStmt();
 
 2420void ASTStmtReader::VisitOMPExecutableDirective(OMPExecutableDirective *E) {
 
 2421  Record.readOMPChildren(E->Data);
 
 2422  E->setLocStart(readSourceLocation());
 
 2423  E->setLocEnd(readSourceLocation());
 
 2426void ASTStmtReader::VisitOMPLoopBasedDirective(OMPLoopBasedDirective *D) {
 
 2430  VisitOMPExecutableDirective(D);
 
 2433void ASTStmtReader::VisitOMPLoopDirective(OMPLoopDirective *D) {
 
 2434  VisitOMPLoopBasedDirective(D);
 
 2437void ASTStmtReader::VisitOMPMetaDirective(OMPMetaDirective *D) {
 
 2441  VisitOMPExecutableDirective(D);
 
 2444void ASTStmtReader::VisitOMPParallelDirective(OMPParallelDirective *D) {
 
 2446  VisitOMPExecutableDirective(D);
 
 2447  D->setHasCancel(Record.readBool());
 
 2450void ASTStmtReader::VisitOMPSimdDirective(OMPSimdDirective *D) {
 
 2451  VisitOMPLoopDirective(D);
 
 2454void ASTStmtReader::VisitOMPCanonicalLoopNestTransformationDirective(
 
 2455    OMPCanonicalLoopNestTransformationDirective *D) {
 
 2456  VisitOMPLoopBasedDirective(D);
 
 2457  D->setNumGeneratedTopLevelLoops(Record.readUInt32());
 
 2460void ASTStmtReader::VisitOMPTileDirective(OMPTileDirective *D) {
 
 2461  VisitOMPCanonicalLoopNestTransformationDirective(D);
 
 2464void ASTStmtReader::VisitOMPStripeDirective(OMPStripeDirective *D) {
 
 2465  VisitOMPCanonicalLoopNestTransformationDirective(D);
 
 2468void ASTStmtReader::VisitOMPUnrollDirective(OMPUnrollDirective *D) {
 
 2469  VisitOMPCanonicalLoopNestTransformationDirective(D);
 
 2472void ASTStmtReader::VisitOMPReverseDirective(OMPReverseDirective *D) {
 
 2473  VisitOMPCanonicalLoopNestTransformationDirective(D);
 
 2476void ASTStmtReader::VisitOMPCanonicalLoopSequenceTransformationDirective(
 
 2477    OMPCanonicalLoopSequenceTransformationDirective *D) {
 
 2479  VisitOMPExecutableDirective(D);
 
 2480  D->setNumGeneratedTopLevelLoops(Record.readUInt32());
 
 2483void ASTStmtReader::VisitOMPInterchangeDirective(OMPInterchangeDirective *D) {
 
 2484  VisitOMPCanonicalLoopNestTransformationDirective(D);
 
 2487void ASTStmtReader::VisitOMPFuseDirective(OMPFuseDirective *D) {
 
 2488  VisitOMPCanonicalLoopSequenceTransformationDirective(D);
 
 2491void ASTStmtReader::VisitOMPForDirective(OMPForDirective *D) {
 
 2492  VisitOMPLoopDirective(D);
 
 2493  D->setHasCancel(Record.readBool());
 
 2496void ASTStmtReader::VisitOMPForSimdDirective(OMPForSimdDirective *D) {
 
 2497  VisitOMPLoopDirective(D);
 
 2500void ASTStmtReader::VisitOMPSectionsDirective(OMPSectionsDirective *D) {
 
 2502  VisitOMPExecutableDirective(D);
 
 2503  D->setHasCancel(Record.readBool());
 
 2506void ASTStmtReader::VisitOMPSectionDirective(OMPSectionDirective *D) {
 
 2508  VisitOMPExecutableDirective(D);
 
 2509  D->setHasCancel(Record.readBool());
 
 2512void ASTStmtReader::VisitOMPScopeDirective(OMPScopeDirective *D) {
 
 2514  VisitOMPExecutableDirective(D);
 
 2517void ASTStmtReader::VisitOMPSingleDirective(OMPSingleDirective *D) {
 
 2519  VisitOMPExecutableDirective(D);
 
 2522void ASTStmtReader::VisitOMPMasterDirective(OMPMasterDirective *D) {
 
 2524  VisitOMPExecutableDirective(D);
 
 2527void ASTStmtReader::VisitOMPCriticalDirective(OMPCriticalDirective *D) {
 
 2529  VisitOMPExecutableDirective(D);
 
 2530  D->DirName = Record.readDeclarationNameInfo();
 
 2533void ASTStmtReader::VisitOMPParallelForDirective(OMPParallelForDirective *D) {
 
 2534  VisitOMPLoopDirective(D);
 
 2535  D->setHasCancel(Record.readBool());
 
 2538void ASTStmtReader::VisitOMPParallelForSimdDirective(
 
 2539    OMPParallelForSimdDirective *D) {
 
 2540  VisitOMPLoopDirective(D);
 
 2543void ASTStmtReader::VisitOMPParallelMasterDirective(
 
 2544    OMPParallelMasterDirective *D) {
 
 2546  VisitOMPExecutableDirective(D);
 
 2549void ASTStmtReader::VisitOMPParallelMaskedDirective(
 
 2550    OMPParallelMaskedDirective *D) {
 
 2552  VisitOMPExecutableDirective(D);
 
 2555void ASTStmtReader::VisitOMPParallelSectionsDirective(
 
 2556    OMPParallelSectionsDirective *D) {
 
 2558  VisitOMPExecutableDirective(D);
 
 2559  D->setHasCancel(Record.readBool());
 
 2562void ASTStmtReader::VisitOMPTaskDirective(OMPTaskDirective *D) {
 
 2564  VisitOMPExecutableDirective(D);
 
 2565  D->setHasCancel(Record.readBool());
 
 2568void ASTStmtReader::VisitOMPTaskyieldDirective(OMPTaskyieldDirective *D) {
 
 2570  VisitOMPExecutableDirective(D);
 
 2573void ASTStmtReader::VisitOMPBarrierDirective(OMPBarrierDirective *D) {
 
 2575  VisitOMPExecutableDirective(D);
 
 2578void ASTStmtReader::VisitOMPTaskwaitDirective(OMPTaskwaitDirective *D) {
 
 2582  VisitOMPExecutableDirective(D);
 
 2585void ASTStmtReader::VisitOMPAssumeDirective(OMPAssumeDirective *D) {
 
 2587  VisitOMPExecutableDirective(D);
 
 2590void ASTStmtReader::VisitOMPErrorDirective(OMPErrorDirective *D) {
 
 2594  VisitOMPExecutableDirective(D);
 
 2597void ASTStmtReader::VisitOMPTaskgroupDirective(OMPTaskgroupDirective *D) {
 
 2599  VisitOMPExecutableDirective(D);
 
 2602void ASTStmtReader::VisitOMPFlushDirective(OMPFlushDirective *D) {
 
 2604  VisitOMPExecutableDirective(D);
 
 2607void ASTStmtReader::VisitOMPDepobjDirective(OMPDepobjDirective *D) {
 
 2609  VisitOMPExecutableDirective(D);
 
 2612void ASTStmtReader::VisitOMPScanDirective(OMPScanDirective *D) {
 
 2614  VisitOMPExecutableDirective(D);
 
 2617void ASTStmtReader::VisitOMPOrderedDirective(OMPOrderedDirective *D) {
 
 2619  VisitOMPExecutableDirective(D);
 
 2622void ASTStmtReader::VisitOMPAtomicDirective(OMPAtomicDirective *D) {
 
 2624  VisitOMPExecutableDirective(D);
 
 2625  D->Flags.IsXLHSInRHSPart = Record.readBool() ? 1 : 0;
 
 2626  D->Flags.IsPostfixUpdate = Record.readBool() ? 1 : 0;
 
 2627  D->Flags.IsFailOnly = Record.readBool() ? 1 : 0;
 
 2630void ASTStmtReader::VisitOMPTargetDirective(OMPTargetDirective *D) {
 
 2632  VisitOMPExecutableDirective(D);
 
 2635void ASTStmtReader::VisitOMPTargetDataDirective(OMPTargetDataDirective *D) {
 
 2637  VisitOMPExecutableDirective(D);
 
 2640void ASTStmtReader::VisitOMPTargetEnterDataDirective(
 
 2641    OMPTargetEnterDataDirective *D) {
 
 2643  VisitOMPExecutableDirective(D);
 
 2646void ASTStmtReader::VisitOMPTargetExitDataDirective(
 
 2647    OMPTargetExitDataDirective *D) {
 
 2649  VisitOMPExecutableDirective(D);
 
 2652void ASTStmtReader::VisitOMPTargetParallelDirective(
 
 2653    OMPTargetParallelDirective *D) {
 
 2655  VisitOMPExecutableDirective(D);
 
 2656  D->setHasCancel(Record.readBool());
 
 2659void ASTStmtReader::VisitOMPTargetParallelForDirective(
 
 2660    OMPTargetParallelForDirective *D) {
 
 2661  VisitOMPLoopDirective(D);
 
 2662  D->setHasCancel(Record.readBool());
 
 2665void ASTStmtReader::VisitOMPTeamsDirective(OMPTeamsDirective *D) {
 
 2667  VisitOMPExecutableDirective(D);
 
 2670void ASTStmtReader::VisitOMPCancellationPointDirective(
 
 2671    OMPCancellationPointDirective *D) {
 
 2673  VisitOMPExecutableDirective(D);
 
 2677void ASTStmtReader::VisitOMPCancelDirective(OMPCancelDirective *D) {
 
 2679  VisitOMPExecutableDirective(D);
 
 2683void ASTStmtReader::VisitOMPTaskLoopDirective(OMPTaskLoopDirective *D) {
 
 2684  VisitOMPLoopDirective(D);
 
 2685  D->setHasCancel(Record.readBool());
 
 2688void ASTStmtReader::VisitOMPTaskLoopSimdDirective(OMPTaskLoopSimdDirective *D) {
 
 2689  VisitOMPLoopDirective(D);
 
 2692void ASTStmtReader::VisitOMPMasterTaskLoopDirective(
 
 2693    OMPMasterTaskLoopDirective *D) {
 
 2694  VisitOMPLoopDirective(D);
 
 2695  D->setHasCancel(Record.readBool());
 
 2698void ASTStmtReader::VisitOMPMaskedTaskLoopDirective(
 
 2699    OMPMaskedTaskLoopDirective *D) {
 
 2700  VisitOMPLoopDirective(D);
 
 2701  D->setHasCancel(Record.readBool());
 
 2704void ASTStmtReader::VisitOMPMasterTaskLoopSimdDirective(
 
 2705    OMPMasterTaskLoopSimdDirective *D) {
 
 2706  VisitOMPLoopDirective(D);
 
 2709void ASTStmtReader::VisitOMPMaskedTaskLoopSimdDirective(
 
 2710    OMPMaskedTaskLoopSimdDirective *D) {
 
 2711  VisitOMPLoopDirective(D);
 
 2714void ASTStmtReader::VisitOMPParallelMasterTaskLoopDirective(
 
 2715    OMPParallelMasterTaskLoopDirective *D) {
 
 2716  VisitOMPLoopDirective(D);
 
 2717  D->setHasCancel(Record.readBool());
 
 2720void ASTStmtReader::VisitOMPParallelMaskedTaskLoopDirective(
 
 2721    OMPParallelMaskedTaskLoopDirective *D) {
 
 2722  VisitOMPLoopDirective(D);
 
 2723  D->setHasCancel(Record.readBool());
 
 2726void ASTStmtReader::VisitOMPParallelMasterTaskLoopSimdDirective(
 
 2727    OMPParallelMasterTaskLoopSimdDirective *D) {
 
 2728  VisitOMPLoopDirective(D);
 
 2731void ASTStmtReader::VisitOMPParallelMaskedTaskLoopSimdDirective(
 
 2732    OMPParallelMaskedTaskLoopSimdDirective *D) {
 
 2733  VisitOMPLoopDirective(D);
 
 2736void ASTStmtReader::VisitOMPDistributeDirective(OMPDistributeDirective *D) {
 
 2737  VisitOMPLoopDirective(D);
 
 2740void ASTStmtReader::VisitOMPTargetUpdateDirective(OMPTargetUpdateDirective *D) {
 
 2742  VisitOMPExecutableDirective(D);
 
 2745void ASTStmtReader::VisitOMPDistributeParallelForDirective(
 
 2746    OMPDistributeParallelForDirective *D) {
 
 2747  VisitOMPLoopDirective(D);
 
 2748  D->setHasCancel(Record.readBool());
 
 2751void ASTStmtReader::VisitOMPDistributeParallelForSimdDirective(
 
 2752    OMPDistributeParallelForSimdDirective *D) {
 
 2753  VisitOMPLoopDirective(D);
 
 2756void ASTStmtReader::VisitOMPDistributeSimdDirective(
 
 2757    OMPDistributeSimdDirective *D) {
 
 2758  VisitOMPLoopDirective(D);
 
 2761void ASTStmtReader::VisitOMPTargetParallelForSimdDirective(
 
 2762    OMPTargetParallelForSimdDirective *D) {
 
 2763  VisitOMPLoopDirective(D);
 
 2766void ASTStmtReader::VisitOMPTargetSimdDirective(OMPTargetSimdDirective *D) {
 
 2767  VisitOMPLoopDirective(D);
 
 2770void ASTStmtReader::VisitOMPTeamsDistributeDirective(
 
 2771    OMPTeamsDistributeDirective *D) {
 
 2772  VisitOMPLoopDirective(D);
 
 2775void ASTStmtReader::VisitOMPTeamsDistributeSimdDirective(
 
 2776    OMPTeamsDistributeSimdDirective *D) {
 
 2777  VisitOMPLoopDirective(D);
 
 2780void ASTStmtReader::VisitOMPTeamsDistributeParallelForSimdDirective(
 
 2781    OMPTeamsDistributeParallelForSimdDirective *D) {
 
 2782  VisitOMPLoopDirective(D);
 
 2785void ASTStmtReader::VisitOMPTeamsDistributeParallelForDirective(
 
 2786    OMPTeamsDistributeParallelForDirective *D) {
 
 2787  VisitOMPLoopDirective(D);
 
 2788  D->setHasCancel(Record.readBool());
 
 2791void ASTStmtReader::VisitOMPTargetTeamsDirective(OMPTargetTeamsDirective *D) {
 
 2793  VisitOMPExecutableDirective(D);
 
 2796void ASTStmtReader::VisitOMPTargetTeamsDistributeDirective(
 
 2797    OMPTargetTeamsDistributeDirective *D) {
 
 2798  VisitOMPLoopDirective(D);
 
 2801void ASTStmtReader::VisitOMPTargetTeamsDistributeParallelForDirective(
 
 2802    OMPTargetTeamsDistributeParallelForDirective *D) {
 
 2803  VisitOMPLoopDirective(D);
 
 2804  D->setHasCancel(Record.readBool());
 
 2807void ASTStmtReader::VisitOMPTargetTeamsDistributeParallelForSimdDirective(
 
 2808    OMPTargetTeamsDistributeParallelForSimdDirective *D) {
 
 2809  VisitOMPLoopDirective(D);
 
 2812void ASTStmtReader::VisitOMPTargetTeamsDistributeSimdDirective(
 
 2813    OMPTargetTeamsDistributeSimdDirective *D) {
 
 2814  VisitOMPLoopDirective(D);
 
 2817void ASTStmtReader::VisitOMPInteropDirective(OMPInteropDirective *D) {
 
 2819  VisitOMPExecutableDirective(D);
 
 2822void ASTStmtReader::VisitOMPDispatchDirective(OMPDispatchDirective *D) {
 
 2824  VisitOMPExecutableDirective(D);
 
 2825  D->setTargetCallLoc(Record.readSourceLocation());
 
 2828void ASTStmtReader::VisitOMPMaskedDirective(OMPMaskedDirective *D) {
 
 2830  VisitOMPExecutableDirective(D);
 
 2833void ASTStmtReader::VisitOMPGenericLoopDirective(OMPGenericLoopDirective *D) {
 
 2834  VisitOMPLoopDirective(D);
 
 2837void ASTStmtReader::VisitOMPTeamsGenericLoopDirective(
 
 2838    OMPTeamsGenericLoopDirective *D) {
 
 2839  VisitOMPLoopDirective(D);
 
 2842void ASTStmtReader::VisitOMPTargetTeamsGenericLoopDirective(
 
 2843    OMPTargetTeamsGenericLoopDirective *D) {
 
 2844  VisitOMPLoopDirective(D);
 
 2845  D->setCanBeParallelFor(Record.readBool());
 
 2848void ASTStmtReader::VisitOMPParallelGenericLoopDirective(
 
 2849    OMPParallelGenericLoopDirective *D) {
 
 2850  VisitOMPLoopDirective(D);
 
 2853void ASTStmtReader::VisitOMPTargetParallelGenericLoopDirective(
 
 2854    OMPTargetParallelGenericLoopDirective *D) {
 
 2855  VisitOMPLoopDirective(D);
 
 2862  (void)Record.readInt();
 
 2864  S->Range = Record.readSourceRange();
 
 2865  S->DirectiveLoc = Record.readSourceLocation();
 
 2866  Record.readOpenACCClauseList(S->Clauses);
 
 2869void ASTStmtReader::VisitOpenACCAssociatedStmtConstruct(
 
 2871  VisitOpenACCConstructStmt(S);
 
 2877  VisitOpenACCAssociatedStmtConstruct(S);
 
 2880void ASTStmtReader::VisitOpenACCLoopConstruct(OpenACCLoopConstruct *S) {
 
 2882  VisitOpenACCAssociatedStmtConstruct(S);
 
 2886void ASTStmtReader::VisitOpenACCCombinedConstruct(OpenACCCombinedConstruct *S) {
 
 2888  VisitOpenACCAssociatedStmtConstruct(S);
 
 2891void ASTStmtReader::VisitOpenACCDataConstruct(OpenACCDataConstruct *S) {
 
 2893  VisitOpenACCAssociatedStmtConstruct(S);
 
 2896void ASTStmtReader::VisitOpenACCEnterDataConstruct(
 
 2897    OpenACCEnterDataConstruct *S) {
 
 2899  VisitOpenACCConstructStmt(S);
 
 2902void ASTStmtReader::VisitOpenACCExitDataConstruct(OpenACCExitDataConstruct *S) {
 
 2904  VisitOpenACCConstructStmt(S);
 
 2907void ASTStmtReader::VisitOpenACCInitConstruct(OpenACCInitConstruct *S) {
 
 2909  VisitOpenACCConstructStmt(S);
 
 2912void ASTStmtReader::VisitOpenACCShutdownConstruct(OpenACCShutdownConstruct *S) {
 
 2914  VisitOpenACCConstructStmt(S);
 
 2917void ASTStmtReader::VisitOpenACCSetConstruct(OpenACCSetConstruct *S) {
 
 2919  VisitOpenACCConstructStmt(S);
 
 2922void ASTStmtReader::VisitOpenACCUpdateConstruct(OpenACCUpdateConstruct *S) {
 
 2924  VisitOpenACCConstructStmt(S);
 
 2927void ASTStmtReader::VisitOpenACCHostDataConstruct(OpenACCHostDataConstruct *S) {
 
 2929  VisitOpenACCAssociatedStmtConstruct(S);
 
 2932void ASTStmtReader::VisitOpenACCWaitConstruct(OpenACCWaitConstruct *S) {
 
 2935  (void)Record.readInt();
 
 2936  VisitOpenACCConstructStmt(S);
 
 2937  S->LParenLoc = Record.readSourceLocation();
 
 2938  S->RParenLoc = Record.readSourceLocation();
 
 2939  S->QueuesLoc = Record.readSourceLocation();
 
 2941  for (
unsigned I = 0; I < S->NumExprs; ++I) {
 
 2942    S->getExprPtr()[I] = cast_if_present<Expr>(Record.readSubStmt());
 
 2943    assert((I == 0 || S->getExprPtr()[I] != 
nullptr) &&
 
 2944           "Only first expression should be null");
 
 2948void ASTStmtReader::VisitOpenACCCacheConstruct(OpenACCCacheConstruct *S) {
 
 2950  (void)Record.readInt();
 
 2951  VisitOpenACCConstructStmt(S);
 
 2952  S->ParensLoc = Record.readSourceRange();
 
 2953  S->ReadOnlyLoc = Record.readSourceLocation();
 
 2954  for (
unsigned I = 0; I < S->NumVars; ++I)
 
 2958void ASTStmtReader::VisitOpenACCAtomicConstruct(OpenACCAtomicConstruct *S) {
 
 2960  VisitOpenACCConstructStmt(S);
 
 2962  S->setAssociatedStmt(Record.readSubStmt());
 
 2971  S->SubExprs[HLSLOutArgExpr::BaseLValue] = Record.readSubExpr();
 
 2972  S->SubExprs[HLSLOutArgExpr::CastedTemporary] = Record.readSubExpr();
 
 2973  S->SubExprs[HLSLOutArgExpr::WritebackCast] = Record.readSubExpr();
 
 2974  S->IsInOut = Record.readBool();
 
 2982  switch (ReadingKind) {
 
 2984    llvm_unreachable(
"should not call this when not reading anything");
 
 2987    return ReadStmtFromStream(F);
 
 2992  llvm_unreachable(
"ReadingKind not set ?");
 
 
 2996  return cast_or_null<Expr>(
ReadStmt(F));
 
 
 3011  ReadingKindTracker ReadingKind(Read_Stmt, *
this);
 
 3016  llvm::DenseMap<uint64_t, Stmt *> StmtEntries;
 
 3019  unsigned PrevNumStmts = StmtStack.size();
 
 3028        Cursor.advanceSkippingSubblocks();
 
 3033    llvm::BitstreamEntry Entry = MaybeEntry.get();
 
 3035    switch (Entry.Kind) {
 
 3036    case llvm::BitstreamEntry::SubBlock: 
 
 3037    case llvm::BitstreamEntry::Error:
 
 3038      Error(
"malformed block record in AST file");
 
 3040    case llvm::BitstreamEntry::EndBlock:
 
 3042    case llvm::BitstreamEntry::Record:
 
 3049    bool Finished = 
false;
 
 3050    bool IsStmtReference = 
false;
 
 3051    Expected<unsigned> MaybeStmtCode = 
Record.readRecord(Cursor, Entry.ID);
 
 3052    if (!MaybeStmtCode) {
 
 3056    switch ((
StmtCode)MaybeStmtCode.get()) {
 
 3062      IsStmtReference = 
true;
 
 3063      assert(StmtEntries.contains(
Record[0]) &&
 
 3064             "No stmt was recorded for this offset reference!");
 
 3065      S = StmtEntries[
Record.readInt()];
 
 3073      S = 
new (Context) NullStmt(
Empty);
 
 3090      S = 
new (Context) DefaultStmt(
Empty);
 
 3094      S = 
new (Context) LabelStmt(
Empty);
 
 3105      bool HasElse = IfStmtBits.getNextBit();
 
 3106      bool HasVar = IfStmtBits.getNextBit();
 
 3107      bool HasInit = IfStmtBits.getNextBit();
 
 3126      S = 
new (Context) DoStmt(
Empty);
 
 3130      S = 
new (Context) ForStmt(
Empty);
 
 3134      S = 
new (Context) GotoStmt(
Empty);
 
 3138      S = 
new (Context) IndirectGotoStmt(
Empty);
 
 3142      S = 
new (Context) ContinueStmt(
Empty);
 
 3146      S = 
new (Context) BreakStmt(
Empty);
 
 3155      S = 
new (Context) DeclStmt(
Empty);
 
 3159      S = 
new (Context) GCCAsmStmt(
Empty);
 
 3163      S = 
new (Context) MSAsmStmt(
Empty);
 
 3172      S = 
new (Context) SYCLKernelCallStmt(
Empty);
 
 3197      DeclRefExprBits.advance(5);
 
 3198      bool HasFoundDecl = DeclRefExprBits.getNextBit();
 
 3199      bool HasQualifier = DeclRefExprBits.getNextBit();
 
 3200      bool HasTemplateKWAndArgsInfo = DeclRefExprBits.getNextBit();
 
 3201      unsigned NumTemplateArgs = HasTemplateKWAndArgsInfo
 
 3205                                   HasTemplateKWAndArgsInfo, NumTemplateArgs);
 
 3222      S = 
new (Context) ImaginaryLiteral(
Empty);
 
 3234      S = 
new (Context) CharacterLiteral(
Empty);
 
 3238      S = 
new (Context) ParenExpr(
Empty);
 
 3250      bool HasFPFeatures = UnaryOperatorBits.getNextBit();
 
 3262      S = 
new (Context) UnaryExprOrTypeTraitExpr(
Empty);
 
 3266      S = 
new (Context) ArraySubscriptExpr(
Empty);
 
 3270      S = 
new (Context) MatrixSubscriptExpr(
Empty);
 
 3274      S = 
new (Context) ArraySectionExpr(
Empty);
 
 3290      CallExprBits.advance(1);
 
 3291      auto HasFPFeatures = CallExprBits.getNextBit();
 
 3303      bool HasQualifier = ExprMemberBits.getNextBit();
 
 3304      bool HasFoundDecl = ExprMemberBits.getNextBit();
 
 3305      bool HasTemplateInfo = ExprMemberBits.getNextBit();
 
 3308                                  HasTemplateInfo, NumTemplateArgs);
 
 3314      BinaryOperatorBits.advance( 6);
 
 3315      bool HasFPFeatures = BinaryOperatorBits.getNextBit();
 
 3322      BinaryOperatorBits.advance( 6);
 
 3323      bool HasFPFeatures = BinaryOperatorBits.getNextBit();
 
 3329      S = 
new (Context) ConditionalOperator(
Empty);
 
 3333      S = 
new (Context) BinaryConditionalOperator(
Empty);
 
 3339      CastExprBits.advance(7);
 
 3340      bool HasFPFeatures = CastExprBits.getNextBit();
 
 3348      CastExprBits.advance(7);
 
 3349      bool HasFPFeatures = CastExprBits.getNextBit();
 
 3355      S = 
new (Context) CompoundLiteralExpr(
Empty);
 
 3359      S = 
new (Context) ExtVectorElementExpr(
Empty);
 
 3363      S = 
new (Context) InitListExpr(
Empty);
 
 3373      S = 
new (Context) DesignatedInitUpdateExpr(
Empty);
 
 3377      S = 
new (Context) ImplicitValueInitExpr(
Empty);
 
 3381      S = 
new (Context) NoInitExpr(
Empty);
 
 3385      S = 
new (Context) ArrayInitLoopExpr(
Empty);
 
 3389      S = 
new (Context) ArrayInitIndexExpr(
Empty);
 
 3393      S = 
new (Context) VAArgExpr(
Empty);
 
 3397      S = 
new (Context) SourceLocExpr(
Empty);
 
 3401      S = 
new (Context) EmbedExpr(
Empty);
 
 3405      S = 
new (Context) AddrLabelExpr(
Empty);
 
 3409      S = 
new (Context) StmtExpr(
Empty);
 
 3413      S = 
new (Context) ChooseExpr(
Empty);
 
 3417      S = 
new (Context) GNUNullExpr(
Empty);
 
 3421      S = 
new (Context) ShuffleVectorExpr(
Empty);
 
 3427      bool HasFPFeatures = ConvertVectorExprBits.getNextBit();
 
 3433      S = 
new (Context) BlockExpr(
Empty);
 
 3443      S = 
new (Context) ObjCStringLiteral(
Empty);
 
 3447      S = 
new (Context) ObjCBoxedExpr(
Empty);
 
 3462      S = 
new (Context) ObjCEncodeExpr(
Empty);
 
 3466      S = 
new (Context) ObjCSelectorExpr(
Empty);
 
 3470      S = 
new (Context) ObjCProtocolExpr(
Empty);
 
 3474      S = 
new (Context) ObjCIvarRefExpr(
Empty);
 
 3478      S = 
new (Context) ObjCPropertyRefExpr(
Empty);
 
 3482      S = 
new (Context) ObjCSubscriptRefExpr(
Empty);
 
 3486      llvm_unreachable(
"mismatching AST file");
 
 3495      S = 
new (Context) ObjCIsaExpr(
Empty);
 
 3499      S = 
new (Context) ObjCIndirectCopyRestoreExpr(
Empty);
 
 3503      S = 
new (Context) ObjCBridgedCastExpr(
Empty);
 
 3507      S = 
new (Context) ObjCForCollectionStmt(
Empty);
 
 3511      S = 
new (Context) ObjCAtCatchStmt(
Empty);
 
 3515      S = 
new (Context) ObjCAtFinallyStmt(
Empty);
 
 3525      S = 
new (Context) ObjCAtSynchronizedStmt(
Empty);
 
 3529      S = 
new (Context) ObjCAtThrowStmt(
Empty);
 
 3533      S = 
new (Context) ObjCAutoreleasePoolStmt(
Empty);
 
 3537      S = 
new (Context) ObjCBoolLiteralExpr(
Empty);
 
 3541      S = 
new (Context) ObjCAvailabilityCheckExpr(
Empty);
 
 3545      S = 
new (Context) SEHLeaveStmt(
Empty);
 
 3549      S = 
new (Context) SEHExceptStmt(
Empty);
 
 3553      S = 
new (Context) SEHFinallyStmt(
Empty);
 
 3557      S = 
new (Context) SEHTryStmt(
Empty);
 
 3561      S = 
new (Context) CXXCatchStmt(
Empty);
 
 3570      S = 
new (Context) CXXForRangeStmt(
Empty);
 
 3574      S = 
new (Context) MSDependentExistsStmt(SourceLocation(), 
true,
 
 3575                                              NestedNameSpecifierLoc(),
 
 3576                                              DeclarationNameInfo(),
 
 3581      S = OMPCanonicalLoop::createEmpty(Context);
 
 3591        OMPParallelDirective::CreateEmpty(Context,
 
 3599      S = OMPSimdDirective::CreateEmpty(Context, NumClauses,
 
 3600                                        CollapsedNum, 
Empty);
 
 3628             "Reverse directive has no clauses");
 
 3649      S = OMPForDirective::CreateEmpty(Context, NumClauses, CollapsedNum,
 
 3657      S = OMPForSimdDirective::CreateEmpty(Context, NumClauses, CollapsedNum,
 
 3663      S = OMPSectionsDirective::CreateEmpty(
 
 3668      S = OMPSectionDirective::CreateEmpty(Context, 
Empty);
 
 3672      S = OMPScopeDirective::CreateEmpty(
 
 3677      S = OMPSingleDirective::CreateEmpty(
 
 3682      S = OMPMasterDirective::CreateEmpty(Context, 
Empty);
 
 3686      S = OMPCriticalDirective::CreateEmpty(
 
 3693      S = OMPParallelForDirective::CreateEmpty(Context, NumClauses,
 
 3694                                               CollapsedNum, 
Empty);
 
 3701      S = OMPParallelForSimdDirective::CreateEmpty(Context, NumClauses,
 
 3702                                                   CollapsedNum, 
Empty);
 
 3707      S = OMPParallelMasterDirective::CreateEmpty(
 
 3712      S = OMPParallelMaskedDirective::CreateEmpty(
 
 3717      S = OMPParallelSectionsDirective::CreateEmpty(
 
 3722      S = OMPTaskDirective::CreateEmpty(
 
 3727      S = OMPTaskyieldDirective::CreateEmpty(Context, 
Empty);
 
 3731      S = OMPBarrierDirective::CreateEmpty(Context, 
Empty);
 
 3735      S = OMPTaskwaitDirective::CreateEmpty(
 
 3745      S = OMPTaskgroupDirective::CreateEmpty(
 
 3750      S = OMPFlushDirective::CreateEmpty(
 
 3755      S = OMPDepobjDirective::CreateEmpty(
 
 3767      S = OMPOrderedDirective::CreateEmpty(Context, NumClauses,
 
 3768                                           !HasAssociatedStmt, 
Empty);
 
 3773      S = OMPAtomicDirective::CreateEmpty(
 
 3806                                                     CollapsedNum, 
Empty);
 
 3841                                                CollapsedNum, 
Empty);
 
 3849                                                  CollapsedNum, 
Empty);
 
 3857                                                  CollapsedNum, 
Empty);
 
 3865                                                      CollapsedNum, 
Empty);
 
 3873                                                      CollapsedNum, 
Empty);
 
 3881                                                          CollapsedNum, 
Empty);
 
 3889                                                          CollapsedNum, 
Empty);
 
 3897          Context, NumClauses, CollapsedNum, 
Empty);
 
 3905          Context, NumClauses, CollapsedNum, 
Empty);
 
 3921                                                         CollapsedNum, 
Empty);
 
 3938                                                  CollapsedNum, 
Empty);
 
 3946                                                         CollapsedNum, 
Empty);
 
 3962                                                    CollapsedNum, 
Empty);
 
 3970                                                       CollapsedNum, 
Empty);
 
 3978          Context, NumClauses, CollapsedNum, 
Empty);
 
 3986          Context, NumClauses, CollapsedNum, 
Empty);
 
 3999                                                         CollapsedNum, 
Empty);
 
 4007          Context, NumClauses, CollapsedNum, 
Empty);
 
 4015          Context, NumClauses, CollapsedNum, 
Empty);
 
 4023          Context, NumClauses, CollapsedNum, 
Empty);
 
 4046                                               CollapsedNum, 
Empty);
 
 4054                                                    CollapsedNum, 
Empty);
 
 4062                                                          CollapsedNum, 
Empty);
 
 4070                                                       CollapsedNum, 
Empty);
 
 4078          Context, NumClauses, CollapsedNum, 
Empty);
 
 4091      CallExprBits.advance(1);
 
 4092      auto HasFPFeatures = CallExprBits.getNextBit();
 
 4101      CallExprBits.advance(1);
 
 4102      auto HasFPFeatures = CallExprBits.getNextBit();
 
 4109      S = 
new (Context) CXXRewrittenBinaryOperator(
Empty);
 
 4119      S = 
new (Context) CXXInheritedCtorInitExpr(
Empty);
 
 4131      CastExprBits.advance(7);
 
 4132      bool HasFPFeatures = CastExprBits.getNextBit();
 
 4160      CastExprBits.advance(7);
 
 4161      bool HasFPFeatures = CastExprBits.getNextBit();
 
 4169      assert(PathSize == 0 && 
"Wrong PathSize!");
 
 4171      S = 
new (Context) BuiltinBitCastExpr(
Empty);
 
 4178      CallExprBits.advance(1);
 
 4179      auto HasFPFeatures = CallExprBits.getNextBit();
 
 4186      S = 
new (Context) CXXStdInitializerListExpr(
Empty);
 
 4190      S = 
new (Context) CXXBoolLiteralExpr(
Empty);
 
 4194      S = 
new (Context) CXXNullPtrLiteralExpr(
Empty);
 
 4198      S = 
new (Context) CXXTypeidExpr(
Empty, 
true);
 
 4202      S = 
new (Context) CXXTypeidExpr(
Empty, 
false);
 
 4206      S = 
new (Context) CXXUuidofExpr(
Empty, 
true);
 
 4210      S = 
new (Context) MSPropertyRefExpr(
Empty);
 
 4214      S = 
new (Context) MSPropertySubscriptExpr(
Empty);
 
 4218      S = 
new (Context) CXXUuidofExpr(
Empty, 
false);
 
 4226      S = 
new (Context) CXXThrowExpr(
Empty);
 
 4240      S = 
new (Context) CXXBindTemporaryExpr(
Empty);
 
 4244      S = 
new (Context) CXXScalarValueInitExpr(
Empty);
 
 4257      S = 
new (Context) CXXDeleteExpr(
Empty);
 
 4261      S = 
new (Context) CXXPseudoDestructorExpr(
Empty);
 
 4271      BitsUnpacker DependentScopeMemberBits(
 
 4273      bool HasTemplateKWAndArgsInfo = DependentScopeMemberBits.getNextBit();
 
 4275      bool HasFirstQualifierFoundInScope =
 
 4276          DependentScopeMemberBits.getNextBit();
 
 4278          Context, HasTemplateKWAndArgsInfo, NumTemplateArgs,
 
 4279          HasFirstQualifierFoundInScope);
 
 4284      BitsUnpacker DependentScopeDeclRefBits(
 
 4287      bool HasTemplateKWAndArgsInfo = DependentScopeDeclRefBits.getNextBit();
 
 4288      unsigned NumTemplateArgs =
 
 4289          HasTemplateKWAndArgsInfo
 
 4290              ? DependentScopeDeclRefBits.getNextBits(16)
 
 4293          Context, HasTemplateKWAndArgsInfo, NumTemplateArgs);
 
 4305      auto HasTemplateKWAndArgsInfo = OverloadExprBits.getNextBit();
 
 4306      auto NumTemplateArgs = HasTemplateKWAndArgsInfo
 
 4310          Context, NumResults, HasTemplateKWAndArgsInfo, NumTemplateArgs);
 
 4317      auto HasTemplateKWAndArgsInfo = OverloadExprBits.getNextBit();
 
 4318      auto NumTemplateArgs = HasTemplateKWAndArgsInfo
 
 4322          Context, NumResults, HasTemplateKWAndArgsInfo, NumTemplateArgs);
 
 4333      S = 
new (Context) ArrayTypeTraitExpr(
Empty);
 
 4337      S = 
new (Context) ExpressionTraitExpr(
Empty);
 
 4341      S = 
new (Context) CXXNoexceptExpr(
Empty);
 
 4345      S = 
new (Context) PackExpansionExpr(
Empty);
 
 4361      S = 
new (Context) SubstNonTypeTemplateParmExpr(
Empty);
 
 4365      S = 
new (Context) SubstNonTypeTemplateParmPackExpr(
Empty);
 
 4374      S = 
new (Context) MaterializeTemporaryExpr(
Empty);
 
 4378      S = 
new (Context) CXXFoldExpr(
Empty);
 
 4387      S = 
new (Context) OpaqueValueExpr(
Empty);
 
 4393      CallExprBits.advance(1);
 
 4394      auto HasFPFeatures = CallExprBits.getNextBit();
 
 4401      S = 
new (Context) AsTypeExpr(
Empty);
 
 4411      S = 
new (Context) AtomicExpr(
Empty);
 
 4427      S = 
new (Context) CoreturnStmt(
Empty);
 
 4431      S = 
new (Context) CoawaitExpr(
Empty);
 
 4435      S = 
new (Context) CoyieldExpr(
Empty);
 
 4439      S = 
new (Context) DependentCoawaitExpr(
Empty);
 
 4443      S = 
new (Context) ConceptSpecializationExpr(
Empty);
 
 4448      S = OpenACCComputeConstruct::CreateEmpty(Context, NumClauses);
 
 4533    ++NumStatementsRead;
 
 4535    if (S && !IsStmtReference) {
 
 4537      StmtEntries[
Cursor.GetCurrentBitNo()] = S;
 
 4541           "Invalid deserialization of statement");
 
 4542    StmtStack.push_back(S);
 
 4545  assert(StmtStack.size() > PrevNumStmts && 
"Read too many sub-stmts!");
 
 4546  assert(StmtStack.size() == PrevNumStmts + 1 && 
"Extra expressions on stack!");
 
 4547  return StmtStack.pop_back_val();
 
This file provides AST data structures related to concepts.
 
Defines the clang::ASTContext interface.
 
static concepts::Requirement::SubstitutionDiagnostic * readSubstitutionDiagnostic(ASTRecordReader &Record)
 
static ConstraintSatisfaction readConstraintSatisfaction(ASTRecordReader &Record)
 
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....
 
Defines the C++ template declaration subclasses.
 
Defines the clang::Expr interface and subclasses for C++ expressions.
 
Defines enumerations for expression traits intrinsics.
 
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
 
Defines the clang::LangOptions interface.
 
llvm::MachO::Record Record
 
This file defines OpenMP AST classes for clauses.
 
Defines some OpenMP-specific enums and functions.
 
static std::string toString(const clang::SanitizerSet &Sanitizers)
Produce a string containing comma-separated names of sanitizers in Sanitizers set.
 
Defines the clang::SourceLocation class and associated facilities.
 
Defines various enumerations that describe declaration and type specifiers.
 
Defines the Objective-C statement AST node classes.
 
This file defines OpenMP AST classes for executable directives and clauses.
 
This file defines SYCL AST classes used to represent calls to SYCL kernels.
 
Defines enumerations for the type traits support.
 
C Language Family Type Representation.
 
static OMPAssumeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
 
static OMPCancelDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
 
static OMPCancellationPointDirective * CreateEmpty(const ASTContext &C, EmptyShell)
Creates an empty directive.
 
static OMPDispatchDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPDistributeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPDistributeParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPDistributeParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPDistributeSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPErrorDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
 
static OMPFuseDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses)
Build an empty 'pragma omp fuse' AST node for deserialization.
 
static OMPGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with a place for NumClauses clauses.
 
static OMPInterchangeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned NumLoops)
Build an empty 'pragma omp interchange' AST node for deserialization.
 
static OMPInteropDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
 
static OMPMaskedDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive.
 
static OMPMaskedTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPMaskedTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPMasterTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPMasterTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPParallelGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPParallelMaskedTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPParallelMaskedTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPParallelMasterTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPParallelMasterTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPReverseDirective * CreateEmpty(const ASTContext &C, unsigned NumLoops)
Build an empty 'pragma omp reverse' AST node for deserialization.
 
static OMPScanDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPStripeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned NumLoops)
Build an empty 'pragma omp stripe' AST node for deserialization.
 
static OMPTargetDataDirective * CreateEmpty(const ASTContext &C, unsigned N, EmptyShell)
Creates an empty directive with the place for N clauses.
 
static OMPTargetDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTargetEnterDataDirective * CreateEmpty(const ASTContext &C, unsigned N, EmptyShell)
Creates an empty directive with the place for N clauses.
 
static OMPTargetExitDataDirective * CreateEmpty(const ASTContext &C, unsigned N, EmptyShell)
Creates an empty directive with the place for N clauses.
 
static OMPTargetParallelDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTargetParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTargetParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTargetParallelGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTargetSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTargetTeamsDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTargetTeamsDistributeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTargetTeamsDistributeParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTargetTeamsDistributeParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTargetTeamsDistributeSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTargetTeamsGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTargetUpdateDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTaskLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTaskLoopSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTeamsDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTeamsDistributeDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTeamsDistributeParallelForDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTeamsDistributeParallelForSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTeamsDistributeSimdDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTeamsGenericLoopDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned CollapsedNum, EmptyShell)
Creates an empty directive with the place for NumClauses clauses.
 
static OMPTileDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses, unsigned NumLoops)
Build an empty 'pragma omp tile' AST node for deserialization.
 
static OMPUnrollDirective * CreateEmpty(const ASTContext &C, unsigned NumClauses)
Build an empty 'pragma omp unroll' AST node for deserialization.
 
static OpenACCAtomicConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
 
ArrayRef< Expr * > getVarList() const
 
static OpenACCCacheConstruct * CreateEmpty(const ASTContext &C, unsigned NumVars)
 
static OpenACCCombinedConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
 
static OpenACCDataConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
 
static OpenACCEnterDataConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
 
static OpenACCExitDataConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
 
static OpenACCHostDataConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
 
static OpenACCInitConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
 
static OpenACCLoopConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
 
static OpenACCSetConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
 
static OpenACCShutdownConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
 
static OpenACCUpdateConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
 
static OpenACCWaitConstruct * CreateEmpty(const ASTContext &C, unsigned NumExprs, unsigned NumClauses)
 
void setValue(const ASTContext &C, const llvm::APInt &Val)
 
bool needsCleanup() const
Returns whether the object performed allocations.
 
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
 
ASTContext & getContext()
Retrieve the AST context that this AST reader supplements.
 
Stmt * ReadSubStmt()
Reads a sub-statement operand during statement reading.
 
Expr * ReadSubExpr()
Reads a sub-expression operand during statement reading.
 
Expr * ReadExpr(ModuleFile &F)
Reads an expression.
 
Stmt * ReadStmt(ModuleFile &F)
Reads a statement.
 
serialization::ModuleFile ModuleFile
 
An object for streaming information from a record.
 
static const unsigned NumExprFields
The number of record fields required for the Expr class itself.
 
static const unsigned NumStmtFields
The number of record fields required for the Stmt class itself.
 
static const unsigned NumExprBits
The number of bits required for the packing bits for the Expr class.
 
void ReadTemplateKWAndArgsInfo(ASTTemplateKWAndArgsInfo &Args, TemplateArgumentLoc *ArgsLocArray, unsigned NumTemplateArgs)
Read and initialize a ExplicitTemplateArgumentList structure.
 
ASTStmtReader(ASTRecordReader &Record, llvm::BitstreamCursor &Cursor)
 
AddrLabelExpr - The GNU address of label extension, representing &&label.
 
void setLabel(LabelDecl *L)
 
void setLabelLoc(SourceLocation L)
 
void setAmpAmpLoc(SourceLocation L)
 
Represents the index of the current element of an array being initialized by an ArrayInitLoopExpr.
 
Represents a loop initializing the elements of an array.
 
This class represents BOTH the OpenMP Array Section and OpenACC 'subarray', with a boolean differenti...
 
bool isOMPArraySection() const
 
ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.
 
void setRBracketLoc(SourceLocation L)
 
An Embarcadero array type trait, as used in the implementation of __array_rank and __array_extent.
 
AsTypeExpr - Clang builtin function __builtin_astype [OpenCL 6.2.4.2] This AST node provides support ...
 
AsmStmt is the base class for GCCAsmStmt and MSAsmStmt.
 
void setAsmLoc(SourceLocation L)
 
unsigned getNumClobbers() const
 
unsigned getNumOutputs() const
 
unsigned getNumInputs() const
 
AtomicExpr - Variadic atomic builtins: __atomic_exchange, __atomic_fetch_*, __atomic_load,...
 
unsigned getNumSubExprs() const
 
Represents an attribute applied to a statement.
 
static AttributedStmt * CreateEmpty(const ASTContext &C, unsigned NumAttrs)
 
BinaryConditionalOperator - The GNU extension to the conditional operator which allows the middle ope...
 
A builtin binary operation expression such as "x + y" or "x <= y".
 
void setHasStoredFPFeatures(bool B)
Set and fetch the bit that shows whether FPFeatures needs to be allocated in Trailing Storage.
 
void setOperatorLoc(SourceLocation L)
 
void setExcludedOverflowPattern(bool B)
Set and get the bit that informs arithmetic overflow sanitizers whether or not they should exclude ce...
 
static BinaryOperator * CreateEmpty(const ASTContext &C, bool hasFPFeatures)
 
void setStoredFPFeatures(FPOptionsOverride F)
Set FPFeatures in trailing storage, used only by Serialization.
 
void setOpcode(Opcode Opc)
 
BinaryOperatorKind Opcode
 
BlockExpr - Adaptor class for mixing a BlockDecl with expressions.
 
void setBlockDecl(BlockDecl *BD)
 
BreakStmt - This represents a break.
 
Represents a C++2a __builtin_bit_cast(T, v) expression.
 
CStyleCastExpr - An explicit cast in C (C99 6.5.4) or a C-style cast in C++ (C++ [expr....
 
static CStyleCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize, bool HasFPFeatures)
 
void setRParenLoc(SourceLocation L)
 
void setLParenLoc(SourceLocation L)
 
Represents a call to a CUDA kernel function.
 
static CUDAKernelCallExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPFeatures, EmptyShell Empty)
 
A C++ addrspace_cast expression (currently only enabled for OpenCL).
 
static CXXAddrspaceCastExpr * CreateEmpty(const ASTContext &Context)
 
Represents binding an expression to a temporary.
 
void setTemporary(CXXTemporary *T)
 
A boolean literal, per ([C++ lex.bool] Boolean literals).
 
void setLocation(SourceLocation L)
 
CXXCatchStmt - This represents a C++ catch block.
 
A C++ const_cast expression (C++ [expr.const.cast]).
 
static CXXConstCastExpr * CreateEmpty(const ASTContext &Context)
 
Represents a call to a C++ constructor.
 
void setArg(unsigned Arg, Expr *ArgExpr)
Set the specified argument.
 
unsigned getNumArgs() const
Return the number of arguments to the constructor call.
 
static CXXConstructExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs)
Create an empty C++ construction expression.
 
A default argument (C++ [dcl.fct.default]).
 
static CXXDefaultArgExpr * CreateEmpty(const ASTContext &C, bool HasRewrittenInit)
 
A use of a default initializer in a constructor or in aggregate initialization.
 
static CXXDefaultInitExpr * CreateEmpty(const ASTContext &C, bool HasRewrittenInit)
 
Represents a delete expression for memory deallocation and destructor calls, e.g.
 
Represents a C++ member access expression where the actual member referenced could not be resolved be...
 
unsigned getNumTemplateArgs() const
Retrieve the number of template arguments provided as part of this template-id.
 
static CXXDependentScopeMemberExpr * CreateEmpty(const ASTContext &Ctx, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs, bool HasFirstQualifierFoundInScope)
 
A C++ dynamic_cast expression (C++ [expr.dynamic.cast]).
 
static CXXDynamicCastExpr * CreateEmpty(const ASTContext &Context, unsigned pathSize)
 
Represents a folding of a pack over an operator.
 
CXXForRangeStmt - This represents C++0x [stmt.ranged]'s ranged for statement, represented as 'for (ra...
 
void setLoopVarStmt(Stmt *S)
 
void setRangeStmt(Stmt *S)
 
void setBeginStmt(Stmt *S)
 
Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr....
 
void setLParenLoc(SourceLocation L)
 
static CXXFunctionalCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize, bool HasFPFeatures)
 
void setRParenLoc(SourceLocation L)
 
Represents a call to an inherited base class constructor from an inheriting constructor.
 
Represents a call to a member function that may be written either with member call syntax (e....
 
static CXXMemberCallExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPFeatures, EmptyShell Empty)
 
Abstract class common to all of the C++ "named"/"keyword" casts.
 
Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)".
 
static CXXNewExpr * CreateEmpty(const ASTContext &Ctx, bool IsArray, bool HasInit, unsigned NumPlacementArgs, bool IsParenTypeId)
Create an empty c++ new expression.
 
bool hasInitializer() const
Whether this new-expression has any initializer at all.
 
void setOperatorDelete(FunctionDecl *D)
 
unsigned getNumPlacementArgs() const
 
bool isParenTypeId() const
 
raw_arg_iterator raw_arg_end()
 
raw_arg_iterator raw_arg_begin()
 
void setOperatorNew(FunctionDecl *D)
 
Represents a C++11 noexcept expression (C++ [expr.unary.noexcept]).
 
The null pointer literal (C++11 [lex.nullptr])
 
void setLocation(SourceLocation L)
 
A call to an overloaded operator written using operator syntax.
 
static CXXOperatorCallExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPFeatures, EmptyShell Empty)
 
Represents a list-initialization with parenthesis.
 
void setInitializedFieldInUnion(FieldDecl *FD)
 
static CXXParenListInitExpr * CreateEmpty(ASTContext &C, unsigned numExprs, EmptyShell Empty)
 
void setArrayFiller(Expr *E)
 
Represents a C++ pseudo-destructor (C++ [expr.pseudo]).
 
void setDestroyedType(IdentifierInfo *II, SourceLocation Loc)
Set the name of destroyed type for a dependent pseudo-destructor expression.
 
A C++ reinterpret_cast expression (C++ [expr.reinterpret.cast]).
 
static CXXReinterpretCastExpr * CreateEmpty(const ASTContext &Context, unsigned pathSize)
 
A rewritten comparison expression that was originally written using operator syntax.
 
An expression "T()" which creates an rvalue of a non-class type T.
 
A C++ static_cast expression (C++ [expr.static.cast]).
 
static CXXStaticCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize, bool hasFPFeatures)
 
Implicit construction of a std::initializer_list<T> object from an array temporary within list-initia...
 
Represents a C++ functional cast expression that builds a temporary object.
 
static CXXTemporaryObjectExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs)
 
Represents the this expression in C++.
 
void setCapturedByCopyInLambdaWithExplicitObjectParameter(bool Set)
 
void setLocation(SourceLocation L)
 
static CXXThisExpr * CreateEmpty(const ASTContext &Ctx)
 
A C++ throw-expression (C++ [except.throw]).
 
CXXTryStmt - A C++ try block, including all handlers.
 
unsigned getNumHandlers() const
 
static CXXTryStmt * Create(const ASTContext &C, SourceLocation tryLoc, CompoundStmt *tryBlock, ArrayRef< Stmt * > handlers)
 
A C++ typeid expression (C++ [expr.typeid]), which gets the type_info that corresponds to the supplie...
 
bool isTypeOperand() const
 
void setSourceRange(SourceRange R)
 
Describes an explicit type conversion that uses functional notion but could not be resolved because o...
 
void setRParenLoc(SourceLocation L)
 
void setArg(unsigned I, Expr *E)
 
void setLParenLoc(SourceLocation L)
 
unsigned getNumArgs() const
Retrieve the number of arguments.
 
static CXXUnresolvedConstructExpr * CreateEmpty(const ASTContext &Context, unsigned NumArgs)
 
A Microsoft C++ __uuidof expression, which gets the _GUID that corresponds to the supplied type or ex...
 
bool isTypeOperand() const
 
void setSourceRange(SourceRange R)
 
CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).
 
void setRParenLoc(SourceLocation L)
 
void setCoroElideSafe(bool V=true)
 
void setArg(unsigned Arg, Expr *ArgExpr)
setArg - Set the specified argument.
 
void setADLCallKind(ADLCallKind V=UsesADL)
 
static CallExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPFeatures, EmptyShell Empty)
Create an empty call expression, for deserialization.
 
void setUsesMemberSyntax(bool V=true)
 
void setPreArg(unsigned I, Stmt *PreArg)
 
void setStoredFPFeatures(FPOptionsOverride F)
Set FPOptionsOverride in trailing storage. Used only by Serialization.
 
unsigned getNumArgs() const
getNumArgs - Return the number of actual arguments to this call.
 
This captures a statement into a function.
 
static CapturedStmt * CreateDeserialized(const ASTContext &Context, unsigned NumCaptures)
 
Expr ** capture_init_iterator
Iterator that walks over the capture initialization arguments.
 
void setCapturedRegionKind(CapturedRegionKind Kind)
Set the captured region kind.
 
CapturedDecl * getCapturedDecl()
Retrieve the outlined function declaration.
 
Stmt * getCapturedStmt()
Retrieve the statement being captured.
 
capture_init_iterator capture_init_begin()
Retrieve the first initialization argument.
 
void setCapturedDecl(CapturedDecl *D)
Set the outlined function declaration.
 
void setCapturedRecordDecl(RecordDecl *D)
Set the record declaration for captured variables.
 
capture_init_iterator capture_init_end()
Retrieve the iterator pointing one past the last initialization argument.
 
VariableCaptureKind
The different capture forms: by 'this', by reference, capture for variable-length array type etc.
 
CaseStmt - Represent a case statement.
 
void setEllipsisLoc(SourceLocation L)
Set the location of the ... in a case statement of the form LHS ... RHS.
 
static CaseStmt * CreateEmpty(const ASTContext &Ctx, bool CaseStmtIsGNURange)
Build an empty case statement.
 
CastExpr - Base class for type casts, including both implicit casts (ImplicitCastExpr) and explicit c...
 
FPOptionsOverride * getTrailingFPFeatures()
Return a pointer to the trailing FPOptions.
 
path_iterator path_begin()
 
unsigned path_size() const
 
void setCastKind(CastKind K)
 
bool hasStoredFPFeatures() const
 
CXXBaseSpecifier ** path_iterator
 
void setValue(unsigned Val)
 
void setLocation(SourceLocation Location)
 
void setKind(CharacterLiteralKind kind)
 
ChooseExpr - GNU builtin-in function __builtin_choose_expr.
 
void setRParenLoc(SourceLocation L)
 
void setIsConditionTrue(bool isTrue)
 
void setBuiltinLoc(SourceLocation L)
 
Represents a 'co_await' expression.
 
void setIsImplicit(bool value=true)
 
CompoundAssignOperator - For compound assignments (e.g.
 
void setComputationResultType(QualType T)
 
static CompoundAssignOperator * CreateEmpty(const ASTContext &C, bool hasFPFeatures)
 
void setComputationLHSType(QualType T)
 
CompoundLiteralExpr - [C99 6.5.2.5].
 
void setFileScope(bool FS)
 
void setTypeSourceInfo(TypeSourceInfo *tinfo)
 
void setLParenLoc(SourceLocation L)
 
void setInitializer(Expr *E)
 
CompoundStmt - This represents a group of statements like { stmt stmt }.
 
static CompoundStmt * CreateEmpty(const ASTContext &C, unsigned NumStmts, bool HasFPFeatures)
 
bool hasStoredFPFeatures() const
 
Represents the specialization of a concept - evaluates to a prvalue of type bool.
 
ConditionalOperator - The ?
 
ConstantExpr - An expression that occurs in a constant context and optionally the result of evaluatin...
 
ConstantResultStorageKind getResultStorageKind() const
 
static ConstantExpr * CreateEmpty(const ASTContext &Context, ConstantResultStorageKind StorageKind)
 
The result of a constraint satisfaction check, containing the necessary information to diagnose an un...
 
llvm::SmallVector< UnsatisfiedConstraintRecord, 4 > Details
The substituted constraint expr, if the template arguments could be substituted into them,...
 
ContinueStmt - This represents a continue.
 
ConvertVectorExpr - Clang builtin function __builtin_convertvector This AST node provides support for...
 
static ConvertVectorExpr * CreateEmpty(const ASTContext &C, bool hasFPFeatures)
 
void setStoredFPFeatures(FPOptionsOverride F)
Set FPFeatures in trailing storage, used by Serialization & ASTImporter.
 
bool hasStoredFPFeatures() const
Is FPFeatures in Trailing Storage?
 
Represents a 'co_return' statement in the C++ Coroutines TS.
 
Represents the body of a coroutine.
 
static CoroutineBodyStmt * Create(const ASTContext &C, CtorArgs const &Args)
 
Represents a 'co_yield' expression.
 
static DeclAccessPair make(NamedDecl *D, AccessSpecifier AS)
 
static DeclGroup * Create(ASTContext &C, Decl **Decls, unsigned NumDecls)
 
A reference to a declared variable, function, enum, etc.
 
bool hasTemplateKWAndArgsInfo() const
 
static DeclRefExpr * CreateEmpty(const ASTContext &Context, bool HasQualifier, bool HasFoundDecl, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
Construct an empty declaration reference expression.
 
void setLocation(SourceLocation L)
 
bool hasQualifier() const
Determine whether this declaration reference was preceded by a C++ nested-name-specifier,...
 
DeclStmt - Adaptor class for mixing declarations with statements and expressions.
 
void setStartLoc(SourceLocation L)
 
void setEndLoc(SourceLocation L)
 
void setDeclGroup(DeclGroupRef DGR)
 
Decl - This represents one declaration (or definition), e.g.
 
Represents a 'co_await' expression while the type of the promise is dependent.
 
A qualified reference to a name whose declaration cannot yet be resolved.
 
static DependentScopeDeclRefExpr * CreateEmpty(const ASTContext &Context, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
 
Represents a C99 designated initializer expression.
 
static DesignatedInitExpr * CreateEmpty(const ASTContext &C, unsigned NumIndexExprs)
 
void setSubExpr(unsigned Idx, Expr *E)
 
void setGNUSyntax(bool GNU)
 
void setEqualOrColonLoc(SourceLocation L)
 
void setDesignators(const ASTContext &C, const Designator *Desigs, unsigned NumDesigs)
 
unsigned getNumSubExprs() const
Retrieve the total number of subexpressions in this designated initializer expression,...
 
void setUpdater(Expr *Updater)
 
static Designator CreateArrayRangeDesignator(Expr *Start, Expr *End, SourceLocation LBracketLoc, SourceLocation EllipsisLoc)
Creates a GNU array-range designator.
 
static Designator CreateArrayDesignator(Expr *Index, SourceLocation LBracketLoc)
Creates an array designator.
 
static Designator CreateFieldDesignator(const IdentifierInfo *FieldName, SourceLocation DotLoc, SourceLocation FieldLoc)
Creates a field designator.
 
DoStmt - This represents a 'do/while' stmt.
 
void setWhileLoc(SourceLocation L)
 
void setDoLoc(SourceLocation L)
 
void setRParenLoc(SourceLocation L)
 
Represents a reference to emded data.
 
ExplicitCastExpr - An explicit cast written in the source code.
 
void setTypeInfoAsWritten(TypeSourceInfo *writtenTy)
 
Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...
 
unsigned getNumObjects() const
 
llvm::PointerUnion< BlockDecl *, CompoundLiteralExpr * > CleanupObject
The type of objects that are kept in the cleanup.
 
static ExprWithCleanups * Create(const ASTContext &C, EmptyShell empty, unsigned numObjects)
 
This represents one expression.
 
bool isValueDependent() const
Determines whether the value of this expression depends on.
 
bool isInstantiationDependent() const
Whether this expression is instantiation-dependent, meaning that it depends in some way on.
 
void setValueKind(ExprValueKind Cat)
setValueKind - Set the value kind produced by this expression.
 
void setObjectKind(ExprObjectKind Cat)
setObjectKind - Set the object kind produced by this expression.
 
void setDependence(ExprDependence Deps)
Each concrete expr subclass is expected to compute its dependence and call this in the constructor.
 
An expression trait intrinsic.
 
ExtVectorElementExpr - This represents access to specific elements of a vector, and may occur on the ...
 
void setAccessor(IdentifierInfo *II)
 
void setAccessorLoc(SourceLocation L)
 
static FPOptionsOverride getFromOpaqueInt(storage_type I)
 
static FixedPointLiteral * Create(const ASTContext &C, EmptyShell Empty)
Returns an empty fixed-point literal.
 
void setLocation(SourceLocation Location)
 
void setScale(unsigned S)
 
static FloatingLiteral * Create(const ASTContext &C, const llvm::APFloat &V, bool isexact, QualType Type, SourceLocation L)
 
const llvm::fltSemantics & getSemantics() const
Return the APFloat semantics this literal uses.
 
void setValue(const ASTContext &C, const llvm::APFloat &Val)
 
void setRawSemantics(llvm::APFloatBase::Semantics Sem)
Set the raw enumeration value representing the floating-point semantics of this literal (32-bit IEEE,...
 
void setLocation(SourceLocation L)
 
ForStmt - This represents a 'for (init;cond;inc)' stmt.
 
void setForLoc(SourceLocation L)
 
void setLParenLoc(SourceLocation L)
 
void setConditionVariableDeclStmt(DeclStmt *CondVar)
 
void setRParenLoc(SourceLocation L)
 
void setSubExpr(Expr *E)
As with any mutator of the AST, be very careful when modifying an existing AST to preserve its invari...
 
Represents a reference to a function parameter pack, init-capture pack, or binding pack that has been...
 
static FunctionParmPackExpr * CreateEmpty(const ASTContext &Context, unsigned NumParams)
 
This represents a GCC inline-assembly statement extension.
 
unsigned getNumLabels() const
 
void setAsmStringExpr(Expr *E)
 
void setRParenLoc(SourceLocation L)
 
GNUNullExpr - Implements the GNU __null extension, which is a name for a null pointer constant that h...
 
void setTokenLocation(SourceLocation L)
 
Represents a C11 generic selection.
 
unsigned getNumAssocs() const
The number of association expressions.
 
static GenericSelectionExpr * CreateEmpty(const ASTContext &Context, unsigned NumAssocs)
Create an empty generic selection expression for deserialization.
 
GotoStmt - This represents a direct goto.
 
void setLabel(LabelDecl *D)
 
void setLabelLoc(SourceLocation L)
 
void setGotoLoc(SourceLocation L)
 
This class represents temporary values used to represent inout and out arguments in HLSL.
 
static HLSLOutArgExpr * CreateEmpty(const ASTContext &Ctx)
 
IfStmt - This represents an if/then/else.
 
void setConditionVariableDeclStmt(DeclStmt *CondVar)
 
void setLParenLoc(SourceLocation Loc)
 
void setElseLoc(SourceLocation ElseLoc)
 
static IfStmt * CreateEmpty(const ASTContext &Ctx, bool HasElse, bool HasVar, bool HasInit)
Create an empty IfStmt optionally with storage for an else statement, condition variable and init exp...
 
void setStatementKind(IfStatementKind Kind)
 
void setRParenLoc(SourceLocation Loc)
 
void setIfLoc(SourceLocation IfLoc)
 
ImaginaryLiteral - We support imaginary integer and floating point literals, like "1....
 
ImplicitCastExpr - Allows us to explicitly represent implicit type conversions, which have no direct ...
 
static ImplicitCastExpr * CreateEmpty(const ASTContext &Context, unsigned PathSize, bool HasFPFeatures)
 
void setIsPartOfExplicitCast(bool PartOfExplicitCast)
 
Represents an implicitly-generated value initialization of an object of a given type.
 
IndirectGotoStmt - This represents an indirect goto.
 
void setGotoLoc(SourceLocation L)
 
void setStarLoc(SourceLocation L)
 
Describes an C or C++ initializer list.
 
void setSyntacticForm(InitListExpr *Init)
 
Expr * updateInit(const ASTContext &C, unsigned Init, Expr *expr)
Updates the initializer at index Init with the new expression expr, and returns the old expression at...
 
void setLBraceLoc(SourceLocation Loc)
 
void setRBraceLoc(SourceLocation Loc)
 
void sawArrayRangeDesignator(bool ARD=true)
 
void reserveInits(const ASTContext &C, unsigned NumInits)
Reserve space for some number of initializers.
 
void setLocation(SourceLocation Location)
 
static IntegerLiteral * Create(const ASTContext &C, const llvm::APInt &V, QualType type, SourceLocation l)
Returns a new integer literal with value 'V' and type 'type'.
 
LabelStmt - Represents a label, which has a substatement.
 
void setSubStmt(Stmt *SS)
 
void setDecl(LabelDecl *D)
 
void setIdentLoc(SourceLocation L)
 
void setSideEntry(bool SE)
 
A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...
 
Expr ** capture_init_iterator
Iterator that walks over the capture initialization arguments.
 
static LambdaExpr * CreateDeserialized(const ASTContext &C, unsigned NumCaptures)
Construct a new lambda expression that will be deserialized from an external source.
 
capture_init_iterator capture_init_end()
Retrieve the iterator pointing one past the last initialization argument for this lambda expression.
 
capture_init_iterator capture_init_begin()
Retrieve the first initialization argument for this lambda expression (which initializes the first ca...
 
Base class for BreakStmt and ContinueStmt.
 
void setLabelDecl(LabelDecl *S)
 
void setLabelLoc(SourceLocation L)
 
void setKwLoc(SourceLocation L)
 
This represents a Microsoft inline-assembly statement extension.
 
Representation of a Microsoft __if_exists or __if_not_exists statement with a dependent name.
 
A member reference to an MSPropertyDecl.
 
MS property subscript expression.
 
void setRBracketLoc(SourceLocation L)
 
Represents a prvalue temporary that is written into memory so that a reference can bind to it.
 
MatrixSubscriptExpr - Matrix subscript expression for the MatrixType extension.
 
void setColumnIdx(Expr *E)
 
void setRBracketLoc(SourceLocation L)
 
MemberExpr - [C99 6.5.2.3] Structure and Union Members.
 
static MemberExpr * CreateEmpty(const ASTContext &Context, bool HasQualifier, bool HasFoundDecl, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
 
DeclarationName getDeclName() const
Get the actual, stored name of the declaration, which may be a special name.
 
Represents a place-holder for an object not to be initialized by anything.
 
NullStmt - This is the null statement ";": C99 6.8.3p3.
 
void setSemiLoc(SourceLocation L)
 
An explicit cast in C or a C-style cast in C++, which uses the syntax ([s1][s2]......
 
void setLParenLoc(SourceLocation L)
 
static OMPArrayShapingExpr * CreateEmpty(const ASTContext &Context, unsigned NumDims)
 
void setRParenLoc(SourceLocation L)
 
OpenMP 5.0 [2.1.6 Iterators] Iterators are identifiers that expand to multiple values in the clause o...
 
void setLParenLoc(SourceLocation L)
 
static OMPIteratorExpr * CreateEmpty(const ASTContext &Context, unsigned NumIterators)
 
void setRParenLoc(SourceLocation L)
 
void setIteratorKwLoc(SourceLocation L)
 
ObjCArrayLiteral - used for objective-c array containers; as in: @["Hello", NSApp,...
 
static ObjCArrayLiteral * CreateEmpty(const ASTContext &C, unsigned NumElements)
 
Expr ** getElements()
Retrieve elements of array of literals.
 
unsigned getNumElements() const
getNumElements - Return number of elements of objective-c array literal.
 
Represents Objective-C's @catch statement.
 
void setCatchParamDecl(VarDecl *D)
 
void setCatchBody(Stmt *S)
 
void setRParenLoc(SourceLocation Loc)
 
void setAtCatchLoc(SourceLocation Loc)
 
Represents Objective-C's @finally statement.
 
void setFinallyBody(Stmt *S)
 
void setAtFinallyLoc(SourceLocation Loc)
 
Represents Objective-C's @synchronized statement.
 
void setSynchBody(Stmt *S)
 
void setAtSynchronizedLoc(SourceLocation Loc)
 
void setSynchExpr(Stmt *S)
 
Represents Objective-C's @throw statement.
 
void setThrowLoc(SourceLocation Loc)
 
void setThrowExpr(Stmt *S)
 
Represents Objective-C's @try ... @catch ... @finally statement.
 
void setAtTryLoc(SourceLocation Loc)
 
void setFinallyStmt(Stmt *S)
 
static ObjCAtTryStmt * CreateEmpty(const ASTContext &Context, unsigned NumCatchStmts, bool HasFinally)
 
unsigned getNumCatchStmts() const
Retrieve the number of @catch statements in this try-catch-finally block.
 
void setCatchStmt(unsigned I, ObjCAtCatchStmt *S)
Set a particular catch statement.
 
Represents Objective-C's @autoreleasepool Statement.
 
void setAtLoc(SourceLocation Loc)
 
A runtime availability query.
 
ObjCBoolLiteralExpr - Objective-C Boolean Literal.
 
void setLocation(SourceLocation L)
 
ObjCBoxedExpr - used for generalized expression boxing.
 
An Objective-C "bridged" cast expression, which casts between Objective-C pointers and C pointers,...
 
ObjCDictionaryLiteral - AST node to represent objective-c dictionary literals; as in:"name" : NSUserN...
 
static ObjCDictionaryLiteral * CreateEmpty(const ASTContext &C, unsigned NumElements, bool HasPackExpansions)
 
unsigned getNumElements() const
getNumElements - Return number of elements of objective-c dictionary literal.
 
ObjCEncodeExpr, used for @encode in Objective-C.
 
void setEncodedTypeSourceInfo(TypeSourceInfo *EncType)
 
void setRParenLoc(SourceLocation L)
 
void setAtLoc(SourceLocation L)
 
Represents Objective-C's collection statement.
 
void setCollection(Expr *E)
 
void setForLoc(SourceLocation Loc)
 
void setRParenLoc(SourceLocation Loc)
 
ObjCIndirectCopyRestoreExpr - Represents the passing of a function argument by indirect copy-restore ...
 
ObjCIsaExpr - Represent X->isa and X.isa when X is an ObjC 'id' type.
 
void setIsaMemberLoc(SourceLocation L)
 
void setOpLoc(SourceLocation L)
 
ObjCIvarRefExpr - A reference to an ObjC instance variable.
 
void setDecl(ObjCIvarDecl *d)
 
void setIsFreeIvar(bool A)
 
void setOpLoc(SourceLocation L)
 
void setLocation(SourceLocation L)
 
An expression that sends a message to the given Objective-C object or class.
 
static ObjCMessageExpr * CreateEmpty(const ASTContext &Context, unsigned NumArgs, unsigned NumStoredSelLocs)
Create an empty Objective-C message expression, to be filled in by subsequent calls.
 
void setMethodDecl(ObjCMethodDecl *MD)
 
void setClassReceiver(TypeSourceInfo *TSInfo)
 
void setInstanceReceiver(Expr *rec)
Turn this message send into an instance message that computes the receiver object with the given expr...
 
void setSuper(SourceLocation Loc, QualType T, bool IsInstanceSuper)
 
ReceiverKind
The kind of receiver this message is sending to.
 
@ SuperInstance
The receiver is the instance of the superclass object.
 
@ Instance
The receiver is an object instance.
 
@ SuperClass
The receiver is a superclass.
 
@ Class
The receiver is a class.
 
void setDelegateInitCall(bool isDelegate)
 
ReceiverKind getReceiverKind() const
Determine the kind of receiver that this message is being sent to.
 
unsigned getNumArgs() const
Return the number of actual arguments in this message, not counting the receiver.
 
void setSelector(Selector S)
 
void setArg(unsigned Arg, Expr *ArgExpr)
setArg - Set the specified argument.
 
ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.
 
ObjCProtocolExpr used for protocol expression in Objective-C.
 
void setProtocol(ObjCProtocolDecl *P)
 
void setRParenLoc(SourceLocation L)
 
void setAtLoc(SourceLocation L)
 
ObjCSelectorExpr used for @selector in Objective-C.
 
void setSelector(Selector S)
 
void setAtLoc(SourceLocation L)
 
void setRParenLoc(SourceLocation L)
 
ObjCStringLiteral, used for Objective-C string literals i.e.
 
void setAtLoc(SourceLocation L)
 
void setString(StringLiteral *S)
 
ObjCSubscriptRefExpr - used for array and dictionary subscripting.
 
void setRBracket(SourceLocation RB)
 
void setBaseExpr(Stmt *S)
 
OffsetOfExpr - [C99 7.17] - This represents an expression of the form offsetof(record-type,...
 
void setOperatorLoc(SourceLocation L)
 
static OffsetOfExpr * CreateEmpty(const ASTContext &C, unsigned NumComps, unsigned NumExprs)
 
void setIndexExpr(unsigned Idx, Expr *E)
 
void setTypeSourceInfo(TypeSourceInfo *tsi)
 
void setComponent(unsigned Idx, OffsetOfNode ON)
 
unsigned getNumExpressions() const
 
void setRParenLoc(SourceLocation R)
 
unsigned getNumComponents() const
 
Kind
The kind of offsetof node we have.
 
@ Array
An index into an array.
 
@ Identifier
A field in a dependent type, known only by its name.
 
@ Base
An implicit indirection through a C++ base class, when the field found is in a base class.
 
OpaqueValueExpr - An expression referring to an opaque object of a fixed type and value class.
 
This is a base class for any OpenACC statement-level constructs that have an associated statement.
 
void setAssociatedStmt(Stmt *S)
 
This expression type represents an asterisk in an OpenACC Size-Expr, used in the 'tile' and 'gang' cl...
 
static OpenACCAsteriskSizeExpr * CreateEmpty(const ASTContext &C)
 
This is the base class for an OpenACC statement-level construct, other construct types are expected t...
 
A reference to an overloaded function set, either an UnresolvedLookupExpr or an UnresolvedMemberExpr.
 
ASTTemplateKWAndArgsInfo * getTrailingASTTemplateKWAndArgsInfo()
Return the optional template keyword and arguments info.
 
unsigned getNumDecls() const
Gets the number of declarations in the unresolved set.
 
TemplateArgumentLoc * getTrailingTemplateArgumentLoc()
Return the optional template arguments.
 
DeclAccessPair * getTrailingResults()
Return the results. Defined after UnresolvedMemberExpr.
 
bool hasTemplateKWAndArgsInfo() const
 
unsigned getNumTemplateArgs() const
 
Represents a C++11 pack expansion that produces a sequence of expressions.
 
static PackIndexingExpr * CreateDeserialized(ASTContext &Context, unsigned NumTransformedExprs)
 
ParenExpr - This represents a parenthesized expression, e.g.
 
void setLParen(SourceLocation Loc)
 
void setIsProducedByFoldExpansion(bool ProducedByFoldExpansion=true)
 
void setRParen(SourceLocation Loc)
 
static ParenListExpr * CreateEmpty(const ASTContext &Ctx, unsigned NumExprs)
Create an empty paren list.
 
unsigned getNumExprs() const
Return the number of expressions in this paren list.
 
[C99 6.4.2.2] - A predefined identifier such as func.
 
void setLocation(SourceLocation L)
 
static PredefinedExpr * CreateEmpty(const ASTContext &Ctx, bool HasFunctionName)
Create an empty PredefinedExpr.
 
PseudoObjectExpr - An expression which accesses a pseudo-object l-value.
 
static PseudoObjectExpr * Create(const ASTContext &Context, Expr *syntactic, ArrayRef< Expr * > semantic, unsigned resultIndex)
 
Frontend produces RecoveryExprs on semantic errors that prevent creating other well-formed expression...
 
static RecoveryExpr * CreateEmpty(ASTContext &Ctx, unsigned NumSubExprs)
 
C++2a [expr.prim.req]: A requires-expression provides a concise way to express requirements on templa...
 
static RequiresExpr * Create(ASTContext &C, SourceLocation RequiresKWLoc, RequiresExprBodyDecl *Body, SourceLocation LParenLoc, ArrayRef< ParmVarDecl * > LocalParameters, SourceLocation RParenLoc, ArrayRef< concepts::Requirement * > Requirements, SourceLocation RBraceLoc)
 
ReturnStmt - This represents a return, optionally of an expression: return; return 4;.
 
void setRetValue(Expr *E)
 
void setReturnLoc(SourceLocation L)
 
void setNRVOCandidate(const VarDecl *Var)
Set the variable that might be used for the named return value optimization.
 
static ReturnStmt * CreateEmpty(const ASTContext &Ctx, bool HasNRVOCandidate)
Create an empty return statement, optionally with storage for an NRVO candidate.
 
Represents a __leave statement.
 
void setLeaveLoc(SourceLocation L)
 
SYCLKernelCallStmt represents the transformation that is applied to the body of a function declared w...
 
void setOriginalStmt(CompoundStmt *CS)
 
void setOutlinedFunctionDecl(OutlinedFunctionDecl *OFD)
Set the outlined function declaration.
 
static SYCLUniqueStableNameExpr * CreateEmpty(const ASTContext &Ctx)
 
ShuffleVectorExpr - clang-specific builtin-in function __builtin_shufflevector.
 
void setExprs(const ASTContext &C, ArrayRef< Expr * > Exprs)
 
void setRParenLoc(SourceLocation L)
 
void setBuiltinLoc(SourceLocation L)
 
Represents an expression that computes the length of a parameter pack.
 
static SizeOfPackExpr * CreateDeserialized(ASTContext &Context, unsigned NumPartialArgs)
 
bool isPartiallySubstituted() const
Determine whether this represents a partially-substituted sizeof... expression, such as is produced f...
 
Represents a function call to one of __builtin_LINE(), __builtin_COLUMN(), __builtin_FUNCTION(),...
 
Encodes a location in the source.
 
A trivial tuple used to represent a source range.
 
SourceLocation getEnd() const
 
SourceLocation getBegin() const
 
StmtExpr - This is the GNU Statement Expression extension: ({int X=4; X;}).
 
void setRParenLoc(SourceLocation L)
 
void setLParenLoc(SourceLocation L)
 
void setSubStmt(CompoundStmt *S)
 
StmtVisitor - This class implements a simple visitor for Stmt subclasses.
 
Stmt - This represents one statement.
 
ExpressionTraitExprBitfields ExpressionTraitExprBits
 
GenericSelectionExprBitfields GenericSelectionExprBits
 
LambdaExprBitfields LambdaExprBits
 
AttributedStmtBitfields AttributedStmtBits
 
UnresolvedLookupExprBitfields UnresolvedLookupExprBits
 
SubstNonTypeTemplateParmExprBitfields SubstNonTypeTemplateParmExprBits
 
CXXNoexceptExprBitfields CXXNoexceptExprBits
 
CXXRewrittenBinaryOperatorBitfields CXXRewrittenBinaryOperatorBits
 
ExprWithCleanupsBitfields ExprWithCleanupsBits
 
StmtClass getStmtClass() const
 
CXXScalarValueInitExprBitfields CXXScalarValueInitExprBits
 
CXXConstructExprBitfields CXXConstructExprBits
 
CXXDependentScopeMemberExprBitfields CXXDependentScopeMemberExprBits
 
TypeTraitExprBitfields TypeTraitExprBits
 
CXXNewExprBitfields CXXNewExprBits
 
SourceLocExprBitfields SourceLocExprBits
 
ConstantExprBitfields ConstantExprBits
 
RequiresExprBitfields RequiresExprBits
 
CXXFoldExprBitfields CXXFoldExprBits
 
StmtExprBitfields StmtExprBits
 
StringLiteralBitfields StringLiteralBits
 
OpaqueValueExprBitfields OpaqueValueExprBits
 
CXXThrowExprBitfields CXXThrowExprBits
 
MemberExprBitfields MemberExprBits
 
PackIndexingExprBitfields PackIndexingExprBits
 
DeclRefExprBitfields DeclRefExprBits
 
CXXOperatorCallExprBitfields CXXOperatorCallExprBits
 
CXXDefaultInitExprBitfields CXXDefaultInitExprBits
 
NullStmtBitfields NullStmtBits
 
ArrayTypeTraitExprBitfields ArrayTypeTraitExprBits
 
PredefinedExprBitfields PredefinedExprBits
 
UnresolvedMemberExprBitfields UnresolvedMemberExprBits
 
PseudoObjectExprBitfields PseudoObjectExprBits
 
CXXDeleteExprBitfields CXXDeleteExprBits
 
CXXDefaultArgExprBitfields CXXDefaultArgExprBits
 
StringLiteral - This represents a string literal expression, e.g.
 
unsigned getLength() const
 
StringLiteralKind getKind() const
 
static StringLiteral * CreateEmpty(const ASTContext &Ctx, unsigned NumConcatenated, unsigned Length, unsigned CharByteWidth)
Construct an empty string literal.
 
unsigned getNumConcatenated() const
getNumConcatenated - Get the number of string literal tokens that were concatenated in translation ph...
 
unsigned getCharByteWidth() const
 
Represents a reference to a non-type template parameter that has been substituted with a template arg...
 
Represents a reference to a non-type template parameter pack that has been substituted with a non-tem...
 
void setColonLoc(SourceLocation L)
 
void setKeywordLoc(SourceLocation L)
 
void setNextSwitchCase(SwitchCase *SC)
 
SwitchStmt - This represents a 'switch' stmt.
 
void setSwitchLoc(SourceLocation L)
 
void setConditionVariableDeclStmt(DeclStmt *CondVar)
 
void setRParenLoc(SourceLocation Loc)
 
void setLParenLoc(SourceLocation Loc)
 
static SwitchStmt * CreateEmpty(const ASTContext &Ctx, bool HasInit, bool HasVar)
Create an empty switch statement optionally with storage for an init expression and a condition varia...
 
void setAllEnumCasesCovered()
Set a flag in the SwitchStmt indicating that if the 'switch (X)' is a switch over an enum value then ...
 
void setSwitchCaseList(SwitchCase *SC)
 
A convenient class for passing around template argument information.
 
void setLAngleLoc(SourceLocation Loc)
 
void setRAngleLoc(SourceLocation Loc)
 
void addArgument(const TemplateArgumentLoc &Loc)
 
Location wrapper for a TemplateArgument.
 
pack_iterator pack_begin() const
Iterator referencing the first argument of a template argument pack.
 
unsigned pack_size() const
The number of template arguments in the given template argument pack.
 
@ Pack
The template argument is actually a parameter pack.
 
ArgKind getKind() const
Return the kind of stored template argument.
 
A container of type source information.
 
A type trait used in the implementation of various C++11 and Library TR1 trait templates.
 
unsigned getNumArgs() const
Determine the number of arguments to this type trait.
 
static TypeTraitExpr * CreateDeserialized(const ASTContext &C, bool IsStoredAsBool, unsigned NumArgs)
 
UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand.
 
void setKind(UnaryExprOrTypeTrait K)
 
void setOperatorLoc(SourceLocation L)
 
void setRParenLoc(SourceLocation L)
 
void setArgument(Expr *E)
 
UnaryOperator - This represents the unary-expression's (except sizeof and alignof),...
 
void setOperatorLoc(SourceLocation L)
 
void setCanOverflow(bool C)
 
bool hasStoredFPFeatures() const
Is FPFeatures in Trailing Storage?
 
void setOpcode(Opcode Opc)
 
void setStoredFPFeatures(FPOptionsOverride F)
Set FPFeatures in trailing storage, used by Serialization & ASTImporter.
 
static UnaryOperator * CreateEmpty(const ASTContext &C, bool hasFPFeatures)
 
A reference to a name which we were able to look up during parsing but could not resolve to a specifi...
 
static UnresolvedLookupExpr * CreateEmpty(const ASTContext &Context, unsigned NumResults, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
 
Represents a C++ member access expression for which lookup produced a set of overloaded functions.
 
static UnresolvedMemberExpr * CreateEmpty(const ASTContext &Context, unsigned NumResults, bool HasTemplateKWAndArgsInfo, unsigned NumTemplateArgs)
 
void addDecl(NamedDecl *D)
 
A call to a literal operator (C++11 [over.literal]) written as a user-defined literal (C++11 [lit....
 
static UserDefinedLiteral * CreateEmpty(const ASTContext &Ctx, unsigned NumArgs, bool HasFPOptions, EmptyShell Empty)
 
Represents a call to the builtin function __builtin_va_arg.
 
void setRParenLoc(SourceLocation L)
 
void setIsMicrosoftABI(bool IsMS)
 
void setBuiltinLoc(SourceLocation L)
 
void setWrittenTypeInfo(TypeSourceInfo *TI)
 
WhileStmt - This represents a 'while' stmt.
 
void setLParenLoc(SourceLocation L)
 
void setRParenLoc(SourceLocation L)
 
void setWhileLoc(SourceLocation L)
 
static WhileStmt * CreateEmpty(const ASTContext &Ctx, bool HasVar)
Create an empty while statement optionally with storage for a condition variable.
 
void setConditionVariableDeclStmt(DeclStmt *CondVar)
 
@ SS_ConstraintsNotSatisfied
 
@ SS_ExprSubstitutionFailure
 
Information about a module that has been loaded by the ASTReader.
 
llvm::BitstreamCursor DeclsCursor
DeclsCursor - This is a cursor to the start of the DECLTYPES_BLOCK block.
 
StmtCode
Record codes for each kind of statement or expression.
 
DesignatorTypes
The kinds of designators that can occur in a DesignatedInitExpr.
 
@ STMT_OMP_SECTION_DIRECTIVE
 
@ STMT_OPENACC_COMBINED_CONSTRUCT
 
@ EXPR_DESIGNATED_INIT
A DesignatedInitExpr record.
 
@ EXPR_COMPOUND_LITERAL
A CompoundLiteralExpr record.
 
@ STMT_OMP_ASSUME_DIRECTIVE
 
@ STMT_OPENACC_HOST_DATA_CONSTRUCT
 
@ STMT_OMP_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE
 
@ EXPR_OBJC_IVAR_REF_EXPR
An ObjCIvarRefExpr record.
 
@ STMT_OMP_SCOPE_DIRECTIVE
 
@ STMT_OMP_PARALLEL_FOR_SIMD_DIRECTIVE
 
@ EXPR_MEMBER
A MemberExpr record.
 
@ STMT_OMP_TARGET_TEAMS_DIRECTIVE
 
@ EXPR_CXX_TEMPORARY_OBJECT
A CXXTemporaryObjectExpr record.
 
@ EXPR_CXX_UNRESOLVED_LOOKUP
 
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE
 
@ EXPR_COMPOUND_ASSIGN_OPERATOR
A CompoundAssignOperator record.
 
@ EXPR_EXPR_WITH_CLEANUPS
 
@ EXPR_CXX_STATIC_CAST
A CXXStaticCastExpr record.
 
@ STMT_OMP_META_DIRECTIVE
 
@ EXPR_OBJC_STRING_LITERAL
An ObjCStringLiteral record.
 
@ EXPR_CXX_PROPERTY_REF_EXPR
 
@ EXPR_SYCL_UNIQUE_STABLE_NAME
 
@ STMT_OMP_TARGET_DATA_DIRECTIVE
 
@ STMT_OMP_BARRIER_DIRECTIVE
 
@ EXPR_VA_ARG
A VAArgExpr record.
 
@ STMT_OMP_TEAMS_DISTRIBUTE_SIMD_DIRECTIVE
 
@ STMT_OPENACC_SHUTDOWN_CONSTRUCT
 
@ EXPR_OBJC_ISA
An ObjCIsa Expr record.
 
@ STMT_OMP_SINGLE_DIRECTIVE
 
@ STMT_OPENACC_EXIT_DATA_CONSTRUCT
 
@ EXPR_CXX_OPERATOR_CALL
A CXXOperatorCallExpr record.
 
@ STMT_OBJC_AT_TRY
An ObjCAtTryStmt record.
 
@ STMT_OMP_TARGET_EXIT_DATA_DIRECTIVE
 
@ EXPR_CXX_UNRESOLVED_CONSTRUCT
 
@ EXPR_FIXEDPOINT_LITERAL
 
@ STMT_DO
A DoStmt record.
 
@ STMT_OBJC_CATCH
An ObjCAtCatchStmt record.
 
@ STMT_OMP_TARGET_DIRECTIVE
 
@ STMT_IF
An IfStmt record.
 
@ EXPR_CXX_EXPRESSION_TRAIT
 
@ EXPR_STRING_LITERAL
A StringLiteral record.
 
@ EXPR_OBJC_AVAILABILITY_CHECK
An ObjCAvailabilityCheckExpr record.
 
@ STMT_OMP_PARALLEL_MASKED_TASKLOOP_DIRECTIVE
 
@ EXPR_MATRIX_SUBSCRIPT
An MatrixSubscriptExpr record.
 
@ EXPR_PSEUDO_OBJECT
A PseudoObjectExpr record.
 
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE
 
@ EXPR_IMPLICIT_CAST
An ImplicitCastExpr record.
 
@ STMT_OMP_FLUSH_DIRECTIVE
 
@ STMT_CAPTURED
A CapturedStmt record.
 
@ STMT_OMP_TARGET_PARALLEL_FOR_SIMD_DIRECTIVE
 
@ STMT_OMP_MASTER_TASKLOOP_DIRECTIVE
 
@ STMT_OMP_TILE_DIRECTIVE
 
@ STMT_OMP_CANCELLATION_POINT_DIRECTIVE
 
@ STMT_GCCASM
A GCC-style AsmStmt record.
 
@ EXPR_IMAGINARY_LITERAL
An ImaginaryLiteral record.
 
@ STMT_OMP_INTERCHANGE_DIRECTIVE
 
@ STMT_WHILE
A WhileStmt record.
 
@ EXPR_CONVERT_VECTOR
A ConvertVectorExpr record.
 
@ EXPR_OBJC_SUBSCRIPT_REF_EXPR
An ObjCSubscriptRefExpr record.
 
@ STMT_OPENACC_COMPUTE_CONSTRUCT
 
@ STMT_OMP_TASKWAIT_DIRECTIVE
 
@ STMT_OMP_TASKYIELD_DIRECTIVE
 
@ EXPR_STMT
A StmtExpr record.
 
@ STMT_OMP_PARALLEL_GENERIC_LOOP_DIRECTIVE
 
@ EXPR_CXX_REINTERPRET_CAST
A CXXReinterpretCastExpr record.
 
@ EXPR_DESIGNATED_INIT_UPDATE
A DesignatedInitUpdateExpr record.
 
@ STMT_OBJC_AT_SYNCHRONIZED
An ObjCAtSynchronizedStmt record.
 
@ STMT_OMP_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE
 
@ STMT_OMP_TASKLOOP_SIMD_DIRECTIVE
 
@ STMT_MS_DEPENDENT_EXISTS
 
@ EXPR_BUILTIN_BIT_CAST
A BuiltinBitCastExpr record.
 
@ EXPR_CXX_PROPERTY_SUBSCRIPT_EXPR
 
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD_DIRECTIVE
 
@ EXPR_CXX_PSEUDO_DESTRUCTOR
 
@ STMT_OMP_MASKED_DIRECTIVE
 
@ STMT_SYCLKERNELCALL
A SYCLKernelCallStmt record.
 
@ STMT_OMP_TARGET_ENTER_DATA_DIRECTIVE
 
@ EXPR_CHARACTER_LITERAL
A CharacterLiteral record.
 
@ EXPR_OBJC_ENCODE
An ObjCEncodeExpr record.
 
@ STMT_OMP_PARALLEL_SECTIONS_DIRECTIVE
 
@ STMT_OMP_PARALLEL_FOR_DIRECTIVE
 
@ EXPR_CSTYLE_CAST
A CStyleCastExpr record.
 
@ STMT_OMP_PARALLEL_DIRECTIVE
 
@ EXPR_OBJC_BOXED_EXPRESSION
 
@ EXPR_OBJC_BOOL_LITERAL
An ObjCBoolLiteralExpr record.
 
@ EXPR_CXX_BIND_TEMPORARY
 
@ STMT_OMP_ATOMIC_DIRECTIVE
 
@ STMT_OPENACC_ATOMIC_CONSTRUCT
 
@ STMT_OMP_ORDERED_DIRECTIVE
 
@ EXPR_EXT_VECTOR_ELEMENT
An ExtVectorElementExpr record.
 
@ STMT_OMP_TEAMS_GENERIC_LOOP_DIRECTIVE
 
@ STMT_OMP_CRITICAL_DIRECTIVE
 
@ EXPR_ATOMIC
An AtomicExpr record.
 
@ STMT_OPENACC_ENTER_DATA_CONSTRUCT
 
@ STMT_OMP_CANCEL_DIRECTIVE
 
@ EXPR_OFFSETOF
An OffsetOfExpr record.
 
@ STMT_RETURN
A ReturnStmt record.
 
@ STMT_OBJC_FOR_COLLECTION
An ObjCForCollectionStmt record.
 
@ STMT_OPENACC_CACHE_CONSTRUCT
 
@ STMT_OMP_TARGET_TEAMS_DISTRIBUTE_DIRECTIVE
 
@ EXPR_ARRAY_INIT_LOOP
An ArrayInitLoopExpr record.
 
@ STMT_OMP_PARALLEL_MASTER_TASKLOOP_DIRECTIVE
 
@ STMT_OMP_PARALLEL_MASKED_TASKLOOP_SIMD_DIRECTIVE
 
@ STMT_CONTINUE
A ContinueStmt record.
 
@ EXPR_PREDEFINED
A PredefinedExpr record.
 
@ EXPR_OPENACC_ASTERISK_SIZE
 
@ STMT_OMP_DEPOBJ_DIRECTIVE
 
@ EXPR_CXX_BOOL_LITERAL
A CXXBoolLiteralExpr record.
 
@ EXPR_PAREN_LIST
A ParenListExpr record.
 
@ EXPR_CXX_PAREN_LIST_INIT
A CXXParenListInitExpr record.
 
@ STMT_OMP_DISPATCH_DIRECTIVE
 
@ STMT_OMP_MASTER_TASKLOOP_SIMD_DIRECTIVE
 
@ STMT_OPENACC_DATA_CONSTRUCT
 
@ STMT_OMP_TASKLOOP_DIRECTIVE
 
@ STMT_COMPOUND
A CompoundStmt record.
 
@ STMT_OMP_CANONICAL_LOOP
 
@ STMT_FOR
A ForStmt record.
 
@ STMT_ATTRIBUTED
An AttributedStmt record.
 
@ STMT_OMP_PARALLEL_MASTER_DIRECTIVE
 
@ STMT_OPENACC_WAIT_CONSTRUCT
 
@ STMT_OMP_TARGET_TEAMS_GENERIC_LOOP_DIRECTIVE
 
@ STMT_OMP_TEAMS_DIRECTIVE
 
@ STMT_OMP_TARGET_PARALLEL_DIRECTIVE
 
@ EXPR_CXX_REWRITTEN_BINARY_OPERATOR
A CXXRewrittenBinaryOperator record.
 
@ STMT_GOTO
A GotoStmt record.
 
@ EXPR_NO_INIT
An NoInitExpr record.
 
@ EXPR_OBJC_ARRAY_LITERAL
 
@ STMT_OMP_ERROR_DIRECTIVE
 
@ EXPR_OBJC_PROTOCOL_EXPR
An ObjCProtocolExpr record.
 
@ STMT_OMP_GENERIC_LOOP_DIRECTIVE
 
@ EXPR_ARRAY_INIT_INDEX
An ArrayInitIndexExpr record.
 
@ STMT_OMP_TASK_DIRECTIVE
 
@ STMT_OPENACC_INIT_CONSTRUCT
 
@ EXPR_CXX_CONSTRUCT
A CXXConstructExpr record.
 
@ STMT_OMP_PARALLEL_MASKED_DIRECTIVE
 
@ STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE
 
@ STMT_OPENACC_UPDATE_CONSTRUCT
 
@ STMT_OMP_PARALLEL_MASTER_TASKLOOP_SIMD_DIRECTIVE
 
@ EXPR_OBJC_DICTIONARY_LITERAL
 
@ STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE
 
@ EXPR_CXX_DYNAMIC_CAST
A CXXDynamicCastExpr record.
 
@ STMT_CXX_TRY
A CXXTryStmt record.
 
@ EXPR_GENERIC_SELECTION
A GenericSelectionExpr record.
 
@ STMT_OMP_TARGET_SIMD_DIRECTIVE
 
@ EXPR_OBJC_INDIRECT_COPY_RESTORE
An ObjCIndirectCopyRestoreExpr record.
 
@ EXPR_CXX_INHERITED_CTOR_INIT
A CXXInheritedCtorInitExpr record.
 
@ EXPR_CALL
A CallExpr record.
 
@ EXPR_GNU_NULL
A GNUNullExpr record.
 
@ EXPR_BINARY_CONDITIONAL_OPERATOR
 
@ EXPR_OBJC_PROPERTY_REF_EXPR
An ObjCPropertyRefExpr record.
 
@ STMT_OMP_TARGET_PARALLEL_FOR_DIRECTIVE
 
@ STMT_OMP_FOR_SIMD_DIRECTIVE
 
@ STMT_OMP_MASKED_TASKLOOP_DIRECTIVE
 
@ EXPR_CXX_CONST_CAST
A CXXConstCastExpr record.
 
@ STMT_OMP_SCAN_DIRECTIVE
 
@ STMT_REF_PTR
A reference to a previously [de]serialized Stmt record.
 
@ EXPR_OBJC_MESSAGE_EXPR
An ObjCMessageExpr record.
 
@ EXPR_CXX_DEPENDENT_SCOPE_DECL_REF
 
@ STMT_OMP_FUSE_DIRECTIVE
 
@ STMT_OMP_TEAMS_DISTRIBUTE_DIRECTIVE
 
@ STMT_CASE
A CaseStmt record.
 
@ EXPR_CONSTANT
A constant expression context.
 
@ EXPR_FUNCTION_PARM_PACK
 
@ STMT_STOP
A marker record that indicates that we are at the end of an expression.
 
@ EXPR_CXX_NULL_PTR_LITERAL
 
@ STMT_OMP_TARGET_UPDATE_DIRECTIVE
 
@ STMT_MSASM
A MS-style AsmStmt record.
 
@ STMT_OMP_DISTRIBUTE_DIRECTIVE
 
@ EXPR_CONDITIONAL_OPERATOR
A ConditionOperator record.
 
@ EXPR_BINARY_OPERATOR
A BinaryOperator record.
 
@ EXPR_CXX_STD_INITIALIZER_LIST
A CXXStdInitializerListExpr record.
 
@ STMT_OMP_TASKGROUP_DIRECTIVE
 
@ STMT_OMP_REVERSE_DIRECTIVE
 
@ EXPR_SHUFFLE_VECTOR
A ShuffleVectorExpr record.
 
@ STMT_OBJC_FINALLY
An ObjCAtFinallyStmt record.
 
@ EXPR_OBJC_SELECTOR_EXPR
An ObjCSelectorExpr record.
 
@ EXPR_FLOATING_LITERAL
A FloatingLiteral record.
 
@ STMT_OMP_MASTER_DIRECTIVE
 
@ EXPR_CXX_DEPENDENT_SCOPE_MEMBER
 
@ STMT_NULL_PTR
A NULL expression.
 
@ STMP_OMP_STRIPE_DIRECTIVE
 
@ STMT_DEFAULT
A DefaultStmt record.
 
@ EXPR_CHOOSE
A ChooseExpr record.
 
@ STMT_OMP_UNROLL_DIRECTIVE
 
@ STMT_NULL
A NullStmt record.
 
@ STMT_OMP_SIMD_DIRECTIVE
 
@ EXPR_DECL_REF
A DeclRefExpr record.
 
@ STMT_OPENACC_LOOP_CONSTRUCT
 
@ EXPR_SUBST_NON_TYPE_TEMPLATE_PARM
 
@ EXPR_INIT_LIST
An InitListExpr record.
 
@ EXPR_IMPLICIT_VALUE_INIT
An ImplicitValueInitExpr record.
 
@ STMT_OBJC_AUTORELEASE_POOL
An ObjCAutoreleasePoolStmt record.
 
@ STMT_OPENACC_SET_CONSTRUCT
 
@ EXPR_RECOVERY
A RecoveryExpr record.
 
@ EXPR_PAREN
A ParenExpr record.
 
@ STMT_OMP_TARGET_PARALLEL_GENERIC_LOOP_DIRECTIVE
 
@ STMT_LABEL
A LabelStmt record.
 
@ EXPR_CXX_FUNCTIONAL_CAST
A CXXFunctionalCastExpr record.
 
@ EXPR_USER_DEFINED_LITERAL
A UserDefinedLiteral record.
 
@ EXPR_INTEGER_LITERAL
An IntegerLiteral record.
 
@ EXPR_SOURCE_LOC
A SourceLocExpr record.
 
@ EXPR_MATERIALIZE_TEMPORARY
 
@ EXPR_CXX_MEMBER_CALL
A CXXMemberCallExpr record.
 
@ STMT_OMP_INTEROP_DIRECTIVE
 
@ STMT_SWITCH
A SwitchStmt record.
 
@ STMT_DECL
A DeclStmt record.
 
@ EXPR_CXX_UNRESOLVED_MEMBER
 
@ EXPR_OBJC_KVC_REF_EXPR
UNUSED.
 
@ STMT_OMP_SECTIONS_DIRECTIVE
 
@ EXPR_SUBST_NON_TYPE_TEMPLATE_PARM_PACK
 
@ EXPR_CXX_SCALAR_VALUE_INIT
 
@ STMT_OMP_MASKED_TASKLOOP_SIMD_DIRECTIVE
 
@ STMT_OMP_DISTRIBUTE_SIMD_DIRECTIVE
 
@ EXPR_SIZEOF_ALIGN_OF
A SizefAlignOfExpr record.
 
@ STMT_BREAK
A BreakStmt record.
 
@ STMT_OBJC_AT_THROW
An ObjCAtThrowStmt record.
 
@ EXPR_ADDR_LABEL
An AddrLabelExpr record.
 
@ STMT_CXX_FOR_RANGE
A CXXForRangeStmt record.
 
@ EXPR_CXX_ADDRSPACE_CAST
A CXXAddrspaceCastExpr record.
 
@ EXPR_ARRAY_SUBSCRIPT
An ArraySubscriptExpr record.
 
@ EXPR_CONCEPT_SPECIALIZATION
 
@ EXPR_UNARY_OPERATOR
A UnaryOperator record.
 
@ STMT_CXX_CATCH
A CXXCatchStmt record.
 
@ EXPR_BUILTIN_PP_EMBED
A EmbedExpr record.
 
@ STMT_INDIRECT_GOTO
An IndirectGotoStmt record.
 
@ DESIG_ARRAY_RANGE
GNU array range designator.
 
@ DESIG_FIELD_NAME
Field designator where only the field name is known.
 
@ DESIG_FIELD_DECL
Field designator where the field has been resolved to a declaration.
 
@ DESIG_ARRAY
Array designator.
 
The JSON file list parser is used to communicate input to InstallAPI.
 
ConstantResultStorageKind
Describes the kind of result that can be tail-allocated.
 
ArrayTypeTrait
Names for the array type traits.
 
ExprDependenceScope::ExprDependence ExprDependence
 
IfStatementKind
In an if statement, this denotes whether the statement is a constexpr or consteval if statement.
 
ExprObjectKind
A further classification of the kind of object referenced by an l-value or x-value.
 
AccessSpecifier
A C++ access specifier (public, private, protected), plus the special value "none" which means differ...
 
SmallVector< Attr *, 4 > AttrVec
AttrVec - A vector of Attr, which is how they are stored on the AST.
 
nullptr
This class represents a compute construct, representing a 'Kind' of ‘parallel’, 'serial',...
 
CapturedRegionKind
The different kinds of captured statement.
 
OpenACCComputeConstruct(OpenACCDirectiveKind K, SourceLocation Start, SourceLocation DirectiveLoc, SourceLocation End, ArrayRef< const OpenACCClause * > Clauses, Stmt *StructuredBlock)
 
UnaryExprOrTypeTrait
Names for the "expression or type" traits.
 
const FunctionProtoType * T
 
std::pair< SourceLocation, StringRef > ConstraintSubstitutionDiagnostic
Unsatisfied constraint expressions if the template arguments could be substituted into them,...
 
CastKind
CastKind - The kind of operation required for a conversion.
 
llvm::omp::Directive OpenMPDirectiveKind
OpenMP directives.
 
ExprValueKind
The categorization of expression values, currently following the C++11 scheme.
 
U cast(CodeGen::Address addr)
 
@ Implicit
An implicit conversion.
 
static ASTConstraintSatisfaction * Create(const ASTContext &C, const ConstraintSatisfaction &Satisfaction)
 
Represents an explicit template argument list in C++, e.g., the "<int>" in "sort<int>".
 
void initializeFrom(SourceLocation TemplateKWLoc, const TemplateArgumentListInfo &List, TemplateArgumentLoc *OutArgArray)
 
Expr * CounterUpdate
Updater for the internal counter: ++CounterVD;.
 
Expr * Upper
Normalized upper bound.
 
Expr * Update
Update expression for the originally specified iteration variable, calculated as VD = Begin + Counter...
 
VarDecl * CounterVD
Internal normalized counter.
 
A placeholder type used to construct an empty shell of a type, that will be filled in later (e....