summaryrefslogtreecommitdiff
path: root/clang/lib/Serialization
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Serialization')
-rw-r--r--clang/lib/Serialization/ASTReader.cpp22
-rw-r--r--clang/lib/Serialization/ASTReaderDecl.cpp2
-rw-r--r--clang/lib/Serialization/ASTReaderStmt.cpp29
-rw-r--r--clang/lib/Serialization/ASTWriter.cpp24
-rw-r--r--clang/lib/Serialization/ASTWriterStmt.cpp41
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 = &DD;
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;
}