forked from OSchip/llvm-project
Read/write some source location for PCH.
llvm-svn: 107616
This commit is contained in:
parent
c4a7073db3
commit
927d8e06c1
|
@ -1508,11 +1508,15 @@ public:
|
|||
/// \param TSK the kind of template specialization this is.
|
||||
///
|
||||
/// \param TemplateArgsAsWritten location info of template arguments.
|
||||
///
|
||||
/// \param PointOfInstantiation point at which the function template
|
||||
/// specialization was first instantiated.
|
||||
void setFunctionTemplateSpecialization(FunctionTemplateDecl *Template,
|
||||
const TemplateArgumentList *TemplateArgs,
|
||||
void *InsertPos,
|
||||
TemplateSpecializationKind TSK = TSK_ImplicitInstantiation,
|
||||
const TemplateArgumentListInfo *TemplateArgsAsWritten = 0);
|
||||
const TemplateArgumentListInfo *TemplateArgsAsWritten = 0,
|
||||
SourceLocation PointOfInstantiation = SourceLocation());
|
||||
|
||||
/// \brief Specify that this function declaration is actually a function
|
||||
/// template specialization.
|
||||
|
@ -1537,6 +1541,9 @@ public:
|
|||
/// \param LAngleLoc location of left angle token.
|
||||
///
|
||||
/// \param RAngleLoc location of right angle token.
|
||||
///
|
||||
/// \param PointOfInstantiation point at which the function template
|
||||
/// specialization was first instantiated.
|
||||
void setFunctionTemplateSpecialization(FunctionTemplateDecl *Template,
|
||||
unsigned NumTemplateArgs,
|
||||
const TemplateArgument *TemplateArgs,
|
||||
|
@ -1544,7 +1551,8 @@ public:
|
|||
unsigned NumTemplateArgsAsWritten,
|
||||
TemplateArgumentLoc *TemplateArgsAsWritten,
|
||||
SourceLocation LAngleLoc,
|
||||
SourceLocation RAngleLoc);
|
||||
SourceLocation RAngleLoc,
|
||||
SourceLocation PointOfInstantiation);
|
||||
|
||||
/// \brief Specifies that this function declaration is actually a
|
||||
/// dependent function template specialization.
|
||||
|
|
|
@ -1352,7 +1352,8 @@ FunctionDecl::setFunctionTemplateSpecialization(FunctionTemplateDecl *Template,
|
|||
const TemplateArgumentList *TemplateArgs,
|
||||
void *InsertPos,
|
||||
TemplateSpecializationKind TSK,
|
||||
const TemplateArgumentListInfo *TemplateArgsAsWritten) {
|
||||
const TemplateArgumentListInfo *TemplateArgsAsWritten,
|
||||
SourceLocation PointOfInstantiation) {
|
||||
assert(TSK != TSK_Undeclared &&
|
||||
"Must specify the type of function template specialization");
|
||||
FunctionTemplateSpecializationInfo *Info
|
||||
|
@ -1365,6 +1366,7 @@ FunctionDecl::setFunctionTemplateSpecialization(FunctionTemplateDecl *Template,
|
|||
Info->Template.setInt(TSK - 1);
|
||||
Info->TemplateArguments = TemplateArgs;
|
||||
Info->TemplateArgumentsAsWritten = TemplateArgsAsWritten;
|
||||
Info->PointOfInstantiation = PointOfInstantiation;
|
||||
TemplateOrSpecialization = Info;
|
||||
|
||||
// Insert this function template specialization into the set of known
|
||||
|
@ -1391,7 +1393,8 @@ FunctionDecl::setFunctionTemplateSpecialization(FunctionTemplateDecl *Template,
|
|||
unsigned NumTemplateArgsAsWritten,
|
||||
TemplateArgumentLoc *TemplateArgsAsWritten,
|
||||
SourceLocation LAngleLoc,
|
||||
SourceLocation RAngleLoc) {
|
||||
SourceLocation RAngleLoc,
|
||||
SourceLocation PointOfInstantiation) {
|
||||
ASTContext &Ctx = getASTContext();
|
||||
TemplateArgumentList *TemplArgs
|
||||
= new (Ctx) TemplateArgumentList(Ctx, TemplateArgs, NumTemplateArgs);
|
||||
|
@ -1401,7 +1404,7 @@ FunctionDecl::setFunctionTemplateSpecialization(FunctionTemplateDecl *Template,
|
|||
TemplArgsInfo->addArgument(TemplateArgsAsWritten[i]);
|
||||
|
||||
setFunctionTemplateSpecialization(Template, TemplArgs, /*InsertPos=*/0, TSK,
|
||||
TemplArgsInfo);
|
||||
TemplArgsInfo, PointOfInstantiation);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -248,12 +248,14 @@ void PCHDeclReader::VisitFunctionDecl(FunctionDecl *FD) {
|
|||
LAngleLoc = Reader.ReadSourceLocation(Record, Idx);
|
||||
RAngleLoc = Reader.ReadSourceLocation(Record, Idx);
|
||||
}
|
||||
|
||||
SourceLocation POI = Reader.ReadSourceLocation(Record, Idx);
|
||||
|
||||
FD->setFunctionTemplateSpecialization(Template, TemplArgs.size(),
|
||||
TemplArgs.data(), TSK,
|
||||
TemplArgLocs.size(),
|
||||
TemplArgLocs.data(),
|
||||
LAngleLoc, RAngleLoc);
|
||||
LAngleLoc, RAngleLoc, POI);
|
||||
break;
|
||||
}
|
||||
case FunctionDecl::TK_DependentFunctionTemplateSpecialization: {
|
||||
|
@ -268,6 +270,8 @@ void PCHDeclReader::VisitFunctionDecl(FunctionDecl *FD) {
|
|||
unsigned NumArgs = Record[Idx++];
|
||||
while (NumArgs--)
|
||||
TemplArgs.addArgument(Reader.ReadTemplateArgumentLoc(Record, Idx));
|
||||
TemplArgs.setLAngleLoc(Reader.ReadSourceLocation(Record, Idx));
|
||||
TemplArgs.setRAngleLoc(Reader.ReadSourceLocation(Record, Idx));
|
||||
|
||||
FD->setDependentTemplateSpecialization(*Reader.getContext(),
|
||||
TemplDecls, TemplArgs);
|
||||
|
|
|
@ -249,6 +249,8 @@ void PCHDeclWriter::VisitFunctionDecl(FunctionDecl *D) {
|
|||
Writer.AddSourceLocation(FTSInfo->TemplateArgumentsAsWritten->getRAngleLoc(),
|
||||
Record);
|
||||
}
|
||||
|
||||
Writer.AddSourceLocation(FTSInfo->getPointOfInstantiation(), Record);
|
||||
break;
|
||||
}
|
||||
case FunctionDecl::TK_DependentFunctionTemplateSpecialization: {
|
||||
|
@ -264,6 +266,8 @@ void PCHDeclWriter::VisitFunctionDecl(FunctionDecl *D) {
|
|||
Record.push_back(DFTSInfo->getNumTemplateArgs());
|
||||
for (int i=0, e = DFTSInfo->getNumTemplateArgs(); i != e; ++i)
|
||||
Writer.AddTemplateArgumentLoc(DFTSInfo->getTemplateArg(i), Record);
|
||||
Writer.AddSourceLocation(DFTSInfo->getLAngleLoc(), Record);
|
||||
Writer.AddSourceLocation(DFTSInfo->getRAngleLoc(), Record);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue