diff options
Diffstat (limited to 'lib/Serialization/ASTReaderStmt.cpp')
| -rw-r--r-- | lib/Serialization/ASTReaderStmt.cpp | 94 | 
1 files changed, 82 insertions, 12 deletions
| diff --git a/lib/Serialization/ASTReaderStmt.cpp b/lib/Serialization/ASTReaderStmt.cpp index 4ef2e73062a5..d1ecd4672488 100644 --- a/lib/Serialization/ASTReaderStmt.cpp +++ b/lib/Serialization/ASTReaderStmt.cpp @@ -486,7 +486,7 @@ void ASTStmtReader::VisitStringLiteral(StringLiteral *E) {    // Read string data    SmallString<16> Str(&Record[Idx], &Record[Idx] + Len); -  E->setString(Reader.getContext(), Str.str(), kind, isPascal); +  E->setString(Reader.getContext(), Str, kind, isPascal);    Idx += Len;    // Read source locations @@ -1826,6 +1826,7 @@ void OMPClauseReader::VisitOMPScheduleClause(OMPScheduleClause *C) {    C->setScheduleKind(         static_cast<OpenMPScheduleClauseKind>(Record[Idx++]));    C->setChunkSize(Reader->Reader.ReadSubExpr()); +  C->setHelperChunkSize(Reader->Reader.ReadSubExpr());    C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));    C->setScheduleKindLoc(Reader->ReadSourceLocation(Record, Idx));    C->setCommaLoc(Reader->ReadSourceLocation(Record, Idx)); @@ -1889,6 +1890,22 @@ void OMPClauseReader::VisitOMPLastprivateClause(OMPLastprivateClause *C) {    for (unsigned i = 0; i != NumVars; ++i)      Vars.push_back(Reader->Reader.ReadSubExpr());    C->setVarRefs(Vars); +  Vars.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Vars.push_back(Reader->Reader.ReadSubExpr()); +  C->setPrivateCopies(Vars); +  Vars.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Vars.push_back(Reader->Reader.ReadSubExpr()); +  C->setSourceExprs(Vars); +  Vars.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Vars.push_back(Reader->Reader.ReadSubExpr()); +  C->setDestinationExprs(Vars); +  Vars.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Vars.push_back(Reader->Reader.ReadSubExpr()); +  C->setAssignmentOps(Vars);  }  void OMPClauseReader::VisitOMPSharedClause(OMPSharedClause *C) { @@ -1917,6 +1934,18 @@ void OMPClauseReader::VisitOMPReductionClause(OMPReductionClause *C) {    for (unsigned i = 0; i != NumVars; ++i)      Vars.push_back(Reader->Reader.ReadSubExpr());    C->setVarRefs(Vars); +  Vars.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Vars.push_back(Reader->Reader.ReadSubExpr()); +  C->setLHSExprs(Vars); +  Vars.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Vars.push_back(Reader->Reader.ReadSubExpr()); +  C->setRHSExprs(Vars); +  Vars.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Vars.push_back(Reader->Reader.ReadSubExpr()); +  C->setReductionOps(Vars);  }  void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) { @@ -1928,7 +1957,20 @@ void OMPClauseReader::VisitOMPLinearClause(OMPLinearClause *C) {    for (unsigned i = 0; i != NumVars; ++i)      Vars.push_back(Reader->Reader.ReadSubExpr());    C->setVarRefs(Vars); +  Vars.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Vars.push_back(Reader->Reader.ReadSubExpr()); +  C->setInits(Vars); +  Vars.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Vars.push_back(Reader->Reader.ReadSubExpr()); +  C->setUpdates(Vars); +  Vars.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Vars.push_back(Reader->Reader.ReadSubExpr()); +  C->setFinals(Vars);    C->setStep(Reader->Reader.ReadSubExpr()); +  C->setCalcStep(Reader->Reader.ReadSubExpr());  }  void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) { @@ -1946,21 +1988,45 @@ void OMPClauseReader::VisitOMPAlignedClause(OMPAlignedClause *C) {  void OMPClauseReader::VisitOMPCopyinClause(OMPCopyinClause *C) {    C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));    unsigned NumVars = C->varlist_size(); -  SmallVector<Expr *, 16> Vars; -  Vars.reserve(NumVars); +  SmallVector<Expr *, 16> Exprs; +  Exprs.reserve(NumVars);    for (unsigned i = 0; i != NumVars; ++i) -    Vars.push_back(Reader->Reader.ReadSubExpr()); -  C->setVarRefs(Vars); +    Exprs.push_back(Reader->Reader.ReadSubExpr()); +  C->setVarRefs(Exprs); +  Exprs.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Exprs.push_back(Reader->Reader.ReadSubExpr()); +  C->setSourceExprs(Exprs); +  Exprs.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Exprs.push_back(Reader->Reader.ReadSubExpr()); +  C->setDestinationExprs(Exprs); +  Exprs.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Exprs.push_back(Reader->Reader.ReadSubExpr()); +  C->setAssignmentOps(Exprs);  }  void OMPClauseReader::VisitOMPCopyprivateClause(OMPCopyprivateClause *C) {    C->setLParenLoc(Reader->ReadSourceLocation(Record, Idx));    unsigned NumVars = C->varlist_size(); -  SmallVector<Expr *, 16> Vars; -  Vars.reserve(NumVars); +  SmallVector<Expr *, 16> Exprs; +  Exprs.reserve(NumVars);    for (unsigned i = 0; i != NumVars; ++i) -    Vars.push_back(Reader->Reader.ReadSubExpr()); -  C->setVarRefs(Vars); +    Exprs.push_back(Reader->Reader.ReadSubExpr()); +  C->setVarRefs(Exprs); +  Exprs.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Exprs.push_back(Reader->Reader.ReadSubExpr()); +  C->setSourceExprs(Exprs); +  Exprs.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Exprs.push_back(Reader->Reader.ReadSubExpr()); +  C->setDestinationExprs(Exprs); +  Exprs.clear(); +  for (unsigned i = 0; i != NumVars; ++i) +    Exprs.push_back(Reader->Reader.ReadSubExpr()); +  C->setAssignmentOps(Exprs);  }  void OMPClauseReader::VisitOMPFlushClause(OMPFlushClause *C) { @@ -2135,6 +2201,9 @@ void ASTStmtReader::VisitOMPAtomicDirective(OMPAtomicDirective *D) {    D->setX(Reader.ReadSubExpr());    D->setV(Reader.ReadSubExpr());    D->setExpr(Reader.ReadSubExpr()); +  D->setUpdateExpr(Reader.ReadSubExpr()); +  D->IsXLHSInRHSPart = Record[Idx++] != 0; +  D->IsPostfixUpdate = Record[Idx++] != 0;  }  void ASTStmtReader::VisitOMPTargetDirective(OMPTargetDirective *D) { @@ -2423,11 +2492,12 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) {        SourceLocation MemberLoc = ReadSourceLocation(F, Record, Idx);        DeclarationNameInfo MemberNameInfo(MemberD->getDeclName(), MemberLoc);        bool IsArrow = Record[Idx++]; +      SourceLocation OperatorLoc = ReadSourceLocation(F, Record, Idx); -      S = MemberExpr::Create(Context, Base, IsArrow, QualifierLoc, +      S = MemberExpr::Create(Context, Base, IsArrow, OperatorLoc, QualifierLoc,                               TemplateKWLoc, MemberD, FoundDecl, MemberNameInfo, -                             HasTemplateKWAndArgsInfo ? &ArgInfo : nullptr, -                             T, VK, OK); +                             HasTemplateKWAndArgsInfo ? &ArgInfo : nullptr, T, +                             VK, OK);        ReadDeclarationNameLoc(F, cast<MemberExpr>(S)->MemberDNLoc,                               MemberD->getDeclName(), Record, Idx);        if (HadMultipleCandidates) | 
