hokein updated this revision to Diff 298061. hokein added a comment. update
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D89221/new/ https://reviews.llvm.org/D89221 Files: clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp clang/test/clang-rename/FunctionTemplate.cpp Index: clang/test/clang-rename/FunctionTemplate.cpp =================================================================== --- /dev/null +++ clang/test/clang-rename/FunctionTemplate.cpp @@ -0,0 +1,19 @@ +template <typename T> +void Foo(T t); // CHECK: void Bar(T t); + +template <> +void Foo(int a); // CHECK: void Bar(int a); + +void test() { + Foo<double>(1); // CHECK: Bar<double>(1); +} + +// Test 1. +// RUN: clang-rename -offset=28 -new-name=Bar %s -- | sed 's,//.*,,' | FileCheck %s +// Test 2. +// RUN: clang-rename -offset=81 -new-name=Bar %s -- | sed 's,//.*,,' | FileCheck %s +// Test 3. +// RUN: clang-rename -offset=137 -new-name=Bar %s -- | sed 's,//.*,,' | FileCheck %s + +// To find offsets after modifying the file, use: +// grep -Ubo 'Foo.*' <file> Index: clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp =================================================================== --- clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp +++ clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp @@ -81,6 +81,12 @@ } else if (const auto *TemplateDecl = dyn_cast<ClassTemplateDecl>(FoundDecl)) { handleClassTemplateDecl(TemplateDecl); + } else if (const auto *FD = dyn_cast<FunctionDecl>(FoundDecl)) { + USRSet.insert(getUSRForDecl(FD)); + if (const auto *FTD = FD->getPrimaryTemplate()) + handleFunctionTemplateDecl(FTD); + } else if (const auto *FD = dyn_cast<FunctionTemplateDecl>(FoundDecl)) { + handleFunctionTemplateDecl(FD); } else { USRSet.insert(getUSRForDecl(FoundDecl)); } @@ -120,6 +126,13 @@ addUSRsOfCtorDtors(TemplateDecl->getTemplatedDecl()); } + void handleFunctionTemplateDecl(const FunctionTemplateDecl *FTD) { + USRSet.insert(getUSRForDecl(FTD)); + USRSet.insert(getUSRForDecl(FTD->getTemplatedDecl())); + for (const auto *S : FTD->specializations()) + USRSet.insert(getUSRForDecl(S)); + } + void addUSRsOfCtorDtors(const CXXRecordDecl *RD) { const auto* RecordDecl = RD->getDefinition();
Index: clang/test/clang-rename/FunctionTemplate.cpp =================================================================== --- /dev/null +++ clang/test/clang-rename/FunctionTemplate.cpp @@ -0,0 +1,19 @@ +template <typename T> +void Foo(T t); // CHECK: void Bar(T t); + +template <> +void Foo(int a); // CHECK: void Bar(int a); + +void test() { + Foo<double>(1); // CHECK: Bar<double>(1); +} + +// Test 1. +// RUN: clang-rename -offset=28 -new-name=Bar %s -- | sed 's,//.*,,' | FileCheck %s +// Test 2. +// RUN: clang-rename -offset=81 -new-name=Bar %s -- | sed 's,//.*,,' | FileCheck %s +// Test 3. +// RUN: clang-rename -offset=137 -new-name=Bar %s -- | sed 's,//.*,,' | FileCheck %s + +// To find offsets after modifying the file, use: +// grep -Ubo 'Foo.*' <file> Index: clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp =================================================================== --- clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp +++ clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp @@ -81,6 +81,12 @@ } else if (const auto *TemplateDecl = dyn_cast<ClassTemplateDecl>(FoundDecl)) { handleClassTemplateDecl(TemplateDecl); + } else if (const auto *FD = dyn_cast<FunctionDecl>(FoundDecl)) { + USRSet.insert(getUSRForDecl(FD)); + if (const auto *FTD = FD->getPrimaryTemplate()) + handleFunctionTemplateDecl(FTD); + } else if (const auto *FD = dyn_cast<FunctionTemplateDecl>(FoundDecl)) { + handleFunctionTemplateDecl(FD); } else { USRSet.insert(getUSRForDecl(FoundDecl)); } @@ -120,6 +126,13 @@ addUSRsOfCtorDtors(TemplateDecl->getTemplatedDecl()); } + void handleFunctionTemplateDecl(const FunctionTemplateDecl *FTD) { + USRSet.insert(getUSRForDecl(FTD)); + USRSet.insert(getUSRForDecl(FTD->getTemplatedDecl())); + for (const auto *S : FTD->specializations()) + USRSet.insert(getUSRForDecl(S)); + } + void addUSRsOfCtorDtors(const CXXRecordDecl *RD) { const auto* RecordDecl = RD->getDefinition();
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits