diff options
-rw-r--r-- | clang/qa/data/rename-move-from-global.cxx | 6 | ||||
-rw-r--r-- | clang/qa/data/rename-move-from-global.cxx.expected | 6 | ||||
-rw-r--r-- | clang/rename.cxx | 11 |
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; |