summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2017-03-27 22:29:58 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2017-03-27 22:29:58 +0200
commit68cb5f675121ff880ecfc85b8fbf8f80d8fb24af (patch)
tree50b08332b42242a416e1558fceb960688c1cfcd7
parent0e0a185011580d74e19c0054f1d0265c19d9eebd (diff)
avoid double replaceHEADmaster
-rw-r--r--clang/qa/data/rename-move-from-global.cxx6
-rw-r--r--clang/qa/data/rename-move-from-global.cxx.expected6
-rw-r--r--clang/rename.cxx11
3 files changed, 22 insertions, 1 deletions
diff --git a/clang/qa/data/rename-move-from-global.cxx b/clang/qa/data/rename-move-from-global.cxx
index 1cc2f5d..2fa061a 100644
--- a/clang/qa/data/rename-move-from-global.cxx
+++ b/clang/qa/data/rename-move-from-global.cxx
@@ -31,8 +31,14 @@ inline C& C::operator +=(int /*x*/)
return *this;
}
+C GetC()
+{
+ return C();
+}
+
int main() {
C c;
c.foo();
+ const C c2( GetC() );
return 0;
}
diff --git a/clang/qa/data/rename-move-from-global.cxx.expected b/clang/qa/data/rename-move-from-global.cxx.expected
index e2f7bcb..59fad96 100644
--- a/clang/qa/data/rename-move-from-global.cxx.expected
+++ b/clang/qa/data/rename-move-from-global.cxx.expected
@@ -37,8 +37,14 @@ inline ns::C& ns::C::operator +=(int /*x*/)
return *this;
}
+C GetC()
+{
+ return ns::C();
+}
+
int main() {
ns::C c;
c.foo();
+ const ns::C c2( GetC() );
return 0;
}
diff --git a/clang/rename.cxx b/clang/rename.cxx
index dfe3bda..1078c6a 100644
--- a/clang/rename.cxx
+++ b/clang/rename.cxx
@@ -452,7 +452,16 @@ public:
if (const clang::RecordDecl* pDecl = pExpr->getType()->getAsCXXRecordDecl())
{
std::string aName = pDecl->getNameAsString();
- RewriteText(pExpr->getExprLoc(), aName.length(), aName);
+ /*
+ * Avoid turning
+ * const C c2( GetC() );
+ * into
+ * const ns::C c2( ns::CetC() );
+ */
+ const clang::ASTContext& rContext = pDecl->getASTContext();
+ llvm::StringRef rTokenName = clang::Lexer::getSourceText(clang::CharSourceRange::getTokenRange(pExpr->getExprLoc()), rContext.getSourceManager(), rContext.getLangOpts());
+ if (rTokenName.startswith(aName))
+ RewriteText(pExpr->getExprLoc(), aName.length(), aName);
}
return true;