]> granicus.if.org Git - clang/commitdiff
[clangd] Fix a crash when renaming operator.
authorHaojian Wu <hokein@google.com>
Mon, 16 Sep 2019 10:16:56 +0000 (10:16 +0000)
committerHaojian Wu <hokein@google.com>
Mon, 16 Sep 2019 10:16:56 +0000 (10:16 +0000)
Summary:
The renamelib uses a tricky way to calculate the end location by relying
on decl name, this is incorrect for the overloaded operator (the name is
"operator++" instead of "++"), which will cause out-of-file offset.

We also disable renaming operator symbol, this case is tricky, and
renamelib doesnt handle it properly.

Reviewers: ilya-biryukov

Subscribers: MaskRay, jkorous, arphaman, kadircet, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D67607

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@371971 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h

index 41a448f035a400c9dc7f1fc75d66607139ce2b55..cd230ea18b5fe87b29b26be698d588cb5fbe214c 100644 (file)
@@ -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));
   }
 };