eduucaldas updated this revision to Diff 285129. eduucaldas added a comment.
Update comment Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D85842/new/ https://reviews.llvm.org/D85842 Files: clang/lib/AST/NestedNameSpecifier.cpp Index: clang/lib/AST/NestedNameSpecifier.cpp =================================================================== --- clang/lib/AST/NestedNameSpecifier.cpp +++ clang/lib/AST/NestedNameSpecifier.cpp @@ -439,6 +439,20 @@ // Note: the 'template' keyword is part of the TypeLoc. void *TypeData = LoadPointer(Data, Offset); TypeLoc TL(Qualifier->getAsType(), TypeData); + // For `T::template ST<int>::x` + // `NestedNameSpecifierLoc::getLocalSourceRange()` should return `template + // ST<int>::`. + // For any TypeLoc we can just use `TypeLoc::getBeginLoc()` to + // get the beginning of this LocalSourceRange but for dependent template + // specializations `getBeginLoc` returns the location of `T` yielding + // `T::template ST<int>::`. + if (auto DependentTL = TL.getAs<DependentTemplateSpecializationTypeLoc>()) { + if (getTemplateKeywordLoc().isValid()) + return SourceRange(getTemplateKeywordLoc(), + LoadSourceLocation(Data, Offset + sizeof(void *))); + return SourceRange(getTemplateNameLoc(), + LoadSourceLocation(Data, Offset + sizeof(void *))); + } return SourceRange(TL.getBeginLoc(), LoadSourceLocation(Data, Offset + sizeof(void*))); }
Index: clang/lib/AST/NestedNameSpecifier.cpp =================================================================== --- clang/lib/AST/NestedNameSpecifier.cpp +++ clang/lib/AST/NestedNameSpecifier.cpp @@ -439,6 +439,20 @@ // Note: the 'template' keyword is part of the TypeLoc. void *TypeData = LoadPointer(Data, Offset); TypeLoc TL(Qualifier->getAsType(), TypeData); + // For `T::template ST<int>::x` + // `NestedNameSpecifierLoc::getLocalSourceRange()` should return `template + // ST<int>::`. + // For any TypeLoc we can just use `TypeLoc::getBeginLoc()` to + // get the beginning of this LocalSourceRange but for dependent template + // specializations `getBeginLoc` returns the location of `T` yielding + // `T::template ST<int>::`. + if (auto DependentTL = TL.getAs<DependentTemplateSpecializationTypeLoc>()) { + if (getTemplateKeywordLoc().isValid()) + return SourceRange(getTemplateKeywordLoc(), + LoadSourceLocation(Data, Offset + sizeof(void *))); + return SourceRange(getTemplateNameLoc(), + LoadSourceLocation(Data, Offset + sizeof(void *))); + } return SourceRange(TL.getBeginLoc(), LoadSourceLocation(Data, Offset + sizeof(void*))); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits