diff options
| -rw-r--r-- | clang-tools-extra/clangd/refactor/Rename.cpp | 4 | ||||
| -rw-r--r-- | clang-tools-extra/clangd/unittests/RenameTests.cpp | 7 | ||||
| -rw-r--r-- | clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h | 3 |
3 files changed, 12 insertions, 2 deletions
diff --git a/clang-tools-extra/clangd/refactor/Rename.cpp b/clang-tools-extra/clangd/refactor/Rename.cpp index 770064fc613..3c6119aeba8 100644 --- a/clang-tools-extra/clangd/refactor/Rename.cpp +++ b/clang-tools-extra/clangd/refactor/Rename.cpp @@ -74,6 +74,10 @@ llvm::Optional<ReasonToReject> renamableWithinFile(const Decl &RenameDecl, const SymbolIndex *Index) { if (llvm::isa<NamespaceDecl>(&RenameDecl)) return ReasonToReject::UnsupportedSymbol; + if (const auto *FD = llvm::dyn_cast<FunctionDecl>(&RenameDecl)) { + if (FD->isOverloadedOperator()) + return ReasonToReject::UnsupportedSymbol; + } auto &ASTCtx = RenameDecl.getASTContext(); const auto &SM = ASTCtx.getSourceManager(); bool MainFileIsHeader = ASTCtx.getLangOpts().IsHeaderFile; diff --git a/clang-tools-extra/clangd/unittests/RenameTests.cpp b/clang-tools-extra/clangd/unittests/RenameTests.cpp index 99e07e240e2..91d9c0fe73a 100644 --- a/clang-tools-extra/clangd/unittests/RenameTests.cpp +++ b/clang-tools-extra/clangd/unittests/RenameTests.cpp @@ -136,6 +136,13 @@ TEST(RenameTest, Renameable) { )cpp", "not a supported kind", HeaderFile}, + { + + R"cpp( + struct X { X operator++(int) {} }; + void f(X x) {x+^+;})cpp", + "not a supported kind", HeaderFile}, + {R"cpp(// foo is declared outside the file. void fo^o() {} )cpp", "used outside main file", !HeaderFile/*cc file*/}, diff --git a/clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h b/clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h index 41a448f035a..cd230ea18b5 100644 --- a/clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h +++ b/clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h @@ -122,8 +122,7 @@ private: ND, SourceRange(BeginLoc, EndLoc)); } bool visit(const NamedDecl *ND, SourceLocation Loc) { - return visit(ND, Loc, - Loc.getLocWithOffset(ND->getNameAsString().length() - 1)); + return visit(ND, Loc, Lexer::getLocForEndOfToken(Loc, 0, SM, LangOpts)); } }; |

