This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG45a15dc682c0: [clang-rename] Fix rename on function template specializations. (authored by hokein).
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 @@ -80,6 +80,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)); } @@ -119,6 +125,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 @@ -80,6 +80,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)); } @@ -119,6 +125,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