sammccall updated this revision to Diff 425089.
sammccall added a comment.
Switch reader/writer to use sourcerange encoding for all "obvious" ranges.
Gain is now 1.75% in my test PCH.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D124422/new/
https://reviews.llvm.org/D124422
Files:
clang/lib/Serialization/ASTReader.cpp
clang/lib/Serialization/ASTReaderDecl.cpp
clang/lib/Serialization/ASTReaderStmt.cpp
clang/lib/Serialization/ASTWriter.cpp
clang/lib/Serialization/ASTWriterDecl.cpp
clang/lib/Serialization/ASTWriterStmt.cpp
Index: clang/lib/Serialization/ASTWriterStmt.cpp
===================================================================
--- clang/lib/Serialization/ASTWriterStmt.cpp
+++ clang/lib/Serialization/ASTWriterStmt.cpp
@@ -62,8 +62,7 @@
void ASTStmtWriter::AddTemplateKWAndArgsInfo(
const ASTTemplateKWAndArgsInfo &ArgInfo, const TemplateArgumentLoc *Args) {
Record.AddSourceLocation(ArgInfo.TemplateKWLoc);
- Record.AddSourceLocation(ArgInfo.LAngleLoc);
- Record.AddSourceLocation(ArgInfo.RAngleLoc);
+ Record.AddSourceRange({ArgInfo.LAngleLoc, ArgInfo.RAngleLoc});
for (unsigned i = 0; i != ArgInfo.NumTemplateArgs; ++i)
Record.AddTemplateArgumentLoc(Args[i]);
}
@@ -83,8 +82,7 @@
Record.push_back(S->size());
for (auto *CS : S->body())
Record.AddStmt(CS);
- Record.AddSourceLocation(S->getLBracLoc());
- Record.AddSourceLocation(S->getRBracLoc());
+ Record.AddSourceRange({S->getLBracLoc(), S->getRBracLoc()});
Code = serialization::STMT_COMPOUND;
}
@@ -152,8 +150,7 @@
Record.AddStmt(S->getInit());
Record.AddSourceLocation(S->getIfLoc());
- Record.AddSourceLocation(S->getLParenLoc());
- Record.AddSourceLocation(S->getRParenLoc());
+ Record.AddSourceRange({S->getLParenLoc(), S->getRParenLoc()});
if (HasElse)
Record.AddSourceLocation(S->getElseLoc());
@@ -177,8 +174,7 @@
Record.AddDeclRef(S->getConditionVariable());
Record.AddSourceLocation(S->getSwitchLoc());
- Record.AddSourceLocation(S->getLParenLoc());
- Record.AddSourceLocation(S->getRParenLoc());
+ Record.AddSourceRange({S->getLParenLoc(), S->getRParenLoc()});
for (SwitchCase *SC = S->getSwitchCaseList(); SC;
SC = SC->getNextSwitchCase())
@@ -198,8 +194,7 @@
Record.AddDeclRef(S->getConditionVariable());
Record.AddSourceLocation(S->getWhileLoc());
- Record.AddSourceLocation(S->getLParenLoc());
- Record.AddSourceLocation(S->getRParenLoc());
+ Record.AddSourceRange({S->getLParenLoc(), S->getRParenLoc()});
Code = serialization::STMT_WHILE;
}
@@ -221,8 +216,7 @@
Record.AddStmt(S->getInc());
Record.AddStmt(S->getBody());
Record.AddSourceLocation(S->getForLoc());
- Record.AddSourceLocation(S->getLParenLoc());
- Record.AddSourceLocation(S->getRParenLoc());
+ Record.AddSourceRange({S->getLParenLoc(), S->getRParenLoc()});
Code = serialization::STMT_FOR;
}
@@ -270,8 +264,7 @@
void ASTStmtWriter::VisitDeclStmt(DeclStmt *S) {
VisitStmt(S);
- Record.AddSourceLocation(S->getBeginLoc());
- Record.AddSourceLocation(S->getEndLoc());
+ Record.AddSourceRange({S->getBeginLoc(), S->getEndLoc()});
DeclGroupRef DG = S->getDeclGroup();
for (DeclGroupRef::iterator D = DG.begin(), DEnd = DG.end(); D != DEnd; ++D)
Record.AddDeclRef(*D);
@@ -579,8 +572,7 @@
VisitExpr(E);
Record.AddSourceLocation(E->getLocation());
- Record.AddSourceLocation(E->getLParenLocation());
- Record.AddSourceLocation(E->getRParenLocation());
+ Record.AddSourceRange({E->getLParenLocation(), E->getRParenLocation()});
Record.AddTypeSourceInfo(E->getTypeSourceInfo());
Code = serialization::EXPR_SYCL_UNIQUE_STABLE_NAME;
@@ -708,8 +700,7 @@
void ASTStmtWriter::VisitParenExpr(ParenExpr *E) {
VisitExpr(E);
- Record.AddSourceLocation(E->getLParen());
- Record.AddSourceLocation(E->getRParen());
+ Record.AddSourceRange({E->getLParen(), E->getRParen()});
Record.AddStmt(E->getSubExpr());
Code = serialization::EXPR_PAREN;
}
@@ -719,8 +710,7 @@
Record.push_back(E->getNumExprs());
for (auto *SubStmt : E->exprs())
Record.AddStmt(SubStmt);
- Record.AddSourceLocation(E->getLParenLoc());
- Record.AddSourceLocation(E->getRParenLoc());
+ Record.AddSourceRange({E->getLParenLoc(), E->getRParenLoc()});
Code = serialization::EXPR_PAREN_LIST;
}
@@ -749,8 +739,7 @@
for (unsigned I = 0, N = E->getNumComponents(); I != N; ++I) {
const OffsetOfNode &ON = E->getComponent(I);
Record.push_back(ON.getKind()); // FIXME: Stable encoding
- Record.AddSourceLocation(ON.getSourceRange().getBegin());
- Record.AddSourceLocation(ON.getSourceRange().getEnd());
+ Record.AddSourceRange(ON.getSourceRange());
switch (ON.getKind()) {
case OffsetOfNode::Array:
Record.push_back(ON.getArrayExprIndex());
@@ -825,8 +814,7 @@
Record.AddStmt(Dim);
for (SourceRange SR : E->getBracketsRanges())
Record.AddSourceRange(SR);
- Record.AddSourceLocation(E->getLParenLoc());
- Record.AddSourceLocation(E->getRParenLoc());
+ Record.AddSourceRange({E->getLParenLoc(), E->getRParenLoc()});
Code = serialization::EXPR_OMP_ARRAY_SHAPING;
}
@@ -834,8 +822,7 @@
VisitExpr(E);
Record.push_back(E->numOfIterators());
Record.AddSourceLocation(E->getIteratorKwLoc());
- Record.AddSourceLocation(E->getLParenLoc());
- Record.AddSourceLocation(E->getRParenLoc());
+ Record.AddSourceRange({E->getLParenLoc(), E->getRParenLoc()});
for (unsigned I = 0, End = E->numOfIterators(); I < End; ++I) {
Record.AddDeclRef(E->getIteratorDecl(I));
Record.AddSourceLocation(E->getAssignLoc(I));
@@ -874,8 +861,7 @@
void ASTStmtWriter::VisitRecoveryExpr(RecoveryExpr *E) {
VisitExpr(E);
Record.push_back(std::distance(E->children().begin(), E->children().end()));
- Record.AddSourceLocation(E->getBeginLoc());
- Record.AddSourceLocation(E->getEndLoc());
+ Record.AddSourceRange({E->getBeginLoc(), E->getEndLoc()});
for (Stmt *Child : E->children())
Record.AddStmt(Child);
Code = serialization::EXPR_RECOVERY;
@@ -1027,8 +1013,7 @@
void ASTStmtWriter::VisitCStyleCastExpr(CStyleCastExpr *E) {
VisitExplicitCastExpr(E);
- Record.AddSourceLocation(E->getLParenLoc());
- Record.AddSourceLocation(E->getRParenLoc());
+ Record.AddSourceRange({E->getLParenLoc(), E->getRParenLoc()});
Code = serialization::EXPR_CSTYLE_CAST;
}
@@ -1054,8 +1039,7 @@
// NOTE: only add the (possibly null) syntactic form.
// No need to serialize the isSemanticForm flag and the semantic form.
Record.AddStmt(E->getSyntacticForm());
- Record.AddSourceLocation(E->getLBraceLoc());
- Record.AddSourceLocation(E->getRBraceLoc());
+ Record.AddSourceRange({E->getLBraceLoc(), E->getRBraceLoc()});
bool isArrayFiller = E->ArrayFillerOrUnionFieldInit.is<Expr*>();
Record.push_back(isArrayFiller);
if (isArrayFiller)
@@ -1098,15 +1082,13 @@
} else if (D.isArrayDesignator()) {
Record.push_back(serialization::DESIG_ARRAY);
Record.push_back(D.getFirstExprIndex());
- Record.AddSourceLocation(D.getLBracketLoc());
- Record.AddSourceLocation(D.getRBracketLoc());
+ Record.AddSourceRange({D.getLBracketLoc(), D.getRBracketLoc()});
} else {
assert(D.isArrayRangeDesignator() && "Unknown designator");
Record.push_back(serialization::DESIG_ARRAY_RANGE);
Record.push_back(D.getFirstExprIndex());
- Record.AddSourceLocation(D.getLBracketLoc());
+ Record.AddSourceRange({D.getLBracketLoc(), D.getRBracketLoc()});
Record.AddSourceLocation(D.getEllipsisLoc());
- Record.AddSourceLocation(D.getRBracketLoc());
}
}
Code = serialization::EXPR_DESIGNATED_INIT;
@@ -1171,8 +1153,7 @@
void ASTStmtWriter::VisitStmtExpr(StmtExpr *E) {
VisitExpr(E);
Record.AddStmt(E->getSubStmt());
- Record.AddSourceLocation(E->getLParenLoc());
- Record.AddSourceLocation(E->getRParenLoc());
+ Record.AddSourceRange({E->getLParenLoc(), E->getRParenLoc()});
Record.push_back(E->getTemplateDepth());
Code = serialization::EXPR_STMT;
}
@@ -1426,8 +1407,7 @@
Record.AddSelectorRef(E->getSelector());
}
- Record.AddSourceLocation(E->getLeftLoc());
- Record.AddSourceLocation(E->getRightLoc());
+ Record.AddSourceRange({E->getLeftLoc(), E->getRightLoc()});
for (CallExpr::arg_iterator Arg = E->arg_begin(), ArgEnd = E->arg_end();
Arg != ArgEnd; ++Arg)
@@ -1681,8 +1661,7 @@
void ASTStmtWriter::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E) {
VisitExplicitCastExpr(E);
- Record.AddSourceLocation(E->getLParenLoc());
- Record.AddSourceLocation(E->getRParenLoc());
+ Record.AddSourceRange({E->getLParenLoc(), E->getRParenLoc()});
Code = serialization::EXPR_CXX_FUNCTIONAL_CAST;
}
@@ -1912,8 +1891,7 @@
ArgI = E->arg_begin(), ArgE = E->arg_end(); ArgI != ArgE; ++ArgI)
Record.AddStmt(*ArgI);
Record.AddTypeSourceInfo(E->getTypeSourceInfo());
- Record.AddSourceLocation(E->getLParenLoc());
- Record.AddSourceLocation(E->getRParenLoc());
+ Record.AddSourceRange({E->getLParenLoc(), E->getRParenLoc()});
Code = serialization::EXPR_CXX_UNRESOLVED_CONSTRUCT;
}
@@ -2186,8 +2164,7 @@
void ASTStmtWriter::VisitOMPExecutableDirective(OMPExecutableDirective *E) {
Record.writeOMPChildren(E->Data);
- Record.AddSourceLocation(E->getBeginLoc());
- Record.AddSourceLocation(E->getEndLoc());
+ Record.AddSourceRange({E->getBeginLoc(), E->getEndLoc()});
}
void ASTStmtWriter::VisitOMPLoopBasedDirective(OMPLoopBasedDirective *D) {
Index: clang/lib/Serialization/ASTWriterDecl.cpp
===================================================================
--- clang/lib/Serialization/ASTWriterDecl.cpp
+++ clang/lib/Serialization/ASTWriterDecl.cpp
@@ -170,8 +170,8 @@
for (auto typeParam : *typeParams) {
Record.AddDeclRef(typeParam);
}
- Record.AddSourceLocation(typeParams->getLAngleLoc());
- Record.AddSourceLocation(typeParams->getRAngleLoc());
+ Record.AddSourceRange(
+ {typeParams->getLAngleLoc(), typeParams->getRAngleLoc()});
}
/// Add to the record the first declaration from each module file that
@@ -615,8 +615,9 @@
i!=e; ++i)
Record.AddTemplateArgumentLoc(
(*FTSInfo->TemplateArgumentsAsWritten)[i]);
- Record.AddSourceLocation(FTSInfo->TemplateArgumentsAsWritten->LAngleLoc);
- Record.AddSourceLocation(FTSInfo->TemplateArgumentsAsWritten->RAngleLoc);
+ Record.AddSourceRange(
+ {FTSInfo->TemplateArgumentsAsWritten->getLAngleLoc(),
+ FTSInfo->TemplateArgumentsAsWritten->getRAngleLoc()});
}
Record.AddSourceLocation(FTSInfo->getPointOfInstantiation());
@@ -651,8 +652,7 @@
Record.push_back(DFTSInfo->getNumTemplateArgs());
for (int i=0, e = DFTSInfo->getNumTemplateArgs(); i != e; ++i)
Record.AddTemplateArgumentLoc(DFTSInfo->getTemplateArg(i));
- Record.AddSourceLocation(DFTSInfo->getLAngleLoc());
- Record.AddSourceLocation(DFTSInfo->getRAngleLoc());
+ Record.AddSourceRange({DFTSInfo->getLAngleLoc(), DFTSInfo->getRAngleLoc()});
break;
}
}
@@ -835,8 +835,7 @@
void ASTDeclWriter::VisitObjCCategoryDecl(ObjCCategoryDecl *D) {
VisitObjCContainerDecl(D);
Record.AddSourceLocation(D->getCategoryNameLoc());
- Record.AddSourceLocation(D->getIvarLBraceLoc());
- Record.AddSourceLocation(D->getIvarRBraceLoc());
+ Record.AddSourceRange({D->getIvarLBraceLoc(), D->getIvarRBraceLoc()});
Record.AddDeclRef(D->getClassInterface());
AddObjCTypeParamList(D->TypeParamList);
Record.push_back(D->protocol_size());
@@ -890,8 +889,7 @@
VisitObjCImplDecl(D);
Record.AddDeclRef(D->getSuperClass());
Record.AddSourceLocation(D->getSuperClassLoc());
- Record.AddSourceLocation(D->getIvarLBraceLoc());
- Record.AddSourceLocation(D->getIvarRBraceLoc());
+ Record.AddSourceRange({D->getIvarLBraceLoc(), D->getIvarRBraceLoc()});
Record.push_back(D->hasNonZeroConstructors());
Record.push_back(D->hasDestructors());
Record.push_back(D->NumIvarInitializers);
Index: clang/lib/Serialization/ASTWriter.cpp
===================================================================
--- clang/lib/Serialization/ASTWriter.cpp
+++ clang/lib/Serialization/ASTWriter.cpp
@@ -309,8 +309,7 @@
}
void TypeLocWriter::VisitArrayTypeLoc(ArrayTypeLoc TL) {
- Record.AddSourceLocation(TL.getLBracketLoc());
- Record.AddSourceLocation(TL.getRBracketLoc());
+ Record.AddSourceRange(TL.getBracketsRange());
Record.push_back(TL.getSizeExpr() ? 1 : 0);
if (TL.getSizeExpr())
Record.AddStmt(TL.getSizeExpr());
@@ -336,9 +335,7 @@
void TypeLocWriter::VisitDependentAddressSpaceTypeLoc(
DependentAddressSpaceTypeLoc TL) {
Record.AddSourceLocation(TL.getAttrNameLoc());
- SourceRange range = TL.getAttrOperandParensRange();
- Record.AddSourceLocation(range.getBegin());
- Record.AddSourceLocation(range.getEnd());
+ Record.AddSourceRange(TL.getAttrOperandParensRange());
Record.AddStmt(TL.getAttrExprOperand());
}
@@ -362,9 +359,7 @@
void TypeLocWriter::VisitConstantMatrixTypeLoc(ConstantMatrixTypeLoc TL) {
Record.AddSourceLocation(TL.getAttrNameLoc());
- SourceRange range = TL.getAttrOperandParensRange();
- Record.AddSourceLocation(range.getBegin());
- Record.AddSourceLocation(range.getEnd());
+ Record.AddSourceRange(TL.getAttrOperandParensRange());
Record.AddStmt(TL.getAttrRowOperand());
Record.AddStmt(TL.getAttrColumnOperand());
}
@@ -372,19 +367,15 @@
void TypeLocWriter::VisitDependentSizedMatrixTypeLoc(
DependentSizedMatrixTypeLoc TL) {
Record.AddSourceLocation(TL.getAttrNameLoc());
- SourceRange range = TL.getAttrOperandParensRange();
- Record.AddSourceLocation(range.getBegin());
- Record.AddSourceLocation(range.getEnd());
+ Record.AddSourceRange(TL.getAttrOperandParensRange());
Record.AddStmt(TL.getAttrRowOperand());
Record.AddStmt(TL.getAttrColumnOperand());
}
void TypeLocWriter::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
- Record.AddSourceLocation(TL.getLocalRangeBegin());
- Record.AddSourceLocation(TL.getLParenLoc());
- Record.AddSourceLocation(TL.getRParenLoc());
+ Record.AddSourceRange(TL.getLocalSourceRange());
+ Record.AddSourceRange(TL.getParensRange());
Record.AddSourceRange(TL.getExceptionSpecRange());
- Record.AddSourceLocation(TL.getLocalRangeEnd());
for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i)
Record.AddDeclRef(TL.getParam(i));
}
@@ -410,24 +401,21 @@
}
void TypeLocWriter::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
- if (TL.getNumProtocols()) {
- Record.AddSourceLocation(TL.getProtocolLAngleLoc());
- Record.AddSourceLocation(TL.getProtocolRAngleLoc());
- }
+ if (TL.getNumProtocols())
+ Record.AddSourceRange(
+ {TL.getProtocolLAngleLoc(), TL.getProtocolRAngleLoc()});
for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
Record.AddSourceLocation(TL.getProtocolLoc(i));
}
void TypeLocWriter::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
Record.AddSourceLocation(TL.getTypeofLoc());
- Record.AddSourceLocation(TL.getLParenLoc());
- Record.AddSourceLocation(TL.getRParenLoc());
+ Record.AddSourceRange(TL.getParensRange());
}
void TypeLocWriter::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
Record.AddSourceLocation(TL.getTypeofLoc());
- Record.AddSourceLocation(TL.getLParenLoc());
- Record.AddSourceLocation(TL.getRParenLoc());
+ Record.AddSourceRange(TL.getParensRange());
Record.AddTypeSourceInfo(TL.getUnderlyingTInfo());
}
@@ -438,8 +426,7 @@
void TypeLocWriter::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
Record.AddSourceLocation(TL.getKWLoc());
- Record.AddSourceLocation(TL.getLParenLoc());
- Record.AddSourceLocation(TL.getRParenLoc());
+ Record.AddSourceRange(TL.getParensRange());
Record.AddTypeSourceInfo(TL.getUnderlyingTInfo());
}
@@ -451,8 +438,7 @@
Record.AddSourceLocation(TL.getTemplateKWLoc());
Record.AddSourceLocation(TL.getConceptNameLoc());
Record.AddDeclRef(TL.getFoundDecl());
- Record.AddSourceLocation(TL.getLAngleLoc());
- Record.AddSourceLocation(TL.getRAngleLoc());
+ Record.AddSourceRange({TL.getLAngleLoc(), TL.getRAngleLoc()});
for (unsigned I = 0; I < TL.getNumArgs(); ++I)
Record.AddTemplateArgumentLocInfo(TL.getTypePtr()->getArg(I).getKind(),
TL.getArgLocInfo(I));
@@ -501,16 +487,14 @@
TemplateSpecializationTypeLoc TL) {
Record.AddSourceLocation(TL.getTemplateKeywordLoc());
Record.AddSourceLocation(TL.getTemplateNameLoc());
- Record.AddSourceLocation(TL.getLAngleLoc());
- Record.AddSourceLocation(TL.getRAngleLoc());
+ Record.AddSourceRange({TL.getLAngleLoc(), TL.getRAngleLoc()});
for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
Record.AddTemplateArgumentLocInfo(TL.getArgLoc(i).getArgument().getKind(),
TL.getArgLoc(i).getLocInfo());
}
void TypeLocWriter::VisitParenTypeLoc(ParenTypeLoc TL) {
- Record.AddSourceLocation(TL.getLParenLoc());
- Record.AddSourceLocation(TL.getRParenLoc());
+ Record.AddSourceRange({TL.getLParenLoc(), TL.getRParenLoc()});
}
void TypeLocWriter::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
@@ -538,8 +522,7 @@
Record.AddNestedNameSpecifierLoc(TL.getQualifierLoc());
Record.AddSourceLocation(TL.getTemplateKeywordLoc());
Record.AddSourceLocation(TL.getTemplateNameLoc());
- Record.AddSourceLocation(TL.getLAngleLoc());
- Record.AddSourceLocation(TL.getRAngleLoc());
+ Record.AddSourceRange({TL.getLAngleLoc(), TL.getRAngleLoc()});
for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
Record.AddTemplateArgumentLocInfo(TL.getArgLoc(I).getArgument().getKind(),
TL.getArgLoc(I).getLocInfo());
@@ -555,12 +538,10 @@
void TypeLocWriter::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
Record.push_back(TL.hasBaseTypeAsWritten());
- Record.AddSourceLocation(TL.getTypeArgsLAngleLoc());
- Record.AddSourceLocation(TL.getTypeArgsRAngleLoc());
+ Record.AddSourceRange({TL.getTypeArgsLAngleLoc(), TL.getTypeArgsRAngleLoc()});
for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
Record.AddTypeSourceInfo(TL.getTypeArgTInfo(i));
- Record.AddSourceLocation(TL.getProtocolLAngleLoc());
- Record.AddSourceLocation(TL.getProtocolRAngleLoc());
+ Record.AddSourceRange({TL.getProtocolLAngleLoc(), TL.getProtocolRAngleLoc()});
for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
Record.AddSourceLocation(TL.getProtocolLoc(i));
}
@@ -571,8 +552,7 @@
void TypeLocWriter::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
Record.AddSourceLocation(TL.getKWLoc());
- Record.AddSourceLocation(TL.getLParenLoc());
- Record.AddSourceLocation(TL.getRParenLoc());
+ Record.AddSourceRange(TL.getParensRange());
}
void TypeLocWriter::VisitPipeTypeLoc(PipeTypeLoc TL) {
@@ -2442,8 +2422,7 @@
MacroOffsets[Index] = Offset;
AddIdentifierRef(Name, Record);
- AddSourceLocation(MI->getDefinitionLoc(), Record);
- AddSourceLocation(MI->getDefinitionEndLoc(), Record);
+ AddSourceRange({MI->getDefinitionLoc(), MI->getDefinitionEndLoc()}, Record);
Record.push_back(MI->isUsed());
Record.push_back(MI->isUsedForHeaderGuard());
Record.push_back(MI->getNumTokens());
@@ -5202,14 +5181,19 @@
Record.push_back(Raw);
}
-void ASTWriter::AddSourceLocation(SourceLocation Loc, RecordDataImpl &Record) {
+static SourceLocation::UIntTy encodeForWrite(SourceLocation Loc) {
SourceLocation::UIntTy Raw = Loc.getRawEncoding();
- Record.push_back((Raw << 1) | (Raw >> (8 * sizeof(Raw) - 1)));
+ return SourceLocation::UIntTy{(Raw << 1) | (Raw >> (8 * sizeof(Raw) - 1))};
+}
+
+void ASTWriter::AddSourceLocation(SourceLocation Loc, RecordDataImpl &Record) {
+ Record.push_back(encodeForWrite(Loc));
}
void ASTWriter::AddSourceRange(SourceRange Range, RecordDataImpl &Record) {
AddSourceLocation(Range.getBegin(), Record);
- AddSourceLocation(Range.getEnd(), Record);
+ Record.push_back(encodeForWrite(Range.getEnd()) -
+ encodeForWrite(Range.getBegin()));
}
void ASTRecordWriter::AddAPFloat(const llvm::APFloat &Value) {
@@ -5594,8 +5578,8 @@
const TemplateParameterList *TemplateParams) {
assert(TemplateParams && "No TemplateParams!");
AddSourceLocation(TemplateParams->getTemplateLoc());
- AddSourceLocation(TemplateParams->getLAngleLoc());
- AddSourceLocation(TemplateParams->getRAngleLoc());
+ AddSourceRange(
+ {TemplateParams->getLAngleLoc(), TemplateParams->getRAngleLoc()});
Record->push_back(TemplateParams->size());
for (const auto &P : *TemplateParams)
@@ -5620,8 +5604,8 @@
void ASTRecordWriter::AddASTTemplateArgumentListInfo(
const ASTTemplateArgumentListInfo *ASTTemplArgList) {
assert(ASTTemplArgList && "No ASTTemplArgList!");
- AddSourceLocation(ASTTemplArgList->LAngleLoc);
- AddSourceLocation(ASTTemplArgList->RAngleLoc);
+ AddSourceRange(
+ {ASTTemplArgList->getLAngleLoc(), ASTTemplArgList->getRAngleLoc()});
Record->push_back(ASTTemplArgList->NumTemplateArgs);
const TemplateArgumentLoc *TemplArgs = ASTTemplArgList->getTemplateArgs();
for (int i = 0, e = ASTTemplArgList->NumTemplateArgs; i != e; ++i)
@@ -5691,8 +5675,7 @@
Writer.AddSourceLocation(Init->getMemberLocation());
Writer.AddStmt(Init->getInit());
- Writer.AddSourceLocation(Init->getLParenLoc());
- Writer.AddSourceLocation(Init->getRParenLoc());
+ Writer.AddSourceRange({Init->getLParenLoc(), Init->getRParenLoc()});
Writer.push_back(Init->isWritten());
if (Init->isWritten())
Writer.push_back(Init->getSourceOrder());
@@ -6180,8 +6163,7 @@
void OMPClauseWriter::writeClause(OMPClause *C) {
Record.push_back(unsigned(C->getClauseKind()));
Visit(C);
- Record.AddSourceLocation(C->getBeginLoc());
- Record.AddSourceLocation(C->getEndLoc());
+ Record.AddSourceRange({C->getBeginLoc(), C->getEndLoc()});
}
void OMPClauseWriter::VisitOMPClauseWithPreInit(OMPClauseWithPreInit *C) {
Index: clang/lib/Serialization/ASTReaderStmt.cpp
===================================================================
--- clang/lib/Serialization/ASTReaderStmt.cpp
+++ clang/lib/Serialization/ASTReaderStmt.cpp
@@ -131,8 +131,9 @@
unsigned NumTemplateArgs) {
SourceLocation TemplateKWLoc = readSourceLocation();
TemplateArgumentListInfo ArgInfo;
- ArgInfo.setLAngleLoc(readSourceLocation());
- ArgInfo.setRAngleLoc(readSourceLocation());
+ SourceRange AngleRange = readSourceRange();
+ ArgInfo.setLAngleLoc(AngleRange.getBegin());
+ ArgInfo.setRAngleLoc(AngleRange.getEnd());
for (unsigned i = 0; i != NumTemplateArgs; ++i)
ArgInfo.addArgument(Record.readTemplateArgumentLoc());
Args.initializeFrom(TemplateKWLoc, ArgInfo, ArgsLocArray);
@@ -155,8 +156,9 @@
while (NumStmts--)
Stmts.push_back(Record.readSubStmt());
S->setStmts(Stmts);
- S->CompoundStmtBits.LBraceLoc = readSourceLocation();
- S->RBraceLoc = readSourceLocation();
+ SourceRange BraceRange = readSourceRange();
+ S->CompoundStmtBits.LBraceLoc = BraceRange.getBegin();
+ S->RBraceLoc = BraceRange.getEnd();
}
void ASTStmtReader::VisitSwitchCase(SwitchCase *S) {
@@ -227,8 +229,9 @@
S->setInit(Record.readSubStmt());
S->setIfLoc(readSourceLocation());
- S->setLParenLoc(readSourceLocation());
- S->setRParenLoc(readSourceLocation());
+ SourceRange ParenRange = readSourceRange();
+ S->setLParenLoc(ParenRange.getBegin());
+ S->setRParenLoc(ParenRange.getEnd());
if (HasElse)
S->setElseLoc(readSourceLocation());
}
@@ -250,8 +253,9 @@
S->setConditionVariable(Record.getContext(), readDeclAs<VarDecl>());
S->setSwitchLoc(readSourceLocation());
- S->setLParenLoc(readSourceLocation());
- S->setRParenLoc(readSourceLocation());
+ SourceRange ParenRange = readSourceRange();
+ S->setLParenLoc(ParenRange.getBegin());
+ S->setRParenLoc(ParenRange.getEnd());
SwitchCase *PrevSC = nullptr;
for (auto E = Record.size(); Record.getIdx() != E; ) {
@@ -276,8 +280,9 @@
S->setConditionVariable(Record.getContext(), readDeclAs<VarDecl>());
S->setWhileLoc(readSourceLocation());
- S->setLParenLoc(readSourceLocation());
- S->setRParenLoc(readSourceLocation());
+ SourceRange ParenRange = readSourceRange();
+ S->setLParenLoc(ParenRange.getBegin());
+ S->setRParenLoc(ParenRange.getEnd());
}
void ASTStmtReader::VisitDoStmt(DoStmt *S) {
@@ -297,8 +302,9 @@
S->setInc(Record.readSubExpr());
S->setBody(Record.readSubStmt());
S->setForLoc(readSourceLocation());
- S->setLParenLoc(readSourceLocation());
- S->setRParenLoc(readSourceLocation());
+ SourceRange ParenRange = readSourceRange();
+ S->setLParenLoc(ParenRange.getBegin());
+ S->setRParenLoc(ParenRange.getEnd());
}
void ASTStmtReader::VisitGotoStmt(GotoStmt *S) {
@@ -339,8 +345,9 @@
void ASTStmtReader::VisitDeclStmt(DeclStmt *S) {
VisitStmt(S);
- S->setStartLoc(readSourceLocation());
- S->setEndLoc(readSourceLocation());
+ SourceRange Range = readSourceRange();
+ S->setStartLoc(Range.getBegin());
+ S->setEndLoc(Range.getEnd());
if (Record.size() - Record.getIdx() == 1) {
// Single declaration
@@ -565,8 +572,9 @@
VisitExpr(E);
E->setLocation(readSourceLocation());
- E->setLParenLocation(readSourceLocation());
- E->setRParenLocation(readSourceLocation());
+ SourceRange ParenRange = readSourceRange();
+ E->setLParenLocation(ParenRange.getBegin());
+ E->setRParenLocation(ParenRange.getEnd());
E->setTypeSourceInfo(Record.readTypeSourceInfo());
}
@@ -680,8 +688,9 @@
void ASTStmtReader::VisitParenExpr(ParenExpr *E) {
VisitExpr(E);
- E->setLParen(readSourceLocation());
- E->setRParen(readSourceLocation());
+ SourceRange ParenRange = readSourceRange();
+ E->setLParen(ParenRange.getBegin());
+ E->setRParen(ParenRange.getEnd());
E->setSubExpr(Record.readSubExpr());
}
@@ -691,8 +700,9 @@
assert((NumExprs == E->getNumExprs()) && "Wrong NumExprs!");
for (unsigned I = 0; I != NumExprs; ++I)
E->getTrailingObjects<Stmt *>()[I] = Record.readSubStmt();
- E->LParenLoc = readSourceLocation();
- E->RParenLoc = readSourceLocation();
+ SourceRange ParenRange = readSourceRange();
+ E->LParenLoc = ParenRange.getBegin();
+ E->RParenLoc = ParenRange.getEnd();
}
void ASTStmtReader::VisitUnaryOperator(UnaryOperator *E) {
@@ -719,22 +729,21 @@
E->setTypeSourceInfo(readTypeSourceInfo());
for (unsigned I = 0, N = E->getNumComponents(); I != N; ++I) {
auto Kind = static_cast<OffsetOfNode::Kind>(Record.readInt());
- SourceLocation Start = readSourceLocation();
- SourceLocation End = readSourceLocation();
+ SourceRange Range = readSourceRange();
switch (Kind) {
case OffsetOfNode::Array:
- E->setComponent(I, OffsetOfNode(Start, Record.readInt(), End));
+ E->setComponent(
+ I, OffsetOfNode(Range.getBegin(), Record.readInt(), Range.getEnd()));
break;
case OffsetOfNode::Field:
- E->setComponent(
- I, OffsetOfNode(Start, readDeclAs<FieldDecl>(), End));
+ E->setComponent(I, OffsetOfNode(Range.getBegin(), readDeclAs<FieldDecl>(),
+ Range.getEnd()));
break;
case OffsetOfNode::Identifier:
- E->setComponent(
- I,
- OffsetOfNode(Start, Record.readIdentifier(), End));
+ E->setComponent(I, OffsetOfNode(Range.getBegin(), Record.readIdentifier(),
+ Range.getEnd()));
break;
case OffsetOfNode::Base: {
@@ -954,16 +963,18 @@
for (unsigned I = 0; I < NumDims; ++I)
SRs[I] = readSourceRange();
E->setBracketsRanges(SRs);
- E->setLParenLoc(readSourceLocation());
- E->setRParenLoc(readSourceLocation());
+ SourceRange ParenRange = readSourceRange();
+ E->setLParenLoc(ParenRange.getBegin());
+ E->setRParenLoc(ParenRange.getEnd());
}
void ASTStmtReader::VisitOMPIteratorExpr(OMPIteratorExpr *E) {
VisitExpr(E);
unsigned NumIters = Record.readInt();
E->setIteratorKwLoc(readSourceLocation());
- E->setLParenLoc(readSourceLocation());
- E->setRParenLoc(readSourceLocation());
+ SourceRange ParenRange = readSourceRange();
+ E->setLParenLoc(ParenRange.getBegin());
+ E->setRParenLoc(ParenRange.getEnd());
for (unsigned I = 0; I < NumIters; ++I) {
E->setIteratorDeclaration(I, Record.readDeclRef());
E->setAssignmentLoc(I, readSourceLocation());
@@ -1141,8 +1152,9 @@
void ASTStmtReader::VisitCStyleCastExpr(CStyleCastExpr *E) {
VisitExplicitCastExpr(E);
- E->setLParenLoc(readSourceLocation());
- E->setRParenLoc(readSourceLocation());
+ SourceRange ParenRange = readSourceRange();
+ E->setLParenLoc(ParenRange.getBegin());
+ E->setRParenLoc(ParenRange.getEnd());
}
void ASTStmtReader::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
@@ -1164,8 +1176,9 @@
VisitExpr(E);
if (auto *SyntForm = cast_or_null<InitListExpr>(Record.readSubStmt()))
E->setSyntacticForm(SyntForm);
- E->setLBraceLoc(readSourceLocation());
- E->setRBraceLoc(readSourceLocation());
+ SourceRange BraceRange = readSourceRange();
+ E->setLBraceLoc(BraceRange.getBegin());
+ E->setRBraceLoc(BraceRange.getEnd());
bool isArrayFiller = Record.readInt();
Expr *filler = nullptr;
if (isArrayFiller) {
@@ -1221,19 +1234,18 @@
case DESIG_ARRAY: {
unsigned Index = Record.readInt();
- SourceLocation LBracketLoc = readSourceLocation();
- SourceLocation RBracketLoc = readSourceLocation();
- Designators.push_back(Designator(Index, LBracketLoc, RBracketLoc));
+ SourceRange BracketRange = readSourceRange();
+ Designators.push_back(
+ Designator(Index, BracketRange.getBegin(), BracketRange.getEnd()));
break;
}
case DESIG_ARRAY_RANGE: {
unsigned Index = Record.readInt();
- SourceLocation LBracketLoc = readSourceLocation();
+ SourceRange BracketRange = readSourceRange();
SourceLocation EllipsisLoc = readSourceLocation();
- SourceLocation RBracketLoc = readSourceLocation();
- Designators.push_back(Designator(Index, LBracketLoc, EllipsisLoc,
- RBracketLoc));
+ Designators.push_back(Designator(Index, BracketRange.getBegin(),
+ EllipsisLoc, BracketRange.getEnd()));
break;
}
}
@@ -1293,8 +1305,9 @@
void ASTStmtReader::VisitStmtExpr(StmtExpr *E) {
VisitExpr(E);
- E->setLParenLoc(readSourceLocation());
- E->setRParenLoc(readSourceLocation());
+ SourceRange ParenRange = readSourceRange();
+ E->setLParenLoc(ParenRange.getBegin());
+ E->setRParenLoc(ParenRange.getEnd());
E->setSubStmt(cast_or_null<CompoundStmt>(Record.readSubStmt()));
E->StmtExprBits.TemplateDepth = Record.readInt();
}
@@ -1537,8 +1550,9 @@
else
E->setSelector(Record.readSelector());
- E->LBracLoc = readSourceLocation();
- E->RBracLoc = readSourceLocation();
+ SourceRange BracketRange = readSourceRange();
+ E->LBracLoc = BracketRange.getBegin();
+ E->RBracLoc = BracketRange.getEnd();
for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I)
E->setArg(I, Record.readSubExpr());
@@ -1769,8 +1783,9 @@
void ASTStmtReader::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E) {
VisitExplicitCastExpr(E);
- E->setLParenLoc(readSourceLocation());
- E->setRParenLoc(readSourceLocation());
+ SourceRange ParenRange = readSourceRange();
+ E->setLParenLoc(ParenRange.getBegin());
+ E->setRParenLoc(ParenRange.getEnd());
}
void ASTStmtReader::VisitBuiltinBitCastExpr(BuiltinBitCastExpr *E) {
@@ -1987,8 +2002,9 @@
for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I)
E->setArg(I, Record.readSubExpr());
E->TSI = readTypeSourceInfo();
- E->setLParenLoc(readSourceLocation());
- E->setRParenLoc(readSourceLocation());
+ SourceRange ParenRange = readSourceRange();
+ E->setLParenLoc(ParenRange.getBegin());
+ E->setRParenLoc(ParenRange.getEnd());
}
void ASTStmtReader::VisitOverloadExpr(OverloadExpr *E) {
@@ -2176,8 +2192,9 @@
void ASTStmtReader::VisitRecoveryExpr(RecoveryExpr *E) {
VisitExpr(E);
unsigned NumArgs = Record.readInt();
- E->BeginLoc = readSourceLocation();
- E->EndLoc = readSourceLocation();
+ SourceRange Range = readSourceRange();
+ E->BeginLoc = Range.getBegin();
+ E->EndLoc = Range.getEnd();
assert((NumArgs + 0LL ==
std::distance(E->children().begin(), E->children().end())) &&
"Wrong NumArgs!");
@@ -2272,8 +2289,9 @@
void ASTStmtReader::VisitOMPExecutableDirective(OMPExecutableDirective *E) {
Record.readOMPChildren(E->Data);
- E->setLocStart(readSourceLocation());
- E->setLocEnd(readSourceLocation());
+ SourceRange Range = readSourceRange();
+ E->setLocStart(Range.getBegin());
+ E->setLocEnd(Range.getEnd());
}
void ASTStmtReader::VisitOMPLoopBasedDirective(OMPLoopBasedDirective *D) {
Index: clang/lib/Serialization/ASTReaderDecl.cpp
===================================================================
--- clang/lib/Serialization/ASTReaderDecl.cpp
+++ clang/lib/Serialization/ASTReaderDecl.cpp
@@ -963,7 +963,7 @@
// Template args as written.
SmallVector<TemplateArgumentLoc, 8> TemplArgLocs;
- SourceLocation LAngleLoc, RAngleLoc;
+ SourceRange AngleRange;
bool HasTemplateArgumentsAsWritten = Record.readInt();
if (HasTemplateArgumentsAsWritten) {
unsigned NumTemplateArgLocs = Record.readInt();
@@ -971,8 +971,7 @@
for (unsigned i = 0; i != NumTemplateArgLocs; ++i)
TemplArgLocs.push_back(Record.readTemplateArgumentLoc());
- LAngleLoc = readSourceLocation();
- RAngleLoc = readSourceLocation();
+ AngleRange = readSourceRange();
}
SourceLocation POI = readSourceLocation();
@@ -980,7 +979,8 @@
ASTContext &C = Reader.getContext();
TemplateArgumentList *TemplArgList
= TemplateArgumentList::CreateCopy(C, TemplArgs);
- TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
+ TemplateArgumentListInfo TemplArgsInfo(AngleRange.getBegin(),
+ AngleRange.getEnd());
for (unsigned i = 0, e = TemplArgLocs.size(); i != e; ++i)
TemplArgsInfo.addArgument(TemplArgLocs[i]);
@@ -1038,8 +1038,9 @@
unsigned NumArgs = Record.readInt();
while (NumArgs--)
TemplArgs.addArgument(Record.readTemplateArgumentLoc());
- TemplArgs.setLAngleLoc(readSourceLocation());
- TemplArgs.setRAngleLoc(readSourceLocation());
+ SourceRange AngleRange = readSourceRange();
+ TemplArgs.setLAngleLoc(AngleRange.getBegin());
+ TemplArgs.setRAngleLoc(AngleRange.getEnd());
FD->setDependentTemplateSpecialization(Reader.getContext(),
TemplDecls, TemplArgs);
@@ -1138,11 +1139,10 @@
typeParams.push_back(typeParam);
}
- SourceLocation lAngleLoc = readSourceLocation();
- SourceLocation rAngleLoc = readSourceLocation();
+ SourceRange angleRange = readSourceRange();
- return ObjCTypeParamList::create(Reader.getContext(), lAngleLoc,
- typeParams, rAngleLoc);
+ return ObjCTypeParamList::create(Reader.getContext(), angleRange.getBegin(),
+ typeParams, angleRange.getEnd());
}
void ASTDeclReader::ReadObjCDefinitionData(
@@ -1297,8 +1297,9 @@
void ASTDeclReader::VisitObjCCategoryDecl(ObjCCategoryDecl *CD) {
VisitObjCContainerDecl(CD);
CD->setCategoryNameLoc(readSourceLocation());
- CD->setIvarLBraceLoc(readSourceLocation());
- CD->setIvarRBraceLoc(readSourceLocation());
+ SourceRange IvarBraceRange = readSourceRange();
+ CD->setIvarLBraceLoc(IvarBraceRange.getBegin());
+ CD->setIvarRBraceLoc(IvarBraceRange.getEnd());
// Note that this category has been deserialized. We do this before
// deserializing the interface declaration, so that it will consider this
@@ -1368,8 +1369,9 @@
VisitObjCImplDecl(D);
D->setSuperClass(readDeclAs<ObjCInterfaceDecl>());
D->SuperLoc = readSourceLocation();
- D->setIvarLBraceLoc(readSourceLocation());
- D->setIvarRBraceLoc(readSourceLocation());
+ SourceRange IvarBraceRange = readSourceRange();
+ D->setIvarLBraceLoc(IvarBraceRange.getBegin());
+ D->setIvarRBraceLoc(IvarBraceRange.getEnd());
D->setHasNonZeroConstructors(Record.readInt());
D->setHasDestructors(Record.readInt());
D->NumIvarInitializers = Record.readInt();
Index: clang/lib/Serialization/ASTReader.cpp
===================================================================
--- clang/lib/Serialization/ASTReader.cpp
+++ clang/lib/Serialization/ASTReader.cpp
@@ -1744,9 +1744,9 @@
return Macro;
unsigned NextIndex = 1; // Skip identifier ID.
- SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex);
- MacroInfo *MI = PP.AllocateMacroInfo(Loc);
- MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex));
+ SourceRange Range = ReadSourceRange(F, Record, NextIndex);
+ MacroInfo *MI = PP.AllocateMacroInfo(Range.getBegin());
+ MI->setDefinitionEndLoc(Range.getEnd());
MI->setIsUsed(Record[NextIndex++]);
MI->setUsedForHeaderGuard(Record[NextIndex++]);
MacroTokens = MI->allocateTokens(Record[NextIndex++],
@@ -6547,8 +6547,9 @@
}
void TypeLocReader::VisitArrayTypeLoc(ArrayTypeLoc TL) {
- TL.setLBracketLoc(readSourceLocation());
- TL.setRBracketLoc(readSourceLocation());
+ SourceRange BracketRange = Reader.readSourceRange();
+ TL.setLBracketLoc(BracketRange.getBegin());
+ TL.setRBracketLoc(BracketRange.getEnd());
if (Reader.readBool())
TL.setSizeExpr(Reader.readExpr());
else
@@ -6614,11 +6615,13 @@
}
void TypeLocReader::VisitFunctionTypeLoc(FunctionTypeLoc TL) {
- TL.setLocalRangeBegin(readSourceLocation());
- TL.setLParenLoc(readSourceLocation());
- TL.setRParenLoc(readSourceLocation());
+ SourceRange LocalRange = Reader.readSourceRange();
+ TL.setLocalRangeBegin(LocalRange.getBegin());
+ TL.setLocalRangeEnd(LocalRange.getBegin());
+ SourceRange ParensRange = Reader.readSourceRange();
+ TL.setLParenLoc(ParensRange.getBegin());
+ TL.setRParenLoc(ParensRange.getEnd());
TL.setExceptionSpecRange(Reader.readSourceRange());
- TL.setLocalRangeEnd(readSourceLocation());
for (unsigned i = 0, e = TL.getNumParams(); i != e; ++i) {
TL.setParam(i, Reader.readDeclAs<ParmVarDecl>());
}
@@ -6646,14 +6649,12 @@
void TypeLocReader::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
TL.setTypeofLoc(readSourceLocation());
- TL.setLParenLoc(readSourceLocation());
- TL.setRParenLoc(readSourceLocation());
+ TL.setParensRange(Reader.readSourceRange());
}
void TypeLocReader::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
TL.setTypeofLoc(readSourceLocation());
- TL.setLParenLoc(readSourceLocation());
- TL.setRParenLoc(readSourceLocation());
+ TL.setParensRange(Reader.readSourceRange());
TL.setUnderlyingTInfo(GetTypeSourceInfo());
}
@@ -6664,8 +6665,7 @@
void TypeLocReader::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
TL.setKWLoc(readSourceLocation());
- TL.setLParenLoc(readSourceLocation());
- TL.setRParenLoc(readSourceLocation());
+ TL.setParensRange(Reader.readSourceRange());
TL.setUnderlyingTInfo(GetTypeSourceInfo());
}
@@ -6676,8 +6676,9 @@
TL.setTemplateKWLoc(readSourceLocation());
TL.setConceptNameLoc(readSourceLocation());
TL.setFoundDecl(Reader.readDeclAs<NamedDecl>());
- TL.setLAngleLoc(readSourceLocation());
- TL.setRAngleLoc(readSourceLocation());
+ SourceRange AngleRange = Reader.readSourceRange();
+ TL.setLAngleLoc(AngleRange.getBegin());
+ TL.setRAngleLoc(AngleRange.getEnd());
for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
TL.setArgLocInfo(i, Reader.readTemplateArgumentLocInfo(
TL.getTypePtr()->getArg(i).getKind()));
@@ -6725,8 +6726,9 @@
TemplateSpecializationTypeLoc TL) {
TL.setTemplateKeywordLoc(readSourceLocation());
TL.setTemplateNameLoc(readSourceLocation());
- TL.setLAngleLoc(readSourceLocation());
- TL.setRAngleLoc(readSourceLocation());
+ SourceRange AngleRange = Reader.readSourceRange();
+ TL.setLAngleLoc(AngleRange.getBegin());
+ TL.setRAngleLoc(AngleRange.getEnd());
for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
TL.setArgLocInfo(
i,
@@ -6735,8 +6737,9 @@
}
void TypeLocReader::VisitParenTypeLoc(ParenTypeLoc TL) {
- TL.setLParenLoc(readSourceLocation());
- TL.setRParenLoc(readSourceLocation());
+ SourceRange ParenRange = Reader.readSourceRange();
+ TL.setLParenLoc(ParenRange.getBegin());
+ TL.setRParenLoc(ParenRange.getEnd());
}
void TypeLocReader::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
@@ -6760,8 +6763,9 @@
TL.setQualifierLoc(ReadNestedNameSpecifierLoc());
TL.setTemplateKeywordLoc(readSourceLocation());
TL.setTemplateNameLoc(readSourceLocation());
- TL.setLAngleLoc(readSourceLocation());
- TL.setRAngleLoc(readSourceLocation());
+ SourceRange AngleRange = Reader.readSourceRange();
+ TL.setLAngleLoc(AngleRange.getBegin());
+ TL.setRAngleLoc(AngleRange.getEnd());
for (unsigned I = 0, E = TL.getNumArgs(); I != E; ++I)
TL.setArgLocInfo(
I,
@@ -6779,8 +6783,9 @@
void TypeLocReader::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
if (TL.getNumProtocols()) {
- TL.setProtocolLAngleLoc(readSourceLocation());
- TL.setProtocolRAngleLoc(readSourceLocation());
+ SourceRange ProtocolAngleRange = Reader.readSourceRange();
+ TL.setProtocolLAngleLoc(ProtocolAngleRange.getBegin());
+ TL.setProtocolRAngleLoc(ProtocolAngleRange.getEnd());
}
for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
TL.setProtocolLoc(i, readSourceLocation());
@@ -6788,12 +6793,14 @@
void TypeLocReader::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
TL.setHasBaseTypeAsWritten(Reader.readBool());
- TL.setTypeArgsLAngleLoc(readSourceLocation());
- TL.setTypeArgsRAngleLoc(readSourceLocation());
+ SourceRange TypeArgsAngleRange = Reader.readSourceRange();
+ TL.setTypeArgsLAngleLoc(TypeArgsAngleRange.getBegin());
+ TL.setTypeArgsRAngleLoc(TypeArgsAngleRange.getEnd());
for (unsigned i = 0, e = TL.getNumTypeArgs(); i != e; ++i)
TL.setTypeArgTInfo(i, GetTypeSourceInfo());
- TL.setProtocolLAngleLoc(readSourceLocation());
- TL.setProtocolRAngleLoc(readSourceLocation());
+ SourceRange ProtocolAngleRange = Reader.readSourceRange();
+ TL.setProtocolLAngleLoc(ProtocolAngleRange.getBegin());
+ TL.setProtocolRAngleLoc(ProtocolAngleRange.getEnd());
for (unsigned i = 0, e = TL.getNumProtocols(); i != e; ++i)
TL.setProtocolLoc(i, readSourceLocation());
}
@@ -6804,8 +6811,7 @@
void TypeLocReader::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
TL.setKWLoc(readSourceLocation());
- TL.setLParenLoc(readSourceLocation());
- TL.setRParenLoc(readSourceLocation());
+ TL.setParensRange(Reader.readSourceRange());
}
void TypeLocReader::VisitPipeTypeLoc(PipeTypeLoc TL) {
@@ -7184,10 +7190,10 @@
const ASTTemplateArgumentListInfo *
ASTRecordReader::readASTTemplateArgumentListInfo() {
- SourceLocation LAngleLoc = readSourceLocation();
- SourceLocation RAngleLoc = readSourceLocation();
+ SourceRange AngleRange = readSourceRange();
unsigned NumArgsAsWritten = readInt();
- TemplateArgumentListInfo TemplArgsInfo(LAngleLoc, RAngleLoc);
+ TemplateArgumentListInfo TemplArgsInfo(AngleRange.getBegin(),
+ AngleRange.getEnd());
for (unsigned i = 0; i != NumArgsAsWritten; ++i)
TemplArgsInfo.addArgument(readTemplateArgumentLoc());
return ASTTemplateArgumentListInfo::Create(getContext(), TemplArgsInfo);
@@ -8810,8 +8816,7 @@
TemplateParameterList *
ASTRecordReader::readTemplateParameterList() {
SourceLocation TemplateLoc = readSourceLocation();
- SourceLocation LAngleLoc = readSourceLocation();
- SourceLocation RAngleLoc = readSourceLocation();
+ SourceRange AngleRange = readSourceRange();
unsigned NumParams = readInt();
SmallVector<NamedDecl *, 16> Params;
@@ -8823,7 +8828,8 @@
Expr *RequiresClause = HasRequiresClause ? readExpr() : nullptr;
TemplateParameterList *TemplateParams = TemplateParameterList::Create(
- getContext(), TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause);
+ getContext(), TemplateLoc, AngleRange.getBegin(), Params,
+ AngleRange.getEnd(), RequiresClause);
return TemplateParams;
}
@@ -8896,25 +8902,24 @@
SourceLocation MemberOrEllipsisLoc = readSourceLocation();
Expr *Init = readExpr();
- SourceLocation LParenLoc = readSourceLocation();
- SourceLocation RParenLoc = readSourceLocation();
+ SourceRange ParenRange = readSourceRange();
CXXCtorInitializer *BOMInit;
if (Type == CTOR_INITIALIZER_BASE)
- BOMInit = new (Context)
- CXXCtorInitializer(Context, TInfo, IsBaseVirtual, LParenLoc, Init,
- RParenLoc, MemberOrEllipsisLoc);
+ BOMInit = new (Context) CXXCtorInitializer(
+ Context, TInfo, IsBaseVirtual, ParenRange.getBegin(), Init,
+ ParenRange.getEnd(), MemberOrEllipsisLoc);
else if (Type == CTOR_INITIALIZER_DELEGATING)
- BOMInit = new (Context)
- CXXCtorInitializer(Context, TInfo, LParenLoc, Init, RParenLoc);
+ BOMInit = new (Context) CXXCtorInitializer(
+ Context, TInfo, ParenRange.getBegin(), Init, ParenRange.getEnd());
else if (Member)
BOMInit = new (Context)
- CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc, LParenLoc,
- Init, RParenLoc);
+ CXXCtorInitializer(Context, Member, MemberOrEllipsisLoc,
+ ParenRange.getBegin(), Init, ParenRange.getEnd());
else
BOMInit = new (Context)
CXXCtorInitializer(Context, IndirectMember, MemberOrEllipsisLoc,
- LParenLoc, Init, RParenLoc);
+ ParenRange.getBegin(), Init, ParenRange.getEnd());
if (/*IsWritten*/readBool()) {
unsigned SourceOrder = readInt();
@@ -8992,9 +8997,12 @@
SourceRange
ASTReader::ReadSourceRange(ModuleFile &F, const RecordData &Record,
unsigned &Idx) {
- SourceLocation beg = ReadSourceLocation(F, Record, Idx);
- SourceLocation end = ReadSourceLocation(F, Record, Idx);
- return SourceRange(beg, end);
+ SourceLocation::UIntTy Begin = Record[Idx++];
+ SourceLocation::UIntTy Delta = Record[Idx++];
+ return SourceRange(
+ TranslateSourceLocation(F, ReadUntranslatedSourceLocation(Begin)),
+ TranslateSourceLocation(F,
+ ReadUntranslatedSourceLocation(Begin + Delta)));
}
/// Read a floating-point value
@@ -11934,8 +11942,9 @@
assert(C && "Unknown OMPClause type");
Visit(C);
- C->setLocStart(Record.readSourceLocation());
- C->setLocEnd(Record.readSourceLocation());
+ SourceRange Range = Record.readSourceRange();
+ C->setLocStart(Range.getBegin());
+ C->setLocEnd(Range.getEnd());
return C;
}
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits