[Libreoffice-commits] core.git: compilerplugins/clang

Stephan Bergmann (via logerrit) logerrit at kemper.freedesktop.org
Mon Jun 14 13:14:36 UTC 2021


 compilerplugins/clang/compat.hxx                  |   10 ++++++++++
 compilerplugins/clang/constantparam.cxx           |    2 +-
 compilerplugins/clang/expressionalwayszero.cxx    |   10 ++++++----
 compilerplugins/clang/literaltoboolconversion.cxx |    2 +-
 compilerplugins/clang/returnconstant.cxx          |    2 +-
 compilerplugins/clang/singlevalfields.cxx         |    3 ++-
 compilerplugins/clang/staticconstfield.cxx        |    2 +-
 compilerplugins/clang/stringconstant.cxx          |    4 ++--
 compilerplugins/clang/virtualdead.cxx             |    3 ++-
 9 files changed, 26 insertions(+), 12 deletions(-)

New commits:
commit 900506c9060415ab890a9169c4cb7997d0ba8217
Author:     Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Mon Jun 14 13:03:34 2021 +0200
Commit:     Stephan Bergmann <sbergman at redhat.com>
CommitDate: Mon Jun 14 15:13:56 2021 +0200

    Adapt compilerplugins to LLVM 13 APSInt::toString change
    
    <https://github.com/llvm/llvm-project/commit/61cdaf66fe22be2b5942ddee4f46a998b4f3ee29>
    "[ADT] Remove APInt/APSInt toString() std::string variants".
    
    TODO:  While most uses of compat::toString should be harmless performance-wise,
    as they are either in error reporting code or in plugins that are not run by
    default, some calls like the one in compilerplugins/clang/staticconstfield.cxx
    might benefit from moving them away from using std::string.
    
    Change-Id: Icfac7d6d4a0a4a4edeb5c8bdcdbc13b73e20a5e5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117152
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>

diff --git a/compilerplugins/clang/compat.hxx b/compilerplugins/clang/compat.hxx
index f62061ed48e4..c9b2bc35b5f6 100644
--- a/compilerplugins/clang/compat.hxx
+++ b/compilerplugins/clang/compat.hxx
@@ -10,6 +10,7 @@
 #pragma once
 
 #include <cstddef>
+#include <string>
 #include <utility>
 
 #include "clang/AST/Decl.h"
@@ -20,6 +21,7 @@
 #include "clang/Basic/Specifiers.h"
 #include "clang/Frontend/CompilerInstance.h"
 #include "clang/Lex/Lexer.h"
+#include "llvm/ADT/StringExtras.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/Compiler.h"
@@ -41,6 +43,14 @@ template<typename... X, typename Y> LLVM_NODISCARD inline bool isa_and_nonnull(Y
 #endif
 }
 
+inline std::string toString(llvm::APSInt const & i, unsigned radix) {
+#if CLANG_VERSION >= 130000
+    return llvm::toString(i, radix);
+#else
+    return i.toString(radix);
+#endif
+}
+
 inline clang::SourceLocation getBeginLoc(clang::Decl const * decl) {
 #if CLANG_VERSION >= 80000
     return decl->getBeginLoc();
diff --git a/compilerplugins/clang/constantparam.cxx b/compilerplugins/clang/constantparam.cxx
index 71c0f69da61a..7cebb1b67efb 100644
--- a/compilerplugins/clang/constantparam.cxx
+++ b/compilerplugins/clang/constantparam.cxx
@@ -175,7 +175,7 @@ std::string ConstantParam::getCallValue(const Expr* arg)
     APSInt x1;
     if (compat::EvaluateAsInt(arg, x1, compiler.getASTContext()))
     {
-        return x1.toString(10);
+        return compat::toString(x1, 10);
     }
     if (isa<CXXNullPtrLiteralExpr>(arg)) {
         return "0";
diff --git a/compilerplugins/clang/expressionalwayszero.cxx b/compilerplugins/clang/expressionalwayszero.cxx
index 24e7287615ba..b5650aa076a2 100644
--- a/compilerplugins/clang/expressionalwayszero.cxx
+++ b/compilerplugins/clang/expressionalwayszero.cxx
@@ -91,8 +91,9 @@ bool ExpressionAlwaysZero::VisitBinaryOperator(BinaryOperator const* binaryOpera
         return true;
     report(DiagnosticsEngine::Warning, "expression always evaluates to zero, lhs=%0 rhs=%1",
            compat::getBeginLoc(binaryOperator))
-        << (lhsValue ? lhsValue->toString(10) : "unknown")
-        << (rhsValue ? rhsValue->toString(10) : "unknown") << binaryOperator->getSourceRange();
+        << (lhsValue ? compat::toString(*lhsValue, 10) : "unknown")
+        << (rhsValue ? compat::toString(*rhsValue, 10) : "unknown")
+        << binaryOperator->getSourceRange();
     return true;
 }
 
@@ -121,8 +122,9 @@ bool ExpressionAlwaysZero::VisitCXXOperatorCallExpr(CXXOperatorCallExpr const* c
         return true;
     report(DiagnosticsEngine::Warning, "expression always evaluates to zero, lhs=%0 rhs=%1",
            compat::getBeginLoc(cxxOperatorCallExpr))
-        << (lhsValue ? lhsValue->toString(10) : "unknown")
-        << (rhsValue ? rhsValue->toString(10) : "unknown") << cxxOperatorCallExpr->getSourceRange();
+        << (lhsValue ? compat::toString(*lhsValue, 10) : "unknown")
+        << (rhsValue ? compat::toString(*rhsValue, 10) : "unknown")
+        << cxxOperatorCallExpr->getSourceRange();
     return true;
 }
 
diff --git a/compilerplugins/clang/literaltoboolconversion.cxx b/compilerplugins/clang/literaltoboolconversion.cxx
index c3f4c7a62e60..54521a60a209 100644
--- a/compilerplugins/clang/literaltoboolconversion.cxx
+++ b/compilerplugins/clang/literaltoboolconversion.cxx
@@ -219,7 +219,7 @@ void LiteralToBoolConversion::handleImplicitCastSubExpr(
                  " %1 with value %2 to %3"),
                 compat::getBeginLoc(expr2))
                 << castExpr->getCastKindName() << subExpr->getType()
-                << res->toString(10) << castExpr->getType()
+                << compat::toString(*res, 10) << castExpr->getType()
                 << expr2->getSourceRange();
         }
     }
diff --git a/compilerplugins/clang/returnconstant.cxx b/compilerplugins/clang/returnconstant.cxx
index c2c0442bf63d..1f50aee860f9 100644
--- a/compilerplugins/clang/returnconstant.cxx
+++ b/compilerplugins/clang/returnconstant.cxx
@@ -186,7 +186,7 @@ std::string ReturnConstant::getExprValue(Expr const* arg)
     APSInt x1;
     if (compat::EvaluateAsInt(arg, x1, compiler.getASTContext()))
     {
-        return x1.toString(10);
+        return compat::toString(x1, 10);
     }
     if (isa<CXXNullPtrLiteralExpr>(arg))
     {
diff --git a/compilerplugins/clang/singlevalfields.cxx b/compilerplugins/clang/singlevalfields.cxx
index 2731f55c8587..228e7ddcb211 100644
--- a/compilerplugins/clang/singlevalfields.cxx
+++ b/compilerplugins/clang/singlevalfields.cxx
@@ -15,6 +15,7 @@
 
 #include "config_clang.h"
 
+#include "compat.hxx"
 #include "plugin.hxx"
 
 #if CLANG_VERSION >= 110000
@@ -574,7 +575,7 @@ std::string SingleValFields::getExprValue(const Expr* arg)
     }
     APSInt x1;
     if (compat::EvaluateAsInt(arg, x1, compiler.getASTContext()))
-        return x1.toString(10);
+        return compat::toString(x1, 10);
     if (isa<CXXNullPtrLiteralExpr>(arg))
         return "0";
     return "?";
diff --git a/compilerplugins/clang/staticconstfield.cxx b/compilerplugins/clang/staticconstfield.cxx
index 0802c323f810..455ea9bac693 100644
--- a/compilerplugins/clang/staticconstfield.cxx
+++ b/compilerplugins/clang/staticconstfield.cxx
@@ -135,7 +135,7 @@ bool StaticConstField::TraverseConstructorInitializer(CXXCtorInitializer* init)
         APSInt x1;
         if (compat::EvaluateAsInt(initexpr, x1, compiler.getASTContext()))
         {
-            value = x1.toString(10);
+            value = compat::toString(x1, 10);
             found = true;
         }
     }
diff --git a/compilerplugins/clang/stringconstant.cxx b/compilerplugins/clang/stringconstant.cxx
index 0447ba96ad1c..9f51dad4f148 100644
--- a/compilerplugins/clang/stringconstant.cxx
+++ b/compilerplugins/clang/stringconstant.cxx
@@ -945,7 +945,7 @@ bool StringConstant::VisitCXXConstructExpr(CXXConstructExpr const * expr) {
                         ("suspicious 'rtl::OUString' constructor with literal"
                          " of length %0 and non-matching length argument %1"),
                         expr->getExprLoc())
-                        << n << res.toString(10) << expr->getSourceRange();
+                        << n << compat::toString(res, 10) << expr->getSourceRange();
                     return true;
                 }
                 APSInt enc;
@@ -969,7 +969,7 @@ bool StringConstant::VisitCXXConstructExpr(CXXConstructExpr const * expr) {
                          " encoding %0 but plain ASCII content; use"
                          " 'RTL_TEXTENCODING_ASCII_US' instead"),
                         expr->getArg(2)->getExprLoc())
-                        << enc.toString(10) << expr->getSourceRange();
+                        << compat::toString(enc, 10) << expr->getSourceRange();
                     return true;
                 }
                 if (encIsUtf8) {
diff --git a/compilerplugins/clang/virtualdead.cxx b/compilerplugins/clang/virtualdead.cxx
index 330085b18781..210a3e2f778f 100644
--- a/compilerplugins/clang/virtualdead.cxx
+++ b/compilerplugins/clang/virtualdead.cxx
@@ -9,6 +9,7 @@
 
 #include "plugin.hxx"
 #include "check.hxx"
+#include "compat.hxx"
 
 #include <cassert>
 #include <string>
@@ -204,7 +205,7 @@ std::string VirtualDead::getCallValue(const Expr* arg)
     APSInt x1;
     if (compat::EvaluateAsInt(arg, x1, compiler.getASTContext()))
     {
-        return x1.toString(10);
+        return compat::toString(x1, 10);
     }
     if (isa<CXXNullPtrLiteralExpr>(arg))
     {


More information about the Libreoffice-commits mailing list