forked from OSchip/llvm-project
[rename] Don't overwrite the template argument when renaming a template function.
Reviewers: ioeric Reviewed By: ioeric Subscribers: cierpuchaw, cfe-commits, klimek Differential Revision: https://reviews.llvm.org/D39120 llvm-svn: 316314
This commit is contained in:
parent
487ab86942
commit
54e84b3966
|
@ -221,7 +221,12 @@ public:
|
|||
}
|
||||
|
||||
auto StartLoc = Expr->getLocStart();
|
||||
auto EndLoc = Expr->getLocEnd();
|
||||
// For template function call expressions like `foo<int>()`, we want to
|
||||
// restrict the end of location to just before the `<` character.
|
||||
SourceLocation EndLoc = Expr->hasExplicitTemplateArgs()
|
||||
? Expr->getLAngleLoc().getLocWithOffset(-1)
|
||||
: Expr->getLocEnd();
|
||||
|
||||
// In case of renaming an enum declaration, we have to explicitly handle
|
||||
// unscoped enum constants referenced in expressions (e.g.
|
||||
// "auto r = ns1::ns2::Green" where Green is an enum constant of an unscoped
|
||||
|
|
|
@ -220,6 +220,25 @@ TEST_F(RenameFunctionTest, RenameFunctionDecls) {
|
|||
CompareSnippets(Expected, After);
|
||||
}
|
||||
|
||||
TEST_F(RenameFunctionTest, RenameTemplateFunctions) {
|
||||
std::string Before = R"(
|
||||
namespace na {
|
||||
template<typename T> T X();
|
||||
}
|
||||
namespace na { void f() { X<int>(); } }
|
||||
namespace nb { void g() { na::X <int>(); } }
|
||||
)";
|
||||
std::string Expected = R"(
|
||||
namespace na {
|
||||
template<typename T> T Y();
|
||||
}
|
||||
namespace na { void f() { nb::Y<int>(); } }
|
||||
namespace nb { void g() { Y<int>(); } }
|
||||
)";
|
||||
std::string After = runClangRenameOnCode(Before, "na::X", "nb::Y");
|
||||
CompareSnippets(Expected, After);
|
||||
}
|
||||
|
||||
TEST_F(RenameFunctionTest, RenameOutOfLineFunctionDecls) {
|
||||
std::string Before = R"(
|
||||
namespace na {
|
||||
|
|
Loading…
Reference in New Issue