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

Stephan Bergmann sbergman at redhat.com
Fri Sep 22 11:45:35 UTC 2017


 compilerplugins/clang/stringconstant.cxx      |   12 ++++++++++--
 compilerplugins/clang/test/stringconstant.cxx |    2 ++
 2 files changed, 12 insertions(+), 2 deletions(-)

New commits:
commit 5c54b6523f74db4f79540361fc1630aaee06bcd5
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Fri Sep 22 08:16:59 2017 +0200

    loplugin:stringconstant: warn about explicit length mismatch
    
    (just in case)
    
    Change-Id: I9eaf6e920fc7fc3ebc8c705df1cdf34b325db74a
    Reviewed-on: https://gerrit.libreoffice.org/42614
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>

diff --git a/compilerplugins/clang/stringconstant.cxx b/compilerplugins/clang/stringconstant.cxx
index 2eab378e443f..a4e0b79438b2 100644
--- a/compilerplugins/clang/stringconstant.cxx
+++ b/compilerplugins/clang/stringconstant.cxx
@@ -842,11 +842,19 @@ bool StringConstant::VisitCXXConstructExpr(CXXConstructExpr const * expr) {
                 }
                 APSInt res;
                 if (!expr->getArg(1)->EvaluateAsInt(
-                        res, compiler.getASTContext())
-                    || res != n)
+                        res, compiler.getASTContext()))
                 {
                     return true;
                 }
+                if (res != n) {
+                    report(
+                        DiagnosticsEngine::Warning,
+                        ("suspicious 'rtl::OUString' constructor with literal"
+                         " of length %0 and non-matching length argument %1"),
+                        expr->getExprLoc())
+                        << n << res.toString(10) << expr->getSourceRange();
+                    return true;
+                }
                 if (!expr->getArg(2)->EvaluateAsInt(
                         res, compiler.getASTContext()))
                 {
diff --git a/compilerplugins/clang/test/stringconstant.cxx b/compilerplugins/clang/test/stringconstant.cxx
index 1a1f0c37580c..41112d836520 100644
--- a/compilerplugins/clang/test/stringconstant.cxx
+++ b/compilerplugins/clang/test/stringconstant.cxx
@@ -64,6 +64,8 @@ int main() {
     (void) OUString("xxx", 3, RTL_TEXTENCODING_ASCII_US); // expected-error {{simplify construction of 'OUString' with string constant argument [loplugin:stringconstant]}}
     (void) OUString("xxx", 3, RTL_TEXTENCODING_ISO_8859_1); // expected-error {{simplify construction of 'OUString' with string constant argument (but beware, the given textencoding 12 is not RTL_TEXTENCODING_ASCII_US) [loplugin:stringconstant]}}
     (void) OUString("x\xA0x", 3, RTL_TEXTENCODING_ISO_8859_1);
+
+    (void) OUString("xxx", 2, RTL_TEXTENCODING_ASCII_US); // expected-error {{suspicious 'rtl::OUString' constructor with literal of length 3 and non-matching length argument 2 [loplugin:stringconstant]}}
 }
 
 


More information about the Libreoffice-commits mailing list