[PATCH] D23193: [clang-rename] fix bug with initializer lists
Kirill Bobyrev via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 9 00:22:43 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL278099: [clang-rename] fix bug with initializer lists (authored by omtcyfz).
Changed prior to commit:
https://reviews.llvm.org/D23193?vs=67289&id=67290#toc
Repository:
rL LLVM
https://reviews.llvm.org/D23193
Files:
clang-tools-extra/trunk/clang-rename/USRFinder.cpp
clang-tools-extra/trunk/clang-rename/USRLocFinder.cpp
clang-tools-extra/trunk/test/clang-rename/Field.cpp
Index: clang-tools-extra/trunk/clang-rename/USRFinder.cpp
===================================================================
--- clang-tools-extra/trunk/clang-rename/USRFinder.cpp
+++ clang-tools-extra/trunk/clang-rename/USRFinder.cpp
@@ -90,6 +90,25 @@
TypeEndLoc);
}
+ bool VisitCXXConstructorDecl(clang::CXXConstructorDecl *ConstructorDecl) {
+ for (auto &Initializer : ConstructorDecl->inits()) {
+ if (Initializer->getSourceOrder() == -1) {
+ // Ignore implicit initializers.
+ continue;
+ }
+ if (const clang::FieldDecl *FieldDecl = Initializer->getMember()) {
+ const SourceLocation InitBeginLoc = Initializer->getSourceLocation(),
+ InitEndLoc = Lexer::getLocForEndOfToken(
+ InitBeginLoc, 0, Context.getSourceManager(),
+ Context.getLangOpts());
+ if (!setResult(FieldDecl, InitBeginLoc, InitEndLoc)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
// Other:
const NamedDecl *getNamedDecl() { return Result; }
Index: clang-tools-extra/trunk/clang-rename/USRLocFinder.cpp
===================================================================
--- clang-tools-extra/trunk/clang-rename/USRLocFinder.cpp
+++ clang-tools-extra/trunk/clang-rename/USRLocFinder.cpp
@@ -48,18 +48,9 @@
// Ignore implicit initializers.
continue;
}
- if (const clang::FieldDecl *FieldDecl = Initializer->getAnyMember()) {
+ if (const clang::FieldDecl *FieldDecl = Initializer->getMember()) {
if (USRSet.find(getUSRForDecl(FieldDecl)) != USRSet.end()) {
- // The initializer refers to a field that is to be renamed.
- SourceLocation Location = Initializer->getSourceLocation();
- StringRef TokenName = Lexer::getSourceText(
- CharSourceRange::getTokenRange(Location),
- Context.getSourceManager(), Context.getLangOpts());
- if (TokenName == PrevName) {
- // The token of the source location we find actually has the old
- // name.
- LocationsFound.push_back(Initializer->getSourceLocation());
- }
+ LocationsFound.push_back(Initializer->getSourceLocation());
}
}
}
Index: clang-tools-extra/trunk/test/clang-rename/Field.cpp
===================================================================
--- clang-tools-extra/trunk/test/clang-rename/Field.cpp
+++ clang-tools-extra/trunk/test/clang-rename/Field.cpp
@@ -1,14 +1,15 @@
-// RUN: cat %s > %t.cpp
-// RUN: clang-rename -offset=148 -new-name=Bar %t.cpp -i --
-// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s
-
class Baz {
- int Foo; // CHECK: Bar;
+ int Foo; /* Test 1 */ // CHECK: int Bar;
public:
Baz();
};
-Baz::Baz() : Foo(0) {} // CHECK: Baz::Baz() : Bar(0) {}
+Baz::Baz() : Foo(0) /* Test 2 */ {} // CHECK: Baz::Baz() : Bar(0)
+
+// Test 1.
+// RUN: clang-rename -offset=18 -new-name=Bar %s -- | sed 's,//.*,,' | FileCheck %s
+// Test 2.
+// RUN: clang-rename -offset=89 -new-name=Bar %s -- | sed 's,//.*,,' | FileCheck %s
-// Use grep -FUbo 'Foo' <file> to get the correct offset of foo when changing
-// this file.
+// To find offsets after modifying the file, use:
+// grep -Ubo 'Foo.*' <file>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23193.67290.patch
Type: text/x-patch
Size: 3340 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160809/02a247c0/attachment.bin>
More information about the cfe-commits
mailing list