1 1.1 joerg //===- ASTReaderStmt.cpp - Stmt/Expr Deserialization ----------------------===// 2 1.1 joerg // 3 1.1 joerg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 1.1 joerg // See https://llvm.org/LICENSE.txt for license information. 5 1.1 joerg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 1.1 joerg // 7 1.1 joerg //===----------------------------------------------------------------------===// 8 1.1 joerg // 9 1.1 joerg // Statement/expression deserialization. This implements the 10 1.1 joerg // ASTReader::ReadStmt method. 11 1.1 joerg // 12 1.1 joerg //===----------------------------------------------------------------------===// 13 1.1 joerg 14 1.1.1.2 joerg #include "clang/AST/ASTConcept.h" 15 1.1 joerg #include "clang/AST/ASTContext.h" 16 1.1 joerg #include "clang/AST/AttrIterator.h" 17 1.1 joerg #include "clang/AST/Decl.h" 18 1.1 joerg #include "clang/AST/DeclAccessPair.h" 19 1.1 joerg #include "clang/AST/DeclCXX.h" 20 1.1 joerg #include "clang/AST/DeclGroup.h" 21 1.1 joerg #include "clang/AST/DeclObjC.h" 22 1.1 joerg #include "clang/AST/DeclTemplate.h" 23 1.1 joerg #include "clang/AST/DeclarationName.h" 24 1.1.1.2 joerg #include "clang/AST/DependenceFlags.h" 25 1.1 joerg #include "clang/AST/Expr.h" 26 1.1 joerg #include "clang/AST/ExprCXX.h" 27 1.1 joerg #include "clang/AST/ExprObjC.h" 28 1.1 joerg #include "clang/AST/ExprOpenMP.h" 29 1.1 joerg #include "clang/AST/NestedNameSpecifier.h" 30 1.1 joerg #include "clang/AST/OpenMPClause.h" 31 1.1 joerg #include "clang/AST/OperationKinds.h" 32 1.1 joerg #include "clang/AST/Stmt.h" 33 1.1 joerg #include "clang/AST/StmtCXX.h" 34 1.1 joerg #include "clang/AST/StmtObjC.h" 35 1.1 joerg #include "clang/AST/StmtOpenMP.h" 36 1.1 joerg #include "clang/AST/StmtVisitor.h" 37 1.1 joerg #include "clang/AST/TemplateBase.h" 38 1.1 joerg #include "clang/AST/Type.h" 39 1.1 joerg #include "clang/AST/UnresolvedSet.h" 40 1.1 joerg #include "clang/Basic/CapturedStmt.h" 41 1.1 joerg #include "clang/Basic/ExpressionTraits.h" 42 1.1 joerg #include "clang/Basic/LLVM.h" 43 1.1 joerg #include "clang/Basic/Lambda.h" 44 1.1 joerg #include "clang/Basic/LangOptions.h" 45 1.1 joerg #include "clang/Basic/OpenMPKinds.h" 46 1.1 joerg #include "clang/Basic/OperatorKinds.h" 47 1.1 joerg #include "clang/Basic/SourceLocation.h" 48 1.1 joerg #include "clang/Basic/Specifiers.h" 49 1.1 joerg #include "clang/Basic/TypeTraits.h" 50 1.1 joerg #include "clang/Lex/Token.h" 51 1.1 joerg #include "clang/Serialization/ASTBitCodes.h" 52 1.1.1.2 joerg #include "clang/Serialization/ASTRecordReader.h" 53 1.1.1.2 joerg #include "llvm/ADT/BitmaskEnum.h" 54 1.1 joerg #include "llvm/ADT/DenseMap.h" 55 1.1 joerg #include "llvm/ADT/SmallString.h" 56 1.1 joerg #include "llvm/ADT/SmallVector.h" 57 1.1 joerg #include "llvm/ADT/StringRef.h" 58 1.1 joerg #include "llvm/Bitstream/BitstreamReader.h" 59 1.1 joerg #include "llvm/Support/Casting.h" 60 1.1 joerg #include "llvm/Support/ErrorHandling.h" 61 1.1 joerg #include <algorithm> 62 1.1 joerg #include <cassert> 63 1.1 joerg #include <cstdint> 64 1.1 joerg #include <string> 65 1.1 joerg 66 1.1 joerg using namespace clang; 67 1.1 joerg using namespace serialization; 68 1.1 joerg 69 1.1 joerg namespace clang { 70 1.1 joerg 71 1.1 joerg class ASTStmtReader : public StmtVisitor<ASTStmtReader> { 72 1.1 joerg ASTRecordReader &Record; 73 1.1 joerg llvm::BitstreamCursor &DeclsCursor; 74 1.1 joerg 75 1.1.1.2 joerg SourceLocation readSourceLocation() { 76 1.1 joerg return Record.readSourceLocation(); 77 1.1 joerg } 78 1.1 joerg 79 1.1.1.2 joerg SourceRange readSourceRange() { 80 1.1 joerg return Record.readSourceRange(); 81 1.1 joerg } 82 1.1 joerg 83 1.1.1.2 joerg std::string readString() { 84 1.1 joerg return Record.readString(); 85 1.1 joerg } 86 1.1 joerg 87 1.1.1.2 joerg TypeSourceInfo *readTypeSourceInfo() { 88 1.1.1.2 joerg return Record.readTypeSourceInfo(); 89 1.1 joerg } 90 1.1 joerg 91 1.1.1.2 joerg Decl *readDecl() { 92 1.1 joerg return Record.readDecl(); 93 1.1 joerg } 94 1.1 joerg 95 1.1 joerg template<typename T> 96 1.1.1.2 joerg T *readDeclAs() { 97 1.1 joerg return Record.readDeclAs<T>(); 98 1.1 joerg } 99 1.1 joerg 100 1.1 joerg public: 101 1.1 joerg ASTStmtReader(ASTRecordReader &Record, llvm::BitstreamCursor &Cursor) 102 1.1 joerg : Record(Record), DeclsCursor(Cursor) {} 103 1.1 joerg 104 1.1 joerg /// The number of record fields required for the Stmt class 105 1.1 joerg /// itself. 106 1.1.1.2 joerg static const unsigned NumStmtFields = 0; 107 1.1 joerg 108 1.1 joerg /// The number of record fields required for the Expr class 109 1.1 joerg /// itself. 110 1.1.1.2 joerg static const unsigned NumExprFields = 111 1.1.1.2 joerg NumStmtFields + llvm::BitWidth<ExprDependence> + 3; 112 1.1 joerg 113 1.1 joerg /// Read and initialize a ExplicitTemplateArgumentList structure. 114 1.1 joerg void ReadTemplateKWAndArgsInfo(ASTTemplateKWAndArgsInfo &Args, 115 1.1 joerg TemplateArgumentLoc *ArgsLocArray, 116 1.1 joerg unsigned NumTemplateArgs); 117 1.1 joerg 118 1.1 joerg /// Read and initialize a ExplicitTemplateArgumentList structure. 119 1.1 joerg void ReadExplicitTemplateArgumentList(ASTTemplateArgumentListInfo &ArgList, 120 1.1 joerg unsigned NumTemplateArgs); 121 1.1 joerg 122 1.1 joerg void VisitStmt(Stmt *S); 123 1.1 joerg #define STMT(Type, Base) \ 124 1.1 joerg void Visit##Type(Type *); 125 1.1 joerg #include "clang/AST/StmtNodes.inc" 126 1.1 joerg }; 127 1.1 joerg 128 1.1 joerg } // namespace clang 129 1.1 joerg 130 1.1 joerg void ASTStmtReader::ReadTemplateKWAndArgsInfo(ASTTemplateKWAndArgsInfo &Args, 131 1.1 joerg TemplateArgumentLoc *ArgsLocArray, 132 1.1 joerg unsigned NumTemplateArgs) { 133 1.1.1.2 joerg SourceLocation TemplateKWLoc = readSourceLocation(); 134 1.1 joerg TemplateArgumentListInfo ArgInfo; 135 1.1.1.2 joerg ArgInfo.setLAngleLoc(readSourceLocation()); 136 1.1.1.2 joerg ArgInfo.setRAngleLoc(readSourceLocation()); 137 1.1 joerg for (unsigned i = 0; i != NumTemplateArgs; ++i) 138 1.1 joerg ArgInfo.addArgument(Record.readTemplateArgumentLoc()); 139 1.1 joerg Args.initializeFrom(TemplateKWLoc, ArgInfo, ArgsLocArray); 140 1.1 joerg } 141 1.1 joerg 142 1.1 joerg void ASTStmtReader::VisitStmt(Stmt *S) { 143 1.1 joerg assert(Record.getIdx() == NumStmtFields && "Incorrect statement field count"); 144 1.1 joerg } 145 1.1 joerg 146 1.1 joerg void ASTStmtReader::VisitNullStmt(NullStmt *S) { 147 1.1 joerg VisitStmt(S); 148 1.1.1.2 joerg S->setSemiLoc(readSourceLocation()); 149 1.1 joerg S->NullStmtBits.HasLeadingEmptyMacro = Record.readInt(); 150 1.1 joerg } 151 1.1 joerg 152 1.1 joerg void ASTStmtReader::VisitCompoundStmt(CompoundStmt *S) { 153 1.1 joerg VisitStmt(S); 154 1.1 joerg SmallVector<Stmt *, 16> Stmts; 155 1.1 joerg unsigned NumStmts = Record.readInt(); 156 1.1 joerg while (NumStmts--) 157 1.1 joerg Stmts.push_back(Record.readSubStmt()); 158 1.1 joerg S->setStmts(Stmts); 159 1.1.1.2 joerg S->CompoundStmtBits.LBraceLoc = readSourceLocation(); 160 1.1.1.2 joerg S->RBraceLoc = readSourceLocation(); 161 1.1 joerg } 162 1.1 joerg 163 1.1 joerg void ASTStmtReader::VisitSwitchCase(SwitchCase *S) { 164 1.1 joerg VisitStmt(S); 165 1.1 joerg Record.recordSwitchCaseID(S, Record.readInt()); 166 1.1.1.2 joerg S->setKeywordLoc(readSourceLocation()); 167 1.1.1.2 joerg S->setColonLoc(readSourceLocation()); 168 1.1 joerg } 169 1.1 joerg 170 1.1 joerg void ASTStmtReader::VisitCaseStmt(CaseStmt *S) { 171 1.1 joerg VisitSwitchCase(S); 172 1.1 joerg bool CaseStmtIsGNURange = Record.readInt(); 173 1.1 joerg S->setLHS(Record.readSubExpr()); 174 1.1 joerg S->setSubStmt(Record.readSubStmt()); 175 1.1 joerg if (CaseStmtIsGNURange) { 176 1.1 joerg S->setRHS(Record.readSubExpr()); 177 1.1.1.2 joerg S->setEllipsisLoc(readSourceLocation()); 178 1.1 joerg } 179 1.1 joerg } 180 1.1 joerg 181 1.1 joerg void ASTStmtReader::VisitDefaultStmt(DefaultStmt *S) { 182 1.1 joerg VisitSwitchCase(S); 183 1.1 joerg S->setSubStmt(Record.readSubStmt()); 184 1.1 joerg } 185 1.1 joerg 186 1.1 joerg void ASTStmtReader::VisitLabelStmt(LabelStmt *S) { 187 1.1 joerg VisitStmt(S); 188 1.1.1.2 joerg bool IsSideEntry = Record.readInt(); 189 1.1.1.2 joerg auto *LD = readDeclAs<LabelDecl>(); 190 1.1 joerg LD->setStmt(S); 191 1.1 joerg S->setDecl(LD); 192 1.1 joerg S->setSubStmt(Record.readSubStmt()); 193 1.1.1.2 joerg S->setIdentLoc(readSourceLocation()); 194 1.1.1.2 joerg S->setSideEntry(IsSideEntry); 195 1.1 joerg } 196 1.1 joerg 197 1.1 joerg void ASTStmtReader::VisitAttributedStmt(AttributedStmt *S) { 198 1.1 joerg VisitStmt(S); 199 1.1 joerg // NumAttrs in AttributedStmt is set when creating an empty 200 1.1 joerg // AttributedStmt in AttributedStmt::CreateEmpty, since it is needed 201 1.1 joerg // to allocate the right amount of space for the trailing Attr *. 202 1.1 joerg uint64_t NumAttrs = Record.readInt(); 203 1.1 joerg AttrVec Attrs; 204 1.1 joerg Record.readAttributes(Attrs); 205 1.1 joerg (void)NumAttrs; 206 1.1 joerg assert(NumAttrs == S->AttributedStmtBits.NumAttrs); 207 1.1 joerg assert(NumAttrs == Attrs.size()); 208 1.1 joerg std::copy(Attrs.begin(), Attrs.end(), S->getAttrArrayPtr()); 209 1.1 joerg S->SubStmt = Record.readSubStmt(); 210 1.1.1.2 joerg S->AttributedStmtBits.AttrLoc = readSourceLocation(); 211 1.1 joerg } 212 1.1 joerg 213 1.1 joerg void ASTStmtReader::VisitIfStmt(IfStmt *S) { 214 1.1 joerg VisitStmt(S); 215 1.1 joerg 216 1.1 joerg S->setConstexpr(Record.readInt()); 217 1.1 joerg bool HasElse = Record.readInt(); 218 1.1 joerg bool HasVar = Record.readInt(); 219 1.1 joerg bool HasInit = Record.readInt(); 220 1.1 joerg 221 1.1 joerg S->setCond(Record.readSubExpr()); 222 1.1 joerg S->setThen(Record.readSubStmt()); 223 1.1 joerg if (HasElse) 224 1.1 joerg S->setElse(Record.readSubStmt()); 225 1.1 joerg if (HasVar) 226 1.1.1.2 joerg S->setConditionVariable(Record.getContext(), readDeclAs<VarDecl>()); 227 1.1 joerg if (HasInit) 228 1.1 joerg S->setInit(Record.readSubStmt()); 229 1.1 joerg 230 1.1.1.2 joerg S->setIfLoc(readSourceLocation()); 231 1.1.1.2 joerg S->setLParenLoc(readSourceLocation()); 232 1.1.1.2 joerg S->setRParenLoc(readSourceLocation()); 233 1.1 joerg if (HasElse) 234 1.1.1.2 joerg S->setElseLoc(readSourceLocation()); 235 1.1 joerg } 236 1.1 joerg 237 1.1 joerg void ASTStmtReader::VisitSwitchStmt(SwitchStmt *S) { 238 1.1 joerg VisitStmt(S); 239 1.1 joerg 240 1.1 joerg bool HasInit = Record.readInt(); 241 1.1 joerg bool HasVar = Record.readInt(); 242 1.1 joerg bool AllEnumCasesCovered = Record.readInt(); 243 1.1 joerg if (AllEnumCasesCovered) 244 1.1 joerg S->setAllEnumCasesCovered(); 245 1.1 joerg 246 1.1 joerg S->setCond(Record.readSubExpr()); 247 1.1 joerg S->setBody(Record.readSubStmt()); 248 1.1 joerg if (HasInit) 249 1.1 joerg S->setInit(Record.readSubStmt()); 250 1.1 joerg if (HasVar) 251 1.1.1.2 joerg S->setConditionVariable(Record.getContext(), readDeclAs<VarDecl>()); 252 1.1 joerg 253 1.1.1.2 joerg S->setSwitchLoc(readSourceLocation()); 254 1.1.1.2 joerg S->setLParenLoc(readSourceLocation()); 255 1.1.1.2 joerg S->setRParenLoc(readSourceLocation()); 256 1.1 joerg 257 1.1 joerg SwitchCase *PrevSC = nullptr; 258 1.1 joerg for (auto E = Record.size(); Record.getIdx() != E; ) { 259 1.1 joerg SwitchCase *SC = Record.getSwitchCaseWithID(Record.readInt()); 260 1.1 joerg if (PrevSC) 261 1.1 joerg PrevSC->setNextSwitchCase(SC); 262 1.1 joerg else 263 1.1 joerg S->setSwitchCaseList(SC); 264 1.1 joerg 265 1.1 joerg PrevSC = SC; 266 1.1 joerg } 267 1.1 joerg } 268 1.1 joerg 269 1.1 joerg void ASTStmtReader::VisitWhileStmt(WhileStmt *S) { 270 1.1 joerg VisitStmt(S); 271 1.1 joerg 272 1.1 joerg bool HasVar = Record.readInt(); 273 1.1 joerg 274 1.1 joerg S->setCond(Record.readSubExpr()); 275 1.1 joerg S->setBody(Record.readSubStmt()); 276 1.1 joerg if (HasVar) 277 1.1.1.2 joerg S->setConditionVariable(Record.getContext(), readDeclAs<VarDecl>()); 278 1.1 joerg 279 1.1.1.2 joerg S->setWhileLoc(readSourceLocation()); 280 1.1.1.2 joerg S->setLParenLoc(readSourceLocation()); 281 1.1.1.2 joerg S->setRParenLoc(readSourceLocation()); 282 1.1 joerg } 283 1.1 joerg 284 1.1 joerg void ASTStmtReader::VisitDoStmt(DoStmt *S) { 285 1.1 joerg VisitStmt(S); 286 1.1 joerg S->setCond(Record.readSubExpr()); 287 1.1 joerg S->setBody(Record.readSubStmt()); 288 1.1.1.2 joerg S->setDoLoc(readSourceLocation()); 289 1.1.1.2 joerg S->setWhileLoc(readSourceLocation()); 290 1.1.1.2 joerg S->setRParenLoc(readSourceLocation()); 291 1.1 joerg } 292 1.1 joerg 293 1.1 joerg void ASTStmtReader::VisitForStmt(ForStmt *S) { 294 1.1 joerg VisitStmt(S); 295 1.1 joerg S->setInit(Record.readSubStmt()); 296 1.1 joerg S->setCond(Record.readSubExpr()); 297 1.1.1.2 joerg S->setConditionVariable(Record.getContext(), readDeclAs<VarDecl>()); 298 1.1 joerg S->setInc(Record.readSubExpr()); 299 1.1 joerg S->setBody(Record.readSubStmt()); 300 1.1.1.2 joerg S->setForLoc(readSourceLocation()); 301 1.1.1.2 joerg S->setLParenLoc(readSourceLocation()); 302 1.1.1.2 joerg S->setRParenLoc(readSourceLocation()); 303 1.1 joerg } 304 1.1 joerg 305 1.1 joerg void ASTStmtReader::VisitGotoStmt(GotoStmt *S) { 306 1.1 joerg VisitStmt(S); 307 1.1.1.2 joerg S->setLabel(readDeclAs<LabelDecl>()); 308 1.1.1.2 joerg S->setGotoLoc(readSourceLocation()); 309 1.1.1.2 joerg S->setLabelLoc(readSourceLocation()); 310 1.1 joerg } 311 1.1 joerg 312 1.1 joerg void ASTStmtReader::VisitIndirectGotoStmt(IndirectGotoStmt *S) { 313 1.1 joerg VisitStmt(S); 314 1.1.1.2 joerg S->setGotoLoc(readSourceLocation()); 315 1.1.1.2 joerg S->setStarLoc(readSourceLocation()); 316 1.1 joerg S->setTarget(Record.readSubExpr()); 317 1.1 joerg } 318 1.1 joerg 319 1.1 joerg void ASTStmtReader::VisitContinueStmt(ContinueStmt *S) { 320 1.1 joerg VisitStmt(S); 321 1.1.1.2 joerg S->setContinueLoc(readSourceLocation()); 322 1.1 joerg } 323 1.1 joerg 324 1.1 joerg void ASTStmtReader::VisitBreakStmt(BreakStmt *S) { 325 1.1 joerg VisitStmt(S); 326 1.1.1.2 joerg S->setBreakLoc(readSourceLocation()); 327 1.1 joerg } 328 1.1 joerg 329 1.1 joerg void ASTStmtReader::VisitReturnStmt(ReturnStmt *S) { 330 1.1 joerg VisitStmt(S); 331 1.1 joerg 332 1.1 joerg bool HasNRVOCandidate = Record.readInt(); 333 1.1 joerg 334 1.1 joerg S->setRetValue(Record.readSubExpr()); 335 1.1 joerg if (HasNRVOCandidate) 336 1.1.1.2 joerg S->setNRVOCandidate(readDeclAs<VarDecl>()); 337 1.1 joerg 338 1.1.1.2 joerg S->setReturnLoc(readSourceLocation()); 339 1.1 joerg } 340 1.1 joerg 341 1.1 joerg void ASTStmtReader::VisitDeclStmt(DeclStmt *S) { 342 1.1 joerg VisitStmt(S); 343 1.1.1.2 joerg S->setStartLoc(readSourceLocation()); 344 1.1.1.2 joerg S->setEndLoc(readSourceLocation()); 345 1.1 joerg 346 1.1 joerg if (Record.size() - Record.getIdx() == 1) { 347 1.1 joerg // Single declaration 348 1.1.1.2 joerg S->setDeclGroup(DeclGroupRef(readDecl())); 349 1.1 joerg } else { 350 1.1 joerg SmallVector<Decl *, 16> Decls; 351 1.1 joerg int N = Record.size() - Record.getIdx(); 352 1.1 joerg Decls.reserve(N); 353 1.1 joerg for (int I = 0; I < N; ++I) 354 1.1.1.2 joerg Decls.push_back(readDecl()); 355 1.1 joerg S->setDeclGroup(DeclGroupRef(DeclGroup::Create(Record.getContext(), 356 1.1 joerg Decls.data(), 357 1.1 joerg Decls.size()))); 358 1.1 joerg } 359 1.1 joerg } 360 1.1 joerg 361 1.1 joerg void ASTStmtReader::VisitAsmStmt(AsmStmt *S) { 362 1.1 joerg VisitStmt(S); 363 1.1 joerg S->NumOutputs = Record.readInt(); 364 1.1 joerg S->NumInputs = Record.readInt(); 365 1.1 joerg S->NumClobbers = Record.readInt(); 366 1.1.1.2 joerg S->setAsmLoc(readSourceLocation()); 367 1.1 joerg S->setVolatile(Record.readInt()); 368 1.1 joerg S->setSimple(Record.readInt()); 369 1.1 joerg } 370 1.1 joerg 371 1.1 joerg void ASTStmtReader::VisitGCCAsmStmt(GCCAsmStmt *S) { 372 1.1 joerg VisitAsmStmt(S); 373 1.1 joerg S->NumLabels = Record.readInt(); 374 1.1.1.2 joerg S->setRParenLoc(readSourceLocation()); 375 1.1 joerg S->setAsmString(cast_or_null<StringLiteral>(Record.readSubStmt())); 376 1.1 joerg 377 1.1 joerg unsigned NumOutputs = S->getNumOutputs(); 378 1.1 joerg unsigned NumInputs = S->getNumInputs(); 379 1.1 joerg unsigned NumClobbers = S->getNumClobbers(); 380 1.1 joerg unsigned NumLabels = S->getNumLabels(); 381 1.1 joerg 382 1.1 joerg // Outputs and inputs 383 1.1 joerg SmallVector<IdentifierInfo *, 16> Names; 384 1.1 joerg SmallVector<StringLiteral*, 16> Constraints; 385 1.1 joerg SmallVector<Stmt*, 16> Exprs; 386 1.1 joerg for (unsigned I = 0, N = NumOutputs + NumInputs; I != N; ++I) { 387 1.1.1.2 joerg Names.push_back(Record.readIdentifier()); 388 1.1 joerg Constraints.push_back(cast_or_null<StringLiteral>(Record.readSubStmt())); 389 1.1 joerg Exprs.push_back(Record.readSubStmt()); 390 1.1 joerg } 391 1.1 joerg 392 1.1 joerg // Constraints 393 1.1 joerg SmallVector<StringLiteral*, 16> Clobbers; 394 1.1 joerg for (unsigned I = 0; I != NumClobbers; ++I) 395 1.1 joerg Clobbers.push_back(cast_or_null<StringLiteral>(Record.readSubStmt())); 396 1.1 joerg 397 1.1 joerg // Labels 398 1.1 joerg for (unsigned I = 0, N = NumLabels; I != N; ++I) 399 1.1 joerg Exprs.push_back(Record.readSubStmt()); 400 1.1 joerg 401 1.1 joerg S->setOutputsAndInputsAndClobbers(Record.getContext(), 402 1.1 joerg Names.data(), Constraints.data(), 403 1.1 joerg Exprs.data(), NumOutputs, NumInputs, 404 1.1 joerg NumLabels, 405 1.1 joerg Clobbers.data(), NumClobbers); 406 1.1 joerg } 407 1.1 joerg 408 1.1 joerg void ASTStmtReader::VisitMSAsmStmt(MSAsmStmt *S) { 409 1.1 joerg VisitAsmStmt(S); 410 1.1.1.2 joerg S->LBraceLoc = readSourceLocation(); 411 1.1.1.2 joerg S->EndLoc = readSourceLocation(); 412 1.1 joerg S->NumAsmToks = Record.readInt(); 413 1.1.1.2 joerg std::string AsmStr = readString(); 414 1.1 joerg 415 1.1 joerg // Read the tokens. 416 1.1 joerg SmallVector<Token, 16> AsmToks; 417 1.1 joerg AsmToks.reserve(S->NumAsmToks); 418 1.1 joerg for (unsigned i = 0, e = S->NumAsmToks; i != e; ++i) { 419 1.1 joerg AsmToks.push_back(Record.readToken()); 420 1.1 joerg } 421 1.1 joerg 422 1.1 joerg // The calls to reserve() for the FooData vectors are mandatory to 423 1.1 joerg // prevent dead StringRefs in the Foo vectors. 424 1.1 joerg 425 1.1 joerg // Read the clobbers. 426 1.1 joerg SmallVector<std::string, 16> ClobbersData; 427 1.1 joerg SmallVector<StringRef, 16> Clobbers; 428 1.1 joerg ClobbersData.reserve(S->NumClobbers); 429 1.1 joerg Clobbers.reserve(S->NumClobbers); 430 1.1 joerg for (unsigned i = 0, e = S->NumClobbers; i != e; ++i) { 431 1.1.1.2 joerg ClobbersData.push_back(readString()); 432 1.1 joerg Clobbers.push_back(ClobbersData.back()); 433 1.1 joerg } 434 1.1 joerg 435 1.1 joerg // Read the operands. 436 1.1 joerg unsigned NumOperands = S->NumOutputs + S->NumInputs; 437 1.1 joerg SmallVector<Expr*, 16> Exprs; 438 1.1 joerg SmallVector<std::string, 16> ConstraintsData; 439 1.1 joerg SmallVector<StringRef, 16> Constraints; 440 1.1 joerg Exprs.reserve(NumOperands); 441 1.1 joerg ConstraintsData.reserve(NumOperands); 442 1.1 joerg Constraints.reserve(NumOperands); 443 1.1 joerg for (unsigned i = 0; i != NumOperands; ++i) { 444 1.1 joerg Exprs.push_back(cast<Expr>(Record.readSubStmt())); 445 1.1.1.2 joerg ConstraintsData.push_back(readString()); 446 1.1 joerg Constraints.push_back(ConstraintsData.back()); 447 1.1 joerg } 448 1.1 joerg 449 1.1 joerg S->initialize(Record.getContext(), AsmStr, AsmToks, 450 1.1 joerg Constraints, Exprs, Clobbers); 451 1.1 joerg } 452 1.1 joerg 453 1.1 joerg void ASTStmtReader::VisitCoroutineBodyStmt(CoroutineBodyStmt *S) { 454 1.1 joerg VisitStmt(S); 455 1.1 joerg assert(Record.peekInt() == S->NumParams); 456 1.1 joerg Record.skipInts(1); 457 1.1 joerg auto *StoredStmts = S->getStoredStmts(); 458 1.1 joerg for (unsigned i = 0; 459 1.1 joerg i < CoroutineBodyStmt::SubStmt::FirstParamMove + S->NumParams; ++i) 460 1.1 joerg StoredStmts[i] = Record.readSubStmt(); 461 1.1 joerg } 462 1.1 joerg 463 1.1 joerg void ASTStmtReader::VisitCoreturnStmt(CoreturnStmt *S) { 464 1.1 joerg VisitStmt(S); 465 1.1 joerg S->CoreturnLoc = Record.readSourceLocation(); 466 1.1 joerg for (auto &SubStmt: S->SubStmts) 467 1.1 joerg SubStmt = Record.readSubStmt(); 468 1.1 joerg S->IsImplicit = Record.readInt() != 0; 469 1.1 joerg } 470 1.1 joerg 471 1.1 joerg void ASTStmtReader::VisitCoawaitExpr(CoawaitExpr *E) { 472 1.1 joerg VisitExpr(E); 473 1.1.1.2 joerg E->KeywordLoc = readSourceLocation(); 474 1.1 joerg for (auto &SubExpr: E->SubExprs) 475 1.1 joerg SubExpr = Record.readSubStmt(); 476 1.1 joerg E->OpaqueValue = cast_or_null<OpaqueValueExpr>(Record.readSubStmt()); 477 1.1 joerg E->setIsImplicit(Record.readInt() != 0); 478 1.1 joerg } 479 1.1 joerg 480 1.1 joerg void ASTStmtReader::VisitCoyieldExpr(CoyieldExpr *E) { 481 1.1 joerg VisitExpr(E); 482 1.1.1.2 joerg E->KeywordLoc = readSourceLocation(); 483 1.1 joerg for (auto &SubExpr: E->SubExprs) 484 1.1 joerg SubExpr = Record.readSubStmt(); 485 1.1 joerg E->OpaqueValue = cast_or_null<OpaqueValueExpr>(Record.readSubStmt()); 486 1.1 joerg } 487 1.1 joerg 488 1.1 joerg void ASTStmtReader::VisitDependentCoawaitExpr(DependentCoawaitExpr *E) { 489 1.1 joerg VisitExpr(E); 490 1.1.1.2 joerg E->KeywordLoc = readSourceLocation(); 491 1.1 joerg for (auto &SubExpr: E->SubExprs) 492 1.1 joerg SubExpr = Record.readSubStmt(); 493 1.1 joerg } 494 1.1 joerg 495 1.1 joerg void ASTStmtReader::VisitCapturedStmt(CapturedStmt *S) { 496 1.1 joerg VisitStmt(S); 497 1.1 joerg Record.skipInts(1); 498 1.1.1.2 joerg S->setCapturedDecl(readDeclAs<CapturedDecl>()); 499 1.1 joerg S->setCapturedRegionKind(static_cast<CapturedRegionKind>(Record.readInt())); 500 1.1.1.2 joerg S->setCapturedRecordDecl(readDeclAs<RecordDecl>()); 501 1.1 joerg 502 1.1 joerg // Capture inits 503 1.1 joerg for (CapturedStmt::capture_init_iterator I = S->capture_init_begin(), 504 1.1 joerg E = S->capture_init_end(); 505 1.1 joerg I != E; ++I) 506 1.1 joerg *I = Record.readSubExpr(); 507 1.1 joerg 508 1.1 joerg // Body 509 1.1 joerg S->setCapturedStmt(Record.readSubStmt()); 510 1.1 joerg S->getCapturedDecl()->setBody(S->getCapturedStmt()); 511 1.1 joerg 512 1.1 joerg // Captures 513 1.1 joerg for (auto &I : S->captures()) { 514 1.1.1.2 joerg I.VarAndKind.setPointer(readDeclAs<VarDecl>()); 515 1.1 joerg I.VarAndKind.setInt( 516 1.1 joerg static_cast<CapturedStmt::VariableCaptureKind>(Record.readInt())); 517 1.1.1.2 joerg I.Loc = readSourceLocation(); 518 1.1 joerg } 519 1.1 joerg } 520 1.1 joerg 521 1.1 joerg void ASTStmtReader::VisitExpr(Expr *E) { 522 1.1 joerg VisitStmt(E); 523 1.1 joerg E->setType(Record.readType()); 524 1.1.1.2 joerg 525 1.1.1.2 joerg // FIXME: write and read all DependentFlags with a single call. 526 1.1.1.2 joerg bool TypeDependent = Record.readInt(); 527 1.1.1.2 joerg bool ValueDependent = Record.readInt(); 528 1.1.1.2 joerg bool InstantiationDependent = Record.readInt(); 529 1.1.1.2 joerg bool ContainsUnexpandedTemplateParameters = Record.readInt(); 530 1.1.1.2 joerg bool ContainsErrors = Record.readInt(); 531 1.1.1.2 joerg auto Deps = ExprDependence::None; 532 1.1.1.2 joerg if (TypeDependent) 533 1.1.1.2 joerg Deps |= ExprDependence::Type; 534 1.1.1.2 joerg if (ValueDependent) 535 1.1.1.2 joerg Deps |= ExprDependence::Value; 536 1.1.1.2 joerg if (InstantiationDependent) 537 1.1.1.2 joerg Deps |= ExprDependence::Instantiation; 538 1.1.1.2 joerg if (ContainsUnexpandedTemplateParameters) 539 1.1.1.2 joerg Deps |= ExprDependence::UnexpandedPack; 540 1.1.1.2 joerg if (ContainsErrors) 541 1.1.1.2 joerg Deps |= ExprDependence::Error; 542 1.1.1.2 joerg E->setDependence(Deps); 543 1.1.1.2 joerg 544 1.1 joerg E->setValueKind(static_cast<ExprValueKind>(Record.readInt())); 545 1.1 joerg E->setObjectKind(static_cast<ExprObjectKind>(Record.readInt())); 546 1.1 joerg assert(Record.getIdx() == NumExprFields && 547 1.1 joerg "Incorrect expression field count"); 548 1.1 joerg } 549 1.1 joerg 550 1.1 joerg void ASTStmtReader::VisitConstantExpr(ConstantExpr *E) { 551 1.1 joerg VisitExpr(E); 552 1.1.1.2 joerg 553 1.1.1.2 joerg auto StorageKind = Record.readInt(); 554 1.1.1.2 joerg assert(E->ConstantExprBits.ResultKind == StorageKind && "Wrong ResultKind!"); 555 1.1.1.2 joerg 556 1.1.1.2 joerg E->ConstantExprBits.APValueKind = Record.readInt(); 557 1.1.1.2 joerg E->ConstantExprBits.IsUnsigned = Record.readInt(); 558 1.1.1.2 joerg E->ConstantExprBits.BitWidth = Record.readInt(); 559 1.1.1.2 joerg E->ConstantExprBits.HasCleanup = false; // Not serialized, see below. 560 1.1.1.2 joerg E->ConstantExprBits.IsImmediateInvocation = Record.readInt(); 561 1.1.1.2 joerg 562 1.1.1.2 joerg switch (StorageKind) { 563 1.1.1.2 joerg case ConstantExpr::RSK_None: 564 1.1.1.2 joerg break; 565 1.1.1.2 joerg 566 1.1.1.2 joerg case ConstantExpr::RSK_Int64: 567 1.1 joerg E->Int64Result() = Record.readInt(); 568 1.1 joerg break; 569 1.1.1.2 joerg 570 1.1 joerg case ConstantExpr::RSK_APValue: 571 1.1 joerg E->APValueResult() = Record.readAPValue(); 572 1.1.1.2 joerg if (E->APValueResult().needsCleanup()) { 573 1.1.1.2 joerg E->ConstantExprBits.HasCleanup = true; 574 1.1.1.2 joerg Record.getContext().addDestruction(&E->APValueResult()); 575 1.1.1.2 joerg } 576 1.1.1.2 joerg break; 577 1.1.1.2 joerg default: 578 1.1.1.2 joerg llvm_unreachable("unexpected ResultKind!"); 579 1.1 joerg } 580 1.1.1.2 joerg 581 1.1 joerg E->setSubExpr(Record.readSubExpr()); 582 1.1 joerg } 583 1.1 joerg 584 1.1 joerg void ASTStmtReader::VisitPredefinedExpr(PredefinedExpr *E) { 585 1.1 joerg VisitExpr(E); 586 1.1 joerg bool HasFunctionName = Record.readInt(); 587 1.1 joerg E->PredefinedExprBits.HasFunctionName = HasFunctionName; 588 1.1 joerg E->PredefinedExprBits.Kind = Record.readInt(); 589 1.1.1.2 joerg E->setLocation(readSourceLocation()); 590 1.1 joerg if (HasFunctionName) 591 1.1 joerg E->setFunctionName(cast<StringLiteral>(Record.readSubExpr())); 592 1.1 joerg } 593 1.1 joerg 594 1.1 joerg void ASTStmtReader::VisitDeclRefExpr(DeclRefExpr *E) { 595 1.1 joerg VisitExpr(E); 596 1.1 joerg 597 1.1 joerg E->DeclRefExprBits.HasQualifier = Record.readInt(); 598 1.1 joerg E->DeclRefExprBits.HasFoundDecl = Record.readInt(); 599 1.1 joerg E->DeclRefExprBits.HasTemplateKWAndArgsInfo = Record.readInt(); 600 1.1 joerg E->DeclRefExprBits.HadMultipleCandidates = Record.readInt(); 601 1.1 joerg E->DeclRefExprBits.RefersToEnclosingVariableOrCapture = Record.readInt(); 602 1.1 joerg E->DeclRefExprBits.NonOdrUseReason = Record.readInt(); 603 1.1 joerg unsigned NumTemplateArgs = 0; 604 1.1 joerg if (E->hasTemplateKWAndArgsInfo()) 605 1.1 joerg NumTemplateArgs = Record.readInt(); 606 1.1 joerg 607 1.1 joerg if (E->hasQualifier()) 608 1.1 joerg new (E->getTrailingObjects<NestedNameSpecifierLoc>()) 609 1.1 joerg NestedNameSpecifierLoc(Record.readNestedNameSpecifierLoc()); 610 1.1 joerg 611 1.1 joerg if (E->hasFoundDecl()) 612 1.1.1.2 joerg *E->getTrailingObjects<NamedDecl *>() = readDeclAs<NamedDecl>(); 613 1.1 joerg 614 1.1 joerg if (E->hasTemplateKWAndArgsInfo()) 615 1.1 joerg ReadTemplateKWAndArgsInfo( 616 1.1 joerg *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(), 617 1.1 joerg E->getTrailingObjects<TemplateArgumentLoc>(), NumTemplateArgs); 618 1.1 joerg 619 1.1.1.2 joerg E->D = readDeclAs<ValueDecl>(); 620 1.1.1.2 joerg E->setLocation(readSourceLocation()); 621 1.1.1.2 joerg E->DNLoc = Record.readDeclarationNameLoc(E->getDecl()->getDeclName()); 622 1.1 joerg } 623 1.1 joerg 624 1.1 joerg void ASTStmtReader::VisitIntegerLiteral(IntegerLiteral *E) { 625 1.1 joerg VisitExpr(E); 626 1.1.1.2 joerg E->setLocation(readSourceLocation()); 627 1.1 joerg E->setValue(Record.getContext(), Record.readAPInt()); 628 1.1 joerg } 629 1.1 joerg 630 1.1 joerg void ASTStmtReader::VisitFixedPointLiteral(FixedPointLiteral *E) { 631 1.1 joerg VisitExpr(E); 632 1.1.1.2 joerg E->setLocation(readSourceLocation()); 633 1.1.1.2 joerg E->setScale(Record.readInt()); 634 1.1 joerg E->setValue(Record.getContext(), Record.readAPInt()); 635 1.1 joerg } 636 1.1 joerg 637 1.1 joerg void ASTStmtReader::VisitFloatingLiteral(FloatingLiteral *E) { 638 1.1 joerg VisitExpr(E); 639 1.1 joerg E->setRawSemantics( 640 1.1 joerg static_cast<llvm::APFloatBase::Semantics>(Record.readInt())); 641 1.1 joerg E->setExact(Record.readInt()); 642 1.1 joerg E->setValue(Record.getContext(), Record.readAPFloat(E->getSemantics())); 643 1.1.1.2 joerg E->setLocation(readSourceLocation()); 644 1.1 joerg } 645 1.1 joerg 646 1.1 joerg void ASTStmtReader::VisitImaginaryLiteral(ImaginaryLiteral *E) { 647 1.1 joerg VisitExpr(E); 648 1.1 joerg E->setSubExpr(Record.readSubExpr()); 649 1.1 joerg } 650 1.1 joerg 651 1.1 joerg void ASTStmtReader::VisitStringLiteral(StringLiteral *E) { 652 1.1 joerg VisitExpr(E); 653 1.1 joerg 654 1.1 joerg // NumConcatenated, Length and CharByteWidth are set by the empty 655 1.1 joerg // ctor since they are needed to allocate storage for the trailing objects. 656 1.1 joerg unsigned NumConcatenated = Record.readInt(); 657 1.1 joerg unsigned Length = Record.readInt(); 658 1.1 joerg unsigned CharByteWidth = Record.readInt(); 659 1.1 joerg assert((NumConcatenated == E->getNumConcatenated()) && 660 1.1 joerg "Wrong number of concatenated tokens!"); 661 1.1 joerg assert((Length == E->getLength()) && "Wrong Length!"); 662 1.1 joerg assert((CharByteWidth == E->getCharByteWidth()) && "Wrong character width!"); 663 1.1 joerg E->StringLiteralBits.Kind = Record.readInt(); 664 1.1 joerg E->StringLiteralBits.IsPascal = Record.readInt(); 665 1.1 joerg 666 1.1 joerg // The character width is originally computed via mapCharByteWidth. 667 1.1 joerg // Check that the deserialized character width is consistant with the result 668 1.1 joerg // of calling mapCharByteWidth. 669 1.1 joerg assert((CharByteWidth == 670 1.1 joerg StringLiteral::mapCharByteWidth(Record.getContext().getTargetInfo(), 671 1.1 joerg E->getKind())) && 672 1.1 joerg "Wrong character width!"); 673 1.1 joerg 674 1.1 joerg // Deserialize the trailing array of SourceLocation. 675 1.1 joerg for (unsigned I = 0; I < NumConcatenated; ++I) 676 1.1.1.2 joerg E->setStrTokenLoc(I, readSourceLocation()); 677 1.1 joerg 678 1.1 joerg // Deserialize the trailing array of char holding the string data. 679 1.1 joerg char *StrData = E->getStrDataAsChar(); 680 1.1 joerg for (unsigned I = 0; I < Length * CharByteWidth; ++I) 681 1.1 joerg StrData[I] = Record.readInt(); 682 1.1 joerg } 683 1.1 joerg 684 1.1 joerg void ASTStmtReader::VisitCharacterLiteral(CharacterLiteral *E) { 685 1.1 joerg VisitExpr(E); 686 1.1 joerg E->setValue(Record.readInt()); 687 1.1.1.2 joerg E->setLocation(readSourceLocation()); 688 1.1 joerg E->setKind(static_cast<CharacterLiteral::CharacterKind>(Record.readInt())); 689 1.1 joerg } 690 1.1 joerg 691 1.1 joerg void ASTStmtReader::VisitParenExpr(ParenExpr *E) { 692 1.1 joerg VisitExpr(E); 693 1.1.1.2 joerg E->setLParen(readSourceLocation()); 694 1.1.1.2 joerg E->setRParen(readSourceLocation()); 695 1.1 joerg E->setSubExpr(Record.readSubExpr()); 696 1.1 joerg } 697 1.1 joerg 698 1.1 joerg void ASTStmtReader::VisitParenListExpr(ParenListExpr *E) { 699 1.1 joerg VisitExpr(E); 700 1.1 joerg unsigned NumExprs = Record.readInt(); 701 1.1 joerg assert((NumExprs == E->getNumExprs()) && "Wrong NumExprs!"); 702 1.1 joerg for (unsigned I = 0; I != NumExprs; ++I) 703 1.1 joerg E->getTrailingObjects<Stmt *>()[I] = Record.readSubStmt(); 704 1.1.1.2 joerg E->LParenLoc = readSourceLocation(); 705 1.1.1.2 joerg E->RParenLoc = readSourceLocation(); 706 1.1 joerg } 707 1.1 joerg 708 1.1 joerg void ASTStmtReader::VisitUnaryOperator(UnaryOperator *E) { 709 1.1 joerg VisitExpr(E); 710 1.1.1.2 joerg bool hasFP_Features = Record.readInt(); 711 1.1.1.2 joerg assert(hasFP_Features == E->hasStoredFPFeatures()); 712 1.1 joerg E->setSubExpr(Record.readSubExpr()); 713 1.1 joerg E->setOpcode((UnaryOperator::Opcode)Record.readInt()); 714 1.1.1.2 joerg E->setOperatorLoc(readSourceLocation()); 715 1.1 joerg E->setCanOverflow(Record.readInt()); 716 1.1.1.2 joerg if (hasFP_Features) 717 1.1.1.2 joerg E->setStoredFPFeatures( 718 1.1.1.2 joerg FPOptionsOverride::getFromOpaqueInt(Record.readInt())); 719 1.1 joerg } 720 1.1 joerg 721 1.1 joerg void ASTStmtReader::VisitOffsetOfExpr(OffsetOfExpr *E) { 722 1.1 joerg VisitExpr(E); 723 1.1 joerg assert(E->getNumComponents() == Record.peekInt()); 724 1.1 joerg Record.skipInts(1); 725 1.1 joerg assert(E->getNumExpressions() == Record.peekInt()); 726 1.1 joerg Record.skipInts(1); 727 1.1.1.2 joerg E->setOperatorLoc(readSourceLocation()); 728 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 729 1.1.1.2 joerg E->setTypeSourceInfo(readTypeSourceInfo()); 730 1.1 joerg for (unsigned I = 0, N = E->getNumComponents(); I != N; ++I) { 731 1.1 joerg auto Kind = static_cast<OffsetOfNode::Kind>(Record.readInt()); 732 1.1.1.2 joerg SourceLocation Start = readSourceLocation(); 733 1.1.1.2 joerg SourceLocation End = readSourceLocation(); 734 1.1 joerg switch (Kind) { 735 1.1 joerg case OffsetOfNode::Array: 736 1.1 joerg E->setComponent(I, OffsetOfNode(Start, Record.readInt(), End)); 737 1.1 joerg break; 738 1.1 joerg 739 1.1 joerg case OffsetOfNode::Field: 740 1.1 joerg E->setComponent( 741 1.1.1.2 joerg I, OffsetOfNode(Start, readDeclAs<FieldDecl>(), End)); 742 1.1 joerg break; 743 1.1 joerg 744 1.1 joerg case OffsetOfNode::Identifier: 745 1.1 joerg E->setComponent( 746 1.1 joerg I, 747 1.1.1.2 joerg OffsetOfNode(Start, Record.readIdentifier(), End)); 748 1.1 joerg break; 749 1.1 joerg 750 1.1 joerg case OffsetOfNode::Base: { 751 1.1 joerg auto *Base = new (Record.getContext()) CXXBaseSpecifier(); 752 1.1 joerg *Base = Record.readCXXBaseSpecifier(); 753 1.1 joerg E->setComponent(I, OffsetOfNode(Base)); 754 1.1 joerg break; 755 1.1 joerg } 756 1.1 joerg } 757 1.1 joerg } 758 1.1 joerg 759 1.1 joerg for (unsigned I = 0, N = E->getNumExpressions(); I != N; ++I) 760 1.1 joerg E->setIndexExpr(I, Record.readSubExpr()); 761 1.1 joerg } 762 1.1 joerg 763 1.1 joerg void ASTStmtReader::VisitUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr *E) { 764 1.1 joerg VisitExpr(E); 765 1.1 joerg E->setKind(static_cast<UnaryExprOrTypeTrait>(Record.readInt())); 766 1.1 joerg if (Record.peekInt() == 0) { 767 1.1 joerg E->setArgument(Record.readSubExpr()); 768 1.1 joerg Record.skipInts(1); 769 1.1 joerg } else { 770 1.1.1.2 joerg E->setArgument(readTypeSourceInfo()); 771 1.1 joerg } 772 1.1.1.2 joerg E->setOperatorLoc(readSourceLocation()); 773 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 774 1.1.1.2 joerg } 775 1.1.1.2 joerg 776 1.1.1.2 joerg static ConstraintSatisfaction 777 1.1.1.2 joerg readConstraintSatisfaction(ASTRecordReader &Record) { 778 1.1.1.2 joerg ConstraintSatisfaction Satisfaction; 779 1.1.1.2 joerg Satisfaction.IsSatisfied = Record.readInt(); 780 1.1.1.2 joerg if (!Satisfaction.IsSatisfied) { 781 1.1.1.2 joerg unsigned NumDetailRecords = Record.readInt(); 782 1.1.1.2 joerg for (unsigned i = 0; i != NumDetailRecords; ++i) { 783 1.1.1.2 joerg Expr *ConstraintExpr = Record.readExpr(); 784 1.1.1.2 joerg if (/* IsDiagnostic */Record.readInt()) { 785 1.1.1.2 joerg SourceLocation DiagLocation = Record.readSourceLocation(); 786 1.1.1.2 joerg std::string DiagMessage = Record.readString(); 787 1.1.1.2 joerg Satisfaction.Details.emplace_back( 788 1.1.1.2 joerg ConstraintExpr, new (Record.getContext()) 789 1.1.1.2 joerg ConstraintSatisfaction::SubstitutionDiagnostic{ 790 1.1.1.2 joerg DiagLocation, DiagMessage}); 791 1.1.1.2 joerg } else 792 1.1.1.2 joerg Satisfaction.Details.emplace_back(ConstraintExpr, Record.readExpr()); 793 1.1.1.2 joerg } 794 1.1.1.2 joerg } 795 1.1.1.2 joerg return Satisfaction; 796 1.1 joerg } 797 1.1 joerg 798 1.1 joerg void ASTStmtReader::VisitConceptSpecializationExpr( 799 1.1 joerg ConceptSpecializationExpr *E) { 800 1.1 joerg VisitExpr(E); 801 1.1 joerg unsigned NumTemplateArgs = Record.readInt(); 802 1.1 joerg E->NestedNameSpec = Record.readNestedNameSpecifierLoc(); 803 1.1 joerg E->TemplateKWLoc = Record.readSourceLocation(); 804 1.1.1.2 joerg E->ConceptName = Record.readDeclarationNameInfo(); 805 1.1.1.2 joerg E->NamedConcept = readDeclAs<ConceptDecl>(); 806 1.1.1.2 joerg E->FoundDecl = Record.readDeclAs<NamedDecl>(); 807 1.1.1.2 joerg E->ArgsAsWritten = Record.readASTTemplateArgumentListInfo(); 808 1.1 joerg llvm::SmallVector<TemplateArgument, 4> Args; 809 1.1 joerg for (unsigned I = 0; I < NumTemplateArgs; ++I) 810 1.1 joerg Args.push_back(Record.readTemplateArgument()); 811 1.1.1.2 joerg E->setTemplateArguments(Args); 812 1.1.1.2 joerg E->Satisfaction = E->isValueDependent() ? nullptr : 813 1.1.1.2 joerg ASTConstraintSatisfaction::Create(Record.getContext(), 814 1.1.1.2 joerg readConstraintSatisfaction(Record)); 815 1.1.1.2 joerg } 816 1.1.1.2 joerg 817 1.1.1.2 joerg static concepts::Requirement::SubstitutionDiagnostic * 818 1.1.1.2 joerg readSubstitutionDiagnostic(ASTRecordReader &Record) { 819 1.1.1.2 joerg std::string SubstitutedEntity = Record.readString(); 820 1.1.1.2 joerg SourceLocation DiagLoc = Record.readSourceLocation(); 821 1.1.1.2 joerg std::string DiagMessage = Record.readString(); 822 1.1.1.2 joerg return new (Record.getContext()) 823 1.1.1.2 joerg concepts::Requirement::SubstitutionDiagnostic{SubstitutedEntity, DiagLoc, 824 1.1.1.2 joerg DiagMessage}; 825 1.1.1.2 joerg } 826 1.1.1.2 joerg 827 1.1.1.2 joerg void ASTStmtReader::VisitRequiresExpr(RequiresExpr *E) { 828 1.1.1.2 joerg VisitExpr(E); 829 1.1.1.2 joerg unsigned NumLocalParameters = Record.readInt(); 830 1.1.1.2 joerg unsigned NumRequirements = Record.readInt(); 831 1.1.1.2 joerg E->RequiresExprBits.RequiresKWLoc = Record.readSourceLocation(); 832 1.1.1.2 joerg E->RequiresExprBits.IsSatisfied = Record.readInt(); 833 1.1.1.2 joerg E->Body = Record.readDeclAs<RequiresExprBodyDecl>(); 834 1.1.1.2 joerg llvm::SmallVector<ParmVarDecl *, 4> LocalParameters; 835 1.1.1.2 joerg for (unsigned i = 0; i < NumLocalParameters; ++i) 836 1.1.1.2 joerg LocalParameters.push_back(cast<ParmVarDecl>(Record.readDecl())); 837 1.1.1.2 joerg std::copy(LocalParameters.begin(), LocalParameters.end(), 838 1.1.1.2 joerg E->getTrailingObjects<ParmVarDecl *>()); 839 1.1.1.2 joerg llvm::SmallVector<concepts::Requirement *, 4> Requirements; 840 1.1.1.2 joerg for (unsigned i = 0; i < NumRequirements; ++i) { 841 1.1.1.2 joerg auto RK = 842 1.1.1.2 joerg static_cast<concepts::Requirement::RequirementKind>(Record.readInt()); 843 1.1.1.2 joerg concepts::Requirement *R = nullptr; 844 1.1.1.2 joerg switch (RK) { 845 1.1.1.2 joerg case concepts::Requirement::RK_Type: { 846 1.1.1.2 joerg auto Status = 847 1.1.1.2 joerg static_cast<concepts::TypeRequirement::SatisfactionStatus>( 848 1.1.1.2 joerg Record.readInt()); 849 1.1.1.2 joerg if (Status == concepts::TypeRequirement::SS_SubstitutionFailure) 850 1.1.1.2 joerg R = new (Record.getContext()) 851 1.1.1.2 joerg concepts::TypeRequirement(readSubstitutionDiagnostic(Record)); 852 1.1.1.2 joerg else 853 1.1.1.2 joerg R = new (Record.getContext()) 854 1.1.1.2 joerg concepts::TypeRequirement(Record.readTypeSourceInfo()); 855 1.1.1.2 joerg } break; 856 1.1.1.2 joerg case concepts::Requirement::RK_Simple: 857 1.1.1.2 joerg case concepts::Requirement::RK_Compound: { 858 1.1.1.2 joerg auto Status = 859 1.1.1.2 joerg static_cast<concepts::ExprRequirement::SatisfactionStatus>( 860 1.1.1.2 joerg Record.readInt()); 861 1.1.1.2 joerg llvm::PointerUnion<concepts::Requirement::SubstitutionDiagnostic *, 862 1.1.1.2 joerg Expr *> E; 863 1.1.1.2 joerg if (Status == concepts::ExprRequirement::SS_ExprSubstitutionFailure) { 864 1.1.1.2 joerg E = readSubstitutionDiagnostic(Record); 865 1.1.1.2 joerg } else 866 1.1.1.2 joerg E = Record.readExpr(); 867 1.1.1.2 joerg 868 1.1.1.2 joerg llvm::Optional<concepts::ExprRequirement::ReturnTypeRequirement> Req; 869 1.1.1.2 joerg ConceptSpecializationExpr *SubstitutedConstraintExpr = nullptr; 870 1.1.1.2 joerg SourceLocation NoexceptLoc; 871 1.1.1.2 joerg if (RK == concepts::Requirement::RK_Simple) { 872 1.1.1.2 joerg Req.emplace(); 873 1.1.1.2 joerg } else { 874 1.1.1.2 joerg NoexceptLoc = Record.readSourceLocation(); 875 1.1.1.2 joerg switch (/* returnTypeRequirementKind */Record.readInt()) { 876 1.1.1.2 joerg case 0: 877 1.1.1.2 joerg // No return type requirement. 878 1.1.1.2 joerg Req.emplace(); 879 1.1.1.2 joerg break; 880 1.1.1.2 joerg case 1: { 881 1.1.1.2 joerg // type-constraint 882 1.1.1.2 joerg TemplateParameterList *TPL = Record.readTemplateParameterList(); 883 1.1.1.2 joerg if (Status >= 884 1.1.1.2 joerg concepts::ExprRequirement::SS_ConstraintsNotSatisfied) 885 1.1.1.2 joerg SubstitutedConstraintExpr = 886 1.1.1.2 joerg cast<ConceptSpecializationExpr>(Record.readExpr()); 887 1.1.1.2 joerg Req.emplace(TPL); 888 1.1.1.2 joerg } break; 889 1.1.1.2 joerg case 2: 890 1.1.1.2 joerg // Substitution failure 891 1.1.1.2 joerg Req.emplace(readSubstitutionDiagnostic(Record)); 892 1.1.1.2 joerg break; 893 1.1.1.2 joerg } 894 1.1.1.2 joerg } 895 1.1.1.2 joerg if (Expr *Ex = E.dyn_cast<Expr *>()) 896 1.1.1.2 joerg R = new (Record.getContext()) concepts::ExprRequirement( 897 1.1.1.2 joerg Ex, RK == concepts::Requirement::RK_Simple, NoexceptLoc, 898 1.1.1.2 joerg std::move(*Req), Status, SubstitutedConstraintExpr); 899 1.1.1.2 joerg else 900 1.1.1.2 joerg R = new (Record.getContext()) concepts::ExprRequirement( 901 1.1.1.2 joerg E.get<concepts::Requirement::SubstitutionDiagnostic *>(), 902 1.1.1.2 joerg RK == concepts::Requirement::RK_Simple, NoexceptLoc, 903 1.1.1.2 joerg std::move(*Req)); 904 1.1.1.2 joerg } break; 905 1.1.1.2 joerg case concepts::Requirement::RK_Nested: { 906 1.1.1.2 joerg if (/* IsSubstitutionDiagnostic */Record.readInt()) { 907 1.1.1.2 joerg R = new (Record.getContext()) concepts::NestedRequirement( 908 1.1.1.2 joerg readSubstitutionDiagnostic(Record)); 909 1.1.1.2 joerg break; 910 1.1.1.2 joerg } 911 1.1.1.2 joerg Expr *E = Record.readExpr(); 912 1.1.1.2 joerg if (E->isInstantiationDependent()) 913 1.1.1.2 joerg R = new (Record.getContext()) concepts::NestedRequirement(E); 914 1.1.1.2 joerg else 915 1.1.1.2 joerg R = new (Record.getContext()) 916 1.1.1.2 joerg concepts::NestedRequirement(Record.getContext(), E, 917 1.1.1.2 joerg readConstraintSatisfaction(Record)); 918 1.1.1.2 joerg } break; 919 1.1.1.2 joerg } 920 1.1.1.2 joerg if (!R) 921 1.1.1.2 joerg continue; 922 1.1.1.2 joerg Requirements.push_back(R); 923 1.1.1.2 joerg } 924 1.1.1.2 joerg std::copy(Requirements.begin(), Requirements.end(), 925 1.1.1.2 joerg E->getTrailingObjects<concepts::Requirement *>()); 926 1.1.1.2 joerg E->RBraceLoc = Record.readSourceLocation(); 927 1.1 joerg } 928 1.1 joerg 929 1.1 joerg void ASTStmtReader::VisitArraySubscriptExpr(ArraySubscriptExpr *E) { 930 1.1 joerg VisitExpr(E); 931 1.1 joerg E->setLHS(Record.readSubExpr()); 932 1.1 joerg E->setRHS(Record.readSubExpr()); 933 1.1.1.2 joerg E->setRBracketLoc(readSourceLocation()); 934 1.1.1.2 joerg } 935 1.1.1.2 joerg 936 1.1.1.2 joerg void ASTStmtReader::VisitMatrixSubscriptExpr(MatrixSubscriptExpr *E) { 937 1.1.1.2 joerg VisitExpr(E); 938 1.1.1.2 joerg E->setBase(Record.readSubExpr()); 939 1.1.1.2 joerg E->setRowIdx(Record.readSubExpr()); 940 1.1.1.2 joerg E->setColumnIdx(Record.readSubExpr()); 941 1.1.1.2 joerg E->setRBracketLoc(readSourceLocation()); 942 1.1 joerg } 943 1.1 joerg 944 1.1 joerg void ASTStmtReader::VisitOMPArraySectionExpr(OMPArraySectionExpr *E) { 945 1.1 joerg VisitExpr(E); 946 1.1 joerg E->setBase(Record.readSubExpr()); 947 1.1 joerg E->setLowerBound(Record.readSubExpr()); 948 1.1 joerg E->setLength(Record.readSubExpr()); 949 1.1.1.2 joerg E->setStride(Record.readSubExpr()); 950 1.1.1.2 joerg E->setColonLocFirst(readSourceLocation()); 951 1.1.1.2 joerg E->setColonLocSecond(readSourceLocation()); 952 1.1.1.2 joerg E->setRBracketLoc(readSourceLocation()); 953 1.1.1.2 joerg } 954 1.1.1.2 joerg 955 1.1.1.2 joerg void ASTStmtReader::VisitOMPArrayShapingExpr(OMPArrayShapingExpr *E) { 956 1.1.1.2 joerg VisitExpr(E); 957 1.1.1.2 joerg unsigned NumDims = Record.readInt(); 958 1.1.1.2 joerg E->setBase(Record.readSubExpr()); 959 1.1.1.2 joerg SmallVector<Expr *, 4> Dims(NumDims); 960 1.1.1.2 joerg for (unsigned I = 0; I < NumDims; ++I) 961 1.1.1.2 joerg Dims[I] = Record.readSubExpr(); 962 1.1.1.2 joerg E->setDimensions(Dims); 963 1.1.1.2 joerg SmallVector<SourceRange, 4> SRs(NumDims); 964 1.1.1.2 joerg for (unsigned I = 0; I < NumDims; ++I) 965 1.1.1.2 joerg SRs[I] = readSourceRange(); 966 1.1.1.2 joerg E->setBracketsRanges(SRs); 967 1.1.1.2 joerg E->setLParenLoc(readSourceLocation()); 968 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 969 1.1.1.2 joerg } 970 1.1.1.2 joerg 971 1.1.1.2 joerg void ASTStmtReader::VisitOMPIteratorExpr(OMPIteratorExpr *E) { 972 1.1.1.2 joerg VisitExpr(E); 973 1.1.1.2 joerg unsigned NumIters = Record.readInt(); 974 1.1.1.2 joerg E->setIteratorKwLoc(readSourceLocation()); 975 1.1.1.2 joerg E->setLParenLoc(readSourceLocation()); 976 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 977 1.1.1.2 joerg for (unsigned I = 0; I < NumIters; ++I) { 978 1.1.1.2 joerg E->setIteratorDeclaration(I, Record.readDeclRef()); 979 1.1.1.2 joerg E->setAssignmentLoc(I, readSourceLocation()); 980 1.1.1.2 joerg Expr *Begin = Record.readSubExpr(); 981 1.1.1.2 joerg Expr *End = Record.readSubExpr(); 982 1.1.1.2 joerg Expr *Step = Record.readSubExpr(); 983 1.1.1.2 joerg SourceLocation ColonLoc = readSourceLocation(); 984 1.1.1.2 joerg SourceLocation SecColonLoc; 985 1.1.1.2 joerg if (Step) 986 1.1.1.2 joerg SecColonLoc = readSourceLocation(); 987 1.1.1.2 joerg E->setIteratorRange(I, Begin, ColonLoc, End, SecColonLoc, Step); 988 1.1.1.2 joerg // Deserialize helpers 989 1.1.1.2 joerg OMPIteratorHelperData HD; 990 1.1.1.2 joerg HD.CounterVD = cast_or_null<VarDecl>(Record.readDeclRef()); 991 1.1.1.2 joerg HD.Upper = Record.readSubExpr(); 992 1.1.1.2 joerg HD.Update = Record.readSubExpr(); 993 1.1.1.2 joerg HD.CounterUpdate = Record.readSubExpr(); 994 1.1.1.2 joerg E->setHelper(I, HD); 995 1.1.1.2 joerg } 996 1.1 joerg } 997 1.1 joerg 998 1.1 joerg void ASTStmtReader::VisitCallExpr(CallExpr *E) { 999 1.1 joerg VisitExpr(E); 1000 1.1 joerg unsigned NumArgs = Record.readInt(); 1001 1.1.1.2 joerg bool HasFPFeatures = Record.readInt(); 1002 1.1 joerg assert((NumArgs == E->getNumArgs()) && "Wrong NumArgs!"); 1003 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 1004 1.1 joerg E->setCallee(Record.readSubExpr()); 1005 1.1 joerg for (unsigned I = 0; I != NumArgs; ++I) 1006 1.1 joerg E->setArg(I, Record.readSubExpr()); 1007 1.1 joerg E->setADLCallKind(static_cast<CallExpr::ADLCallKind>(Record.readInt())); 1008 1.1.1.2 joerg if (HasFPFeatures) 1009 1.1.1.2 joerg E->setStoredFPFeatures( 1010 1.1.1.2 joerg FPOptionsOverride::getFromOpaqueInt(Record.readInt())); 1011 1.1 joerg } 1012 1.1 joerg 1013 1.1 joerg void ASTStmtReader::VisitCXXMemberCallExpr(CXXMemberCallExpr *E) { 1014 1.1 joerg VisitCallExpr(E); 1015 1.1 joerg } 1016 1.1 joerg 1017 1.1 joerg void ASTStmtReader::VisitMemberExpr(MemberExpr *E) { 1018 1.1 joerg VisitExpr(E); 1019 1.1 joerg 1020 1.1 joerg bool HasQualifier = Record.readInt(); 1021 1.1 joerg bool HasFoundDecl = Record.readInt(); 1022 1.1 joerg bool HasTemplateInfo = Record.readInt(); 1023 1.1 joerg unsigned NumTemplateArgs = Record.readInt(); 1024 1.1 joerg 1025 1.1 joerg E->Base = Record.readSubExpr(); 1026 1.1 joerg E->MemberDecl = Record.readDeclAs<ValueDecl>(); 1027 1.1.1.2 joerg E->MemberDNLoc = Record.readDeclarationNameLoc(E->MemberDecl->getDeclName()); 1028 1.1 joerg E->MemberLoc = Record.readSourceLocation(); 1029 1.1 joerg E->MemberExprBits.IsArrow = Record.readInt(); 1030 1.1 joerg E->MemberExprBits.HasQualifierOrFoundDecl = HasQualifier || HasFoundDecl; 1031 1.1 joerg E->MemberExprBits.HasTemplateKWAndArgsInfo = HasTemplateInfo; 1032 1.1 joerg E->MemberExprBits.HadMultipleCandidates = Record.readInt(); 1033 1.1 joerg E->MemberExprBits.NonOdrUseReason = Record.readInt(); 1034 1.1 joerg E->MemberExprBits.OperatorLoc = Record.readSourceLocation(); 1035 1.1 joerg 1036 1.1 joerg if (HasQualifier || HasFoundDecl) { 1037 1.1 joerg DeclAccessPair FoundDecl; 1038 1.1 joerg if (HasFoundDecl) { 1039 1.1 joerg auto *FoundD = Record.readDeclAs<NamedDecl>(); 1040 1.1 joerg auto AS = (AccessSpecifier)Record.readInt(); 1041 1.1 joerg FoundDecl = DeclAccessPair::make(FoundD, AS); 1042 1.1 joerg } else { 1043 1.1 joerg FoundDecl = DeclAccessPair::make(E->MemberDecl, 1044 1.1 joerg E->MemberDecl->getAccess()); 1045 1.1 joerg } 1046 1.1 joerg E->getTrailingObjects<MemberExprNameQualifier>()->FoundDecl = FoundDecl; 1047 1.1 joerg 1048 1.1 joerg NestedNameSpecifierLoc QualifierLoc; 1049 1.1 joerg if (HasQualifier) 1050 1.1 joerg QualifierLoc = Record.readNestedNameSpecifierLoc(); 1051 1.1 joerg E->getTrailingObjects<MemberExprNameQualifier>()->QualifierLoc = 1052 1.1 joerg QualifierLoc; 1053 1.1 joerg } 1054 1.1 joerg 1055 1.1 joerg if (HasTemplateInfo) 1056 1.1 joerg ReadTemplateKWAndArgsInfo( 1057 1.1 joerg *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(), 1058 1.1 joerg E->getTrailingObjects<TemplateArgumentLoc>(), NumTemplateArgs); 1059 1.1 joerg } 1060 1.1 joerg 1061 1.1 joerg void ASTStmtReader::VisitObjCIsaExpr(ObjCIsaExpr *E) { 1062 1.1 joerg VisitExpr(E); 1063 1.1 joerg E->setBase(Record.readSubExpr()); 1064 1.1.1.2 joerg E->setIsaMemberLoc(readSourceLocation()); 1065 1.1.1.2 joerg E->setOpLoc(readSourceLocation()); 1066 1.1 joerg E->setArrow(Record.readInt()); 1067 1.1 joerg } 1068 1.1 joerg 1069 1.1 joerg void ASTStmtReader:: 1070 1.1 joerg VisitObjCIndirectCopyRestoreExpr(ObjCIndirectCopyRestoreExpr *E) { 1071 1.1 joerg VisitExpr(E); 1072 1.1 joerg E->Operand = Record.readSubExpr(); 1073 1.1 joerg E->setShouldCopy(Record.readInt()); 1074 1.1 joerg } 1075 1.1 joerg 1076 1.1 joerg void ASTStmtReader::VisitObjCBridgedCastExpr(ObjCBridgedCastExpr *E) { 1077 1.1 joerg VisitExplicitCastExpr(E); 1078 1.1.1.2 joerg E->LParenLoc = readSourceLocation(); 1079 1.1.1.2 joerg E->BridgeKeywordLoc = readSourceLocation(); 1080 1.1 joerg E->Kind = Record.readInt(); 1081 1.1 joerg } 1082 1.1 joerg 1083 1.1 joerg void ASTStmtReader::VisitCastExpr(CastExpr *E) { 1084 1.1 joerg VisitExpr(E); 1085 1.1 joerg unsigned NumBaseSpecs = Record.readInt(); 1086 1.1 joerg assert(NumBaseSpecs == E->path_size()); 1087 1.1.1.2 joerg unsigned HasFPFeatures = Record.readInt(); 1088 1.1.1.2 joerg assert(E->hasStoredFPFeatures() == HasFPFeatures); 1089 1.1 joerg E->setSubExpr(Record.readSubExpr()); 1090 1.1 joerg E->setCastKind((CastKind)Record.readInt()); 1091 1.1 joerg CastExpr::path_iterator BaseI = E->path_begin(); 1092 1.1 joerg while (NumBaseSpecs--) { 1093 1.1 joerg auto *BaseSpec = new (Record.getContext()) CXXBaseSpecifier; 1094 1.1 joerg *BaseSpec = Record.readCXXBaseSpecifier(); 1095 1.1 joerg *BaseI++ = BaseSpec; 1096 1.1 joerg } 1097 1.1.1.2 joerg if (HasFPFeatures) 1098 1.1.1.2 joerg *E->getTrailingFPFeatures() = 1099 1.1.1.2 joerg FPOptionsOverride::getFromOpaqueInt(Record.readInt()); 1100 1.1 joerg } 1101 1.1 joerg 1102 1.1 joerg void ASTStmtReader::VisitBinaryOperator(BinaryOperator *E) { 1103 1.1.1.2 joerg bool hasFP_Features; 1104 1.1 joerg VisitExpr(E); 1105 1.1.1.2 joerg E->setHasStoredFPFeatures(hasFP_Features = Record.readInt()); 1106 1.1.1.2 joerg E->setOpcode((BinaryOperator::Opcode)Record.readInt()); 1107 1.1 joerg E->setLHS(Record.readSubExpr()); 1108 1.1 joerg E->setRHS(Record.readSubExpr()); 1109 1.1.1.2 joerg E->setOperatorLoc(readSourceLocation()); 1110 1.1.1.2 joerg if (hasFP_Features) 1111 1.1.1.2 joerg E->setStoredFPFeatures( 1112 1.1.1.2 joerg FPOptionsOverride::getFromOpaqueInt(Record.readInt())); 1113 1.1 joerg } 1114 1.1 joerg 1115 1.1 joerg void ASTStmtReader::VisitCompoundAssignOperator(CompoundAssignOperator *E) { 1116 1.1 joerg VisitBinaryOperator(E); 1117 1.1 joerg E->setComputationLHSType(Record.readType()); 1118 1.1 joerg E->setComputationResultType(Record.readType()); 1119 1.1 joerg } 1120 1.1 joerg 1121 1.1 joerg void ASTStmtReader::VisitConditionalOperator(ConditionalOperator *E) { 1122 1.1 joerg VisitExpr(E); 1123 1.1 joerg E->SubExprs[ConditionalOperator::COND] = Record.readSubExpr(); 1124 1.1 joerg E->SubExprs[ConditionalOperator::LHS] = Record.readSubExpr(); 1125 1.1 joerg E->SubExprs[ConditionalOperator::RHS] = Record.readSubExpr(); 1126 1.1.1.2 joerg E->QuestionLoc = readSourceLocation(); 1127 1.1.1.2 joerg E->ColonLoc = readSourceLocation(); 1128 1.1 joerg } 1129 1.1 joerg 1130 1.1 joerg void 1131 1.1 joerg ASTStmtReader::VisitBinaryConditionalOperator(BinaryConditionalOperator *E) { 1132 1.1 joerg VisitExpr(E); 1133 1.1 joerg E->OpaqueValue = cast<OpaqueValueExpr>(Record.readSubExpr()); 1134 1.1 joerg E->SubExprs[BinaryConditionalOperator::COMMON] = Record.readSubExpr(); 1135 1.1 joerg E->SubExprs[BinaryConditionalOperator::COND] = Record.readSubExpr(); 1136 1.1 joerg E->SubExprs[BinaryConditionalOperator::LHS] = Record.readSubExpr(); 1137 1.1 joerg E->SubExprs[BinaryConditionalOperator::RHS] = Record.readSubExpr(); 1138 1.1.1.2 joerg E->QuestionLoc = readSourceLocation(); 1139 1.1.1.2 joerg E->ColonLoc = readSourceLocation(); 1140 1.1 joerg } 1141 1.1 joerg 1142 1.1 joerg void ASTStmtReader::VisitImplicitCastExpr(ImplicitCastExpr *E) { 1143 1.1 joerg VisitCastExpr(E); 1144 1.1 joerg E->setIsPartOfExplicitCast(Record.readInt()); 1145 1.1 joerg } 1146 1.1 joerg 1147 1.1 joerg void ASTStmtReader::VisitExplicitCastExpr(ExplicitCastExpr *E) { 1148 1.1 joerg VisitCastExpr(E); 1149 1.1.1.2 joerg E->setTypeInfoAsWritten(readTypeSourceInfo()); 1150 1.1 joerg } 1151 1.1 joerg 1152 1.1 joerg void ASTStmtReader::VisitCStyleCastExpr(CStyleCastExpr *E) { 1153 1.1 joerg VisitExplicitCastExpr(E); 1154 1.1.1.2 joerg E->setLParenLoc(readSourceLocation()); 1155 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 1156 1.1 joerg } 1157 1.1 joerg 1158 1.1 joerg void ASTStmtReader::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) { 1159 1.1 joerg VisitExpr(E); 1160 1.1.1.2 joerg E->setLParenLoc(readSourceLocation()); 1161 1.1.1.2 joerg E->setTypeSourceInfo(readTypeSourceInfo()); 1162 1.1 joerg E->setInitializer(Record.readSubExpr()); 1163 1.1 joerg E->setFileScope(Record.readInt()); 1164 1.1 joerg } 1165 1.1 joerg 1166 1.1 joerg void ASTStmtReader::VisitExtVectorElementExpr(ExtVectorElementExpr *E) { 1167 1.1 joerg VisitExpr(E); 1168 1.1 joerg E->setBase(Record.readSubExpr()); 1169 1.1.1.2 joerg E->setAccessor(Record.readIdentifier()); 1170 1.1.1.2 joerg E->setAccessorLoc(readSourceLocation()); 1171 1.1 joerg } 1172 1.1 joerg 1173 1.1 joerg void ASTStmtReader::VisitInitListExpr(InitListExpr *E) { 1174 1.1 joerg VisitExpr(E); 1175 1.1 joerg if (auto *SyntForm = cast_or_null<InitListExpr>(Record.readSubStmt())) 1176 1.1 joerg E->setSyntacticForm(SyntForm); 1177 1.1.1.2 joerg E->setLBraceLoc(readSourceLocation()); 1178 1.1.1.2 joerg E->setRBraceLoc(readSourceLocation()); 1179 1.1 joerg bool isArrayFiller = Record.readInt(); 1180 1.1 joerg Expr *filler = nullptr; 1181 1.1 joerg if (isArrayFiller) { 1182 1.1 joerg filler = Record.readSubExpr(); 1183 1.1 joerg E->ArrayFillerOrUnionFieldInit = filler; 1184 1.1 joerg } else 1185 1.1.1.2 joerg E->ArrayFillerOrUnionFieldInit = readDeclAs<FieldDecl>(); 1186 1.1 joerg E->sawArrayRangeDesignator(Record.readInt()); 1187 1.1 joerg unsigned NumInits = Record.readInt(); 1188 1.1 joerg E->reserveInits(Record.getContext(), NumInits); 1189 1.1 joerg if (isArrayFiller) { 1190 1.1 joerg for (unsigned I = 0; I != NumInits; ++I) { 1191 1.1 joerg Expr *init = Record.readSubExpr(); 1192 1.1 joerg E->updateInit(Record.getContext(), I, init ? init : filler); 1193 1.1 joerg } 1194 1.1 joerg } else { 1195 1.1 joerg for (unsigned I = 0; I != NumInits; ++I) 1196 1.1 joerg E->updateInit(Record.getContext(), I, Record.readSubExpr()); 1197 1.1 joerg } 1198 1.1 joerg } 1199 1.1 joerg 1200 1.1 joerg void ASTStmtReader::VisitDesignatedInitExpr(DesignatedInitExpr *E) { 1201 1.1 joerg using Designator = DesignatedInitExpr::Designator; 1202 1.1 joerg 1203 1.1 joerg VisitExpr(E); 1204 1.1 joerg unsigned NumSubExprs = Record.readInt(); 1205 1.1 joerg assert(NumSubExprs == E->getNumSubExprs() && "Wrong number of subexprs"); 1206 1.1 joerg for (unsigned I = 0; I != NumSubExprs; ++I) 1207 1.1 joerg E->setSubExpr(I, Record.readSubExpr()); 1208 1.1.1.2 joerg E->setEqualOrColonLoc(readSourceLocation()); 1209 1.1 joerg E->setGNUSyntax(Record.readInt()); 1210 1.1 joerg 1211 1.1 joerg SmallVector<Designator, 4> Designators; 1212 1.1 joerg while (Record.getIdx() < Record.size()) { 1213 1.1 joerg switch ((DesignatorTypes)Record.readInt()) { 1214 1.1 joerg case DESIG_FIELD_DECL: { 1215 1.1.1.2 joerg auto *Field = readDeclAs<FieldDecl>(); 1216 1.1.1.2 joerg SourceLocation DotLoc = readSourceLocation(); 1217 1.1.1.2 joerg SourceLocation FieldLoc = readSourceLocation(); 1218 1.1 joerg Designators.push_back(Designator(Field->getIdentifier(), DotLoc, 1219 1.1 joerg FieldLoc)); 1220 1.1 joerg Designators.back().setField(Field); 1221 1.1 joerg break; 1222 1.1 joerg } 1223 1.1 joerg 1224 1.1 joerg case DESIG_FIELD_NAME: { 1225 1.1.1.2 joerg const IdentifierInfo *Name = Record.readIdentifier(); 1226 1.1.1.2 joerg SourceLocation DotLoc = readSourceLocation(); 1227 1.1.1.2 joerg SourceLocation FieldLoc = readSourceLocation(); 1228 1.1 joerg Designators.push_back(Designator(Name, DotLoc, FieldLoc)); 1229 1.1 joerg break; 1230 1.1 joerg } 1231 1.1 joerg 1232 1.1 joerg case DESIG_ARRAY: { 1233 1.1 joerg unsigned Index = Record.readInt(); 1234 1.1.1.2 joerg SourceLocation LBracketLoc = readSourceLocation(); 1235 1.1.1.2 joerg SourceLocation RBracketLoc = readSourceLocation(); 1236 1.1 joerg Designators.push_back(Designator(Index, LBracketLoc, RBracketLoc)); 1237 1.1 joerg break; 1238 1.1 joerg } 1239 1.1 joerg 1240 1.1 joerg case DESIG_ARRAY_RANGE: { 1241 1.1 joerg unsigned Index = Record.readInt(); 1242 1.1.1.2 joerg SourceLocation LBracketLoc = readSourceLocation(); 1243 1.1.1.2 joerg SourceLocation EllipsisLoc = readSourceLocation(); 1244 1.1.1.2 joerg SourceLocation RBracketLoc = readSourceLocation(); 1245 1.1 joerg Designators.push_back(Designator(Index, LBracketLoc, EllipsisLoc, 1246 1.1 joerg RBracketLoc)); 1247 1.1 joerg break; 1248 1.1 joerg } 1249 1.1 joerg } 1250 1.1 joerg } 1251 1.1 joerg E->setDesignators(Record.getContext(), 1252 1.1 joerg Designators.data(), Designators.size()); 1253 1.1 joerg } 1254 1.1 joerg 1255 1.1 joerg void ASTStmtReader::VisitDesignatedInitUpdateExpr(DesignatedInitUpdateExpr *E) { 1256 1.1 joerg VisitExpr(E); 1257 1.1 joerg E->setBase(Record.readSubExpr()); 1258 1.1 joerg E->setUpdater(Record.readSubExpr()); 1259 1.1 joerg } 1260 1.1 joerg 1261 1.1 joerg void ASTStmtReader::VisitNoInitExpr(NoInitExpr *E) { 1262 1.1 joerg VisitExpr(E); 1263 1.1 joerg } 1264 1.1 joerg 1265 1.1 joerg void ASTStmtReader::VisitArrayInitLoopExpr(ArrayInitLoopExpr *E) { 1266 1.1 joerg VisitExpr(E); 1267 1.1 joerg E->SubExprs[0] = Record.readSubExpr(); 1268 1.1 joerg E->SubExprs[1] = Record.readSubExpr(); 1269 1.1 joerg } 1270 1.1 joerg 1271 1.1 joerg void ASTStmtReader::VisitArrayInitIndexExpr(ArrayInitIndexExpr *E) { 1272 1.1 joerg VisitExpr(E); 1273 1.1 joerg } 1274 1.1 joerg 1275 1.1 joerg void ASTStmtReader::VisitImplicitValueInitExpr(ImplicitValueInitExpr *E) { 1276 1.1 joerg VisitExpr(E); 1277 1.1 joerg } 1278 1.1 joerg 1279 1.1 joerg void ASTStmtReader::VisitVAArgExpr(VAArgExpr *E) { 1280 1.1 joerg VisitExpr(E); 1281 1.1 joerg E->setSubExpr(Record.readSubExpr()); 1282 1.1.1.2 joerg E->setWrittenTypeInfo(readTypeSourceInfo()); 1283 1.1.1.2 joerg E->setBuiltinLoc(readSourceLocation()); 1284 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 1285 1.1 joerg E->setIsMicrosoftABI(Record.readInt()); 1286 1.1 joerg } 1287 1.1 joerg 1288 1.1 joerg void ASTStmtReader::VisitSourceLocExpr(SourceLocExpr *E) { 1289 1.1 joerg VisitExpr(E); 1290 1.1.1.2 joerg E->ParentContext = readDeclAs<DeclContext>(); 1291 1.1.1.2 joerg E->BuiltinLoc = readSourceLocation(); 1292 1.1.1.2 joerg E->RParenLoc = readSourceLocation(); 1293 1.1 joerg E->SourceLocExprBits.Kind = 1294 1.1 joerg static_cast<SourceLocExpr::IdentKind>(Record.readInt()); 1295 1.1 joerg } 1296 1.1 joerg 1297 1.1 joerg void ASTStmtReader::VisitAddrLabelExpr(AddrLabelExpr *E) { 1298 1.1 joerg VisitExpr(E); 1299 1.1.1.2 joerg E->setAmpAmpLoc(readSourceLocation()); 1300 1.1.1.2 joerg E->setLabelLoc(readSourceLocation()); 1301 1.1.1.2 joerg E->setLabel(readDeclAs<LabelDecl>()); 1302 1.1 joerg } 1303 1.1 joerg 1304 1.1 joerg void ASTStmtReader::VisitStmtExpr(StmtExpr *E) { 1305 1.1 joerg VisitExpr(E); 1306 1.1.1.2 joerg E->setLParenLoc(readSourceLocation()); 1307 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 1308 1.1 joerg E->setSubStmt(cast_or_null<CompoundStmt>(Record.readSubStmt())); 1309 1.1.1.2 joerg E->StmtExprBits.TemplateDepth = Record.readInt(); 1310 1.1 joerg } 1311 1.1 joerg 1312 1.1 joerg void ASTStmtReader::VisitChooseExpr(ChooseExpr *E) { 1313 1.1 joerg VisitExpr(E); 1314 1.1 joerg E->setCond(Record.readSubExpr()); 1315 1.1 joerg E->setLHS(Record.readSubExpr()); 1316 1.1 joerg E->setRHS(Record.readSubExpr()); 1317 1.1.1.2 joerg E->setBuiltinLoc(readSourceLocation()); 1318 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 1319 1.1 joerg E->setIsConditionTrue(Record.readInt()); 1320 1.1 joerg } 1321 1.1 joerg 1322 1.1 joerg void ASTStmtReader::VisitGNUNullExpr(GNUNullExpr *E) { 1323 1.1 joerg VisitExpr(E); 1324 1.1.1.2 joerg E->setTokenLocation(readSourceLocation()); 1325 1.1 joerg } 1326 1.1 joerg 1327 1.1 joerg void ASTStmtReader::VisitShuffleVectorExpr(ShuffleVectorExpr *E) { 1328 1.1 joerg VisitExpr(E); 1329 1.1 joerg SmallVector<Expr *, 16> Exprs; 1330 1.1 joerg unsigned NumExprs = Record.readInt(); 1331 1.1 joerg while (NumExprs--) 1332 1.1 joerg Exprs.push_back(Record.readSubExpr()); 1333 1.1 joerg E->setExprs(Record.getContext(), Exprs); 1334 1.1.1.2 joerg E->setBuiltinLoc(readSourceLocation()); 1335 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 1336 1.1 joerg } 1337 1.1 joerg 1338 1.1 joerg void ASTStmtReader::VisitConvertVectorExpr(ConvertVectorExpr *E) { 1339 1.1 joerg VisitExpr(E); 1340 1.1.1.2 joerg E->BuiltinLoc = readSourceLocation(); 1341 1.1.1.2 joerg E->RParenLoc = readSourceLocation(); 1342 1.1.1.2 joerg E->TInfo = readTypeSourceInfo(); 1343 1.1 joerg E->SrcExpr = Record.readSubExpr(); 1344 1.1 joerg } 1345 1.1 joerg 1346 1.1 joerg void ASTStmtReader::VisitBlockExpr(BlockExpr *E) { 1347 1.1 joerg VisitExpr(E); 1348 1.1.1.2 joerg E->setBlockDecl(readDeclAs<BlockDecl>()); 1349 1.1 joerg } 1350 1.1 joerg 1351 1.1 joerg void ASTStmtReader::VisitGenericSelectionExpr(GenericSelectionExpr *E) { 1352 1.1 joerg VisitExpr(E); 1353 1.1 joerg 1354 1.1 joerg unsigned NumAssocs = Record.readInt(); 1355 1.1 joerg assert(NumAssocs == E->getNumAssocs() && "Wrong NumAssocs!"); 1356 1.1 joerg E->ResultIndex = Record.readInt(); 1357 1.1.1.2 joerg E->GenericSelectionExprBits.GenericLoc = readSourceLocation(); 1358 1.1.1.2 joerg E->DefaultLoc = readSourceLocation(); 1359 1.1.1.2 joerg E->RParenLoc = readSourceLocation(); 1360 1.1 joerg 1361 1.1 joerg Stmt **Stmts = E->getTrailingObjects<Stmt *>(); 1362 1.1 joerg // Add 1 to account for the controlling expression which is the first 1363 1.1 joerg // expression in the trailing array of Stmt *. This is not needed for 1364 1.1 joerg // the trailing array of TypeSourceInfo *. 1365 1.1 joerg for (unsigned I = 0, N = NumAssocs + 1; I < N; ++I) 1366 1.1 joerg Stmts[I] = Record.readSubExpr(); 1367 1.1 joerg 1368 1.1 joerg TypeSourceInfo **TSIs = E->getTrailingObjects<TypeSourceInfo *>(); 1369 1.1 joerg for (unsigned I = 0, N = NumAssocs; I < N; ++I) 1370 1.1.1.2 joerg TSIs[I] = readTypeSourceInfo(); 1371 1.1 joerg } 1372 1.1 joerg 1373 1.1 joerg void ASTStmtReader::VisitPseudoObjectExpr(PseudoObjectExpr *E) { 1374 1.1 joerg VisitExpr(E); 1375 1.1 joerg unsigned numSemanticExprs = Record.readInt(); 1376 1.1 joerg assert(numSemanticExprs + 1 == E->PseudoObjectExprBits.NumSubExprs); 1377 1.1 joerg E->PseudoObjectExprBits.ResultIndex = Record.readInt(); 1378 1.1 joerg 1379 1.1 joerg // Read the syntactic expression. 1380 1.1 joerg E->getSubExprsBuffer()[0] = Record.readSubExpr(); 1381 1.1 joerg 1382 1.1 joerg // Read all the semantic expressions. 1383 1.1 joerg for (unsigned i = 0; i != numSemanticExprs; ++i) { 1384 1.1 joerg Expr *subExpr = Record.readSubExpr(); 1385 1.1 joerg E->getSubExprsBuffer()[i+1] = subExpr; 1386 1.1 joerg } 1387 1.1 joerg } 1388 1.1 joerg 1389 1.1 joerg void ASTStmtReader::VisitAtomicExpr(AtomicExpr *E) { 1390 1.1 joerg VisitExpr(E); 1391 1.1 joerg E->Op = AtomicExpr::AtomicOp(Record.readInt()); 1392 1.1 joerg E->NumSubExprs = AtomicExpr::getNumSubExprs(E->Op); 1393 1.1 joerg for (unsigned I = 0; I != E->NumSubExprs; ++I) 1394 1.1 joerg E->SubExprs[I] = Record.readSubExpr(); 1395 1.1.1.2 joerg E->BuiltinLoc = readSourceLocation(); 1396 1.1.1.2 joerg E->RParenLoc = readSourceLocation(); 1397 1.1 joerg } 1398 1.1 joerg 1399 1.1 joerg //===----------------------------------------------------------------------===// 1400 1.1 joerg // Objective-C Expressions and Statements 1401 1.1 joerg 1402 1.1 joerg void ASTStmtReader::VisitObjCStringLiteral(ObjCStringLiteral *E) { 1403 1.1 joerg VisitExpr(E); 1404 1.1 joerg E->setString(cast<StringLiteral>(Record.readSubStmt())); 1405 1.1.1.2 joerg E->setAtLoc(readSourceLocation()); 1406 1.1 joerg } 1407 1.1 joerg 1408 1.1 joerg void ASTStmtReader::VisitObjCBoxedExpr(ObjCBoxedExpr *E) { 1409 1.1 joerg VisitExpr(E); 1410 1.1 joerg // could be one of several IntegerLiteral, FloatLiteral, etc. 1411 1.1 joerg E->SubExpr = Record.readSubStmt(); 1412 1.1.1.2 joerg E->BoxingMethod = readDeclAs<ObjCMethodDecl>(); 1413 1.1.1.2 joerg E->Range = readSourceRange(); 1414 1.1 joerg } 1415 1.1 joerg 1416 1.1 joerg void ASTStmtReader::VisitObjCArrayLiteral(ObjCArrayLiteral *E) { 1417 1.1 joerg VisitExpr(E); 1418 1.1 joerg unsigned NumElements = Record.readInt(); 1419 1.1 joerg assert(NumElements == E->getNumElements() && "Wrong number of elements"); 1420 1.1 joerg Expr **Elements = E->getElements(); 1421 1.1 joerg for (unsigned I = 0, N = NumElements; I != N; ++I) 1422 1.1 joerg Elements[I] = Record.readSubExpr(); 1423 1.1.1.2 joerg E->ArrayWithObjectsMethod = readDeclAs<ObjCMethodDecl>(); 1424 1.1.1.2 joerg E->Range = readSourceRange(); 1425 1.1 joerg } 1426 1.1 joerg 1427 1.1 joerg void ASTStmtReader::VisitObjCDictionaryLiteral(ObjCDictionaryLiteral *E) { 1428 1.1 joerg VisitExpr(E); 1429 1.1 joerg unsigned NumElements = Record.readInt(); 1430 1.1 joerg assert(NumElements == E->getNumElements() && "Wrong number of elements"); 1431 1.1 joerg bool HasPackExpansions = Record.readInt(); 1432 1.1 joerg assert(HasPackExpansions == E->HasPackExpansions &&"Pack expansion mismatch"); 1433 1.1 joerg auto *KeyValues = 1434 1.1 joerg E->getTrailingObjects<ObjCDictionaryLiteral::KeyValuePair>(); 1435 1.1 joerg auto *Expansions = 1436 1.1 joerg E->getTrailingObjects<ObjCDictionaryLiteral::ExpansionData>(); 1437 1.1 joerg for (unsigned I = 0; I != NumElements; ++I) { 1438 1.1 joerg KeyValues[I].Key = Record.readSubExpr(); 1439 1.1 joerg KeyValues[I].Value = Record.readSubExpr(); 1440 1.1 joerg if (HasPackExpansions) { 1441 1.1.1.2 joerg Expansions[I].EllipsisLoc = readSourceLocation(); 1442 1.1 joerg Expansions[I].NumExpansionsPlusOne = Record.readInt(); 1443 1.1 joerg } 1444 1.1 joerg } 1445 1.1.1.2 joerg E->DictWithObjectsMethod = readDeclAs<ObjCMethodDecl>(); 1446 1.1.1.2 joerg E->Range = readSourceRange(); 1447 1.1 joerg } 1448 1.1 joerg 1449 1.1 joerg void ASTStmtReader::VisitObjCEncodeExpr(ObjCEncodeExpr *E) { 1450 1.1 joerg VisitExpr(E); 1451 1.1.1.2 joerg E->setEncodedTypeSourceInfo(readTypeSourceInfo()); 1452 1.1.1.2 joerg E->setAtLoc(readSourceLocation()); 1453 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 1454 1.1 joerg } 1455 1.1 joerg 1456 1.1 joerg void ASTStmtReader::VisitObjCSelectorExpr(ObjCSelectorExpr *E) { 1457 1.1 joerg VisitExpr(E); 1458 1.1 joerg E->setSelector(Record.readSelector()); 1459 1.1.1.2 joerg E->setAtLoc(readSourceLocation()); 1460 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 1461 1.1 joerg } 1462 1.1 joerg 1463 1.1 joerg void ASTStmtReader::VisitObjCProtocolExpr(ObjCProtocolExpr *E) { 1464 1.1 joerg VisitExpr(E); 1465 1.1.1.2 joerg E->setProtocol(readDeclAs<ObjCProtocolDecl>()); 1466 1.1.1.2 joerg E->setAtLoc(readSourceLocation()); 1467 1.1.1.2 joerg E->ProtoLoc = readSourceLocation(); 1468 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 1469 1.1 joerg } 1470 1.1 joerg 1471 1.1 joerg void ASTStmtReader::VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) { 1472 1.1 joerg VisitExpr(E); 1473 1.1.1.2 joerg E->setDecl(readDeclAs<ObjCIvarDecl>()); 1474 1.1.1.2 joerg E->setLocation(readSourceLocation()); 1475 1.1.1.2 joerg E->setOpLoc(readSourceLocation()); 1476 1.1 joerg E->setBase(Record.readSubExpr()); 1477 1.1 joerg E->setIsArrow(Record.readInt()); 1478 1.1 joerg E->setIsFreeIvar(Record.readInt()); 1479 1.1 joerg } 1480 1.1 joerg 1481 1.1 joerg void ASTStmtReader::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) { 1482 1.1 joerg VisitExpr(E); 1483 1.1 joerg unsigned MethodRefFlags = Record.readInt(); 1484 1.1 joerg bool Implicit = Record.readInt() != 0; 1485 1.1 joerg if (Implicit) { 1486 1.1.1.2 joerg auto *Getter = readDeclAs<ObjCMethodDecl>(); 1487 1.1.1.2 joerg auto *Setter = readDeclAs<ObjCMethodDecl>(); 1488 1.1 joerg E->setImplicitProperty(Getter, Setter, MethodRefFlags); 1489 1.1 joerg } else { 1490 1.1.1.2 joerg E->setExplicitProperty(readDeclAs<ObjCPropertyDecl>(), MethodRefFlags); 1491 1.1 joerg } 1492 1.1.1.2 joerg E->setLocation(readSourceLocation()); 1493 1.1.1.2 joerg E->setReceiverLocation(readSourceLocation()); 1494 1.1 joerg switch (Record.readInt()) { 1495 1.1 joerg case 0: 1496 1.1 joerg E->setBase(Record.readSubExpr()); 1497 1.1 joerg break; 1498 1.1 joerg case 1: 1499 1.1 joerg E->setSuperReceiver(Record.readType()); 1500 1.1 joerg break; 1501 1.1 joerg case 2: 1502 1.1.1.2 joerg E->setClassReceiver(readDeclAs<ObjCInterfaceDecl>()); 1503 1.1 joerg break; 1504 1.1 joerg } 1505 1.1 joerg } 1506 1.1 joerg 1507 1.1 joerg void ASTStmtReader::VisitObjCSubscriptRefExpr(ObjCSubscriptRefExpr *E) { 1508 1.1 joerg VisitExpr(E); 1509 1.1.1.2 joerg E->setRBracket(readSourceLocation()); 1510 1.1 joerg E->setBaseExpr(Record.readSubExpr()); 1511 1.1 joerg E->setKeyExpr(Record.readSubExpr()); 1512 1.1.1.2 joerg E->GetAtIndexMethodDecl = readDeclAs<ObjCMethodDecl>(); 1513 1.1.1.2 joerg E->SetAtIndexMethodDecl = readDeclAs<ObjCMethodDecl>(); 1514 1.1 joerg } 1515 1.1 joerg 1516 1.1 joerg void ASTStmtReader::VisitObjCMessageExpr(ObjCMessageExpr *E) { 1517 1.1 joerg VisitExpr(E); 1518 1.1 joerg assert(Record.peekInt() == E->getNumArgs()); 1519 1.1 joerg Record.skipInts(1); 1520 1.1 joerg unsigned NumStoredSelLocs = Record.readInt(); 1521 1.1 joerg E->SelLocsKind = Record.readInt(); 1522 1.1 joerg E->setDelegateInitCall(Record.readInt()); 1523 1.1 joerg E->IsImplicit = Record.readInt(); 1524 1.1 joerg auto Kind = static_cast<ObjCMessageExpr::ReceiverKind>(Record.readInt()); 1525 1.1 joerg switch (Kind) { 1526 1.1 joerg case ObjCMessageExpr::Instance: 1527 1.1 joerg E->setInstanceReceiver(Record.readSubExpr()); 1528 1.1 joerg break; 1529 1.1 joerg 1530 1.1 joerg case ObjCMessageExpr::Class: 1531 1.1.1.2 joerg E->setClassReceiver(readTypeSourceInfo()); 1532 1.1 joerg break; 1533 1.1 joerg 1534 1.1 joerg case ObjCMessageExpr::SuperClass: 1535 1.1 joerg case ObjCMessageExpr::SuperInstance: { 1536 1.1 joerg QualType T = Record.readType(); 1537 1.1.1.2 joerg SourceLocation SuperLoc = readSourceLocation(); 1538 1.1 joerg E->setSuper(SuperLoc, T, Kind == ObjCMessageExpr::SuperInstance); 1539 1.1 joerg break; 1540 1.1 joerg } 1541 1.1 joerg } 1542 1.1 joerg 1543 1.1 joerg assert(Kind == E->getReceiverKind()); 1544 1.1 joerg 1545 1.1 joerg if (Record.readInt()) 1546 1.1.1.2 joerg E->setMethodDecl(readDeclAs<ObjCMethodDecl>()); 1547 1.1 joerg else 1548 1.1 joerg E->setSelector(Record.readSelector()); 1549 1.1 joerg 1550 1.1.1.2 joerg E->LBracLoc = readSourceLocation(); 1551 1.1.1.2 joerg E->RBracLoc = readSourceLocation(); 1552 1.1 joerg 1553 1.1 joerg for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 1554 1.1 joerg E->setArg(I, Record.readSubExpr()); 1555 1.1 joerg 1556 1.1 joerg SourceLocation *Locs = E->getStoredSelLocs(); 1557 1.1 joerg for (unsigned I = 0; I != NumStoredSelLocs; ++I) 1558 1.1.1.2 joerg Locs[I] = readSourceLocation(); 1559 1.1 joerg } 1560 1.1 joerg 1561 1.1 joerg void ASTStmtReader::VisitObjCForCollectionStmt(ObjCForCollectionStmt *S) { 1562 1.1 joerg VisitStmt(S); 1563 1.1 joerg S->setElement(Record.readSubStmt()); 1564 1.1 joerg S->setCollection(Record.readSubExpr()); 1565 1.1 joerg S->setBody(Record.readSubStmt()); 1566 1.1.1.2 joerg S->setForLoc(readSourceLocation()); 1567 1.1.1.2 joerg S->setRParenLoc(readSourceLocation()); 1568 1.1 joerg } 1569 1.1 joerg 1570 1.1 joerg void ASTStmtReader::VisitObjCAtCatchStmt(ObjCAtCatchStmt *S) { 1571 1.1 joerg VisitStmt(S); 1572 1.1 joerg S->setCatchBody(Record.readSubStmt()); 1573 1.1.1.2 joerg S->setCatchParamDecl(readDeclAs<VarDecl>()); 1574 1.1.1.2 joerg S->setAtCatchLoc(readSourceLocation()); 1575 1.1.1.2 joerg S->setRParenLoc(readSourceLocation()); 1576 1.1 joerg } 1577 1.1 joerg 1578 1.1 joerg void ASTStmtReader::VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *S) { 1579 1.1 joerg VisitStmt(S); 1580 1.1 joerg S->setFinallyBody(Record.readSubStmt()); 1581 1.1.1.2 joerg S->setAtFinallyLoc(readSourceLocation()); 1582 1.1 joerg } 1583 1.1 joerg 1584 1.1 joerg void ASTStmtReader::VisitObjCAutoreleasePoolStmt(ObjCAutoreleasePoolStmt *S) { 1585 1.1 joerg VisitStmt(S); // FIXME: no test coverage. 1586 1.1 joerg S->setSubStmt(Record.readSubStmt()); 1587 1.1.1.2 joerg S->setAtLoc(readSourceLocation()); 1588 1.1 joerg } 1589 1.1 joerg 1590 1.1 joerg void ASTStmtReader::VisitObjCAtTryStmt(ObjCAtTryStmt *S) { 1591 1.1 joerg VisitStmt(S); 1592 1.1 joerg assert(Record.peekInt() == S->getNumCatchStmts()); 1593 1.1 joerg Record.skipInts(1); 1594 1.1 joerg bool HasFinally = Record.readInt(); 1595 1.1 joerg S->setTryBody(Record.readSubStmt()); 1596 1.1 joerg for (unsigned I = 0, N = S->getNumCatchStmts(); I != N; ++I) 1597 1.1 joerg S->setCatchStmt(I, cast_or_null<ObjCAtCatchStmt>(Record.readSubStmt())); 1598 1.1 joerg 1599 1.1 joerg if (HasFinally) 1600 1.1 joerg S->setFinallyStmt(Record.readSubStmt()); 1601 1.1.1.2 joerg S->setAtTryLoc(readSourceLocation()); 1602 1.1 joerg } 1603 1.1 joerg 1604 1.1 joerg void ASTStmtReader::VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt *S) { 1605 1.1 joerg VisitStmt(S); // FIXME: no test coverage. 1606 1.1 joerg S->setSynchExpr(Record.readSubStmt()); 1607 1.1 joerg S->setSynchBody(Record.readSubStmt()); 1608 1.1.1.2 joerg S->setAtSynchronizedLoc(readSourceLocation()); 1609 1.1 joerg } 1610 1.1 joerg 1611 1.1 joerg void ASTStmtReader::VisitObjCAtThrowStmt(ObjCAtThrowStmt *S) { 1612 1.1 joerg VisitStmt(S); // FIXME: no test coverage. 1613 1.1 joerg S->setThrowExpr(Record.readSubStmt()); 1614 1.1.1.2 joerg S->setThrowLoc(readSourceLocation()); 1615 1.1 joerg } 1616 1.1 joerg 1617 1.1 joerg void ASTStmtReader::VisitObjCBoolLiteralExpr(ObjCBoolLiteralExpr *E) { 1618 1.1 joerg VisitExpr(E); 1619 1.1 joerg E->setValue(Record.readInt()); 1620 1.1.1.2 joerg E->setLocation(readSourceLocation()); 1621 1.1 joerg } 1622 1.1 joerg 1623 1.1 joerg void ASTStmtReader::VisitObjCAvailabilityCheckExpr(ObjCAvailabilityCheckExpr *E) { 1624 1.1 joerg VisitExpr(E); 1625 1.1 joerg SourceRange R = Record.readSourceRange(); 1626 1.1 joerg E->AtLoc = R.getBegin(); 1627 1.1 joerg E->RParen = R.getEnd(); 1628 1.1 joerg E->VersionToCheck = Record.readVersionTuple(); 1629 1.1 joerg } 1630 1.1 joerg 1631 1.1 joerg //===----------------------------------------------------------------------===// 1632 1.1 joerg // C++ Expressions and Statements 1633 1.1 joerg //===----------------------------------------------------------------------===// 1634 1.1 joerg 1635 1.1 joerg void ASTStmtReader::VisitCXXCatchStmt(CXXCatchStmt *S) { 1636 1.1 joerg VisitStmt(S); 1637 1.1.1.2 joerg S->CatchLoc = readSourceLocation(); 1638 1.1.1.2 joerg S->ExceptionDecl = readDeclAs<VarDecl>(); 1639 1.1 joerg S->HandlerBlock = Record.readSubStmt(); 1640 1.1 joerg } 1641 1.1 joerg 1642 1.1 joerg void ASTStmtReader::VisitCXXTryStmt(CXXTryStmt *S) { 1643 1.1 joerg VisitStmt(S); 1644 1.1 joerg assert(Record.peekInt() == S->getNumHandlers() && "NumStmtFields is wrong ?"); 1645 1.1 joerg Record.skipInts(1); 1646 1.1.1.2 joerg S->TryLoc = readSourceLocation(); 1647 1.1 joerg S->getStmts()[0] = Record.readSubStmt(); 1648 1.1 joerg for (unsigned i = 0, e = S->getNumHandlers(); i != e; ++i) 1649 1.1 joerg S->getStmts()[i + 1] = Record.readSubStmt(); 1650 1.1 joerg } 1651 1.1 joerg 1652 1.1 joerg void ASTStmtReader::VisitCXXForRangeStmt(CXXForRangeStmt *S) { 1653 1.1 joerg VisitStmt(S); 1654 1.1.1.2 joerg S->ForLoc = readSourceLocation(); 1655 1.1.1.2 joerg S->CoawaitLoc = readSourceLocation(); 1656 1.1.1.2 joerg S->ColonLoc = readSourceLocation(); 1657 1.1.1.2 joerg S->RParenLoc = readSourceLocation(); 1658 1.1 joerg S->setInit(Record.readSubStmt()); 1659 1.1 joerg S->setRangeStmt(Record.readSubStmt()); 1660 1.1 joerg S->setBeginStmt(Record.readSubStmt()); 1661 1.1 joerg S->setEndStmt(Record.readSubStmt()); 1662 1.1 joerg S->setCond(Record.readSubExpr()); 1663 1.1 joerg S->setInc(Record.readSubExpr()); 1664 1.1 joerg S->setLoopVarStmt(Record.readSubStmt()); 1665 1.1 joerg S->setBody(Record.readSubStmt()); 1666 1.1 joerg } 1667 1.1 joerg 1668 1.1 joerg void ASTStmtReader::VisitMSDependentExistsStmt(MSDependentExistsStmt *S) { 1669 1.1 joerg VisitStmt(S); 1670 1.1.1.2 joerg S->KeywordLoc = readSourceLocation(); 1671 1.1 joerg S->IsIfExists = Record.readInt(); 1672 1.1 joerg S->QualifierLoc = Record.readNestedNameSpecifierLoc(); 1673 1.1.1.2 joerg S->NameInfo = Record.readDeclarationNameInfo(); 1674 1.1 joerg S->SubStmt = Record.readSubStmt(); 1675 1.1 joerg } 1676 1.1 joerg 1677 1.1 joerg void ASTStmtReader::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) { 1678 1.1 joerg VisitCallExpr(E); 1679 1.1 joerg E->CXXOperatorCallExprBits.OperatorKind = Record.readInt(); 1680 1.1 joerg E->Range = Record.readSourceRange(); 1681 1.1 joerg } 1682 1.1 joerg 1683 1.1 joerg void ASTStmtReader::VisitCXXRewrittenBinaryOperator( 1684 1.1 joerg CXXRewrittenBinaryOperator *E) { 1685 1.1 joerg VisitExpr(E); 1686 1.1 joerg E->CXXRewrittenBinaryOperatorBits.IsReversed = Record.readInt(); 1687 1.1 joerg E->SemanticForm = Record.readSubExpr(); 1688 1.1 joerg } 1689 1.1 joerg 1690 1.1 joerg void ASTStmtReader::VisitCXXConstructExpr(CXXConstructExpr *E) { 1691 1.1 joerg VisitExpr(E); 1692 1.1 joerg 1693 1.1 joerg unsigned NumArgs = Record.readInt(); 1694 1.1 joerg assert((NumArgs == E->getNumArgs()) && "Wrong NumArgs!"); 1695 1.1 joerg 1696 1.1 joerg E->CXXConstructExprBits.Elidable = Record.readInt(); 1697 1.1 joerg E->CXXConstructExprBits.HadMultipleCandidates = Record.readInt(); 1698 1.1 joerg E->CXXConstructExprBits.ListInitialization = Record.readInt(); 1699 1.1 joerg E->CXXConstructExprBits.StdInitListInitialization = Record.readInt(); 1700 1.1 joerg E->CXXConstructExprBits.ZeroInitialization = Record.readInt(); 1701 1.1 joerg E->CXXConstructExprBits.ConstructionKind = Record.readInt(); 1702 1.1.1.2 joerg E->CXXConstructExprBits.Loc = readSourceLocation(); 1703 1.1.1.2 joerg E->Constructor = readDeclAs<CXXConstructorDecl>(); 1704 1.1.1.2 joerg E->ParenOrBraceRange = readSourceRange(); 1705 1.1 joerg 1706 1.1 joerg for (unsigned I = 0; I != NumArgs; ++I) 1707 1.1 joerg E->setArg(I, Record.readSubExpr()); 1708 1.1 joerg } 1709 1.1 joerg 1710 1.1 joerg void ASTStmtReader::VisitCXXInheritedCtorInitExpr(CXXInheritedCtorInitExpr *E) { 1711 1.1 joerg VisitExpr(E); 1712 1.1.1.2 joerg E->Constructor = readDeclAs<CXXConstructorDecl>(); 1713 1.1.1.2 joerg E->Loc = readSourceLocation(); 1714 1.1 joerg E->ConstructsVirtualBase = Record.readInt(); 1715 1.1 joerg E->InheritedFromVirtualBase = Record.readInt(); 1716 1.1 joerg } 1717 1.1 joerg 1718 1.1 joerg void ASTStmtReader::VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E) { 1719 1.1 joerg VisitCXXConstructExpr(E); 1720 1.1.1.2 joerg E->TSI = readTypeSourceInfo(); 1721 1.1 joerg } 1722 1.1 joerg 1723 1.1 joerg void ASTStmtReader::VisitLambdaExpr(LambdaExpr *E) { 1724 1.1 joerg VisitExpr(E); 1725 1.1 joerg unsigned NumCaptures = Record.readInt(); 1726 1.1.1.2 joerg (void)NumCaptures; 1727 1.1.1.2 joerg assert(NumCaptures == E->LambdaExprBits.NumCaptures); 1728 1.1.1.2 joerg E->IntroducerRange = readSourceRange(); 1729 1.1.1.2 joerg E->LambdaExprBits.CaptureDefault = Record.readInt(); 1730 1.1.1.2 joerg E->CaptureDefaultLoc = readSourceLocation(); 1731 1.1.1.2 joerg E->LambdaExprBits.ExplicitParams = Record.readInt(); 1732 1.1.1.2 joerg E->LambdaExprBits.ExplicitResultType = Record.readInt(); 1733 1.1.1.2 joerg E->ClosingBrace = readSourceLocation(); 1734 1.1 joerg 1735 1.1 joerg // Read capture initializers. 1736 1.1 joerg for (LambdaExpr::capture_init_iterator C = E->capture_init_begin(), 1737 1.1.1.2 joerg CEnd = E->capture_init_end(); 1738 1.1 joerg C != CEnd; ++C) 1739 1.1 joerg *C = Record.readSubExpr(); 1740 1.1.1.2 joerg 1741 1.1.1.2 joerg // The body will be lazily deserialized when needed from the call operator 1742 1.1.1.2 joerg // declaration. 1743 1.1 joerg } 1744 1.1 joerg 1745 1.1 joerg void 1746 1.1 joerg ASTStmtReader::VisitCXXStdInitializerListExpr(CXXStdInitializerListExpr *E) { 1747 1.1 joerg VisitExpr(E); 1748 1.1 joerg E->SubExpr = Record.readSubExpr(); 1749 1.1 joerg } 1750 1.1 joerg 1751 1.1 joerg void ASTStmtReader::VisitCXXNamedCastExpr(CXXNamedCastExpr *E) { 1752 1.1 joerg VisitExplicitCastExpr(E); 1753 1.1.1.2 joerg SourceRange R = readSourceRange(); 1754 1.1 joerg E->Loc = R.getBegin(); 1755 1.1 joerg E->RParenLoc = R.getEnd(); 1756 1.1.1.2 joerg R = readSourceRange(); 1757 1.1 joerg E->AngleBrackets = R; 1758 1.1 joerg } 1759 1.1 joerg 1760 1.1 joerg void ASTStmtReader::VisitCXXStaticCastExpr(CXXStaticCastExpr *E) { 1761 1.1 joerg return VisitCXXNamedCastExpr(E); 1762 1.1 joerg } 1763 1.1 joerg 1764 1.1 joerg void ASTStmtReader::VisitCXXDynamicCastExpr(CXXDynamicCastExpr *E) { 1765 1.1 joerg return VisitCXXNamedCastExpr(E); 1766 1.1 joerg } 1767 1.1 joerg 1768 1.1 joerg void ASTStmtReader::VisitCXXReinterpretCastExpr(CXXReinterpretCastExpr *E) { 1769 1.1 joerg return VisitCXXNamedCastExpr(E); 1770 1.1 joerg } 1771 1.1 joerg 1772 1.1.1.2 joerg void ASTStmtReader::VisitCXXAddrspaceCastExpr(CXXAddrspaceCastExpr *E) { 1773 1.1.1.2 joerg return VisitCXXNamedCastExpr(E); 1774 1.1.1.2 joerg } 1775 1.1.1.2 joerg 1776 1.1 joerg void ASTStmtReader::VisitCXXConstCastExpr(CXXConstCastExpr *E) { 1777 1.1 joerg return VisitCXXNamedCastExpr(E); 1778 1.1 joerg } 1779 1.1 joerg 1780 1.1 joerg void ASTStmtReader::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E) { 1781 1.1 joerg VisitExplicitCastExpr(E); 1782 1.1.1.2 joerg E->setLParenLoc(readSourceLocation()); 1783 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 1784 1.1 joerg } 1785 1.1 joerg 1786 1.1 joerg void ASTStmtReader::VisitBuiltinBitCastExpr(BuiltinBitCastExpr *E) { 1787 1.1 joerg VisitExplicitCastExpr(E); 1788 1.1.1.2 joerg E->KWLoc = readSourceLocation(); 1789 1.1.1.2 joerg E->RParenLoc = readSourceLocation(); 1790 1.1 joerg } 1791 1.1 joerg 1792 1.1 joerg void ASTStmtReader::VisitUserDefinedLiteral(UserDefinedLiteral *E) { 1793 1.1 joerg VisitCallExpr(E); 1794 1.1.1.2 joerg E->UDSuffixLoc = readSourceLocation(); 1795 1.1 joerg } 1796 1.1 joerg 1797 1.1 joerg void ASTStmtReader::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E) { 1798 1.1 joerg VisitExpr(E); 1799 1.1 joerg E->setValue(Record.readInt()); 1800 1.1.1.2 joerg E->setLocation(readSourceLocation()); 1801 1.1 joerg } 1802 1.1 joerg 1803 1.1 joerg void ASTStmtReader::VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E) { 1804 1.1 joerg VisitExpr(E); 1805 1.1.1.2 joerg E->setLocation(readSourceLocation()); 1806 1.1 joerg } 1807 1.1 joerg 1808 1.1 joerg void ASTStmtReader::VisitCXXTypeidExpr(CXXTypeidExpr *E) { 1809 1.1 joerg VisitExpr(E); 1810 1.1.1.2 joerg E->setSourceRange(readSourceRange()); 1811 1.1.1.2 joerg if (E->isTypeOperand()) 1812 1.1.1.2 joerg E->Operand = readTypeSourceInfo(); 1813 1.1.1.2 joerg else 1814 1.1.1.2 joerg E->Operand = Record.readSubExpr(); 1815 1.1 joerg } 1816 1.1 joerg 1817 1.1 joerg void ASTStmtReader::VisitCXXThisExpr(CXXThisExpr *E) { 1818 1.1 joerg VisitExpr(E); 1819 1.1.1.2 joerg E->setLocation(readSourceLocation()); 1820 1.1 joerg E->setImplicit(Record.readInt()); 1821 1.1 joerg } 1822 1.1 joerg 1823 1.1 joerg void ASTStmtReader::VisitCXXThrowExpr(CXXThrowExpr *E) { 1824 1.1 joerg VisitExpr(E); 1825 1.1.1.2 joerg E->CXXThrowExprBits.ThrowLoc = readSourceLocation(); 1826 1.1 joerg E->Operand = Record.readSubExpr(); 1827 1.1 joerg E->CXXThrowExprBits.IsThrownVariableInScope = Record.readInt(); 1828 1.1 joerg } 1829 1.1 joerg 1830 1.1 joerg void ASTStmtReader::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) { 1831 1.1 joerg VisitExpr(E); 1832 1.1.1.2 joerg E->Param = readDeclAs<ParmVarDecl>(); 1833 1.1.1.2 joerg E->UsedContext = readDeclAs<DeclContext>(); 1834 1.1.1.2 joerg E->CXXDefaultArgExprBits.Loc = readSourceLocation(); 1835 1.1 joerg } 1836 1.1 joerg 1837 1.1 joerg void ASTStmtReader::VisitCXXDefaultInitExpr(CXXDefaultInitExpr *E) { 1838 1.1 joerg VisitExpr(E); 1839 1.1.1.2 joerg E->Field = readDeclAs<FieldDecl>(); 1840 1.1.1.2 joerg E->UsedContext = readDeclAs<DeclContext>(); 1841 1.1.1.2 joerg E->CXXDefaultInitExprBits.Loc = readSourceLocation(); 1842 1.1 joerg } 1843 1.1 joerg 1844 1.1 joerg void ASTStmtReader::VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) { 1845 1.1 joerg VisitExpr(E); 1846 1.1 joerg E->setTemporary(Record.readCXXTemporary()); 1847 1.1 joerg E->setSubExpr(Record.readSubExpr()); 1848 1.1 joerg } 1849 1.1 joerg 1850 1.1 joerg void ASTStmtReader::VisitCXXScalarValueInitExpr(CXXScalarValueInitExpr *E) { 1851 1.1 joerg VisitExpr(E); 1852 1.1.1.2 joerg E->TypeInfo = readTypeSourceInfo(); 1853 1.1.1.2 joerg E->CXXScalarValueInitExprBits.RParenLoc = readSourceLocation(); 1854 1.1 joerg } 1855 1.1 joerg 1856 1.1 joerg void ASTStmtReader::VisitCXXNewExpr(CXXNewExpr *E) { 1857 1.1 joerg VisitExpr(E); 1858 1.1 joerg 1859 1.1 joerg bool IsArray = Record.readInt(); 1860 1.1 joerg bool HasInit = Record.readInt(); 1861 1.1 joerg unsigned NumPlacementArgs = Record.readInt(); 1862 1.1 joerg bool IsParenTypeId = Record.readInt(); 1863 1.1 joerg 1864 1.1 joerg E->CXXNewExprBits.IsGlobalNew = Record.readInt(); 1865 1.1 joerg E->CXXNewExprBits.ShouldPassAlignment = Record.readInt(); 1866 1.1 joerg E->CXXNewExprBits.UsualArrayDeleteWantsSize = Record.readInt(); 1867 1.1 joerg E->CXXNewExprBits.StoredInitializationStyle = Record.readInt(); 1868 1.1 joerg 1869 1.1 joerg assert((IsArray == E->isArray()) && "Wrong IsArray!"); 1870 1.1 joerg assert((HasInit == E->hasInitializer()) && "Wrong HasInit!"); 1871 1.1 joerg assert((NumPlacementArgs == E->getNumPlacementArgs()) && 1872 1.1 joerg "Wrong NumPlacementArgs!"); 1873 1.1 joerg assert((IsParenTypeId == E->isParenTypeId()) && "Wrong IsParenTypeId!"); 1874 1.1 joerg (void)IsArray; 1875 1.1 joerg (void)HasInit; 1876 1.1 joerg (void)NumPlacementArgs; 1877 1.1 joerg 1878 1.1.1.2 joerg E->setOperatorNew(readDeclAs<FunctionDecl>()); 1879 1.1.1.2 joerg E->setOperatorDelete(readDeclAs<FunctionDecl>()); 1880 1.1.1.2 joerg E->AllocatedTypeInfo = readTypeSourceInfo(); 1881 1.1 joerg if (IsParenTypeId) 1882 1.1.1.2 joerg E->getTrailingObjects<SourceRange>()[0] = readSourceRange(); 1883 1.1.1.2 joerg E->Range = readSourceRange(); 1884 1.1.1.2 joerg E->DirectInitRange = readSourceRange(); 1885 1.1 joerg 1886 1.1 joerg // Install all the subexpressions. 1887 1.1 joerg for (CXXNewExpr::raw_arg_iterator I = E->raw_arg_begin(), 1888 1.1 joerg N = E->raw_arg_end(); 1889 1.1 joerg I != N; ++I) 1890 1.1 joerg *I = Record.readSubStmt(); 1891 1.1 joerg } 1892 1.1 joerg 1893 1.1 joerg void ASTStmtReader::VisitCXXDeleteExpr(CXXDeleteExpr *E) { 1894 1.1 joerg VisitExpr(E); 1895 1.1 joerg E->CXXDeleteExprBits.GlobalDelete = Record.readInt(); 1896 1.1 joerg E->CXXDeleteExprBits.ArrayForm = Record.readInt(); 1897 1.1 joerg E->CXXDeleteExprBits.ArrayFormAsWritten = Record.readInt(); 1898 1.1 joerg E->CXXDeleteExprBits.UsualArrayDeleteWantsSize = Record.readInt(); 1899 1.1.1.2 joerg E->OperatorDelete = readDeclAs<FunctionDecl>(); 1900 1.1 joerg E->Argument = Record.readSubExpr(); 1901 1.1.1.2 joerg E->CXXDeleteExprBits.Loc = readSourceLocation(); 1902 1.1 joerg } 1903 1.1 joerg 1904 1.1 joerg void ASTStmtReader::VisitCXXPseudoDestructorExpr(CXXPseudoDestructorExpr *E) { 1905 1.1 joerg VisitExpr(E); 1906 1.1 joerg 1907 1.1 joerg E->Base = Record.readSubExpr(); 1908 1.1 joerg E->IsArrow = Record.readInt(); 1909 1.1.1.2 joerg E->OperatorLoc = readSourceLocation(); 1910 1.1 joerg E->QualifierLoc = Record.readNestedNameSpecifierLoc(); 1911 1.1.1.2 joerg E->ScopeType = readTypeSourceInfo(); 1912 1.1.1.2 joerg E->ColonColonLoc = readSourceLocation(); 1913 1.1.1.2 joerg E->TildeLoc = readSourceLocation(); 1914 1.1 joerg 1915 1.1.1.2 joerg IdentifierInfo *II = Record.readIdentifier(); 1916 1.1 joerg if (II) 1917 1.1.1.2 joerg E->setDestroyedType(II, readSourceLocation()); 1918 1.1 joerg else 1919 1.1.1.2 joerg E->setDestroyedType(readTypeSourceInfo()); 1920 1.1 joerg } 1921 1.1 joerg 1922 1.1 joerg void ASTStmtReader::VisitExprWithCleanups(ExprWithCleanups *E) { 1923 1.1 joerg VisitExpr(E); 1924 1.1 joerg 1925 1.1 joerg unsigned NumObjects = Record.readInt(); 1926 1.1 joerg assert(NumObjects == E->getNumObjects()); 1927 1.1.1.2 joerg for (unsigned i = 0; i != NumObjects; ++i) { 1928 1.1.1.2 joerg unsigned CleanupKind = Record.readInt(); 1929 1.1.1.2 joerg ExprWithCleanups::CleanupObject Obj; 1930 1.1.1.2 joerg if (CleanupKind == COK_Block) 1931 1.1.1.2 joerg Obj = readDeclAs<BlockDecl>(); 1932 1.1.1.2 joerg else if (CleanupKind == COK_CompoundLiteral) 1933 1.1.1.2 joerg Obj = cast<CompoundLiteralExpr>(Record.readSubExpr()); 1934 1.1.1.2 joerg else 1935 1.1.1.2 joerg llvm_unreachable("unexpected cleanup object type"); 1936 1.1.1.2 joerg E->getTrailingObjects<ExprWithCleanups::CleanupObject>()[i] = Obj; 1937 1.1.1.2 joerg } 1938 1.1 joerg 1939 1.1 joerg E->ExprWithCleanupsBits.CleanupsHaveSideEffects = Record.readInt(); 1940 1.1 joerg E->SubExpr = Record.readSubExpr(); 1941 1.1 joerg } 1942 1.1 joerg 1943 1.1 joerg void ASTStmtReader::VisitCXXDependentScopeMemberExpr( 1944 1.1 joerg CXXDependentScopeMemberExpr *E) { 1945 1.1 joerg VisitExpr(E); 1946 1.1 joerg 1947 1.1 joerg bool HasTemplateKWAndArgsInfo = Record.readInt(); 1948 1.1 joerg unsigned NumTemplateArgs = Record.readInt(); 1949 1.1 joerg bool HasFirstQualifierFoundInScope = Record.readInt(); 1950 1.1 joerg 1951 1.1 joerg assert((HasTemplateKWAndArgsInfo == E->hasTemplateKWAndArgsInfo()) && 1952 1.1 joerg "Wrong HasTemplateKWAndArgsInfo!"); 1953 1.1 joerg assert( 1954 1.1 joerg (HasFirstQualifierFoundInScope == E->hasFirstQualifierFoundInScope()) && 1955 1.1 joerg "Wrong HasFirstQualifierFoundInScope!"); 1956 1.1 joerg 1957 1.1 joerg if (HasTemplateKWAndArgsInfo) 1958 1.1 joerg ReadTemplateKWAndArgsInfo( 1959 1.1 joerg *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(), 1960 1.1 joerg E->getTrailingObjects<TemplateArgumentLoc>(), NumTemplateArgs); 1961 1.1 joerg 1962 1.1 joerg assert((NumTemplateArgs == E->getNumTemplateArgs()) && 1963 1.1 joerg "Wrong NumTemplateArgs!"); 1964 1.1 joerg 1965 1.1 joerg E->CXXDependentScopeMemberExprBits.IsArrow = Record.readInt(); 1966 1.1.1.2 joerg E->CXXDependentScopeMemberExprBits.OperatorLoc = readSourceLocation(); 1967 1.1 joerg E->BaseType = Record.readType(); 1968 1.1 joerg E->QualifierLoc = Record.readNestedNameSpecifierLoc(); 1969 1.1 joerg E->Base = Record.readSubExpr(); 1970 1.1 joerg 1971 1.1 joerg if (HasFirstQualifierFoundInScope) 1972 1.1.1.2 joerg *E->getTrailingObjects<NamedDecl *>() = readDeclAs<NamedDecl>(); 1973 1.1 joerg 1974 1.1.1.2 joerg E->MemberNameInfo = Record.readDeclarationNameInfo(); 1975 1.1 joerg } 1976 1.1 joerg 1977 1.1 joerg void 1978 1.1 joerg ASTStmtReader::VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) { 1979 1.1 joerg VisitExpr(E); 1980 1.1 joerg 1981 1.1 joerg if (Record.readInt()) // HasTemplateKWAndArgsInfo 1982 1.1 joerg ReadTemplateKWAndArgsInfo( 1983 1.1 joerg *E->getTrailingObjects<ASTTemplateKWAndArgsInfo>(), 1984 1.1 joerg E->getTrailingObjects<TemplateArgumentLoc>(), 1985 1.1 joerg /*NumTemplateArgs=*/Record.readInt()); 1986 1.1 joerg 1987 1.1 joerg E->QualifierLoc = Record.readNestedNameSpecifierLoc(); 1988 1.1.1.2 joerg E->NameInfo = Record.readDeclarationNameInfo(); 1989 1.1 joerg } 1990 1.1 joerg 1991 1.1 joerg void 1992 1.1 joerg ASTStmtReader::VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E) { 1993 1.1 joerg VisitExpr(E); 1994 1.1.1.2 joerg assert(Record.peekInt() == E->getNumArgs() && 1995 1.1 joerg "Read wrong record during creation ?"); 1996 1.1 joerg Record.skipInts(1); 1997 1.1.1.2 joerg for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 1998 1.1 joerg E->setArg(I, Record.readSubExpr()); 1999 1.1.1.2 joerg E->TSI = readTypeSourceInfo(); 2000 1.1.1.2 joerg E->setLParenLoc(readSourceLocation()); 2001 1.1.1.2 joerg E->setRParenLoc(readSourceLocation()); 2002 1.1 joerg } 2003 1.1 joerg 2004 1.1 joerg void ASTStmtReader::VisitOverloadExpr(OverloadExpr *E) { 2005 1.1 joerg VisitExpr(E); 2006 1.1 joerg 2007 1.1 joerg unsigned NumResults = Record.readInt(); 2008 1.1 joerg bool HasTemplateKWAndArgsInfo = Record.readInt(); 2009 1.1 joerg assert((E->getNumDecls() == NumResults) && "Wrong NumResults!"); 2010 1.1 joerg assert((E->hasTemplateKWAndArgsInfo() == HasTemplateKWAndArgsInfo) && 2011 1.1 joerg "Wrong HasTemplateKWAndArgsInfo!"); 2012 1.1 joerg 2013 1.1 joerg if (HasTemplateKWAndArgsInfo) { 2014 1.1 joerg unsigned NumTemplateArgs = Record.readInt(); 2015 1.1 joerg ReadTemplateKWAndArgsInfo(*E->getTrailingASTTemplateKWAndArgsInfo(), 2016 1.1 joerg E->getTrailingTemplateArgumentLoc(), 2017 1.1 joerg NumTemplateArgs); 2018 1.1 joerg assert((E->getNumTemplateArgs() == NumTemplateArgs) && 2019 1.1 joerg "Wrong NumTemplateArgs!"); 2020 1.1 joerg } 2021 1.1 joerg 2022 1.1 joerg UnresolvedSet<8> Decls; 2023 1.1 joerg for (unsigned I = 0; I != NumResults; ++I) { 2024 1.1.1.2 joerg auto *D = readDeclAs<NamedDecl>(); 2025 1.1 joerg auto AS = (AccessSpecifier)Record.readInt(); 2026 1.1 joerg Decls.addDecl(D, AS); 2027 1.1 joerg } 2028 1.1 joerg 2029 1.1 joerg DeclAccessPair *Results = E->getTrailingResults(); 2030 1.1 joerg UnresolvedSetIterator Iter = Decls.begin(); 2031 1.1 joerg for (unsigned I = 0; I != NumResults; ++I) { 2032 1.1 joerg Results[I] = (Iter + I).getPair(); 2033 1.1 joerg } 2034 1.1 joerg 2035 1.1.1.2 joerg E->NameInfo = Record.readDeclarationNameInfo(); 2036 1.1 joerg E->QualifierLoc = Record.readNestedNameSpecifierLoc(); 2037 1.1 joerg } 2038 1.1 joerg 2039 1.1 joerg void ASTStmtReader::VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E) { 2040 1.1 joerg VisitOverloadExpr(E); 2041 1.1 joerg E->UnresolvedMemberExprBits.IsArrow = Record.readInt(); 2042 1.1 joerg E->UnresolvedMemberExprBits.HasUnresolvedUsing = Record.readInt(); 2043 1.1 joerg E->Base = Record.readSubExpr(); 2044 1.1 joerg E->BaseType = Record.readType(); 2045 1.1.1.2 joerg E->OperatorLoc = readSourceLocation(); 2046 1.1 joerg } 2047 1.1 joerg 2048 1.1 joerg void ASTStmtReader::VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E) { 2049 1.1 joerg VisitOverloadExpr(E); 2050 1.1 joerg E->UnresolvedLookupExprBits.RequiresADL = Record.readInt(); 2051 1.1 joerg E->UnresolvedLookupExprBits.Overloaded = Record.readInt(); 2052 1.1.1.2 joerg E->NamingClass = readDeclAs<CXXRecordDecl>(); 2053 1.1 joerg } 2054 1.1 joerg 2055 1.1 joerg void ASTStmtReader::VisitTypeTraitExpr(TypeTraitExpr *E) { 2056 1.1 joerg VisitExpr(E); 2057 1.1 joerg E->TypeTraitExprBits.NumArgs = Record.readInt(); 2058 1.1 joerg E->TypeTraitExprBits.Kind = Record.readInt(); 2059 1.1 joerg E->TypeTraitExprBits.Value = Record.readInt(); 2060 1.1.1.2 joerg SourceRange Range = readSourceRange(); 2061 1.1 joerg E->Loc = Range.getBegin(); 2062 1.1 joerg E->RParenLoc = Range.getEnd(); 2063 1.1 joerg 2064 1.1 joerg auto **Args = E->getTrailingObjects<TypeSourceInfo *>(); 2065 1.1 joerg for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) 2066 1.1.1.2 joerg Args[I] = readTypeSourceInfo(); 2067 1.1 joerg } 2068 1.1 joerg 2069 1.1 joerg void ASTStmtReader::VisitArrayTypeTraitExpr(ArrayTypeTraitExpr *E) { 2070 1.1 joerg VisitExpr(E); 2071 1.1 joerg E->ATT = (ArrayTypeTrait)Record.readInt(); 2072 1.1 joerg E->Value = (unsigned int)Record.readInt(); 2073 1.1.1.2 joerg SourceRange Range = readSourceRange(); 2074 1.1 joerg E->Loc = Range.getBegin(); 2075 1.1 joerg E->RParen = Range.getEnd(); 2076 1.1.1.2 joerg E->QueriedType = readTypeSourceInfo(); 2077 1.1 joerg E->Dimension = Record.readSubExpr(); 2078 1.1 joerg } 2079 1.1 joerg 2080 1.1 joerg void ASTStmtReader::VisitExpressionTraitExpr(ExpressionTraitExpr *E) { 2081 1.1 joerg VisitExpr(E); 2082 1.1 joerg E->ET = (ExpressionTrait)Record.readInt(); 2083 1.1 joerg E->Value = (bool)Record.readInt(); 2084 1.1.1.2 joerg SourceRange Range = readSourceRange(); 2085 1.1 joerg E->QueriedExpression = Record.readSubExpr(); 2086 1.1 joerg E->Loc = Range.getBegin(); 2087 1.1 joerg E->RParen = Range.getEnd(); 2088 1.1 joerg } 2089 1.1 joerg 2090 1.1 joerg void ASTStmtReader::VisitCXXNoexceptExpr(CXXNoexceptExpr *E) { 2091 1.1 joerg VisitExpr(E); 2092 1.1 joerg E->CXXNoexceptExprBits.Value = Record.readInt(); 2093 1.1.1.2 joerg E->Range = readSourceRange(); 2094 1.1 joerg E->Operand = Record.readSubExpr(); 2095 1.1 joerg } 2096 1.1 joerg 2097 1.1 joerg void ASTStmtReader::VisitPackExpansionExpr(PackExpansionExpr *E) { 2098 1.1 joerg VisitExpr(E); 2099 1.1.1.2 joerg E->EllipsisLoc = readSourceLocation(); 2100 1.1 joerg E->NumExpansions = Record.readInt(); 2101 1.1 joerg E->Pattern = Record.readSubExpr(); 2102 1.1 joerg } 2103 1.1 joerg 2104 1.1 joerg void ASTStmtReader::VisitSizeOfPackExpr(SizeOfPackExpr *E) { 2105 1.1 joerg VisitExpr(E); 2106 1.1 joerg unsigned NumPartialArgs = Record.readInt(); 2107 1.1.1.2 joerg E->OperatorLoc = readSourceLocation(); 2108 1.1.1.2 joerg E->PackLoc = readSourceLocation(); 2109 1.1.1.2 joerg E->RParenLoc = readSourceLocation(); 2110 1.1 joerg E->Pack = Record.readDeclAs<NamedDecl>(); 2111 1.1 joerg if (E->isPartiallySubstituted()) { 2112 1.1 joerg assert(E->Length == NumPartialArgs); 2113 1.1 joerg for (auto *I = E->getTrailingObjects<TemplateArgument>(), 2114 1.1 joerg *E = I + NumPartialArgs; 2115 1.1 joerg I != E; ++I) 2116 1.1 joerg new (I) TemplateArgument(Record.readTemplateArgument()); 2117 1.1 joerg } else if (!E->isValueDependent()) { 2118 1.1 joerg E->Length = Record.readInt(); 2119 1.1 joerg } 2120 1.1 joerg } 2121 1.1 joerg 2122 1.1 joerg void ASTStmtReader::VisitSubstNonTypeTemplateParmExpr( 2123 1.1 joerg SubstNonTypeTemplateParmExpr *E) { 2124 1.1 joerg VisitExpr(E); 2125 1.1.1.2 joerg E->ParamAndRef.setPointer(readDeclAs<NonTypeTemplateParmDecl>()); 2126 1.1.1.2 joerg E->ParamAndRef.setInt(Record.readInt()); 2127 1.1.1.2 joerg E->SubstNonTypeTemplateParmExprBits.NameLoc = readSourceLocation(); 2128 1.1 joerg E->Replacement = Record.readSubExpr(); 2129 1.1 joerg } 2130 1.1 joerg 2131 1.1 joerg void ASTStmtReader::VisitSubstNonTypeTemplateParmPackExpr( 2132 1.1 joerg SubstNonTypeTemplateParmPackExpr *E) { 2133 1.1 joerg VisitExpr(E); 2134 1.1.1.2 joerg E->Param = readDeclAs<NonTypeTemplateParmDecl>(); 2135 1.1 joerg TemplateArgument ArgPack = Record.readTemplateArgument(); 2136 1.1 joerg if (ArgPack.getKind() != TemplateArgument::Pack) 2137 1.1 joerg return; 2138 1.1 joerg 2139 1.1 joerg E->Arguments = ArgPack.pack_begin(); 2140 1.1 joerg E->NumArguments = ArgPack.pack_size(); 2141 1.1.1.2 joerg E->NameLoc = readSourceLocation(); 2142 1.1 joerg } 2143 1.1 joerg 2144 1.1 joerg void ASTStmtReader::VisitFunctionParmPackExpr(FunctionParmPackExpr *E) { 2145 1.1 joerg VisitExpr(E); 2146 1.1 joerg E->NumParameters = Record.readInt(); 2147 1.1.1.2 joerg E->ParamPack = readDeclAs<ParmVarDecl>(); 2148 1.1.1.2 joerg E->NameLoc = readSourceLocation(); 2149 1.1 joerg auto **Parms = E->getTrailingObjects<VarDecl *>(); 2150 1.1 joerg for (unsigned i = 0, n = E->NumParameters; i != n; ++i) 2151 1.1.1.2 joerg Parms[i] = readDeclAs<VarDecl>(); 2152 1.1 joerg } 2153 1.1 joerg 2154 1.1 joerg void ASTStmtReader::VisitMaterializeTemporaryExpr(MaterializeTemporaryExpr *E) { 2155 1.1 joerg VisitExpr(E); 2156 1.1.1.2 joerg bool HasMaterialzedDecl = Record.readInt(); 2157 1.1.1.2 joerg if (HasMaterialzedDecl) 2158 1.1.1.2 joerg E->State = cast<LifetimeExtendedTemporaryDecl>(Record.readDecl()); 2159 1.1.1.2 joerg else 2160 1.1.1.2 joerg E->State = Record.readSubExpr(); 2161 1.1 joerg } 2162 1.1 joerg 2163 1.1 joerg void ASTStmtReader::VisitCXXFoldExpr(CXXFoldExpr *E) { 2164 1.1 joerg VisitExpr(E); 2165 1.1.1.2 joerg E->LParenLoc = readSourceLocation(); 2166 1.1.1.2 joerg E->EllipsisLoc = readSourceLocation(); 2167 1.1.1.2 joerg E->RParenLoc = readSourceLocation(); 2168 1.1 joerg E->NumExpansions = Record.readInt(); 2169 1.1 joerg E->SubExprs[0] = Record.readSubExpr(); 2170 1.1 joerg E->SubExprs[1] = Record.readSubExpr(); 2171 1.1.1.2 joerg E->SubExprs[2] = Record.readSubExpr(); 2172 1.1 joerg E->Opcode = (BinaryOperatorKind)Record.readInt(); 2173 1.1 joerg } 2174 1.1 joerg 2175 1.1 joerg void ASTStmtReader::VisitOpaqueValueExpr(OpaqueValueExpr *E) { 2176 1.1 joerg VisitExpr(E); 2177 1.1 joerg E->SourceExpr = Record.readSubExpr(); 2178 1.1.1.2 joerg E->OpaqueValueExprBits.Loc = readSourceLocation(); 2179 1.1 joerg E->setIsUnique(Record.readInt()); 2180 1.1 joerg } 2181 1.1 joerg 2182 1.1 joerg void ASTStmtReader::VisitTypoExpr(TypoExpr *E) { 2183 1.1 joerg llvm_unreachable("Cannot read TypoExpr nodes"); 2184 1.1 joerg } 2185 1.1 joerg 2186 1.1.1.2 joerg void ASTStmtReader::VisitRecoveryExpr(RecoveryExpr *E) { 2187 1.1.1.2 joerg VisitExpr(E); 2188 1.1.1.2 joerg unsigned NumArgs = Record.readInt(); 2189 1.1.1.2 joerg E->BeginLoc = readSourceLocation(); 2190 1.1.1.2 joerg E->EndLoc = readSourceLocation(); 2191 1.1.1.2 joerg assert((NumArgs + 0LL == 2192 1.1.1.2 joerg std::distance(E->children().begin(), E->children().end())) && 2193 1.1.1.2 joerg "Wrong NumArgs!"); 2194 1.1.1.2 joerg (void)NumArgs; 2195 1.1.1.2 joerg for (Stmt *&Child : E->children()) 2196 1.1.1.2 joerg Child = Record.readSubStmt(); 2197 1.1.1.2 joerg } 2198 1.1.1.2 joerg 2199 1.1 joerg //===----------------------------------------------------------------------===// 2200 1.1 joerg // Microsoft Expressions and Statements 2201 1.1 joerg //===----------------------------------------------------------------------===// 2202 1.1 joerg void ASTStmtReader::VisitMSPropertyRefExpr(MSPropertyRefExpr *E) { 2203 1.1 joerg VisitExpr(E); 2204 1.1 joerg E->IsArrow = (Record.readInt() != 0); 2205 1.1 joerg E->BaseExpr = Record.readSubExpr(); 2206 1.1 joerg E->QualifierLoc = Record.readNestedNameSpecifierLoc(); 2207 1.1.1.2 joerg E->MemberLoc = readSourceLocation(); 2208 1.1.1.2 joerg E->TheDecl = readDeclAs<MSPropertyDecl>(); 2209 1.1 joerg } 2210 1.1 joerg 2211 1.1 joerg void ASTStmtReader::VisitMSPropertySubscriptExpr(MSPropertySubscriptExpr *E) { 2212 1.1 joerg VisitExpr(E); 2213 1.1 joerg E->setBase(Record.readSubExpr()); 2214 1.1 joerg E->setIdx(Record.readSubExpr()); 2215 1.1.1.2 joerg E->setRBracketLoc(readSourceLocation()); 2216 1.1 joerg } 2217 1.1 joerg 2218 1.1 joerg void ASTStmtReader::VisitCXXUuidofExpr(CXXUuidofExpr *E) { 2219 1.1 joerg VisitExpr(E); 2220 1.1.1.2 joerg E->setSourceRange(readSourceRange()); 2221 1.1.1.2 joerg E->Guid = readDeclAs<MSGuidDecl>(); 2222 1.1.1.2 joerg if (E->isTypeOperand()) 2223 1.1.1.2 joerg E->Operand = readTypeSourceInfo(); 2224 1.1.1.2 joerg else 2225 1.1.1.2 joerg E->Operand = Record.readSubExpr(); 2226 1.1 joerg } 2227 1.1 joerg 2228 1.1 joerg void ASTStmtReader::VisitSEHLeaveStmt(SEHLeaveStmt *S) { 2229 1.1 joerg VisitStmt(S); 2230 1.1.1.2 joerg S->setLeaveLoc(readSourceLocation()); 2231 1.1 joerg } 2232 1.1 joerg 2233 1.1 joerg void ASTStmtReader::VisitSEHExceptStmt(SEHExceptStmt *S) { 2234 1.1 joerg VisitStmt(S); 2235 1.1.1.2 joerg S->Loc = readSourceLocation(); 2236 1.1 joerg S->Children[SEHExceptStmt::FILTER_EXPR] = Record.readSubStmt(); 2237 1.1 joerg S->Children[SEHExceptStmt::BLOCK] = Record.readSubStmt(); 2238 1.1 joerg } 2239 1.1 joerg 2240 1.1 joerg void ASTStmtReader::VisitSEHFinallyStmt(SEHFinallyStmt *S) { 2241 1.1 joerg VisitStmt(S); 2242 1.1.1.2 joerg S->Loc = readSourceLocation(); 2243 1.1 joerg S->Block = Record.readSubStmt(); 2244 1.1 joerg } 2245 1.1 joerg 2246 1.1 joerg void ASTStmtReader::VisitSEHTryStmt(SEHTryStmt *S) { 2247 1.1 joerg VisitStmt(S); 2248 1.1 joerg S->IsCXXTry = Record.readInt(); 2249 1.1.1.2 joerg S->TryLoc = readSourceLocation(); 2250 1.1 joerg S->Children[SEHTryStmt::TRY] = Record.readSubStmt(); 2251 1.1 joerg S->Children[SEHTryStmt::HANDLER] = Record.readSubStmt(); 2252 1.1 joerg } 2253 1.1 joerg 2254 1.1 joerg //===----------------------------------------------------------------------===// 2255 1.1 joerg // CUDA Expressions and Statements 2256 1.1 joerg //===----------------------------------------------------------------------===// 2257 1.1 joerg 2258 1.1 joerg void ASTStmtReader::VisitCUDAKernelCallExpr(CUDAKernelCallExpr *E) { 2259 1.1 joerg VisitCallExpr(E); 2260 1.1 joerg E->setPreArg(CUDAKernelCallExpr::CONFIG, Record.readSubExpr()); 2261 1.1 joerg } 2262 1.1 joerg 2263 1.1 joerg //===----------------------------------------------------------------------===// 2264 1.1 joerg // OpenCL Expressions and Statements. 2265 1.1 joerg //===----------------------------------------------------------------------===// 2266 1.1 joerg void ASTStmtReader::VisitAsTypeExpr(AsTypeExpr *E) { 2267 1.1 joerg VisitExpr(E); 2268 1.1.1.2 joerg E->BuiltinLoc = readSourceLocation(); 2269 1.1.1.2 joerg E->RParenLoc = readSourceLocation(); 2270 1.1 joerg E->SrcExpr = Record.readSubExpr(); 2271 1.1 joerg } 2272 1.1 joerg 2273 1.1 joerg //===----------------------------------------------------------------------===// 2274 1.1 joerg // OpenMP Directives. 2275 1.1 joerg //===----------------------------------------------------------------------===// 2276 1.1 joerg 2277 1.1.1.2 joerg void ASTStmtReader::VisitOMPCanonicalLoop(OMPCanonicalLoop *S) { 2278 1.1.1.2 joerg VisitStmt(S); 2279 1.1.1.2 joerg for (Stmt *&SubStmt : S->SubStmts) 2280 1.1.1.2 joerg SubStmt = Record.readSubStmt(); 2281 1.1.1.2 joerg } 2282 1.1.1.2 joerg 2283 1.1 joerg void ASTStmtReader::VisitOMPExecutableDirective(OMPExecutableDirective *E) { 2284 1.1.1.2 joerg Record.readOMPChildren(E->Data); 2285 1.1.1.2 joerg E->setLocStart(readSourceLocation()); 2286 1.1.1.2 joerg E->setLocEnd(readSourceLocation()); 2287 1.1 joerg } 2288 1.1 joerg 2289 1.1.1.2 joerg void ASTStmtReader::VisitOMPLoopBasedDirective(OMPLoopBasedDirective *D) { 2290 1.1 joerg VisitStmt(D); 2291 1.1.1.2 joerg // Field CollapsedNum was read in ReadStmtFromStream. 2292 1.1.1.2 joerg Record.skipInts(1); 2293 1.1 joerg VisitOMPExecutableDirective(D); 2294 1.1.1.2 joerg } 2295 1.1.1.2 joerg 2296 1.1.1.2 joerg void ASTStmtReader::VisitOMPLoopDirective(OMPLoopDirective *D) { 2297 1.1.1.2 joerg VisitOMPLoopBasedDirective(D); 2298 1.1 joerg } 2299 1.1 joerg 2300 1.1 joerg void ASTStmtReader::VisitOMPParallelDirective(OMPParallelDirective *D) { 2301 1.1 joerg VisitStmt(D); 2302 1.1 joerg VisitOMPExecutableDirective(D); 2303 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2304 1.1 joerg } 2305 1.1 joerg 2306 1.1 joerg void ASTStmtReader::VisitOMPSimdDirective(OMPSimdDirective *D) { 2307 1.1 joerg VisitOMPLoopDirective(D); 2308 1.1 joerg } 2309 1.1 joerg 2310 1.1.1.2 joerg void ASTStmtReader::VisitOMPTileDirective(OMPTileDirective *D) { 2311 1.1.1.2 joerg VisitOMPLoopBasedDirective(D); 2312 1.1.1.2 joerg } 2313 1.1.1.2 joerg 2314 1.1 joerg void ASTStmtReader::VisitOMPForDirective(OMPForDirective *D) { 2315 1.1 joerg VisitOMPLoopDirective(D); 2316 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2317 1.1 joerg } 2318 1.1 joerg 2319 1.1 joerg void ASTStmtReader::VisitOMPForSimdDirective(OMPForSimdDirective *D) { 2320 1.1 joerg VisitOMPLoopDirective(D); 2321 1.1 joerg } 2322 1.1 joerg 2323 1.1 joerg void ASTStmtReader::VisitOMPSectionsDirective(OMPSectionsDirective *D) { 2324 1.1 joerg VisitStmt(D); 2325 1.1 joerg VisitOMPExecutableDirective(D); 2326 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2327 1.1 joerg } 2328 1.1 joerg 2329 1.1 joerg void ASTStmtReader::VisitOMPSectionDirective(OMPSectionDirective *D) { 2330 1.1 joerg VisitStmt(D); 2331 1.1 joerg VisitOMPExecutableDirective(D); 2332 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2333 1.1 joerg } 2334 1.1 joerg 2335 1.1 joerg void ASTStmtReader::VisitOMPSingleDirective(OMPSingleDirective *D) { 2336 1.1 joerg VisitStmt(D); 2337 1.1 joerg VisitOMPExecutableDirective(D); 2338 1.1 joerg } 2339 1.1 joerg 2340 1.1 joerg void ASTStmtReader::VisitOMPMasterDirective(OMPMasterDirective *D) { 2341 1.1 joerg VisitStmt(D); 2342 1.1 joerg VisitOMPExecutableDirective(D); 2343 1.1 joerg } 2344 1.1 joerg 2345 1.1 joerg void ASTStmtReader::VisitOMPCriticalDirective(OMPCriticalDirective *D) { 2346 1.1 joerg VisitStmt(D); 2347 1.1 joerg VisitOMPExecutableDirective(D); 2348 1.1.1.2 joerg D->DirName = Record.readDeclarationNameInfo(); 2349 1.1 joerg } 2350 1.1 joerg 2351 1.1 joerg void ASTStmtReader::VisitOMPParallelForDirective(OMPParallelForDirective *D) { 2352 1.1 joerg VisitOMPLoopDirective(D); 2353 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2354 1.1 joerg } 2355 1.1 joerg 2356 1.1 joerg void ASTStmtReader::VisitOMPParallelForSimdDirective( 2357 1.1 joerg OMPParallelForSimdDirective *D) { 2358 1.1 joerg VisitOMPLoopDirective(D); 2359 1.1 joerg } 2360 1.1 joerg 2361 1.1.1.2 joerg void ASTStmtReader::VisitOMPParallelMasterDirective( 2362 1.1.1.2 joerg OMPParallelMasterDirective *D) { 2363 1.1.1.2 joerg VisitStmt(D); 2364 1.1.1.2 joerg VisitOMPExecutableDirective(D); 2365 1.1.1.2 joerg } 2366 1.1.1.2 joerg 2367 1.1 joerg void ASTStmtReader::VisitOMPParallelSectionsDirective( 2368 1.1 joerg OMPParallelSectionsDirective *D) { 2369 1.1 joerg VisitStmt(D); 2370 1.1 joerg VisitOMPExecutableDirective(D); 2371 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2372 1.1 joerg } 2373 1.1 joerg 2374 1.1 joerg void ASTStmtReader::VisitOMPTaskDirective(OMPTaskDirective *D) { 2375 1.1 joerg VisitStmt(D); 2376 1.1 joerg VisitOMPExecutableDirective(D); 2377 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2378 1.1 joerg } 2379 1.1 joerg 2380 1.1 joerg void ASTStmtReader::VisitOMPTaskyieldDirective(OMPTaskyieldDirective *D) { 2381 1.1 joerg VisitStmt(D); 2382 1.1 joerg VisitOMPExecutableDirective(D); 2383 1.1 joerg } 2384 1.1 joerg 2385 1.1 joerg void ASTStmtReader::VisitOMPBarrierDirective(OMPBarrierDirective *D) { 2386 1.1 joerg VisitStmt(D); 2387 1.1 joerg VisitOMPExecutableDirective(D); 2388 1.1 joerg } 2389 1.1 joerg 2390 1.1 joerg void ASTStmtReader::VisitOMPTaskwaitDirective(OMPTaskwaitDirective *D) { 2391 1.1 joerg VisitStmt(D); 2392 1.1 joerg VisitOMPExecutableDirective(D); 2393 1.1 joerg } 2394 1.1 joerg 2395 1.1 joerg void ASTStmtReader::VisitOMPTaskgroupDirective(OMPTaskgroupDirective *D) { 2396 1.1 joerg VisitStmt(D); 2397 1.1 joerg VisitOMPExecutableDirective(D); 2398 1.1 joerg } 2399 1.1 joerg 2400 1.1 joerg void ASTStmtReader::VisitOMPFlushDirective(OMPFlushDirective *D) { 2401 1.1 joerg VisitStmt(D); 2402 1.1.1.2 joerg VisitOMPExecutableDirective(D); 2403 1.1.1.2 joerg } 2404 1.1.1.2 joerg 2405 1.1.1.2 joerg void ASTStmtReader::VisitOMPDepobjDirective(OMPDepobjDirective *D) { 2406 1.1.1.2 joerg VisitStmt(D); 2407 1.1.1.2 joerg VisitOMPExecutableDirective(D); 2408 1.1.1.2 joerg } 2409 1.1.1.2 joerg 2410 1.1.1.2 joerg void ASTStmtReader::VisitOMPScanDirective(OMPScanDirective *D) { 2411 1.1.1.2 joerg VisitStmt(D); 2412 1.1 joerg VisitOMPExecutableDirective(D); 2413 1.1 joerg } 2414 1.1 joerg 2415 1.1 joerg void ASTStmtReader::VisitOMPOrderedDirective(OMPOrderedDirective *D) { 2416 1.1 joerg VisitStmt(D); 2417 1.1 joerg VisitOMPExecutableDirective(D); 2418 1.1 joerg } 2419 1.1 joerg 2420 1.1 joerg void ASTStmtReader::VisitOMPAtomicDirective(OMPAtomicDirective *D) { 2421 1.1 joerg VisitStmt(D); 2422 1.1 joerg VisitOMPExecutableDirective(D); 2423 1.1.1.2 joerg D->IsXLHSInRHSPart = Record.readBool(); 2424 1.1.1.2 joerg D->IsPostfixUpdate = Record.readBool(); 2425 1.1 joerg } 2426 1.1 joerg 2427 1.1 joerg void ASTStmtReader::VisitOMPTargetDirective(OMPTargetDirective *D) { 2428 1.1 joerg VisitStmt(D); 2429 1.1 joerg VisitOMPExecutableDirective(D); 2430 1.1 joerg } 2431 1.1 joerg 2432 1.1 joerg void ASTStmtReader::VisitOMPTargetDataDirective(OMPTargetDataDirective *D) { 2433 1.1 joerg VisitStmt(D); 2434 1.1 joerg VisitOMPExecutableDirective(D); 2435 1.1 joerg } 2436 1.1 joerg 2437 1.1 joerg void ASTStmtReader::VisitOMPTargetEnterDataDirective( 2438 1.1 joerg OMPTargetEnterDataDirective *D) { 2439 1.1 joerg VisitStmt(D); 2440 1.1 joerg VisitOMPExecutableDirective(D); 2441 1.1 joerg } 2442 1.1 joerg 2443 1.1 joerg void ASTStmtReader::VisitOMPTargetExitDataDirective( 2444 1.1 joerg OMPTargetExitDataDirective *D) { 2445 1.1 joerg VisitStmt(D); 2446 1.1 joerg VisitOMPExecutableDirective(D); 2447 1.1 joerg } 2448 1.1 joerg 2449 1.1 joerg void ASTStmtReader::VisitOMPTargetParallelDirective( 2450 1.1 joerg OMPTargetParallelDirective *D) { 2451 1.1 joerg VisitStmt(D); 2452 1.1 joerg VisitOMPExecutableDirective(D); 2453 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2454 1.1 joerg } 2455 1.1 joerg 2456 1.1 joerg void ASTStmtReader::VisitOMPTargetParallelForDirective( 2457 1.1 joerg OMPTargetParallelForDirective *D) { 2458 1.1 joerg VisitOMPLoopDirective(D); 2459 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2460 1.1 joerg } 2461 1.1 joerg 2462 1.1 joerg void ASTStmtReader::VisitOMPTeamsDirective(OMPTeamsDirective *D) { 2463 1.1 joerg VisitStmt(D); 2464 1.1 joerg VisitOMPExecutableDirective(D); 2465 1.1 joerg } 2466 1.1 joerg 2467 1.1 joerg void ASTStmtReader::VisitOMPCancellationPointDirective( 2468 1.1 joerg OMPCancellationPointDirective *D) { 2469 1.1 joerg VisitStmt(D); 2470 1.1 joerg VisitOMPExecutableDirective(D); 2471 1.1.1.2 joerg D->setCancelRegion(Record.readEnum<OpenMPDirectiveKind>()); 2472 1.1 joerg } 2473 1.1 joerg 2474 1.1 joerg void ASTStmtReader::VisitOMPCancelDirective(OMPCancelDirective *D) { 2475 1.1 joerg VisitStmt(D); 2476 1.1 joerg VisitOMPExecutableDirective(D); 2477 1.1.1.2 joerg D->setCancelRegion(Record.readEnum<OpenMPDirectiveKind>()); 2478 1.1 joerg } 2479 1.1 joerg 2480 1.1 joerg void ASTStmtReader::VisitOMPTaskLoopDirective(OMPTaskLoopDirective *D) { 2481 1.1 joerg VisitOMPLoopDirective(D); 2482 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2483 1.1 joerg } 2484 1.1 joerg 2485 1.1 joerg void ASTStmtReader::VisitOMPTaskLoopSimdDirective(OMPTaskLoopSimdDirective *D) { 2486 1.1 joerg VisitOMPLoopDirective(D); 2487 1.1 joerg } 2488 1.1 joerg 2489 1.1 joerg void ASTStmtReader::VisitOMPMasterTaskLoopDirective( 2490 1.1 joerg OMPMasterTaskLoopDirective *D) { 2491 1.1 joerg VisitOMPLoopDirective(D); 2492 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2493 1.1 joerg } 2494 1.1 joerg 2495 1.1 joerg void ASTStmtReader::VisitOMPMasterTaskLoopSimdDirective( 2496 1.1 joerg OMPMasterTaskLoopSimdDirective *D) { 2497 1.1 joerg VisitOMPLoopDirective(D); 2498 1.1 joerg } 2499 1.1 joerg 2500 1.1 joerg void ASTStmtReader::VisitOMPParallelMasterTaskLoopDirective( 2501 1.1 joerg OMPParallelMasterTaskLoopDirective *D) { 2502 1.1 joerg VisitOMPLoopDirective(D); 2503 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2504 1.1.1.2 joerg } 2505 1.1.1.2 joerg 2506 1.1.1.2 joerg void ASTStmtReader::VisitOMPParallelMasterTaskLoopSimdDirective( 2507 1.1.1.2 joerg OMPParallelMasterTaskLoopSimdDirective *D) { 2508 1.1.1.2 joerg VisitOMPLoopDirective(D); 2509 1.1 joerg } 2510 1.1 joerg 2511 1.1 joerg void ASTStmtReader::VisitOMPDistributeDirective(OMPDistributeDirective *D) { 2512 1.1 joerg VisitOMPLoopDirective(D); 2513 1.1 joerg } 2514 1.1 joerg 2515 1.1 joerg void ASTStmtReader::VisitOMPTargetUpdateDirective(OMPTargetUpdateDirective *D) { 2516 1.1 joerg VisitStmt(D); 2517 1.1 joerg VisitOMPExecutableDirective(D); 2518 1.1 joerg } 2519 1.1 joerg 2520 1.1 joerg void ASTStmtReader::VisitOMPDistributeParallelForDirective( 2521 1.1 joerg OMPDistributeParallelForDirective *D) { 2522 1.1 joerg VisitOMPLoopDirective(D); 2523 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2524 1.1 joerg } 2525 1.1 joerg 2526 1.1 joerg void ASTStmtReader::VisitOMPDistributeParallelForSimdDirective( 2527 1.1 joerg OMPDistributeParallelForSimdDirective *D) { 2528 1.1 joerg VisitOMPLoopDirective(D); 2529 1.1 joerg } 2530 1.1 joerg 2531 1.1 joerg void ASTStmtReader::VisitOMPDistributeSimdDirective( 2532 1.1 joerg OMPDistributeSimdDirective *D) { 2533 1.1 joerg VisitOMPLoopDirective(D); 2534 1.1 joerg } 2535 1.1 joerg 2536 1.1 joerg void ASTStmtReader::VisitOMPTargetParallelForSimdDirective( 2537 1.1 joerg OMPTargetParallelForSimdDirective *D) { 2538 1.1 joerg VisitOMPLoopDirective(D); 2539 1.1 joerg } 2540 1.1 joerg 2541 1.1 joerg void ASTStmtReader::VisitOMPTargetSimdDirective(OMPTargetSimdDirective *D) { 2542 1.1 joerg VisitOMPLoopDirective(D); 2543 1.1 joerg } 2544 1.1 joerg 2545 1.1 joerg void ASTStmtReader::VisitOMPTeamsDistributeDirective( 2546 1.1 joerg OMPTeamsDistributeDirective *D) { 2547 1.1 joerg VisitOMPLoopDirective(D); 2548 1.1 joerg } 2549 1.1 joerg 2550 1.1 joerg void ASTStmtReader::VisitOMPTeamsDistributeSimdDirective( 2551 1.1 joerg OMPTeamsDistributeSimdDirective *D) { 2552 1.1 joerg VisitOMPLoopDirective(D); 2553 1.1 joerg } 2554 1.1 joerg 2555 1.1 joerg void ASTStmtReader::VisitOMPTeamsDistributeParallelForSimdDirective( 2556 1.1 joerg OMPTeamsDistributeParallelForSimdDirective *D) { 2557 1.1 joerg VisitOMPLoopDirective(D); 2558 1.1 joerg } 2559 1.1 joerg 2560 1.1 joerg void ASTStmtReader::VisitOMPTeamsDistributeParallelForDirective( 2561 1.1 joerg OMPTeamsDistributeParallelForDirective *D) { 2562 1.1 joerg VisitOMPLoopDirective(D); 2563 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2564 1.1 joerg } 2565 1.1 joerg 2566 1.1 joerg void ASTStmtReader::VisitOMPTargetTeamsDirective(OMPTargetTeamsDirective *D) { 2567 1.1 joerg VisitStmt(D); 2568 1.1 joerg VisitOMPExecutableDirective(D); 2569 1.1 joerg } 2570 1.1 joerg 2571 1.1 joerg void ASTStmtReader::VisitOMPTargetTeamsDistributeDirective( 2572 1.1 joerg OMPTargetTeamsDistributeDirective *D) { 2573 1.1 joerg VisitOMPLoopDirective(D); 2574 1.1 joerg } 2575 1.1 joerg 2576 1.1 joerg void ASTStmtReader::VisitOMPTargetTeamsDistributeParallelForDirective( 2577 1.1 joerg OMPTargetTeamsDistributeParallelForDirective *D) { 2578 1.1 joerg VisitOMPLoopDirective(D); 2579 1.1.1.2 joerg D->setHasCancel(Record.readBool()); 2580 1.1 joerg } 2581 1.1 joerg 2582 1.1 joerg void ASTStmtReader::VisitOMPTargetTeamsDistributeParallelForSimdDirective( 2583 1.1 joerg OMPTargetTeamsDistributeParallelForSimdDirective *D) { 2584 1.1 joerg VisitOMPLoopDirective(D); 2585 1.1 joerg } 2586 1.1 joerg 2587 1.1 joerg void ASTStmtReader::VisitOMPTargetTeamsDistributeSimdDirective( 2588 1.1 joerg OMPTargetTeamsDistributeSimdDirective *D) { 2589 1.1 joerg VisitOMPLoopDirective(D); 2590 1.1 joerg } 2591 1.1 joerg 2592 1.1.1.2 joerg void ASTStmtReader::VisitOMPInteropDirective(OMPInteropDirective *D) { 2593 1.1.1.2 joerg VisitStmt(D); 2594 1.1.1.2 joerg VisitOMPExecutableDirective(D); 2595 1.1.1.2 joerg } 2596 1.1.1.2 joerg 2597 1.1.1.2 joerg void ASTStmtReader::VisitOMPDispatchDirective(OMPDispatchDirective *D) { 2598 1.1.1.2 joerg VisitStmt(D); 2599 1.1.1.2 joerg VisitOMPExecutableDirective(D); 2600 1.1.1.2 joerg D->setTargetCallLoc(Record.readSourceLocation()); 2601 1.1.1.2 joerg } 2602 1.1.1.2 joerg 2603 1.1.1.2 joerg void ASTStmtReader::VisitOMPMaskedDirective(OMPMaskedDirective *D) { 2604 1.1.1.2 joerg VisitStmt(D); 2605 1.1.1.2 joerg VisitOMPExecutableDirective(D); 2606 1.1.1.2 joerg } 2607 1.1.1.2 joerg 2608 1.1 joerg //===----------------------------------------------------------------------===// 2609 1.1 joerg // ASTReader Implementation 2610 1.1 joerg //===----------------------------------------------------------------------===// 2611 1.1 joerg 2612 1.1 joerg Stmt *ASTReader::ReadStmt(ModuleFile &F) { 2613 1.1 joerg switch (ReadingKind) { 2614 1.1 joerg case Read_None: 2615 1.1 joerg llvm_unreachable("should not call this when not reading anything"); 2616 1.1 joerg case Read_Decl: 2617 1.1 joerg case Read_Type: 2618 1.1 joerg return ReadStmtFromStream(F); 2619 1.1 joerg case Read_Stmt: 2620 1.1 joerg return ReadSubStmt(); 2621 1.1 joerg } 2622 1.1 joerg 2623 1.1 joerg llvm_unreachable("ReadingKind not set ?"); 2624 1.1 joerg } 2625 1.1 joerg 2626 1.1 joerg Expr *ASTReader::ReadExpr(ModuleFile &F) { 2627 1.1 joerg return cast_or_null<Expr>(ReadStmt(F)); 2628 1.1 joerg } 2629 1.1 joerg 2630 1.1 joerg Expr *ASTReader::ReadSubExpr() { 2631 1.1 joerg return cast_or_null<Expr>(ReadSubStmt()); 2632 1.1 joerg } 2633 1.1 joerg 2634 1.1 joerg // Within the bitstream, expressions are stored in Reverse Polish 2635 1.1 joerg // Notation, with each of the subexpressions preceding the 2636 1.1 joerg // expression they are stored in. Subexpressions are stored from last to first. 2637 1.1 joerg // To evaluate expressions, we continue reading expressions and placing them on 2638 1.1 joerg // the stack, with expressions having operands removing those operands from the 2639 1.1 joerg // stack. Evaluation terminates when we see a STMT_STOP record, and 2640 1.1 joerg // the single remaining expression on the stack is our result. 2641 1.1 joerg Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) { 2642 1.1 joerg ReadingKindTracker ReadingKind(Read_Stmt, *this); 2643 1.1 joerg llvm::BitstreamCursor &Cursor = F.DeclsCursor; 2644 1.1 joerg 2645 1.1 joerg // Map of offset to previously deserialized stmt. The offset points 2646 1.1 joerg // just after the stmt record. 2647 1.1 joerg llvm::DenseMap<uint64_t, Stmt *> StmtEntries; 2648 1.1 joerg 2649 1.1 joerg #ifndef NDEBUG 2650 1.1 joerg unsigned PrevNumStmts = StmtStack.size(); 2651 1.1 joerg #endif 2652 1.1 joerg 2653 1.1 joerg ASTRecordReader Record(*this, F); 2654 1.1 joerg ASTStmtReader Reader(Record, Cursor); 2655 1.1 joerg Stmt::EmptyShell Empty; 2656 1.1 joerg 2657 1.1 joerg while (true) { 2658 1.1 joerg llvm::Expected<llvm::BitstreamEntry> MaybeEntry = 2659 1.1 joerg Cursor.advanceSkippingSubblocks(); 2660 1.1 joerg if (!MaybeEntry) { 2661 1.1 joerg Error(toString(MaybeEntry.takeError())); 2662 1.1 joerg return nullptr; 2663 1.1 joerg } 2664 1.1 joerg llvm::BitstreamEntry Entry = MaybeEntry.get(); 2665 1.1 joerg 2666 1.1 joerg switch (Entry.Kind) { 2667 1.1 joerg case llvm::BitstreamEntry::SubBlock: // Handled for us already. 2668 1.1 joerg case llvm::BitstreamEntry::Error: 2669 1.1 joerg Error("malformed block record in AST file"); 2670 1.1 joerg return nullptr; 2671 1.1 joerg case llvm::BitstreamEntry::EndBlock: 2672 1.1 joerg goto Done; 2673 1.1 joerg case llvm::BitstreamEntry::Record: 2674 1.1 joerg // The interesting case. 2675 1.1 joerg break; 2676 1.1 joerg } 2677 1.1 joerg 2678 1.1 joerg ASTContext &Context = getContext(); 2679 1.1 joerg Stmt *S = nullptr; 2680 1.1 joerg bool Finished = false; 2681 1.1 joerg bool IsStmtReference = false; 2682 1.1 joerg Expected<unsigned> MaybeStmtCode = Record.readRecord(Cursor, Entry.ID); 2683 1.1 joerg if (!MaybeStmtCode) { 2684 1.1 joerg Error(toString(MaybeStmtCode.takeError())); 2685 1.1 joerg return nullptr; 2686 1.1 joerg } 2687 1.1 joerg switch ((StmtCode)MaybeStmtCode.get()) { 2688 1.1 joerg case STMT_STOP: 2689 1.1 joerg Finished = true; 2690 1.1 joerg break; 2691 1.1 joerg 2692 1.1 joerg case STMT_REF_PTR: 2693 1.1 joerg IsStmtReference = true; 2694 1.1 joerg assert(StmtEntries.find(Record[0]) != StmtEntries.end() && 2695 1.1 joerg "No stmt was recorded for this offset reference!"); 2696 1.1 joerg S = StmtEntries[Record.readInt()]; 2697 1.1 joerg break; 2698 1.1 joerg 2699 1.1 joerg case STMT_NULL_PTR: 2700 1.1 joerg S = nullptr; 2701 1.1 joerg break; 2702 1.1 joerg 2703 1.1 joerg case STMT_NULL: 2704 1.1 joerg S = new (Context) NullStmt(Empty); 2705 1.1 joerg break; 2706 1.1 joerg 2707 1.1 joerg case STMT_COMPOUND: 2708 1.1 joerg S = CompoundStmt::CreateEmpty( 2709 1.1 joerg Context, /*NumStmts=*/Record[ASTStmtReader::NumStmtFields]); 2710 1.1 joerg break; 2711 1.1 joerg 2712 1.1 joerg case STMT_CASE: 2713 1.1 joerg S = CaseStmt::CreateEmpty( 2714 1.1 joerg Context, 2715 1.1 joerg /*CaseStmtIsGNURange*/ Record[ASTStmtReader::NumStmtFields + 3]); 2716 1.1 joerg break; 2717 1.1 joerg 2718 1.1 joerg case STMT_DEFAULT: 2719 1.1 joerg S = new (Context) DefaultStmt(Empty); 2720 1.1 joerg break; 2721 1.1 joerg 2722 1.1 joerg case STMT_LABEL: 2723 1.1 joerg S = new (Context) LabelStmt(Empty); 2724 1.1 joerg break; 2725 1.1 joerg 2726 1.1 joerg case STMT_ATTRIBUTED: 2727 1.1 joerg S = AttributedStmt::CreateEmpty( 2728 1.1 joerg Context, 2729 1.1 joerg /*NumAttrs*/Record[ASTStmtReader::NumStmtFields]); 2730 1.1 joerg break; 2731 1.1 joerg 2732 1.1 joerg case STMT_IF: 2733 1.1 joerg S = IfStmt::CreateEmpty( 2734 1.1 joerg Context, 2735 1.1 joerg /* HasElse=*/Record[ASTStmtReader::NumStmtFields + 1], 2736 1.1 joerg /* HasVar=*/Record[ASTStmtReader::NumStmtFields + 2], 2737 1.1 joerg /* HasInit=*/Record[ASTStmtReader::NumStmtFields + 3]); 2738 1.1 joerg break; 2739 1.1 joerg 2740 1.1 joerg case STMT_SWITCH: 2741 1.1 joerg S = SwitchStmt::CreateEmpty( 2742 1.1 joerg Context, 2743 1.1 joerg /* HasInit=*/Record[ASTStmtReader::NumStmtFields], 2744 1.1 joerg /* HasVar=*/Record[ASTStmtReader::NumStmtFields + 1]); 2745 1.1 joerg break; 2746 1.1 joerg 2747 1.1 joerg case STMT_WHILE: 2748 1.1 joerg S = WhileStmt::CreateEmpty( 2749 1.1 joerg Context, 2750 1.1 joerg /* HasVar=*/Record[ASTStmtReader::NumStmtFields]); 2751 1.1 joerg break; 2752 1.1 joerg 2753 1.1 joerg case STMT_DO: 2754 1.1 joerg S = new (Context) DoStmt(Empty); 2755 1.1 joerg break; 2756 1.1 joerg 2757 1.1 joerg case STMT_FOR: 2758 1.1 joerg S = new (Context) ForStmt(Empty); 2759 1.1 joerg break; 2760 1.1 joerg 2761 1.1 joerg case STMT_GOTO: 2762 1.1 joerg S = new (Context) GotoStmt(Empty); 2763 1.1 joerg break; 2764 1.1 joerg 2765 1.1 joerg case STMT_INDIRECT_GOTO: 2766 1.1 joerg S = new (Context) IndirectGotoStmt(Empty); 2767 1.1 joerg break; 2768 1.1 joerg 2769 1.1 joerg case STMT_CONTINUE: 2770 1.1 joerg S = new (Context) ContinueStmt(Empty); 2771 1.1 joerg break; 2772 1.1 joerg 2773 1.1 joerg case STMT_BREAK: 2774 1.1 joerg S = new (Context) BreakStmt(Empty); 2775 1.1 joerg break; 2776 1.1 joerg 2777 1.1 joerg case STMT_RETURN: 2778 1.1 joerg S = ReturnStmt::CreateEmpty( 2779 1.1 joerg Context, /* HasNRVOCandidate=*/Record[ASTStmtReader::NumStmtFields]); 2780 1.1 joerg break; 2781 1.1 joerg 2782 1.1 joerg case STMT_DECL: 2783 1.1 joerg S = new (Context) DeclStmt(Empty); 2784 1.1 joerg break; 2785 1.1 joerg 2786 1.1 joerg case STMT_GCCASM: 2787 1.1 joerg S = new (Context) GCCAsmStmt(Empty); 2788 1.1 joerg break; 2789 1.1 joerg 2790 1.1 joerg case STMT_MSASM: 2791 1.1 joerg S = new (Context) MSAsmStmt(Empty); 2792 1.1 joerg break; 2793 1.1 joerg 2794 1.1 joerg case STMT_CAPTURED: 2795 1.1 joerg S = CapturedStmt::CreateDeserialized( 2796 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields]); 2797 1.1 joerg break; 2798 1.1 joerg 2799 1.1 joerg case EXPR_CONSTANT: 2800 1.1 joerg S = ConstantExpr::CreateEmpty( 2801 1.1.1.2 joerg Context, static_cast<ConstantExpr::ResultStorageKind>( 2802 1.1.1.2 joerg /*StorageKind=*/Record[ASTStmtReader::NumExprFields])); 2803 1.1 joerg break; 2804 1.1 joerg 2805 1.1 joerg case EXPR_PREDEFINED: 2806 1.1 joerg S = PredefinedExpr::CreateEmpty( 2807 1.1 joerg Context, 2808 1.1 joerg /*HasFunctionName*/ Record[ASTStmtReader::NumExprFields]); 2809 1.1 joerg break; 2810 1.1 joerg 2811 1.1 joerg case EXPR_DECL_REF: 2812 1.1 joerg S = DeclRefExpr::CreateEmpty( 2813 1.1 joerg Context, 2814 1.1 joerg /*HasQualifier=*/Record[ASTStmtReader::NumExprFields], 2815 1.1 joerg /*HasFoundDecl=*/Record[ASTStmtReader::NumExprFields + 1], 2816 1.1 joerg /*HasTemplateKWAndArgsInfo=*/Record[ASTStmtReader::NumExprFields + 2], 2817 1.1 joerg /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields + 2] ? 2818 1.1 joerg Record[ASTStmtReader::NumExprFields + 6] : 0); 2819 1.1 joerg break; 2820 1.1 joerg 2821 1.1 joerg case EXPR_INTEGER_LITERAL: 2822 1.1 joerg S = IntegerLiteral::Create(Context, Empty); 2823 1.1 joerg break; 2824 1.1 joerg 2825 1.1.1.2 joerg case EXPR_FIXEDPOINT_LITERAL: 2826 1.1.1.2 joerg S = FixedPointLiteral::Create(Context, Empty); 2827 1.1.1.2 joerg break; 2828 1.1.1.2 joerg 2829 1.1 joerg case EXPR_FLOATING_LITERAL: 2830 1.1 joerg S = FloatingLiteral::Create(Context, Empty); 2831 1.1 joerg break; 2832 1.1 joerg 2833 1.1 joerg case EXPR_IMAGINARY_LITERAL: 2834 1.1 joerg S = new (Context) ImaginaryLiteral(Empty); 2835 1.1 joerg break; 2836 1.1 joerg 2837 1.1 joerg case EXPR_STRING_LITERAL: 2838 1.1 joerg S = StringLiteral::CreateEmpty( 2839 1.1 joerg Context, 2840 1.1 joerg /* NumConcatenated=*/Record[ASTStmtReader::NumExprFields], 2841 1.1 joerg /* Length=*/Record[ASTStmtReader::NumExprFields + 1], 2842 1.1 joerg /* CharByteWidth=*/Record[ASTStmtReader::NumExprFields + 2]); 2843 1.1 joerg break; 2844 1.1 joerg 2845 1.1 joerg case EXPR_CHARACTER_LITERAL: 2846 1.1 joerg S = new (Context) CharacterLiteral(Empty); 2847 1.1 joerg break; 2848 1.1 joerg 2849 1.1 joerg case EXPR_PAREN: 2850 1.1 joerg S = new (Context) ParenExpr(Empty); 2851 1.1 joerg break; 2852 1.1 joerg 2853 1.1 joerg case EXPR_PAREN_LIST: 2854 1.1 joerg S = ParenListExpr::CreateEmpty( 2855 1.1 joerg Context, 2856 1.1 joerg /* NumExprs=*/Record[ASTStmtReader::NumExprFields]); 2857 1.1 joerg break; 2858 1.1 joerg 2859 1.1 joerg case EXPR_UNARY_OPERATOR: 2860 1.1.1.2 joerg S = UnaryOperator::CreateEmpty(Context, 2861 1.1.1.2 joerg Record[ASTStmtReader::NumExprFields]); 2862 1.1 joerg break; 2863 1.1 joerg 2864 1.1 joerg case EXPR_OFFSETOF: 2865 1.1 joerg S = OffsetOfExpr::CreateEmpty(Context, 2866 1.1 joerg Record[ASTStmtReader::NumExprFields], 2867 1.1 joerg Record[ASTStmtReader::NumExprFields + 1]); 2868 1.1 joerg break; 2869 1.1 joerg 2870 1.1 joerg case EXPR_SIZEOF_ALIGN_OF: 2871 1.1 joerg S = new (Context) UnaryExprOrTypeTraitExpr(Empty); 2872 1.1 joerg break; 2873 1.1 joerg 2874 1.1 joerg case EXPR_ARRAY_SUBSCRIPT: 2875 1.1 joerg S = new (Context) ArraySubscriptExpr(Empty); 2876 1.1 joerg break; 2877 1.1 joerg 2878 1.1.1.2 joerg case EXPR_MATRIX_SUBSCRIPT: 2879 1.1.1.2 joerg S = new (Context) MatrixSubscriptExpr(Empty); 2880 1.1.1.2 joerg break; 2881 1.1.1.2 joerg 2882 1.1 joerg case EXPR_OMP_ARRAY_SECTION: 2883 1.1 joerg S = new (Context) OMPArraySectionExpr(Empty); 2884 1.1 joerg break; 2885 1.1 joerg 2886 1.1.1.2 joerg case EXPR_OMP_ARRAY_SHAPING: 2887 1.1.1.2 joerg S = OMPArrayShapingExpr::CreateEmpty( 2888 1.1.1.2 joerg Context, Record[ASTStmtReader::NumExprFields]); 2889 1.1.1.2 joerg break; 2890 1.1.1.2 joerg 2891 1.1.1.2 joerg case EXPR_OMP_ITERATOR: 2892 1.1.1.2 joerg S = OMPIteratorExpr::CreateEmpty(Context, 2893 1.1.1.2 joerg Record[ASTStmtReader::NumExprFields]); 2894 1.1.1.2 joerg break; 2895 1.1.1.2 joerg 2896 1.1 joerg case EXPR_CALL: 2897 1.1 joerg S = CallExpr::CreateEmpty( 2898 1.1.1.2 joerg Context, /*NumArgs=*/Record[ASTStmtReader::NumExprFields], 2899 1.1.1.2 joerg /*HasFPFeatures=*/Record[ASTStmtReader::NumExprFields + 1], Empty); 2900 1.1.1.2 joerg break; 2901 1.1.1.2 joerg 2902 1.1.1.2 joerg case EXPR_RECOVERY: 2903 1.1.1.2 joerg S = RecoveryExpr::CreateEmpty( 2904 1.1.1.2 joerg Context, /*NumArgs=*/Record[ASTStmtReader::NumExprFields]); 2905 1.1 joerg break; 2906 1.1 joerg 2907 1.1 joerg case EXPR_MEMBER: 2908 1.1 joerg S = MemberExpr::CreateEmpty(Context, Record[ASTStmtReader::NumExprFields], 2909 1.1 joerg Record[ASTStmtReader::NumExprFields + 1], 2910 1.1 joerg Record[ASTStmtReader::NumExprFields + 2], 2911 1.1 joerg Record[ASTStmtReader::NumExprFields + 3]); 2912 1.1 joerg break; 2913 1.1 joerg 2914 1.1 joerg case EXPR_BINARY_OPERATOR: 2915 1.1.1.2 joerg S = BinaryOperator::CreateEmpty(Context, 2916 1.1.1.2 joerg Record[ASTStmtReader::NumExprFields]); 2917 1.1 joerg break; 2918 1.1 joerg 2919 1.1 joerg case EXPR_COMPOUND_ASSIGN_OPERATOR: 2920 1.1.1.2 joerg S = CompoundAssignOperator::CreateEmpty( 2921 1.1.1.2 joerg Context, Record[ASTStmtReader::NumExprFields]); 2922 1.1 joerg break; 2923 1.1 joerg 2924 1.1 joerg case EXPR_CONDITIONAL_OPERATOR: 2925 1.1 joerg S = new (Context) ConditionalOperator(Empty); 2926 1.1 joerg break; 2927 1.1 joerg 2928 1.1 joerg case EXPR_BINARY_CONDITIONAL_OPERATOR: 2929 1.1 joerg S = new (Context) BinaryConditionalOperator(Empty); 2930 1.1 joerg break; 2931 1.1 joerg 2932 1.1 joerg case EXPR_IMPLICIT_CAST: 2933 1.1.1.2 joerg S = ImplicitCastExpr::CreateEmpty( 2934 1.1.1.2 joerg Context, 2935 1.1.1.2 joerg /*PathSize*/ Record[ASTStmtReader::NumExprFields], 2936 1.1.1.2 joerg /*HasFPFeatures*/ Record[ASTStmtReader::NumExprFields + 1]); 2937 1.1 joerg break; 2938 1.1 joerg 2939 1.1 joerg case EXPR_CSTYLE_CAST: 2940 1.1.1.2 joerg S = CStyleCastExpr::CreateEmpty( 2941 1.1.1.2 joerg Context, 2942 1.1.1.2 joerg /*PathSize*/ Record[ASTStmtReader::NumExprFields], 2943 1.1.1.2 joerg /*HasFPFeatures*/ Record[ASTStmtReader::NumExprFields + 1]); 2944 1.1 joerg break; 2945 1.1 joerg 2946 1.1 joerg case EXPR_COMPOUND_LITERAL: 2947 1.1 joerg S = new (Context) CompoundLiteralExpr(Empty); 2948 1.1 joerg break; 2949 1.1 joerg 2950 1.1 joerg case EXPR_EXT_VECTOR_ELEMENT: 2951 1.1 joerg S = new (Context) ExtVectorElementExpr(Empty); 2952 1.1 joerg break; 2953 1.1 joerg 2954 1.1 joerg case EXPR_INIT_LIST: 2955 1.1 joerg S = new (Context) InitListExpr(Empty); 2956 1.1 joerg break; 2957 1.1 joerg 2958 1.1 joerg case EXPR_DESIGNATED_INIT: 2959 1.1 joerg S = DesignatedInitExpr::CreateEmpty(Context, 2960 1.1 joerg Record[ASTStmtReader::NumExprFields] - 1); 2961 1.1 joerg 2962 1.1 joerg break; 2963 1.1 joerg 2964 1.1 joerg case EXPR_DESIGNATED_INIT_UPDATE: 2965 1.1 joerg S = new (Context) DesignatedInitUpdateExpr(Empty); 2966 1.1 joerg break; 2967 1.1 joerg 2968 1.1 joerg case EXPR_IMPLICIT_VALUE_INIT: 2969 1.1 joerg S = new (Context) ImplicitValueInitExpr(Empty); 2970 1.1 joerg break; 2971 1.1 joerg 2972 1.1 joerg case EXPR_NO_INIT: 2973 1.1 joerg S = new (Context) NoInitExpr(Empty); 2974 1.1 joerg break; 2975 1.1 joerg 2976 1.1 joerg case EXPR_ARRAY_INIT_LOOP: 2977 1.1 joerg S = new (Context) ArrayInitLoopExpr(Empty); 2978 1.1 joerg break; 2979 1.1 joerg 2980 1.1 joerg case EXPR_ARRAY_INIT_INDEX: 2981 1.1 joerg S = new (Context) ArrayInitIndexExpr(Empty); 2982 1.1 joerg break; 2983 1.1 joerg 2984 1.1 joerg case EXPR_VA_ARG: 2985 1.1 joerg S = new (Context) VAArgExpr(Empty); 2986 1.1 joerg break; 2987 1.1 joerg 2988 1.1 joerg case EXPR_SOURCE_LOC: 2989 1.1 joerg S = new (Context) SourceLocExpr(Empty); 2990 1.1 joerg break; 2991 1.1 joerg 2992 1.1 joerg case EXPR_ADDR_LABEL: 2993 1.1 joerg S = new (Context) AddrLabelExpr(Empty); 2994 1.1 joerg break; 2995 1.1 joerg 2996 1.1 joerg case EXPR_STMT: 2997 1.1 joerg S = new (Context) StmtExpr(Empty); 2998 1.1 joerg break; 2999 1.1 joerg 3000 1.1 joerg case EXPR_CHOOSE: 3001 1.1 joerg S = new (Context) ChooseExpr(Empty); 3002 1.1 joerg break; 3003 1.1 joerg 3004 1.1 joerg case EXPR_GNU_NULL: 3005 1.1 joerg S = new (Context) GNUNullExpr(Empty); 3006 1.1 joerg break; 3007 1.1 joerg 3008 1.1 joerg case EXPR_SHUFFLE_VECTOR: 3009 1.1 joerg S = new (Context) ShuffleVectorExpr(Empty); 3010 1.1 joerg break; 3011 1.1 joerg 3012 1.1 joerg case EXPR_CONVERT_VECTOR: 3013 1.1 joerg S = new (Context) ConvertVectorExpr(Empty); 3014 1.1 joerg break; 3015 1.1 joerg 3016 1.1 joerg case EXPR_BLOCK: 3017 1.1 joerg S = new (Context) BlockExpr(Empty); 3018 1.1 joerg break; 3019 1.1 joerg 3020 1.1 joerg case EXPR_GENERIC_SELECTION: 3021 1.1 joerg S = GenericSelectionExpr::CreateEmpty( 3022 1.1 joerg Context, 3023 1.1 joerg /*NumAssocs=*/Record[ASTStmtReader::NumExprFields]); 3024 1.1 joerg break; 3025 1.1 joerg 3026 1.1 joerg case EXPR_OBJC_STRING_LITERAL: 3027 1.1 joerg S = new (Context) ObjCStringLiteral(Empty); 3028 1.1 joerg break; 3029 1.1 joerg 3030 1.1 joerg case EXPR_OBJC_BOXED_EXPRESSION: 3031 1.1 joerg S = new (Context) ObjCBoxedExpr(Empty); 3032 1.1 joerg break; 3033 1.1 joerg 3034 1.1 joerg case EXPR_OBJC_ARRAY_LITERAL: 3035 1.1 joerg S = ObjCArrayLiteral::CreateEmpty(Context, 3036 1.1 joerg Record[ASTStmtReader::NumExprFields]); 3037 1.1 joerg break; 3038 1.1 joerg 3039 1.1 joerg case EXPR_OBJC_DICTIONARY_LITERAL: 3040 1.1 joerg S = ObjCDictionaryLiteral::CreateEmpty(Context, 3041 1.1 joerg Record[ASTStmtReader::NumExprFields], 3042 1.1 joerg Record[ASTStmtReader::NumExprFields + 1]); 3043 1.1 joerg break; 3044 1.1 joerg 3045 1.1 joerg case EXPR_OBJC_ENCODE: 3046 1.1 joerg S = new (Context) ObjCEncodeExpr(Empty); 3047 1.1 joerg break; 3048 1.1 joerg 3049 1.1 joerg case EXPR_OBJC_SELECTOR_EXPR: 3050 1.1 joerg S = new (Context) ObjCSelectorExpr(Empty); 3051 1.1 joerg break; 3052 1.1 joerg 3053 1.1 joerg case EXPR_OBJC_PROTOCOL_EXPR: 3054 1.1 joerg S = new (Context) ObjCProtocolExpr(Empty); 3055 1.1 joerg break; 3056 1.1 joerg 3057 1.1 joerg case EXPR_OBJC_IVAR_REF_EXPR: 3058 1.1 joerg S = new (Context) ObjCIvarRefExpr(Empty); 3059 1.1 joerg break; 3060 1.1 joerg 3061 1.1 joerg case EXPR_OBJC_PROPERTY_REF_EXPR: 3062 1.1 joerg S = new (Context) ObjCPropertyRefExpr(Empty); 3063 1.1 joerg break; 3064 1.1 joerg 3065 1.1 joerg case EXPR_OBJC_SUBSCRIPT_REF_EXPR: 3066 1.1 joerg S = new (Context) ObjCSubscriptRefExpr(Empty); 3067 1.1 joerg break; 3068 1.1 joerg 3069 1.1 joerg case EXPR_OBJC_KVC_REF_EXPR: 3070 1.1 joerg llvm_unreachable("mismatching AST file"); 3071 1.1 joerg 3072 1.1 joerg case EXPR_OBJC_MESSAGE_EXPR: 3073 1.1 joerg S = ObjCMessageExpr::CreateEmpty(Context, 3074 1.1 joerg Record[ASTStmtReader::NumExprFields], 3075 1.1 joerg Record[ASTStmtReader::NumExprFields + 1]); 3076 1.1 joerg break; 3077 1.1 joerg 3078 1.1 joerg case EXPR_OBJC_ISA: 3079 1.1 joerg S = new (Context) ObjCIsaExpr(Empty); 3080 1.1 joerg break; 3081 1.1 joerg 3082 1.1 joerg case EXPR_OBJC_INDIRECT_COPY_RESTORE: 3083 1.1 joerg S = new (Context) ObjCIndirectCopyRestoreExpr(Empty); 3084 1.1 joerg break; 3085 1.1 joerg 3086 1.1 joerg case EXPR_OBJC_BRIDGED_CAST: 3087 1.1 joerg S = new (Context) ObjCBridgedCastExpr(Empty); 3088 1.1 joerg break; 3089 1.1 joerg 3090 1.1 joerg case STMT_OBJC_FOR_COLLECTION: 3091 1.1 joerg S = new (Context) ObjCForCollectionStmt(Empty); 3092 1.1 joerg break; 3093 1.1 joerg 3094 1.1 joerg case STMT_OBJC_CATCH: 3095 1.1 joerg S = new (Context) ObjCAtCatchStmt(Empty); 3096 1.1 joerg break; 3097 1.1 joerg 3098 1.1 joerg case STMT_OBJC_FINALLY: 3099 1.1 joerg S = new (Context) ObjCAtFinallyStmt(Empty); 3100 1.1 joerg break; 3101 1.1 joerg 3102 1.1 joerg case STMT_OBJC_AT_TRY: 3103 1.1 joerg S = ObjCAtTryStmt::CreateEmpty(Context, 3104 1.1 joerg Record[ASTStmtReader::NumStmtFields], 3105 1.1 joerg Record[ASTStmtReader::NumStmtFields + 1]); 3106 1.1 joerg break; 3107 1.1 joerg 3108 1.1 joerg case STMT_OBJC_AT_SYNCHRONIZED: 3109 1.1 joerg S = new (Context) ObjCAtSynchronizedStmt(Empty); 3110 1.1 joerg break; 3111 1.1 joerg 3112 1.1 joerg case STMT_OBJC_AT_THROW: 3113 1.1 joerg S = new (Context) ObjCAtThrowStmt(Empty); 3114 1.1 joerg break; 3115 1.1 joerg 3116 1.1 joerg case STMT_OBJC_AUTORELEASE_POOL: 3117 1.1 joerg S = new (Context) ObjCAutoreleasePoolStmt(Empty); 3118 1.1 joerg break; 3119 1.1 joerg 3120 1.1 joerg case EXPR_OBJC_BOOL_LITERAL: 3121 1.1 joerg S = new (Context) ObjCBoolLiteralExpr(Empty); 3122 1.1 joerg break; 3123 1.1 joerg 3124 1.1 joerg case EXPR_OBJC_AVAILABILITY_CHECK: 3125 1.1 joerg S = new (Context) ObjCAvailabilityCheckExpr(Empty); 3126 1.1 joerg break; 3127 1.1 joerg 3128 1.1 joerg case STMT_SEH_LEAVE: 3129 1.1 joerg S = new (Context) SEHLeaveStmt(Empty); 3130 1.1 joerg break; 3131 1.1 joerg 3132 1.1 joerg case STMT_SEH_EXCEPT: 3133 1.1 joerg S = new (Context) SEHExceptStmt(Empty); 3134 1.1 joerg break; 3135 1.1 joerg 3136 1.1 joerg case STMT_SEH_FINALLY: 3137 1.1 joerg S = new (Context) SEHFinallyStmt(Empty); 3138 1.1 joerg break; 3139 1.1 joerg 3140 1.1 joerg case STMT_SEH_TRY: 3141 1.1 joerg S = new (Context) SEHTryStmt(Empty); 3142 1.1 joerg break; 3143 1.1 joerg 3144 1.1 joerg case STMT_CXX_CATCH: 3145 1.1 joerg S = new (Context) CXXCatchStmt(Empty); 3146 1.1 joerg break; 3147 1.1 joerg 3148 1.1 joerg case STMT_CXX_TRY: 3149 1.1 joerg S = CXXTryStmt::Create(Context, Empty, 3150 1.1 joerg /*numHandlers=*/Record[ASTStmtReader::NumStmtFields]); 3151 1.1 joerg break; 3152 1.1 joerg 3153 1.1 joerg case STMT_CXX_FOR_RANGE: 3154 1.1 joerg S = new (Context) CXXForRangeStmt(Empty); 3155 1.1 joerg break; 3156 1.1 joerg 3157 1.1 joerg case STMT_MS_DEPENDENT_EXISTS: 3158 1.1 joerg S = new (Context) MSDependentExistsStmt(SourceLocation(), true, 3159 1.1 joerg NestedNameSpecifierLoc(), 3160 1.1 joerg DeclarationNameInfo(), 3161 1.1 joerg nullptr); 3162 1.1 joerg break; 3163 1.1 joerg 3164 1.1.1.2 joerg case STMT_OMP_CANONICAL_LOOP: 3165 1.1.1.2 joerg S = OMPCanonicalLoop::createEmpty(Context); 3166 1.1.1.2 joerg break; 3167 1.1.1.2 joerg 3168 1.1 joerg case STMT_OMP_PARALLEL_DIRECTIVE: 3169 1.1 joerg S = 3170 1.1 joerg OMPParallelDirective::CreateEmpty(Context, 3171 1.1 joerg Record[ASTStmtReader::NumStmtFields], 3172 1.1 joerg Empty); 3173 1.1 joerg break; 3174 1.1 joerg 3175 1.1 joerg case STMT_OMP_SIMD_DIRECTIVE: { 3176 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3177 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3178 1.1 joerg S = OMPSimdDirective::CreateEmpty(Context, NumClauses, 3179 1.1 joerg CollapsedNum, Empty); 3180 1.1 joerg break; 3181 1.1 joerg } 3182 1.1 joerg 3183 1.1.1.2 joerg case STMT_OMP_TILE_DIRECTIVE: { 3184 1.1.1.2 joerg unsigned NumLoops = Record[ASTStmtReader::NumStmtFields]; 3185 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3186 1.1.1.2 joerg S = OMPTileDirective::CreateEmpty(Context, NumClauses, NumLoops); 3187 1.1.1.2 joerg break; 3188 1.1.1.2 joerg } 3189 1.1.1.2 joerg 3190 1.1 joerg case STMT_OMP_FOR_DIRECTIVE: { 3191 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3192 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3193 1.1 joerg S = OMPForDirective::CreateEmpty(Context, NumClauses, CollapsedNum, 3194 1.1 joerg Empty); 3195 1.1 joerg break; 3196 1.1 joerg } 3197 1.1 joerg 3198 1.1 joerg case STMT_OMP_FOR_SIMD_DIRECTIVE: { 3199 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3200 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3201 1.1 joerg S = OMPForSimdDirective::CreateEmpty(Context, NumClauses, CollapsedNum, 3202 1.1 joerg Empty); 3203 1.1 joerg break; 3204 1.1 joerg } 3205 1.1 joerg 3206 1.1 joerg case STMT_OMP_SECTIONS_DIRECTIVE: 3207 1.1 joerg S = OMPSectionsDirective::CreateEmpty( 3208 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3209 1.1 joerg break; 3210 1.1 joerg 3211 1.1 joerg case STMT_OMP_SECTION_DIRECTIVE: 3212 1.1 joerg S = OMPSectionDirective::CreateEmpty(Context, Empty); 3213 1.1 joerg break; 3214 1.1 joerg 3215 1.1 joerg case STMT_OMP_SINGLE_DIRECTIVE: 3216 1.1 joerg S = OMPSingleDirective::CreateEmpty( 3217 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3218 1.1 joerg break; 3219 1.1 joerg 3220 1.1 joerg case STMT_OMP_MASTER_DIRECTIVE: 3221 1.1 joerg S = OMPMasterDirective::CreateEmpty(Context, Empty); 3222 1.1 joerg break; 3223 1.1 joerg 3224 1.1 joerg case STMT_OMP_CRITICAL_DIRECTIVE: 3225 1.1 joerg S = OMPCriticalDirective::CreateEmpty( 3226 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3227 1.1 joerg break; 3228 1.1 joerg 3229 1.1 joerg case STMT_OMP_PARALLEL_FOR_DIRECTIVE: { 3230 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3231 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3232 1.1 joerg S = OMPParallelForDirective::CreateEmpty(Context, NumClauses, 3233 1.1 joerg CollapsedNum, Empty); 3234 1.1 joerg break; 3235 1.1 joerg } 3236 1.1 joerg 3237 1.1 joerg case STMT_OMP_PARALLEL_FOR_SIMD_DIRECTIVE: { 3238 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3239 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3240 1.1 joerg S = OMPParallelForSimdDirective::CreateEmpty(Context, NumClauses, 3241 1.1 joerg CollapsedNum, Empty); 3242 1.1 joerg break; 3243 1.1 joerg } 3244 1.1 joerg 3245 1.1.1.2 joerg case STMT_OMP_PARALLEL_MASTER_DIRECTIVE: 3246 1.1.1.2 joerg S = OMPParallelMasterDirective::CreateEmpty( 3247 1.1.1.2 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3248 1.1.1.2 joerg break; 3249 1.1.1.2 joerg 3250 1.1 joerg case STMT_OMP_PARALLEL_SECTIONS_DIRECTIVE: 3251 1.1 joerg S = OMPParallelSectionsDirective::CreateEmpty( 3252 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3253 1.1 joerg break; 3254 1.1 joerg 3255 1.1 joerg case STMT_OMP_TASK_DIRECTIVE: 3256 1.1 joerg S = OMPTaskDirective::CreateEmpty( 3257 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3258 1.1 joerg break; 3259 1.1 joerg 3260 1.1 joerg case STMT_OMP_TASKYIELD_DIRECTIVE: 3261 1.1 joerg S = OMPTaskyieldDirective::CreateEmpty(Context, Empty); 3262 1.1 joerg break; 3263 1.1 joerg 3264 1.1 joerg case STMT_OMP_BARRIER_DIRECTIVE: 3265 1.1 joerg S = OMPBarrierDirective::CreateEmpty(Context, Empty); 3266 1.1 joerg break; 3267 1.1 joerg 3268 1.1 joerg case STMT_OMP_TASKWAIT_DIRECTIVE: 3269 1.1 joerg S = OMPTaskwaitDirective::CreateEmpty(Context, Empty); 3270 1.1 joerg break; 3271 1.1 joerg 3272 1.1 joerg case STMT_OMP_TASKGROUP_DIRECTIVE: 3273 1.1 joerg S = OMPTaskgroupDirective::CreateEmpty( 3274 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3275 1.1 joerg break; 3276 1.1 joerg 3277 1.1 joerg case STMT_OMP_FLUSH_DIRECTIVE: 3278 1.1 joerg S = OMPFlushDirective::CreateEmpty( 3279 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3280 1.1 joerg break; 3281 1.1 joerg 3282 1.1.1.2 joerg case STMT_OMP_DEPOBJ_DIRECTIVE: 3283 1.1.1.2 joerg S = OMPDepobjDirective::CreateEmpty( 3284 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3285 1.1 joerg break; 3286 1.1 joerg 3287 1.1.1.2 joerg case STMT_OMP_SCAN_DIRECTIVE: 3288 1.1.1.2 joerg S = OMPScanDirective::CreateEmpty( 3289 1.1.1.2 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3290 1.1.1.2 joerg break; 3291 1.1.1.2 joerg 3292 1.1.1.2 joerg case STMT_OMP_ORDERED_DIRECTIVE: { 3293 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields]; 3294 1.1.1.2 joerg bool HasAssociatedStmt = Record[ASTStmtReader::NumStmtFields + 2]; 3295 1.1.1.2 joerg S = OMPOrderedDirective::CreateEmpty(Context, NumClauses, 3296 1.1.1.2 joerg !HasAssociatedStmt, Empty); 3297 1.1.1.2 joerg break; 3298 1.1.1.2 joerg } 3299 1.1.1.2 joerg 3300 1.1 joerg case STMT_OMP_ATOMIC_DIRECTIVE: 3301 1.1 joerg S = OMPAtomicDirective::CreateEmpty( 3302 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3303 1.1 joerg break; 3304 1.1 joerg 3305 1.1 joerg case STMT_OMP_TARGET_DIRECTIVE: 3306 1.1 joerg S = OMPTargetDirective::CreateEmpty( 3307 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3308 1.1 joerg break; 3309 1.1 joerg 3310 1.1 joerg case STMT_OMP_TARGET_DATA_DIRECTIVE: 3311 1.1 joerg S = OMPTargetDataDirective::CreateEmpty( 3312 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3313 1.1 joerg break; 3314 1.1 joerg 3315 1.1 joerg case STMT_OMP_TARGET_ENTER_DATA_DIRECTIVE: 3316 1.1 joerg S = OMPTargetEnterDataDirective::CreateEmpty( 3317 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3318 1.1 joerg break; 3319 1.1 joerg 3320 1.1 joerg case STMT_OMP_TARGET_EXIT_DATA_DIRECTIVE: 3321 1.1 joerg S = OMPTargetExitDataDirective::CreateEmpty( 3322 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3323 1.1 joerg break; 3324 1.1 joerg 3325 1.1 joerg case STMT_OMP_TARGET_PARALLEL_DIRECTIVE: 3326 1.1 joerg S = OMPTargetParallelDirective::CreateEmpty( 3327 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3328 1.1 joerg break; 3329 1.1 joerg 3330 1.1 joerg case STMT_OMP_TARGET_PARALLEL_FOR_DIRECTIVE: { 3331 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3332 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3333 1.1 joerg S = OMPTargetParallelForDirective::CreateEmpty(Context, NumClauses, 3334 1.1 joerg CollapsedNum, Empty); 3335 1.1 joerg break; 3336 1.1 joerg } 3337 1.1 joerg 3338 1.1 joerg case STMT_OMP_TARGET_UPDATE_DIRECTIVE: 3339 1.1 joerg S = OMPTargetUpdateDirective::CreateEmpty( 3340 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3341 1.1 joerg break; 3342 1.1 joerg 3343 1.1 joerg case STMT_OMP_TEAMS_DIRECTIVE: 3344 1.1 joerg S = OMPTeamsDirective::CreateEmpty( 3345 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3346 1.1 joerg break; 3347 1.1 joerg 3348 1.1 joerg case STMT_OMP_CANCELLATION_POINT_DIRECTIVE: 3349 1.1 joerg S = OMPCancellationPointDirective::CreateEmpty(Context, Empty); 3350 1.1 joerg break; 3351 1.1 joerg 3352 1.1 joerg case STMT_OMP_CANCEL_DIRECTIVE: 3353 1.1 joerg S = OMPCancelDirective::CreateEmpty( 3354 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3355 1.1 joerg break; 3356 1.1 joerg 3357 1.1 joerg case STMT_OMP_TASKLOOP_DIRECTIVE: { 3358 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3359 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3360 1.1 joerg S = OMPTaskLoopDirective::CreateEmpty(Context, NumClauses, CollapsedNum, 3361 1.1 joerg Empty); 3362 1.1 joerg break; 3363 1.1 joerg } 3364 1.1 joerg 3365 1.1 joerg case STMT_OMP_TASKLOOP_SIMD_DIRECTIVE: { 3366 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3367 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3368 1.1 joerg S = OMPTaskLoopSimdDirective::CreateEmpty(Context, NumClauses, 3369 1.1 joerg CollapsedNum, Empty); 3370 1.1 joerg break; 3371 1.1 joerg } 3372 1.1 joerg 3373 1.1 joerg case STMT_OMP_MASTER_TASKLOOP_DIRECTIVE: { 3374 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3375 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3376 1.1 joerg S = OMPMasterTaskLoopDirective::CreateEmpty(Context, NumClauses, 3377 1.1 joerg CollapsedNum, Empty); 3378 1.1 joerg break; 3379 1.1 joerg } 3380 1.1 joerg 3381 1.1 joerg case STMT_OMP_MASTER_TASKLOOP_SIMD_DIRECTIVE: { 3382 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3383 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3384 1.1 joerg S = OMPMasterTaskLoopSimdDirective::CreateEmpty(Context, NumClauses, 3385 1.1 joerg CollapsedNum, Empty); 3386 1.1 joerg break; 3387 1.1 joerg } 3388 1.1 joerg 3389 1.1 joerg case STMT_OMP_PARALLEL_MASTER_TASKLOOP_DIRECTIVE: { 3390 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3391 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3392 1.1 joerg S = OMPParallelMasterTaskLoopDirective::CreateEmpty(Context, NumClauses, 3393 1.1 joerg CollapsedNum, Empty); 3394 1.1 joerg break; 3395 1.1 joerg } 3396 1.1 joerg 3397 1.1.1.2 joerg case STMT_OMP_PARALLEL_MASTER_TASKLOOP_SIMD_DIRECTIVE: { 3398 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3399 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3400 1.1.1.2 joerg S = OMPParallelMasterTaskLoopSimdDirective::CreateEmpty( 3401 1.1.1.2 joerg Context, NumClauses, CollapsedNum, Empty); 3402 1.1.1.2 joerg break; 3403 1.1.1.2 joerg } 3404 1.1.1.2 joerg 3405 1.1 joerg case STMT_OMP_DISTRIBUTE_DIRECTIVE: { 3406 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3407 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3408 1.1 joerg S = OMPDistributeDirective::CreateEmpty(Context, NumClauses, CollapsedNum, 3409 1.1 joerg Empty); 3410 1.1 joerg break; 3411 1.1 joerg } 3412 1.1 joerg 3413 1.1 joerg case STMT_OMP_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE: { 3414 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3415 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3416 1.1 joerg S = OMPDistributeParallelForDirective::CreateEmpty(Context, NumClauses, 3417 1.1 joerg CollapsedNum, Empty); 3418 1.1 joerg break; 3419 1.1 joerg } 3420 1.1 joerg 3421 1.1 joerg case STMT_OMP_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE: { 3422 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3423 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3424 1.1 joerg S = OMPDistributeParallelForSimdDirective::CreateEmpty(Context, NumClauses, 3425 1.1 joerg CollapsedNum, 3426 1.1 joerg Empty); 3427 1.1 joerg break; 3428 1.1 joerg } 3429 1.1 joerg 3430 1.1 joerg case STMT_OMP_DISTRIBUTE_SIMD_DIRECTIVE: { 3431 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3432 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3433 1.1 joerg S = OMPDistributeSimdDirective::CreateEmpty(Context, NumClauses, 3434 1.1 joerg CollapsedNum, Empty); 3435 1.1 joerg break; 3436 1.1 joerg } 3437 1.1 joerg 3438 1.1 joerg case STMT_OMP_TARGET_PARALLEL_FOR_SIMD_DIRECTIVE: { 3439 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3440 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3441 1.1 joerg S = OMPTargetParallelForSimdDirective::CreateEmpty(Context, NumClauses, 3442 1.1 joerg CollapsedNum, Empty); 3443 1.1 joerg break; 3444 1.1 joerg } 3445 1.1 joerg 3446 1.1 joerg case STMT_OMP_TARGET_SIMD_DIRECTIVE: { 3447 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3448 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3449 1.1 joerg S = OMPTargetSimdDirective::CreateEmpty(Context, NumClauses, CollapsedNum, 3450 1.1 joerg Empty); 3451 1.1 joerg break; 3452 1.1 joerg } 3453 1.1 joerg 3454 1.1 joerg case STMT_OMP_TEAMS_DISTRIBUTE_DIRECTIVE: { 3455 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3456 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3457 1.1.1.2 joerg S = OMPTeamsDistributeDirective::CreateEmpty(Context, NumClauses, 3458 1.1.1.2 joerg CollapsedNum, Empty); 3459 1.1.1.2 joerg break; 3460 1.1 joerg } 3461 1.1 joerg 3462 1.1 joerg case STMT_OMP_TEAMS_DISTRIBUTE_SIMD_DIRECTIVE: { 3463 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3464 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3465 1.1 joerg S = OMPTeamsDistributeSimdDirective::CreateEmpty(Context, NumClauses, 3466 1.1 joerg CollapsedNum, Empty); 3467 1.1 joerg break; 3468 1.1 joerg } 3469 1.1 joerg 3470 1.1 joerg case STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE: { 3471 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3472 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3473 1.1 joerg S = OMPTeamsDistributeParallelForSimdDirective::CreateEmpty( 3474 1.1 joerg Context, NumClauses, CollapsedNum, Empty); 3475 1.1 joerg break; 3476 1.1 joerg } 3477 1.1 joerg 3478 1.1 joerg case STMT_OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE: { 3479 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3480 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3481 1.1 joerg S = OMPTeamsDistributeParallelForDirective::CreateEmpty( 3482 1.1 joerg Context, NumClauses, CollapsedNum, Empty); 3483 1.1 joerg break; 3484 1.1 joerg } 3485 1.1 joerg 3486 1.1 joerg case STMT_OMP_TARGET_TEAMS_DIRECTIVE: 3487 1.1 joerg S = OMPTargetTeamsDirective::CreateEmpty( 3488 1.1 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3489 1.1 joerg break; 3490 1.1 joerg 3491 1.1 joerg case STMT_OMP_TARGET_TEAMS_DISTRIBUTE_DIRECTIVE: { 3492 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3493 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3494 1.1 joerg S = OMPTargetTeamsDistributeDirective::CreateEmpty(Context, NumClauses, 3495 1.1 joerg CollapsedNum, Empty); 3496 1.1 joerg break; 3497 1.1 joerg } 3498 1.1 joerg 3499 1.1 joerg case STMT_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE: { 3500 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3501 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3502 1.1 joerg S = OMPTargetTeamsDistributeParallelForDirective::CreateEmpty( 3503 1.1 joerg Context, NumClauses, CollapsedNum, Empty); 3504 1.1 joerg break; 3505 1.1 joerg } 3506 1.1 joerg 3507 1.1 joerg case STMT_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE: { 3508 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3509 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3510 1.1 joerg S = OMPTargetTeamsDistributeParallelForSimdDirective::CreateEmpty( 3511 1.1 joerg Context, NumClauses, CollapsedNum, Empty); 3512 1.1 joerg break; 3513 1.1 joerg } 3514 1.1 joerg 3515 1.1 joerg case STMT_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD_DIRECTIVE: { 3516 1.1.1.2 joerg unsigned CollapsedNum = Record[ASTStmtReader::NumStmtFields]; 3517 1.1.1.2 joerg unsigned NumClauses = Record[ASTStmtReader::NumStmtFields + 1]; 3518 1.1 joerg S = OMPTargetTeamsDistributeSimdDirective::CreateEmpty( 3519 1.1 joerg Context, NumClauses, CollapsedNum, Empty); 3520 1.1 joerg break; 3521 1.1 joerg } 3522 1.1 joerg 3523 1.1.1.2 joerg case STMT_OMP_INTEROP_DIRECTIVE: 3524 1.1.1.2 joerg S = OMPInteropDirective::CreateEmpty( 3525 1.1.1.2 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3526 1.1.1.2 joerg break; 3527 1.1.1.2 joerg 3528 1.1.1.2 joerg case STMT_OMP_DISPATCH_DIRECTIVE: 3529 1.1.1.2 joerg S = OMPDispatchDirective::CreateEmpty( 3530 1.1.1.2 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3531 1.1.1.2 joerg break; 3532 1.1.1.2 joerg 3533 1.1.1.2 joerg case STMT_OMP_MASKED_DIRECTIVE: 3534 1.1.1.2 joerg S = OMPMaskedDirective::CreateEmpty( 3535 1.1.1.2 joerg Context, Record[ASTStmtReader::NumStmtFields], Empty); 3536 1.1.1.2 joerg break; 3537 1.1.1.2 joerg 3538 1.1 joerg case EXPR_CXX_OPERATOR_CALL: 3539 1.1 joerg S = CXXOperatorCallExpr::CreateEmpty( 3540 1.1.1.2 joerg Context, /*NumArgs=*/Record[ASTStmtReader::NumExprFields], 3541 1.1.1.2 joerg /*HasFPFeatures=*/Record[ASTStmtReader::NumExprFields + 1], Empty); 3542 1.1 joerg break; 3543 1.1 joerg 3544 1.1 joerg case EXPR_CXX_MEMBER_CALL: 3545 1.1 joerg S = CXXMemberCallExpr::CreateEmpty( 3546 1.1.1.2 joerg Context, /*NumArgs=*/Record[ASTStmtReader::NumExprFields], 3547 1.1.1.2 joerg /*HasFPFeatures=*/Record[ASTStmtReader::NumExprFields + 1], Empty); 3548 1.1 joerg break; 3549 1.1 joerg 3550 1.1 joerg case EXPR_CXX_REWRITTEN_BINARY_OPERATOR: 3551 1.1 joerg S = new (Context) CXXRewrittenBinaryOperator(Empty); 3552 1.1 joerg break; 3553 1.1 joerg 3554 1.1 joerg case EXPR_CXX_CONSTRUCT: 3555 1.1 joerg S = CXXConstructExpr::CreateEmpty( 3556 1.1 joerg Context, 3557 1.1 joerg /* NumArgs=*/Record[ASTStmtReader::NumExprFields]); 3558 1.1 joerg break; 3559 1.1 joerg 3560 1.1 joerg case EXPR_CXX_INHERITED_CTOR_INIT: 3561 1.1 joerg S = new (Context) CXXInheritedCtorInitExpr(Empty); 3562 1.1 joerg break; 3563 1.1 joerg 3564 1.1 joerg case EXPR_CXX_TEMPORARY_OBJECT: 3565 1.1 joerg S = CXXTemporaryObjectExpr::CreateEmpty( 3566 1.1 joerg Context, 3567 1.1 joerg /* NumArgs=*/Record[ASTStmtReader::NumExprFields]); 3568 1.1 joerg break; 3569 1.1 joerg 3570 1.1 joerg case EXPR_CXX_STATIC_CAST: 3571 1.1.1.2 joerg S = CXXStaticCastExpr::CreateEmpty( 3572 1.1.1.2 joerg Context, 3573 1.1.1.2 joerg /*PathSize*/ Record[ASTStmtReader::NumExprFields], 3574 1.1.1.2 joerg /*HasFPFeatures*/ Record[ASTStmtReader::NumExprFields + 1]); 3575 1.1 joerg break; 3576 1.1 joerg 3577 1.1 joerg case EXPR_CXX_DYNAMIC_CAST: 3578 1.1 joerg S = CXXDynamicCastExpr::CreateEmpty(Context, 3579 1.1 joerg /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 3580 1.1 joerg break; 3581 1.1 joerg 3582 1.1 joerg case EXPR_CXX_REINTERPRET_CAST: 3583 1.1 joerg S = CXXReinterpretCastExpr::CreateEmpty(Context, 3584 1.1 joerg /*PathSize*/ Record[ASTStmtReader::NumExprFields]); 3585 1.1 joerg break; 3586 1.1 joerg 3587 1.1 joerg case EXPR_CXX_CONST_CAST: 3588 1.1 joerg S = CXXConstCastExpr::CreateEmpty(Context); 3589 1.1 joerg break; 3590 1.1 joerg 3591 1.1.1.2 joerg case EXPR_CXX_ADDRSPACE_CAST: 3592 1.1.1.2 joerg S = CXXAddrspaceCastExpr::CreateEmpty(Context); 3593 1.1.1.2 joerg break; 3594 1.1.1.2 joerg 3595 1.1 joerg case EXPR_CXX_FUNCTIONAL_CAST: 3596 1.1.1.2 joerg S = CXXFunctionalCastExpr::CreateEmpty( 3597 1.1.1.2 joerg Context, 3598 1.1.1.2 joerg /*PathSize*/ Record[ASTStmtReader::NumExprFields], 3599 1.1.1.2 joerg /*HasFPFeatures*/ Record[ASTStmtReader::NumExprFields + 1]); 3600 1.1.1.2 joerg break; 3601 1.1.1.2 joerg 3602 1.1.1.2 joerg case EXPR_BUILTIN_BIT_CAST: 3603 1.1.1.2 joerg assert(Record[ASTStmtReader::NumExprFields] == 0 && "Wrong PathSize!"); 3604 1.1.1.2 joerg S = new (Context) BuiltinBitCastExpr(Empty); 3605 1.1 joerg break; 3606 1.1 joerg 3607 1.1 joerg case EXPR_USER_DEFINED_LITERAL: 3608 1.1 joerg S = UserDefinedLiteral::CreateEmpty( 3609 1.1.1.2 joerg Context, /*NumArgs=*/Record[ASTStmtReader::NumExprFields], 3610 1.1.1.2 joerg /*HasFPFeatures=*/Record[ASTStmtReader::NumExprFields + 1], Empty); 3611 1.1 joerg break; 3612 1.1 joerg 3613 1.1 joerg case EXPR_CXX_STD_INITIALIZER_LIST: 3614 1.1 joerg S = new (Context) CXXStdInitializerListExpr(Empty); 3615 1.1 joerg break; 3616 1.1 joerg 3617 1.1 joerg case EXPR_CXX_BOOL_LITERAL: 3618 1.1 joerg S = new (Context) CXXBoolLiteralExpr(Empty); 3619 1.1 joerg break; 3620 1.1 joerg 3621 1.1 joerg case EXPR_CXX_NULL_PTR_LITERAL: 3622 1.1 joerg S = new (Context) CXXNullPtrLiteralExpr(Empty); 3623 1.1 joerg break; 3624 1.1 joerg 3625 1.1 joerg case EXPR_CXX_TYPEID_EXPR: 3626 1.1 joerg S = new (Context) CXXTypeidExpr(Empty, true); 3627 1.1 joerg break; 3628 1.1 joerg 3629 1.1 joerg case EXPR_CXX_TYPEID_TYPE: 3630 1.1 joerg S = new (Context) CXXTypeidExpr(Empty, false); 3631 1.1 joerg break; 3632 1.1 joerg 3633 1.1 joerg case EXPR_CXX_UUIDOF_EXPR: 3634 1.1 joerg S = new (Context) CXXUuidofExpr(Empty, true); 3635 1.1 joerg break; 3636 1.1 joerg 3637 1.1 joerg case EXPR_CXX_PROPERTY_REF_EXPR: 3638 1.1 joerg S = new (Context) MSPropertyRefExpr(Empty); 3639 1.1 joerg break; 3640 1.1 joerg 3641 1.1 joerg case EXPR_CXX_PROPERTY_SUBSCRIPT_EXPR: 3642 1.1 joerg S = new (Context) MSPropertySubscriptExpr(Empty); 3643 1.1 joerg break; 3644 1.1 joerg 3645 1.1 joerg case EXPR_CXX_UUIDOF_TYPE: 3646 1.1 joerg S = new (Context) CXXUuidofExpr(Empty, false); 3647 1.1 joerg break; 3648 1.1 joerg 3649 1.1 joerg case EXPR_CXX_THIS: 3650 1.1 joerg S = new (Context) CXXThisExpr(Empty); 3651 1.1 joerg break; 3652 1.1 joerg 3653 1.1 joerg case EXPR_CXX_THROW: 3654 1.1 joerg S = new (Context) CXXThrowExpr(Empty); 3655 1.1 joerg break; 3656 1.1 joerg 3657 1.1 joerg case EXPR_CXX_DEFAULT_ARG: 3658 1.1 joerg S = new (Context) CXXDefaultArgExpr(Empty); 3659 1.1 joerg break; 3660 1.1 joerg 3661 1.1 joerg case EXPR_CXX_DEFAULT_INIT: 3662 1.1 joerg S = new (Context) CXXDefaultInitExpr(Empty); 3663 1.1 joerg break; 3664 1.1 joerg 3665 1.1 joerg case EXPR_CXX_BIND_TEMPORARY: 3666 1.1 joerg S = new (Context) CXXBindTemporaryExpr(Empty); 3667 1.1 joerg break; 3668 1.1 joerg 3669 1.1 joerg case EXPR_CXX_SCALAR_VALUE_INIT: 3670 1.1 joerg S = new (Context) CXXScalarValueInitExpr(Empty); 3671 1.1 joerg break; 3672 1.1 joerg 3673 1.1 joerg case EXPR_CXX_NEW: 3674 1.1 joerg S = CXXNewExpr::CreateEmpty( 3675 1.1 joerg Context, 3676 1.1 joerg /*IsArray=*/Record[ASTStmtReader::NumExprFields], 3677 1.1 joerg /*HasInit=*/Record[ASTStmtReader::NumExprFields + 1], 3678 1.1 joerg /*NumPlacementArgs=*/Record[ASTStmtReader::NumExprFields + 2], 3679 1.1 joerg /*IsParenTypeId=*/Record[ASTStmtReader::NumExprFields + 3]); 3680 1.1 joerg break; 3681 1.1 joerg 3682 1.1 joerg case EXPR_CXX_DELETE: 3683 1.1 joerg S = new (Context) CXXDeleteExpr(Empty); 3684 1.1 joerg break; 3685 1.1 joerg 3686 1.1 joerg case EXPR_CXX_PSEUDO_DESTRUCTOR: 3687 1.1 joerg S = new (Context) CXXPseudoDestructorExpr(Empty); 3688 1.1 joerg break; 3689 1.1 joerg 3690 1.1 joerg case EXPR_EXPR_WITH_CLEANUPS: 3691 1.1 joerg S = ExprWithCleanups::Create(Context, Empty, 3692 1.1 joerg Record[ASTStmtReader::NumExprFields]); 3693 1.1 joerg break; 3694 1.1 joerg 3695 1.1 joerg case EXPR_CXX_DEPENDENT_SCOPE_MEMBER: 3696 1.1 joerg S = CXXDependentScopeMemberExpr::CreateEmpty( 3697 1.1 joerg Context, 3698 1.1 joerg /*HasTemplateKWAndArgsInfo=*/Record[ASTStmtReader::NumExprFields], 3699 1.1 joerg /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields + 1], 3700 1.1 joerg /*HasFirstQualifierFoundInScope=*/ 3701 1.1 joerg Record[ASTStmtReader::NumExprFields + 2]); 3702 1.1 joerg break; 3703 1.1 joerg 3704 1.1 joerg case EXPR_CXX_DEPENDENT_SCOPE_DECL_REF: 3705 1.1 joerg S = DependentScopeDeclRefExpr::CreateEmpty(Context, 3706 1.1 joerg /*HasTemplateKWAndArgsInfo=*/Record[ASTStmtReader::NumExprFields], 3707 1.1 joerg /*NumTemplateArgs=*/Record[ASTStmtReader::NumExprFields] 3708 1.1 joerg ? Record[ASTStmtReader::NumExprFields + 1] 3709 1.1 joerg : 0); 3710 1.1 joerg break; 3711 1.1 joerg 3712 1.1 joerg case EXPR_CXX_UNRESOLVED_CONSTRUCT: 3713 1.1 joerg S = CXXUnresolvedConstructExpr::CreateEmpty(Context, 3714 1.1 joerg /*NumArgs=*/Record[ASTStmtReader::NumExprFields]); 3715 1.1 joerg break; 3716 1.1 joerg 3717 1.1 joerg case EXPR_CXX_UNRESOLVED_MEMBER: 3718 1.1 joerg S = UnresolvedMemberExpr::CreateEmpty( 3719 1.1 joerg Context, 3720 1.1 joerg /*NumResults=*/Record[ASTStmtReader::NumExprFields], 3721 1.1 joerg /*HasTemplateKWAndArgsInfo=*/Record[ASTStmtReader::NumExprFields + 1], 3722 1.1 joerg /*NumTemplateArgs=*/ 3723 1.1 joerg Record[ASTStmtReader::NumExprFields + 1] 3724 1.1 joerg ? Record[ASTStmtReader::NumExprFields + 2] 3725 1.1 joerg : 0); 3726 1.1 joerg break; 3727 1.1 joerg 3728 1.1 joerg case EXPR_CXX_UNRESOLVED_LOOKUP: 3729 1.1 joerg S = UnresolvedLookupExpr::CreateEmpty( 3730 1.1 joerg Context, 3731 1.1 joerg /*NumResults=*/Record[ASTStmtReader::NumExprFields], 3732 1.1 joerg /*HasTemplateKWAndArgsInfo=*/Record[ASTStmtReader::NumExprFields + 1], 3733 1.1 joerg /*NumTemplateArgs=*/ 3734 1.1 joerg Record[ASTStmtReader::NumExprFields + 1] 3735 1.1 joerg ? Record[ASTStmtReader::NumExprFields + 2] 3736 1.1 joerg : 0); 3737 1.1 joerg break; 3738 1.1 joerg 3739 1.1 joerg case EXPR_TYPE_TRAIT: 3740 1.1 joerg S = TypeTraitExpr::CreateDeserialized(Context, 3741 1.1 joerg Record[ASTStmtReader::NumExprFields]); 3742 1.1 joerg break; 3743 1.1 joerg 3744 1.1 joerg case EXPR_ARRAY_TYPE_TRAIT: 3745 1.1 joerg S = new (Context) ArrayTypeTraitExpr(Empty); 3746 1.1 joerg break; 3747 1.1 joerg 3748 1.1 joerg case EXPR_CXX_EXPRESSION_TRAIT: 3749 1.1 joerg S = new (Context) ExpressionTraitExpr(Empty); 3750 1.1 joerg break; 3751 1.1 joerg 3752 1.1 joerg case EXPR_CXX_NOEXCEPT: 3753 1.1 joerg S = new (Context) CXXNoexceptExpr(Empty); 3754 1.1 joerg break; 3755 1.1 joerg 3756 1.1 joerg case EXPR_PACK_EXPANSION: 3757 1.1 joerg S = new (Context) PackExpansionExpr(Empty); 3758 1.1 joerg break; 3759 1.1 joerg 3760 1.1 joerg case EXPR_SIZEOF_PACK: 3761 1.1 joerg S = SizeOfPackExpr::CreateDeserialized( 3762 1.1 joerg Context, 3763 1.1 joerg /*NumPartialArgs=*/Record[ASTStmtReader::NumExprFields]); 3764 1.1 joerg break; 3765 1.1 joerg 3766 1.1 joerg case EXPR_SUBST_NON_TYPE_TEMPLATE_PARM: 3767 1.1 joerg S = new (Context) SubstNonTypeTemplateParmExpr(Empty); 3768 1.1 joerg break; 3769 1.1 joerg 3770 1.1 joerg case EXPR_SUBST_NON_TYPE_TEMPLATE_PARM_PACK: 3771 1.1 joerg S = new (Context) SubstNonTypeTemplateParmPackExpr(Empty); 3772 1.1 joerg break; 3773 1.1 joerg 3774 1.1 joerg case EXPR_FUNCTION_PARM_PACK: 3775 1.1 joerg S = FunctionParmPackExpr::CreateEmpty(Context, 3776 1.1 joerg Record[ASTStmtReader::NumExprFields]); 3777 1.1 joerg break; 3778 1.1 joerg 3779 1.1 joerg case EXPR_MATERIALIZE_TEMPORARY: 3780 1.1 joerg S = new (Context) MaterializeTemporaryExpr(Empty); 3781 1.1 joerg break; 3782 1.1 joerg 3783 1.1 joerg case EXPR_CXX_FOLD: 3784 1.1 joerg S = new (Context) CXXFoldExpr(Empty); 3785 1.1 joerg break; 3786 1.1 joerg 3787 1.1 joerg case EXPR_OPAQUE_VALUE: 3788 1.1 joerg S = new (Context) OpaqueValueExpr(Empty); 3789 1.1 joerg break; 3790 1.1 joerg 3791 1.1 joerg case EXPR_CUDA_KERNEL_CALL: 3792 1.1 joerg S = CUDAKernelCallExpr::CreateEmpty( 3793 1.1.1.2 joerg Context, /*NumArgs=*/Record[ASTStmtReader::NumExprFields], 3794 1.1.1.2 joerg /*HasFPFeatures=*/Record[ASTStmtReader::NumExprFields + 1], Empty); 3795 1.1 joerg break; 3796 1.1 joerg 3797 1.1 joerg case EXPR_ASTYPE: 3798 1.1 joerg S = new (Context) AsTypeExpr(Empty); 3799 1.1 joerg break; 3800 1.1 joerg 3801 1.1 joerg case EXPR_PSEUDO_OBJECT: { 3802 1.1 joerg unsigned numSemanticExprs = Record[ASTStmtReader::NumExprFields]; 3803 1.1 joerg S = PseudoObjectExpr::Create(Context, Empty, numSemanticExprs); 3804 1.1 joerg break; 3805 1.1 joerg } 3806 1.1 joerg 3807 1.1 joerg case EXPR_ATOMIC: 3808 1.1 joerg S = new (Context) AtomicExpr(Empty); 3809 1.1 joerg break; 3810 1.1 joerg 3811 1.1 joerg case EXPR_LAMBDA: { 3812 1.1 joerg unsigned NumCaptures = Record[ASTStmtReader::NumExprFields]; 3813 1.1 joerg S = LambdaExpr::CreateDeserialized(Context, NumCaptures); 3814 1.1 joerg break; 3815 1.1 joerg } 3816 1.1 joerg 3817 1.1 joerg case STMT_COROUTINE_BODY: { 3818 1.1 joerg unsigned NumParams = Record[ASTStmtReader::NumStmtFields]; 3819 1.1 joerg S = CoroutineBodyStmt::Create(Context, Empty, NumParams); 3820 1.1 joerg break; 3821 1.1 joerg } 3822 1.1 joerg 3823 1.1 joerg case STMT_CORETURN: 3824 1.1 joerg S = new (Context) CoreturnStmt(Empty); 3825 1.1 joerg break; 3826 1.1 joerg 3827 1.1 joerg case EXPR_COAWAIT: 3828 1.1 joerg S = new (Context) CoawaitExpr(Empty); 3829 1.1 joerg break; 3830 1.1 joerg 3831 1.1 joerg case EXPR_COYIELD: 3832 1.1 joerg S = new (Context) CoyieldExpr(Empty); 3833 1.1 joerg break; 3834 1.1 joerg 3835 1.1 joerg case EXPR_DEPENDENT_COAWAIT: 3836 1.1 joerg S = new (Context) DependentCoawaitExpr(Empty); 3837 1.1 joerg break; 3838 1.1 joerg 3839 1.1.1.2 joerg case EXPR_CONCEPT_SPECIALIZATION: { 3840 1.1 joerg unsigned numTemplateArgs = Record[ASTStmtReader::NumExprFields]; 3841 1.1 joerg S = ConceptSpecializationExpr::Create(Context, Empty, numTemplateArgs); 3842 1.1 joerg break; 3843 1.1.1.2 joerg } 3844 1.1.1.2 joerg 3845 1.1.1.2 joerg case EXPR_REQUIRES: 3846 1.1.1.2 joerg unsigned numLocalParameters = Record[ASTStmtReader::NumExprFields]; 3847 1.1.1.2 joerg unsigned numRequirement = Record[ASTStmtReader::NumExprFields + 1]; 3848 1.1.1.2 joerg S = RequiresExpr::Create(Context, Empty, numLocalParameters, 3849 1.1.1.2 joerg numRequirement); 3850 1.1.1.2 joerg break; 3851 1.1 joerg } 3852 1.1 joerg 3853 1.1 joerg // We hit a STMT_STOP, so we're done with this expression. 3854 1.1 joerg if (Finished) 3855 1.1 joerg break; 3856 1.1 joerg 3857 1.1 joerg ++NumStatementsRead; 3858 1.1 joerg 3859 1.1 joerg if (S && !IsStmtReference) { 3860 1.1 joerg Reader.Visit(S); 3861 1.1 joerg StmtEntries[Cursor.GetCurrentBitNo()] = S; 3862 1.1 joerg } 3863 1.1 joerg 3864 1.1 joerg assert(Record.getIdx() == Record.size() && 3865 1.1 joerg "Invalid deserialization of statement"); 3866 1.1 joerg StmtStack.push_back(S); 3867 1.1 joerg } 3868 1.1 joerg Done: 3869 1.1 joerg assert(StmtStack.size() > PrevNumStmts && "Read too many sub-stmts!"); 3870 1.1 joerg assert(StmtStack.size() == PrevNumStmts + 1 && "Extra expressions on stack!"); 3871 1.1 joerg return StmtStack.pop_back_val(); 3872 1.1 joerg } 3873