loplugin:stringconstant: warn about explicit length mismatch

(just in case)

Change-Id: I9eaf6e920fc7fc3ebc8c705df1cdf34b325db74a
Reviewed-on: https://gerrit.libreoffice.org/42614
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
This commit is contained in:
Stephan Bergmann
2017-09-22 08:16:59 +02:00
parent 6d1c8a4358
commit 5c54b6523f
2 changed files with 12 additions and 2 deletions

View File

@@ -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()))
{

View File

@@ -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]}}
}