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

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Nov 27 16:16:30 UTC 2018


 compilerplugins/clang/compat.hxx               |   12 ++++++++++++
 compilerplugins/clang/constantparam.cxx        |    2 +-
 compilerplugins/clang/expressionalwayszero.cxx |    2 +-
 compilerplugins/clang/loopvartoosmall.cxx      |    2 +-
 compilerplugins/clang/plugin.cxx               |    2 +-
 compilerplugins/clang/pointerbool.cxx          |    2 +-
 compilerplugins/clang/returnconstant.cxx       |    2 +-
 compilerplugins/clang/shouldreturnbool.cxx     |    2 +-
 compilerplugins/clang/singlevalfields.cxx      |    2 +-
 compilerplugins/clang/staticconstfield.cxx     |    2 +-
 compilerplugins/clang/stringconstant.cxx       |   14 +++++++-------
 compilerplugins/clang/unicodetochar.cxx        |    2 +-
 compilerplugins/clang/unusedfields.cxx         |    2 +-
 13 files changed, 30 insertions(+), 18 deletions(-)

New commits:
commit 75dd5d2e734ad9e8265b1954c7496d1ba241079e
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Tue Nov 27 12:56:12 2018 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Tue Nov 27 17:16:05 2018 +0100

    add EvaluateAsInt compat function for latest clang
    
    the old EvaluateAsInt method has been dropped as from current clang
    
    Change-Id: Ie30d1547ad8de777badff4b380d2fc9fb261e8fe
    Reviewed-on: https://gerrit.libreoffice.org/64107
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/compilerplugins/clang/compat.hxx b/compilerplugins/clang/compat.hxx
index 4733cd332e5e..97410fcbdc7a 100644
--- a/compilerplugins/clang/compat.hxx
+++ b/compilerplugins/clang/compat.hxx
@@ -156,6 +156,18 @@ inline bool CPlusPlus17(clang::LangOptions const & opts) {
 #endif
 }
 
+inline bool EvaluateAsInt(clang::Expr const * expr, llvm::APSInt& intRes, const clang::ASTContext& ctx) {
+#if CLANG_VERSION >= 80000
+    clang::Expr::EvalResult res;
+    bool b = expr->EvaluateAsInt(res, ctx);
+    if (b && res.Val.isInt())
+        intRes = res.Val.getInt();
+    return b;
+#else
+    return expr->EvaluateAsInt(intRes, ctx);
+#endif
+}
+
 // Work around <http://reviews.llvm.org/D22128>:
 //
 // SfxErrorHandler::GetClassString (svtools/source/misc/ehdl.cxx):
diff --git a/compilerplugins/clang/constantparam.cxx b/compilerplugins/clang/constantparam.cxx
index 34455ee00400..ffacf1102022 100644
--- a/compilerplugins/clang/constantparam.cxx
+++ b/compilerplugins/clang/constantparam.cxx
@@ -170,7 +170,7 @@ std::string ConstantParam::getCallValue(const Expr* arg)
         return "unknown1";
     }
     APSInt x1;
-    if (arg->EvaluateAsInt(x1, compiler.getASTContext()))
+    if (compat::EvaluateAsInt(arg, x1, compiler.getASTContext()))
     {
         return x1.toString(10);
     }
diff --git a/compilerplugins/clang/expressionalwayszero.cxx b/compilerplugins/clang/expressionalwayszero.cxx
index c4762aecbc35..d53d20316a5d 100644
--- a/compilerplugins/clang/expressionalwayszero.cxx
+++ b/compilerplugins/clang/expressionalwayszero.cxx
@@ -139,7 +139,7 @@ std::unique_ptr<APSInt> ExpressionAlwaysZero::getExprValue(Expr const * expr)
         return std::unique_ptr<APSInt>();
     }
     APSInt x1;
-    if (expr->EvaluateAsInt(x1, compiler.getASTContext()))
+    if (compat::EvaluateAsInt(expr, x1, compiler.getASTContext()))
         return std::unique_ptr<APSInt>(new APSInt(x1));
     return std::unique_ptr<APSInt>();
 }
diff --git a/compilerplugins/clang/loopvartoosmall.cxx b/compilerplugins/clang/loopvartoosmall.cxx
index 79503ceaeec6..7ebe34f22474 100644
--- a/compilerplugins/clang/loopvartoosmall.cxx
+++ b/compilerplugins/clang/loopvartoosmall.cxx
@@ -160,7 +160,7 @@ void LoopVarTooSmall::checkSubExpr(Expr const * expr, bool positive) {
     //
     // with dependent type T:
     if (!binOpRHS->isValueDependent()
-        && binOpRHS->EvaluateAsInt(aIntResult, compiler.getASTContext()))
+        && compat::EvaluateAsInt(binOpRHS, aIntResult, compiler.getASTContext()))
     {
         if (less && aIntResult.isStrictlyPositive()) {
             --aIntResult;
diff --git a/compilerplugins/clang/plugin.cxx b/compilerplugins/clang/plugin.cxx
index ff12ebb2d6ba..2167cc0e2a7f 100644
--- a/compilerplugins/clang/plugin.cxx
+++ b/compilerplugins/clang/plugin.cxx
@@ -161,7 +161,7 @@ void Plugin::registerPlugin( Plugin* (*create)( const InstantiationData& ), cons
 
 bool Plugin::evaluate(const Expr* expr, APSInt& x)
 {
-    if (expr->EvaluateAsInt(x, compiler.getASTContext()))
+    if (compat::EvaluateAsInt(expr, x, compiler.getASTContext()))
     {
         return true;
     }
diff --git a/compilerplugins/clang/pointerbool.cxx b/compilerplugins/clang/pointerbool.cxx
index bb5bdff136b5..a3ed40506b8b 100644
--- a/compilerplugins/clang/pointerbool.cxx
+++ b/compilerplugins/clang/pointerbool.cxx
@@ -110,7 +110,7 @@ llvm::Optional<APSInt> PointerBool::getCallValue(const Expr* arg)
         return llvm::Optional<APSInt>();
     }
     APSInt x1;
-    if (arg->EvaluateAsInt(x1, compiler.getASTContext()))
+    if (compat::EvaluateAsInt(arg, x1, compiler.getASTContext()))
     {
         return x1;
     }
diff --git a/compilerplugins/clang/returnconstant.cxx b/compilerplugins/clang/returnconstant.cxx
index a11cff3d11de..8040396ef6d0 100644
--- a/compilerplugins/clang/returnconstant.cxx
+++ b/compilerplugins/clang/returnconstant.cxx
@@ -186,7 +186,7 @@ std::string ReturnConstant::getExprValue(Expr const* arg)
         return "unknown";
     }
     APSInt x1;
-    if (arg->EvaluateAsInt(x1, compiler.getASTContext()))
+    if (compat::EvaluateAsInt(arg, x1, compiler.getASTContext()))
     {
         return x1.toString(10);
     }
diff --git a/compilerplugins/clang/shouldreturnbool.cxx b/compilerplugins/clang/shouldreturnbool.cxx
index 937dba126da0..03cc0c856a6f 100644
--- a/compilerplugins/clang/shouldreturnbool.cxx
+++ b/compilerplugins/clang/shouldreturnbool.cxx
@@ -235,7 +235,7 @@ bool ShouldReturnBool::isExprOneOrZero(const Expr* arg) const
         return false;
     }
     APSInt x1;
-    if (arg->EvaluateAsInt(x1, compiler.getASTContext()))
+    if (compat::EvaluateAsInt(arg, x1, compiler.getASTContext()))
     {
         return x1 == 1 || x1 == 0;
     }
diff --git a/compilerplugins/clang/singlevalfields.cxx b/compilerplugins/clang/singlevalfields.cxx
index e14fd7c84b3b..3412756b87cb 100644
--- a/compilerplugins/clang/singlevalfields.cxx
+++ b/compilerplugins/clang/singlevalfields.cxx
@@ -461,7 +461,7 @@ std::string SingleValFields::getExprValue(const Expr* arg)
         }
     }
     APSInt x1;
-    if (arg->EvaluateAsInt(x1, compiler.getASTContext()))
+    if (compat::EvaluateAsInt(arg, x1, compiler.getASTContext()))
         return x1.toString(10);
     if (isa<CXXNullPtrLiteralExpr>(arg))
         return "0";
diff --git a/compilerplugins/clang/staticconstfield.cxx b/compilerplugins/clang/staticconstfield.cxx
index 6925c18ec301..5a9e7adf52ef 100644
--- a/compilerplugins/clang/staticconstfield.cxx
+++ b/compilerplugins/clang/staticconstfield.cxx
@@ -130,7 +130,7 @@ bool StaticConstField::TraverseConstructorInitializer(CXXCtorInitializer* init)
     else
     {
         APSInt x1;
-        if (initexpr->EvaluateAsInt(x1, compiler.getASTContext()))
+        if (compat::EvaluateAsInt(initexpr, x1, compiler.getASTContext()))
         {
             value = x1.toString(10);
             found = true;
diff --git a/compilerplugins/clang/stringconstant.cxx b/compilerplugins/clang/stringconstant.cxx
index c33ff2cc2d8f..dd4eeff3763a 100644
--- a/compilerplugins/clang/stringconstant.cxx
+++ b/compilerplugins/clang/stringconstant.cxx
@@ -848,7 +848,7 @@ bool StringConstant::VisitCXXConstructExpr(CXXConstructExpr const * expr) {
                     return true;
                 }
                 APSInt res;
-                if (!expr->getArg(1)->EvaluateAsInt(
+                if (!compat::EvaluateAsInt(expr->getArg(1),
                         res, compiler.getASTContext()))
                 {
                     return true;
@@ -863,14 +863,14 @@ bool StringConstant::VisitCXXConstructExpr(CXXConstructExpr const * expr) {
                     return true;
                 }
                 APSInt enc;
-                if (!expr->getArg(2)->EvaluateAsInt(
+                if (!compat::EvaluateAsInt(expr->getArg(2),
                         enc, compiler.getASTContext()))
                 {
                     return true;
                 }
                 auto const encIsAscii = enc == 11; // RTL_TEXTENCODING_ASCII_US
                 auto const encIsUtf8 = enc == 76; // RTL_TEXTENCODING_UTF8
-                if (!expr->getArg(3)->EvaluateAsInt(
+                if (!compat::EvaluateAsInt(expr->getArg(3),
                         res, compiler.getASTContext())
                     || res != 0x333) // OSTRING_TO_OUSTRING_CVTFLAGS
                 {
@@ -1438,7 +1438,7 @@ bool StringConstant::isStringConstant(
 
 bool StringConstant::isZero(Expr const * expr) {
     APSInt res;
-    return expr->EvaluateAsInt(res, compiler.getASTContext()) && res == 0;
+    return compat::EvaluateAsInt(expr, res, compiler.getASTContext()) && res == 0;
 }
 
 void StringConstant::reportChange(
@@ -1729,7 +1729,7 @@ void StringConstant::handleCharLen(
         return;
     }
     APSInt res;
-    if (expr->getArg(arg2)->EvaluateAsInt(res, compiler.getASTContext())) {
+    if (compat::EvaluateAsInt(expr->getArg(arg2), res, compiler.getASTContext())) {
         if (res != n) {
             return;
         }
@@ -1754,7 +1754,7 @@ void StringConstant::handleCharLen(
                   &cont2, &emb2, &trm2)
               && n2 == n && cont2 == cont && emb2 == emb && trm2 == trm
                   //TODO: same strings
-              && subs->getIdx()->EvaluateAsInt(res, compiler.getASTContext())
+              && compat::EvaluateAsInt(subs->getIdx(), res, compiler.getASTContext())
               && res == 0))
         {
             return;
@@ -1981,7 +1981,7 @@ void StringConstant::handleFunArgOstring(
                         &cont, &emb, &trm))
                 {
                     APSInt res;
-                    if (cexpr->getArg(1)->EvaluateAsInt(
+                    if (compat::EvaluateAsInt(cexpr->getArg(1),
                             res, compiler.getASTContext()))
                     {
                         if (res == n && !emb && trm) {
diff --git a/compilerplugins/clang/unicodetochar.cxx b/compilerplugins/clang/unicodetochar.cxx
index 19a7aeb3ebb9..e1e381ad2c71 100644
--- a/compilerplugins/clang/unicodetochar.cxx
+++ b/compilerplugins/clang/unicodetochar.cxx
@@ -58,7 +58,7 @@ public:
             return true;
         }
         APSInt res;
-        if (expr->getSubExpr()->EvaluateAsInt(res, compiler.getASTContext())
+        if (compat::EvaluateAsInt(expr->getSubExpr(), res, compiler.getASTContext())
             && res >= 0 && res <= 0x7F)
         {
             return true;
diff --git a/compilerplugins/clang/unusedfields.cxx b/compilerplugins/clang/unusedfields.cxx
index 61dcedf434bb..393c37450b74 100644
--- a/compilerplugins/clang/unusedfields.cxx
+++ b/compilerplugins/clang/unusedfields.cxx
@@ -301,7 +301,7 @@ bool UnusedFields::isSomeKindOfZero(const Expr* arg)
         return cxxConstructExpr->getConstructor()->isDefaultConstructor();
     }
     APSInt x1;
-    if (arg->EvaluateAsInt(x1, compiler.getASTContext()))
+    if (compat::EvaluateAsInt(arg, x1, compiler.getASTContext()))
     {
         return x1 == 0;
     }


More information about the Libreoffice-commits mailing list