diff options
-rw-r--r-- | compilerplugins/clang/compat.hxx | 12 | ||||
-rw-r--r-- | compilerplugins/clang/constparams.cxx | 2 | ||||
-rw-r--r-- | compilerplugins/clang/cppunitassertequals.cxx | 3 | ||||
-rw-r--r-- | compilerplugins/clang/cstylecast.cxx | 24 | ||||
-rw-r--r-- | compilerplugins/clang/literaltoboolconversion.cxx | 4 | ||||
-rw-r--r-- | compilerplugins/clang/nullptr.cxx | 11 | ||||
-rw-r--r-- | compilerplugins/clang/salcall.cxx | 2 | ||||
-rw-r--r-- | compilerplugins/clang/sallogareas.cxx | 3 |
8 files changed, 39 insertions, 22 deletions
diff --git a/compilerplugins/clang/compat.hxx b/compilerplugins/clang/compat.hxx index 5a540b8ef695..e77846ab1166 100644 --- a/compilerplugins/clang/compat.hxx +++ b/compilerplugins/clang/compat.hxx @@ -11,6 +11,7 @@ #define INCLUDED_COMPILERPLUGINS_CLANG_COMPAT_HXX #include <cstddef> +#include <utility> #include "clang/AST/Decl.h" #include "clang/AST/Expr.h" @@ -49,6 +50,17 @@ inline clang::FunctionDecl::param_const_range parameters( } #endif +inline std::pair<clang::SourceLocation, clang::SourceLocation> getImmediateExpansionRange( + clang::SourceManager const & SM, clang::SourceLocation Loc) +{ +#if CLANG_VERSION >= 70000 + auto const csr = SM.getImmediateExpansionRange(Loc); + if (csr.isCharRange()) { /*TODO*/ } + return {csr.getBegin(), csr.getEnd()}; +#else + return SM.getImmediateExpansionRange(Loc); +#endif +} inline bool isPointWithin( clang::SourceManager const & SM, clang::SourceLocation Location, clang::SourceLocation Start, diff --git a/compilerplugins/clang/constparams.cxx b/compilerplugins/clang/constparams.cxx index 89be6f684033..471da7367dc0 100644 --- a/compilerplugins/clang/constparams.cxx +++ b/compilerplugins/clang/constparams.cxx @@ -179,7 +179,7 @@ bool ConstParams::CheckTraverseFunctionDecl(FunctionDecl * functionDecl) canonicalDecl->getLocStart(), compiler.getSourceManager(), compiler.getLangOpts()) }; if (name.startswith("DECL_LINK") || name.startswith("DECL_STATIC_LINK")) return false; - auto loc2 = compiler.getSourceManager().getImmediateExpansionRange(canonicalDecl->getLocStart()).first; + auto loc2 = compat::getImmediateExpansionRange(compiler.getSourceManager(), canonicalDecl->getLocStart()).first; if (compiler.getSourceManager().isMacroBodyExpansion(loc2)) { StringRef name2 { Lexer::getImmediateMacroName( diff --git a/compilerplugins/clang/cppunitassertequals.cxx b/compilerplugins/clang/cppunitassertequals.cxx index 5b0f8f5278c4..cff8908c7a46 100644 --- a/compilerplugins/clang/cppunitassertequals.cxx +++ b/compilerplugins/clang/cppunitassertequals.cxx @@ -9,6 +9,7 @@ #include "plugin.hxx" #include "check.hxx" +#include "compat.hxx" /** Check for calls to CPPUNIT_ASSERT when it should be using CPPUNIT_ASSERT_EQUALS @@ -95,7 +96,7 @@ bool CppunitAssertEquals::VisitCallExpr(const CallExpr* callExpr) << callExpr->getSourceRange(); return true; } - auto range = compiler.getSourceManager().getImmediateExpansionRange(loc); + auto range = compat::getImmediateExpansionRange(compiler.getSourceManager(), loc); checkExpr( SourceRange(range.first, range.second), name, e2->IgnoreParenImpCasts(), false); diff --git a/compilerplugins/clang/cstylecast.cxx b/compilerplugins/clang/cstylecast.cxx index 228e3878e5eb..4bf3aaf6460f 100644 --- a/compilerplugins/clang/cstylecast.cxx +++ b/compilerplugins/clang/cstylecast.cxx @@ -12,6 +12,8 @@ #include <limits> #include <set> #include <string> + +#include "compat.hxx" #include "plugin.hxx" // @@ -351,7 +353,7 @@ bool CStyleCast::isLastTokenOfImmediateMacroBodyExpansion( assert(MI != nullptr); if (spell == MI->getDefinitionEndLoc()) { if (macroEnd != nullptr) { - *macroEnd = compiler.getSourceManager().getImmediateExpansionRange(loc).second; + *macroEnd = compat::getImmediateExpansionRange(compiler.getSourceManager(), loc).second; } return true; } @@ -391,8 +393,8 @@ bool CStyleCast::rewriteArithmeticCast(CStyleCastExpr const * expr, char const * auto secondBegin = expr->getRParenLoc(); while (compiler.getSourceManager().isMacroArgExpansion(firstBegin) && compiler.getSourceManager().isMacroArgExpansion(secondBegin) - && (compiler.getSourceManager().getImmediateExpansionRange(firstBegin) - == compiler.getSourceManager().getImmediateExpansionRange(secondBegin))) + && (compat::getImmediateExpansionRange(compiler.getSourceManager(), firstBegin) + == compat::getImmediateExpansionRange(compiler.getSourceManager(), secondBegin))) { firstBegin = compiler.getSourceManager().getImmediateSpellingLoc(firstBegin); secondBegin = compiler.getSourceManager().getImmediateSpellingLoc(secondBegin); @@ -424,14 +426,14 @@ bool CStyleCast::rewriteArithmeticCast(CStyleCastExpr const * expr, char const * // FOO((y)) while (compiler.getSourceManager().isMacroArgExpansion(third) && compiler.getSourceManager().isMacroArgExpansion(fourth) - && (compiler.getSourceManager().getImmediateExpansionRange(third) - == compiler.getSourceManager().getImmediateExpansionRange(fourth)) + && (compat::getImmediateExpansionRange(compiler.getSourceManager(), third) + == compat::getImmediateExpansionRange(compiler.getSourceManager(), fourth)) && compiler.getSourceManager().isAtStartOfImmediateMacroExpansion(third)) //TODO: check fourth is at end of immediate macro expansion, but // SourceManager::isAtEndOfImmediateMacroExpansion requires a location pointing at the // character end of the last token { - auto const range = compiler.getSourceManager().getImmediateExpansionRange(third); + auto const range = compat::getImmediateExpansionRange(compiler.getSourceManager(), third); third = range.first; fourth = range.second; macro = true; @@ -439,8 +441,8 @@ bool CStyleCast::rewriteArithmeticCast(CStyleCastExpr const * expr, char const * } while (compiler.getSourceManager().isMacroArgExpansion(third) && compiler.getSourceManager().isMacroArgExpansion(fourth) - && (compiler.getSourceManager().getImmediateExpansionRange(third) - == compiler.getSourceManager().getImmediateExpansionRange(fourth))) + && (compat::getImmediateExpansionRange(compiler.getSourceManager(), third) + == compat::getImmediateExpansionRange(compiler.getSourceManager(), fourth))) { third = compiler.getSourceManager().getImmediateSpellingLoc(third); fourth = compiler.getSourceManager().getImmediateSpellingLoc(fourth); @@ -474,7 +476,8 @@ bool CStyleCast::rewriteArithmeticCast(CStyleCastExpr const * expr, char const * } break; } - auto const range = compiler.getSourceManager().getImmediateExpansionRange(third); + auto const range = compat::getImmediateExpansionRange( + compiler.getSourceManager(), third); third = range.first; fourth = range.second; assert(third.isValid()); @@ -511,7 +514,8 @@ bool CStyleCast::rewriteArithmeticCast(CStyleCastExpr const * expr, char const * { break; } - auto const range = compiler.getSourceManager().getImmediateExpansionRange(third); + auto const range = compat::getImmediateExpansionRange( + compiler.getSourceManager(), third); third = range.first; fourth = range.second; } diff --git a/compilerplugins/clang/literaltoboolconversion.cxx b/compilerplugins/clang/literaltoboolconversion.cxx index 17fa9da77d73..19c18a4ca765 100644 --- a/compilerplugins/clang/literaltoboolconversion.cxx +++ b/compilerplugins/clang/literaltoboolconversion.cxx @@ -12,6 +12,7 @@ #include "clang/Lex/Lexer.h" +#include "compat.hxx" #include "plugin.hxx" namespace { @@ -125,8 +126,7 @@ void LiteralToBoolConversion::handleImplicitCastSubExpr( StringRef name { Lexer::getImmediateMacroName( loc, compiler.getSourceManager(), compiler.getLangOpts()) }; if (name == "sal_False" || name == "sal_True") { - loc = compiler.getSourceManager().getImmediateExpansionRange( - loc).first; + loc = compat::getImmediateExpansionRange(compiler.getSourceManager(), loc).first; } if (isSharedCAndCppCode(loc)) { return; diff --git a/compilerplugins/clang/nullptr.cxx b/compilerplugins/clang/nullptr.cxx index 2e4de5d37a1c..bc1f7b505243 100644 --- a/compilerplugins/clang/nullptr.cxx +++ b/compilerplugins/clang/nullptr.cxx @@ -13,6 +13,7 @@ #include <set> #include "check.hxx" +#include "compat.hxx" #include "plugin.hxx" namespace { @@ -317,8 +318,7 @@ void Nullptr::handleNull( // ellipsis, cast to void* return; } - loc = compiler.getSourceManager() - .getImmediateExpansionRange(loc).first; + loc = compat::getImmediateExpansionRange(compiler.getSourceManager(), loc).first; if (ignoreLocation( compiler.getSourceManager().getSpellingLoc(loc))) { @@ -381,8 +381,8 @@ void Nullptr::rewriteOrWarn( compiler.getLangOpts()) == "NULL")) { - locStart = compiler.getSourceManager().getImmediateExpansionRange( - locStart).first; + locStart = compat::getImmediateExpansionRange(compiler.getSourceManager(), locStart) + .first; } SourceLocation locEnd(expr->getLocEnd()); while (compiler.getSourceManager().isMacroArgExpansion(locEnd)) { @@ -396,8 +396,7 @@ void Nullptr::rewriteOrWarn( compiler.getLangOpts()) == "NULL")) { - locEnd = compiler.getSourceManager().getImmediateExpansionRange( - locEnd).first; + locEnd = compat::getImmediateExpansionRange(compiler.getSourceManager(), locEnd).first; } if (replaceText(SourceRange(compiler.getSourceManager().getSpellingLoc(locStart), compiler.getSourceManager().getSpellingLoc(locEnd)), replacement)) { return; diff --git a/compilerplugins/clang/salcall.cxx b/compilerplugins/clang/salcall.cxx index 2f289033851d..a84cbd9825d5 100644 --- a/compilerplugins/clang/salcall.cxx +++ b/compilerplugins/clang/salcall.cxx @@ -428,7 +428,7 @@ bool SalCall::isSalCallFunction(FunctionDecl const* functionDecl, SourceLocation //TODO: If the macro is a function-like macro with a parameter named "SAL_CALL", uses of // that parameter in the remainder of the replacement text will be false positives. assert(SM.isMacroBodyExpansion(startLoc)); - auto const startLoc2 = SM.getImmediateExpansionRange(startLoc).second; + auto const startLoc2 = compat::getImmediateExpansionRange(SM, startLoc).second; auto name = Lexer::getImmediateMacroName(startLoc, SM, compiler.getLangOpts()); while (name.startswith("\\\n")) { diff --git a/compilerplugins/clang/sallogareas.cxx b/compilerplugins/clang/sallogareas.cxx index e31754493523..e18f100043e5 100644 --- a/compilerplugins/clang/sallogareas.cxx +++ b/compilerplugins/clang/sallogareas.cxx @@ -11,6 +11,7 @@ #include "sallogareas.hxx" #include "check.hxx" +#include "compat.hxx" #include <clang/Lex/Lexer.h> @@ -102,7 +103,7 @@ bool SalLogAreas::VisitCallExpr( const CallExpr* call ) const SourceManager& source = compiler.getSourceManager(); for( SourceLocation loc = call->getLocStart(); loc.isMacroID(); - loc = source.getImmediateExpansionRange( loc ).first ) + loc = compat::getImmediateExpansionRange(source, loc ).first ) { StringRef inMacro = Lexer::getImmediateMacroName( loc, source, compiler.getLangOpts()); if( inMacro == "SAL_DEBUG" || inMacro == "SAL_DEBUG_BACKTRACE" ) |