diff options
Diffstat (limited to 'clang/lib/Serialization')
| -rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 22 | ||||
| -rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Serialization/ASTReaderStmt.cpp | 29 | ||||
| -rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 24 | ||||
| -rw-r--r-- | clang/lib/Serialization/ASTWriterStmt.cpp | 41 |
5 files changed, 78 insertions, 40 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 32f777927828..1b3a8b13f1fb 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -5987,7 +5987,7 @@ bool ASTReader::readASTFileControlBlock( AdditionalPathBuf, UnresolvedFilename, ModuleDir); Filename = *FilenameBuf; } - shouldContinue = Listener.visitInputFile( + shouldContinue = Listener.visitInputFileAsRequested( *FilenameAsRequestedBuf, Filename, isSystemFile, Overridden, /*IsExplicitModule=*/false); break; @@ -11842,6 +11842,7 @@ void OMPClauseReader::VisitOMPSeverityClause(OMPSeverityClause *C) { } void OMPClauseReader::VisitOMPMessageClause(OMPMessageClause *C) { + VisitOMPClauseWithPreInit(C); C->setMessageString(Record.readSubExpr()); C->setLParenLoc(Record.readSourceLocation()); } @@ -12857,9 +12858,13 @@ OpenACCClause *ASTRecordReader::readOpenACCClause() { SourceLocation LParenLoc = readSourceLocation(); llvm::SmallVector<Expr *> VarList = readOpenACCVarList(); - llvm::SmallVector<VarDecl *> RecipeList; - for (unsigned I = 0; I < VarList.size(); ++I) - RecipeList.push_back(readDeclAs<VarDecl>()); + llvm::SmallVector<OpenACCPrivateRecipe> RecipeList; + for (unsigned I = 0; I < VarList.size(); ++I) { + static_assert(sizeof(OpenACCPrivateRecipe) == 2 * sizeof(int *)); + VarDecl *Alloca = readDeclAs<VarDecl>(); + Expr *InitExpr = readSubExpr(); + RecipeList.push_back({Alloca, InitExpr}); + } return OpenACCPrivateClause::Create(getContext(), BeginLoc, LParenLoc, VarList, RecipeList, EndLoc); @@ -12881,9 +12886,11 @@ OpenACCClause *ASTRecordReader::readOpenACCClause() { llvm::SmallVector<Expr *> VarList = readOpenACCVarList(); llvm::SmallVector<OpenACCFirstPrivateRecipe> RecipeList; for (unsigned I = 0; I < VarList.size(); ++I) { + static_assert(sizeof(OpenACCFirstPrivateRecipe) == 3 * sizeof(int *)); VarDecl *Recipe = readDeclAs<VarDecl>(); + Expr *InitExpr = readSubExpr(); VarDecl *RecipeTemp = readDeclAs<VarDecl>(); - RecipeList.push_back({Recipe, RecipeTemp}); + RecipeList.push_back({Recipe, InitExpr, RecipeTemp}); } return OpenACCFirstPrivateClause::Create(getContext(), BeginLoc, LParenLoc, @@ -13004,9 +13011,10 @@ OpenACCClause *ASTRecordReader::readOpenACCClause() { llvm::SmallVector<OpenACCReductionRecipe> RecipeList; for (unsigned I = 0; I < VarList.size(); ++I) { + static_assert(sizeof(OpenACCReductionRecipe) == 2 * sizeof(int *)); VarDecl *Recipe = readDeclAs<VarDecl>(); - static_assert(sizeof(OpenACCReductionRecipe) == sizeof(int *)); - RecipeList.push_back({Recipe}); + Expr *InitExpr = readSubExpr(); + RecipeList.push_back({Recipe, InitExpr}); } return OpenACCReductionClause::Create(getContext(), BeginLoc, LParenLoc, Op, diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 6b35b205079e..44b8ba6f4c98 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -2107,6 +2107,8 @@ void ASTDeclMerger::MergeDefinitionData( auto *Def = DD.Definition; DD = std::move(MergeDD); DD.Definition = Def; + while ((Def = Def->getPreviousDecl())) + cast<CXXRecordDecl>(Def)->DefinitionData = ⅅ return; } diff --git a/clang/lib/Serialization/ASTReaderStmt.cpp b/clang/lib/Serialization/ASTReaderStmt.cpp index 3f37dfbc3dea..7ec8e450fbac 100644 --- a/clang/lib/Serialization/ASTReaderStmt.cpp +++ b/clang/lib/Serialization/ASTReaderStmt.cpp @@ -320,16 +320,21 @@ void ASTStmtReader::VisitIndirectGotoStmt(IndirectGotoStmt *S) { S->setTarget(Record.readSubExpr()); } -void ASTStmtReader::VisitContinueStmt(ContinueStmt *S) { +void ASTStmtReader::VisitLoopControlStmt(LoopControlStmt *S) { VisitStmt(S); - S->setContinueLoc(readSourceLocation()); + S->setKwLoc(readSourceLocation()); + if (Record.readBool()) { + S->setLabelDecl(readDeclAs<LabelDecl>()); + S->setLabelLoc(readSourceLocation()); + } } -void ASTStmtReader::VisitBreakStmt(BreakStmt *S) { - VisitStmt(S); - S->setBreakLoc(readSourceLocation()); +void ASTStmtReader::VisitContinueStmt(ContinueStmt *S) { + VisitLoopControlStmt(S); } +void ASTStmtReader::VisitBreakStmt(BreakStmt *S) { VisitLoopControlStmt(S); } + void ASTStmtReader::VisitReturnStmt(ReturnStmt *S) { VisitStmt(S); @@ -2442,30 +2447,30 @@ void ASTStmtReader::VisitOMPSimdDirective(OMPSimdDirective *D) { VisitOMPLoopDirective(D); } -void ASTStmtReader::VisitOMPLoopTransformationDirective( - OMPLoopTransformationDirective *D) { +void ASTStmtReader::VisitOMPCanonicalLoopNestTransformationDirective( + OMPCanonicalLoopNestTransformationDirective *D) { VisitOMPLoopBasedDirective(D); D->setNumGeneratedLoops(Record.readUInt32()); } void ASTStmtReader::VisitOMPTileDirective(OMPTileDirective *D) { - VisitOMPLoopTransformationDirective(D); + VisitOMPCanonicalLoopNestTransformationDirective(D); } void ASTStmtReader::VisitOMPStripeDirective(OMPStripeDirective *D) { - VisitOMPLoopTransformationDirective(D); + VisitOMPCanonicalLoopNestTransformationDirective(D); } void ASTStmtReader::VisitOMPUnrollDirective(OMPUnrollDirective *D) { - VisitOMPLoopTransformationDirective(D); + VisitOMPCanonicalLoopNestTransformationDirective(D); } void ASTStmtReader::VisitOMPReverseDirective(OMPReverseDirective *D) { - VisitOMPLoopTransformationDirective(D); + VisitOMPCanonicalLoopNestTransformationDirective(D); } void ASTStmtReader::VisitOMPInterchangeDirective(OMPInterchangeDirective *D) { - VisitOMPLoopTransformationDirective(D); + VisitOMPCanonicalLoopNestTransformationDirective(D); } void ASTStmtReader::VisitOMPForDirective(OMPForDirective *D) { diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 87e462f179ce..2f847ec89ebd 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -57,6 +57,7 @@ #include "clang/Basic/TargetInfo.h" #include "clang/Basic/TargetOptions.h" #include "clang/Basic/Version.h" +#include "clang/Frontend/CompilerInstance.h" #include "clang/Lex/HeaderSearch.h" #include "clang/Lex/HeaderSearchOptions.h" #include "clang/Lex/MacroInfo.h" @@ -1710,9 +1711,13 @@ void ASTWriter::WriteControlBlock(Preprocessor &PP, StringRef isysroot) { const HeaderSearchOptions &HSOpts = PP.getHeaderSearchInfo().getHeaderSearchOpts(); + SmallString<256> HSOpts_ModuleCachePath; + CompilerInstance::normalizeModuleCachePath( + PP.getFileManager(), HSOpts.ModuleCachePath, HSOpts_ModuleCachePath); + AddString(HSOpts.Sysroot, Record); AddString(HSOpts.ResourceDir, Record); - AddString(HSOpts.ModuleCachePath, Record); + AddString(HSOpts_ModuleCachePath, Record); AddString(HSOpts.ModuleUserBuildPath, Record); Record.push_back(HSOpts.DisableModuleHash); Record.push_back(HSOpts.ImplicitModuleMaps); @@ -8547,6 +8552,7 @@ void OMPClauseWriter::VisitOMPSeverityClause(OMPSeverityClause *C) { } void OMPClauseWriter::VisitOMPMessageClause(OMPMessageClause *C) { + VisitOMPClauseWithPreInit(C); Record.AddStmt(C->getMessageString()); Record.AddSourceLocation(C->getLParenLoc()); } @@ -8750,8 +8756,11 @@ void ASTRecordWriter::writeOpenACCClause(const OpenACCClause *C) { writeSourceLocation(PC->getLParenLoc()); writeOpenACCVarList(PC); - for (VarDecl *VD : PC->getInitRecipes()) - AddDeclRef(VD); + for (const OpenACCPrivateRecipe &R : PC->getInitRecipes()) { + static_assert(sizeof(R) == 2 * sizeof(int *)); + AddDeclRef(R.AllocaDecl); + AddStmt(const_cast<Expr *>(R.InitExpr)); + } return; } case OpenACCClauseKind::Host: { @@ -8772,7 +8781,9 @@ void ASTRecordWriter::writeOpenACCClause(const OpenACCClause *C) { writeOpenACCVarList(FPC); for (const OpenACCFirstPrivateRecipe &R : FPC->getInitRecipes()) { - AddDeclRef(R.RecipeDecl); + static_assert(sizeof(R) == 3 * sizeof(int *)); + AddDeclRef(R.AllocaDecl); + AddStmt(const_cast<Expr *>(R.InitExpr)); AddDeclRef(R.InitFromTemporary); } return; @@ -8894,8 +8905,9 @@ void ASTRecordWriter::writeOpenACCClause(const OpenACCClause *C) { writeOpenACCVarList(RC); for (const OpenACCReductionRecipe &R : RC->getRecipes()) { - static_assert(sizeof(OpenACCReductionRecipe) == sizeof(int *)); - AddDeclRef(R.RecipeDecl); + static_assert(sizeof(OpenACCReductionRecipe) == 2 * sizeof(int *)); + AddDeclRef(R.AllocaDecl); + AddStmt(const_cast<Expr *>(R.InitExpr)); } return; } diff --git a/clang/lib/Serialization/ASTWriterStmt.cpp b/clang/lib/Serialization/ASTWriterStmt.cpp index be9bad9e96cc..07a5cde47a9a 100644 --- a/clang/lib/Serialization/ASTWriterStmt.cpp +++ b/clang/lib/Serialization/ASTWriterStmt.cpp @@ -310,15 +310,23 @@ void ASTStmtWriter::VisitIndirectGotoStmt(IndirectGotoStmt *S) { Code = serialization::STMT_INDIRECT_GOTO; } -void ASTStmtWriter::VisitContinueStmt(ContinueStmt *S) { +void ASTStmtWriter::VisitLoopControlStmt(LoopControlStmt *S) { VisitStmt(S); - Record.AddSourceLocation(S->getContinueLoc()); + Record.AddSourceLocation(S->getKwLoc()); + Record.push_back(S->hasLabelTarget()); + if (S->hasLabelTarget()) { + Record.AddDeclRef(S->getLabelDecl()); + Record.AddSourceLocation(S->getLabelLoc()); + } +} + +void ASTStmtWriter::VisitContinueStmt(ContinueStmt *S) { + VisitLoopControlStmt(S); Code = serialization::STMT_CONTINUE; } void ASTStmtWriter::VisitBreakStmt(BreakStmt *S) { - VisitStmt(S); - Record.AddSourceLocation(S->getBreakLoc()); + VisitLoopControlStmt(S); Code = serialization::STMT_BREAK; } @@ -730,7 +738,7 @@ void ASTStmtWriter::VisitIntegerLiteral(IntegerLiteral *E) { Record.AddSourceLocation(E->getLocation()); Record.AddAPInt(E->getValue()); - if (E->getValue().getBitWidth() == 32) { + if (E->getBitWidth() == 32) { AbbrevToUse = Writer.getIntegerLiteralAbbrev(); } @@ -971,7 +979,8 @@ void ASTStmtWriter::VisitCallExpr(CallExpr *E) { Record.push_back(E->getFPFeatures().getAsOpaqueInt()); if (!E->hasStoredFPFeatures() && !static_cast<bool>(E->getADLCallKind()) && - !E->usesMemberSyntax() && E->getStmtClass() == Stmt::CallExprClass) + !E->isCoroElideSafe() && !E->usesMemberSyntax() && + E->getStmtClass() == Stmt::CallExprClass) AbbrevToUse = Writer.getCallExprAbbrev(); Code = serialization::EXPR_CALL; @@ -1704,7 +1713,8 @@ void ASTStmtWriter::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) { Record.push_back(E->getOperator()); Record.AddSourceLocation(E->BeginLoc); - if (!E->hasStoredFPFeatures() && !static_cast<bool>(E->getADLCallKind())) + if (!E->hasStoredFPFeatures() && !static_cast<bool>(E->getADLCallKind()) && + !E->isCoroElideSafe() && !E->usesMemberSyntax()) AbbrevToUse = Writer.getCXXOperatorCallExprAbbrev(); Code = serialization::EXPR_CXX_OPERATOR_CALL; @@ -1713,7 +1723,8 @@ void ASTStmtWriter::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) { void ASTStmtWriter::VisitCXXMemberCallExpr(CXXMemberCallExpr *E) { VisitCallExpr(E); - if (!E->hasStoredFPFeatures() && !static_cast<bool>(E->getADLCallKind())) + if (!E->hasStoredFPFeatures() && !static_cast<bool>(E->getADLCallKind()) && + !E->isCoroElideSafe() && !E->usesMemberSyntax()) AbbrevToUse = Writer.getCXXMemberCallExprAbbrev(); Code = serialization::EXPR_CXX_MEMBER_CALL; @@ -2445,34 +2456,34 @@ void ASTStmtWriter::VisitOMPSimdDirective(OMPSimdDirective *D) { Code = serialization::STMT_OMP_SIMD_DIRECTIVE; } -void ASTStmtWriter::VisitOMPLoopTransformationDirective( - OMPLoopTransformationDirective *D) { +void ASTStmtWriter::VisitOMPCanonicalLoopNestTransformationDirective( + OMPCanonicalLoopNestTransformationDirective *D) { VisitOMPLoopBasedDirective(D); Record.writeUInt32(D->getNumGeneratedLoops()); } void ASTStmtWriter::VisitOMPTileDirective(OMPTileDirective *D) { - VisitOMPLoopTransformationDirective(D); + VisitOMPCanonicalLoopNestTransformationDirective(D); Code = serialization::STMT_OMP_TILE_DIRECTIVE; } void ASTStmtWriter::VisitOMPStripeDirective(OMPStripeDirective *D) { - VisitOMPLoopTransformationDirective(D); + VisitOMPCanonicalLoopNestTransformationDirective(D); Code = serialization::STMP_OMP_STRIPE_DIRECTIVE; } void ASTStmtWriter::VisitOMPUnrollDirective(OMPUnrollDirective *D) { - VisitOMPLoopTransformationDirective(D); + VisitOMPCanonicalLoopNestTransformationDirective(D); Code = serialization::STMT_OMP_UNROLL_DIRECTIVE; } void ASTStmtWriter::VisitOMPReverseDirective(OMPReverseDirective *D) { - VisitOMPLoopTransformationDirective(D); + VisitOMPCanonicalLoopNestTransformationDirective(D); Code = serialization::STMT_OMP_REVERSE_DIRECTIVE; } void ASTStmtWriter::VisitOMPInterchangeDirective(OMPInterchangeDirective *D) { - VisitOMPLoopTransformationDirective(D); + VisitOMPCanonicalLoopNestTransformationDirective(D); Code = serialization::STMT_OMP_INTERCHANGE_DIRECTIVE; } |
