diff options
Diffstat (limited to 'clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp')
-rw-r--r-- | clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp index b93aee927d3..008e947410e 100644 --- a/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp +++ b/clang-tools-extra/cpp11-migrate/AddOverride/AddOverrideActions.cpp @@ -21,6 +21,7 @@ #include "clang/AST/Attr.h" #include "clang/AST/RecursiveASTVisitor.h" #include "clang/Lex/Lexer.h" +#include "clang/Lex/Preprocessor.h" using namespace clang::ast_matchers; using namespace clang::tooling; @@ -85,6 +86,15 @@ void AddOverrideFixer::run(const MatchFinder::MatchResult &Result) { StartLoc = SM.getSpellingLoc(M->getLocEnd()); StartLoc = Lexer::getLocForEndOfToken(StartLoc, 0, SM, LangOptions()); } - Replace.insert(tooling::Replacement(SM, StartLoc, 0, " override")); + + std::string ReplacementText = " override"; + if (DetectMacros) { + assert(PP != 0 && "No access to Preprocessor object for macro detection"); + clang::TokenValue Tokens[] = { PP->getIdentifierInfo("override") }; + llvm::StringRef MacroName = PP->getLastMacroWithSpelling(StartLoc, Tokens); + if (!MacroName.empty()) + ReplacementText = (" " + MacroName).str(); + } + Replace.insert(tooling::Replacement(SM, StartLoc, 0, ReplacementText)); ++AcceptedChanges; } |