summaryrefslogtreecommitdiff
path: root/compilerplugins
diff options
context:
space:
mode:
Diffstat (limited to 'compilerplugins')
-rw-r--r--compilerplugins/clang/compat.hxx12
-rw-r--r--compilerplugins/clang/constparams.cxx2
-rw-r--r--compilerplugins/clang/cppunitassertequals.cxx3
-rw-r--r--compilerplugins/clang/cstylecast.cxx24
-rw-r--r--compilerplugins/clang/literaltoboolconversion.cxx4
-rw-r--r--compilerplugins/clang/nullptr.cxx11
-rw-r--r--compilerplugins/clang/salcall.cxx2
-rw-r--r--compilerplugins/clang/sallogareas.cxx3
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" )