зеркало из https://github.com/microsoft/clang-1.git
Fixed source range for template implicit instantiations.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141018 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
a08529cc3f
Коммит
09d8212989
|
@ -656,15 +656,27 @@ ClassTemplateSpecializationDecl::getSpecializedTemplate() const {
|
|||
|
||||
SourceRange
|
||||
ClassTemplateSpecializationDecl::getSourceRange() const {
|
||||
if (!ExplicitInfo)
|
||||
return SourceRange();
|
||||
SourceLocation Begin = getExternLoc();
|
||||
if (Begin.isInvalid())
|
||||
Begin = getTemplateKeywordLoc();
|
||||
SourceLocation End = getRBraceLoc();
|
||||
if (End.isInvalid())
|
||||
End = getTypeAsWritten()->getTypeLoc().getEndLoc();
|
||||
return SourceRange(Begin, End);
|
||||
if (ExplicitInfo) {
|
||||
SourceLocation Begin = getExternLoc();
|
||||
if (Begin.isInvalid())
|
||||
Begin = getTemplateKeywordLoc();
|
||||
SourceLocation End = getRBraceLoc();
|
||||
if (End.isInvalid())
|
||||
End = getTypeAsWritten()->getTypeLoc().getEndLoc();
|
||||
return SourceRange(Begin, End);
|
||||
}
|
||||
else {
|
||||
// No explicit info available.
|
||||
llvm::PointerUnion<ClassTemplateDecl *,
|
||||
ClassTemplatePartialSpecializationDecl *>
|
||||
inst_from = getInstantiatedFrom();
|
||||
if (inst_from.isNull())
|
||||
return getSpecializedTemplate()->getSourceRange();
|
||||
if (ClassTemplateDecl *ctd = inst_from.dyn_cast<ClassTemplateDecl*>())
|
||||
return ctd->getSourceRange();
|
||||
return inst_from.get<ClassTemplatePartialSpecializationDecl*>()
|
||||
->getSourceRange();
|
||||
}
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -2007,7 +2007,7 @@ QualType Sema::CheckTemplateIdType(TemplateName Name,
|
|||
Decl = ClassTemplateSpecializationDecl::Create(Context,
|
||||
ClassTemplate->getTemplatedDecl()->getTagKind(),
|
||||
ClassTemplate->getDeclContext(),
|
||||
ClassTemplate->getLocation(),
|
||||
ClassTemplate->getTemplatedDecl()->getLocStart(),
|
||||
ClassTemplate->getLocation(),
|
||||
ClassTemplate,
|
||||
Converted.data(),
|
||||
|
|
|
@ -1818,6 +1818,9 @@ Sema::InstantiateClass(SourceLocation PointOfInstantiation,
|
|||
if (!FieldsWithMemberInitializers.empty())
|
||||
ActOnFinishDelayedMemberInitializers(Instantiation);
|
||||
|
||||
if (TSK == TSK_ImplicitInstantiation)
|
||||
Instantiation->setRBraceLoc(Pattern->getRBraceLoc());
|
||||
|
||||
if (Instantiation->isInvalidDecl())
|
||||
Invalid = true;
|
||||
else {
|
||||
|
|
Загрузка…
Ссылка в новой задаче