diff --git a/lib/Tooling/Refactoring/Rename/RenamingAction.cpp b/lib/Tooling/Refactoring/Rename/RenamingAction.cpp index 9c000a72046ec26b60299abca5c9ad5aa6f90a1a..0aed67f5324cf2bdb80b2cf17c4e5bbbd9267a11 100644 --- a/lib/Tooling/Refactoring/Rename/RenamingAction.cpp +++ b/lib/Tooling/Refactoring/Rename/RenamingAction.cpp @@ -84,8 +84,13 @@ public: FileToReplaces(FileToReplaces), PrintLocations(PrintLocations) {} void HandleTranslationUnit(ASTContext &Context) override { - for (unsigned I = 0; I < NewNames.size(); ++I) + for (unsigned I = 0; I < NewNames.size(); ++I) { + // If the previous name was not found, ignore this rename request. + if (PrevNames[I].empty()) + continue; + HandleOneRename(Context, NewNames[I], PrevNames[I], USRList[I]); + } } void HandleOneRename(ASTContext &Context, const std::string &NewName, diff --git a/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp b/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp index bac3963e1bd9b5a3360cddf0c500fd9d4a3ed8ad..43287acb95e11889c0bdf4d8a9a7909ddf9f58e4 100644 --- a/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp +++ b/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp @@ -198,8 +198,11 @@ private: return false; } - if (Force) + if (Force) { + SpellingNames.push_back(std::string()); + USRList.push_back(std::vector<std::string>()); return true; + } unsigned CouldNotFindSymbolNamed = Engine.getCustomDiagID( DiagnosticsEngine::Error, "clang-rename could not find symbol %0"); diff --git a/test/clang-rename/ForceMulti.cpp b/test/clang-rename/ForceMulti.cpp new file mode 100644 index 0000000000000000000000000000000000000000..41983ce260c826f42637535dcb468c5ed6cec9ef --- /dev/null +++ b/test/clang-rename/ForceMulti.cpp @@ -0,0 +1,8 @@ +class B /* Test 1 */ { // CHECK: class B2 /* Test 1 */ { +}; + +class D : public B /* Test 1 */ { // CHECK: class D : public B2 /* Test 1 */ { +}; + +// Test 1. +// RUN: clang-rename -force -qualified-name B -new-name B2 -qualified-name E -new-name E2 %s -- | sed 's,//.*,,' | FileCheck %s diff --git a/tools/clang-rename/ClangRename.cpp b/tools/clang-rename/ClangRename.cpp index cc18a05bcdbe61c1635d6ce5ad5597bba209e2a4..fca12ca60c4b395cb53c43d8c1a079f52f7cc954 100644 --- a/tools/clang-rename/ClangRename.cpp +++ b/tools/clang-rename/ClangRename.cpp @@ -175,12 +175,6 @@ int main(int argc, const char **argv) { return 1; } - if (Force && PrevNames.size() < NewNames.size()) { - // No matching PrevName for all NewNames. Without Force this is an error - // above already. - return 0; - } - // Perform the renaming. tooling::RenamingAction RenameAction(NewNames, PrevNames, USRList, Tool.getReplacements(), PrintLocations);