Hi, this broke Clang :: SemaCXX/constant-expression-cxx1y.cpp: http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap-msan/builds/9144
error: 'warning' diagnostics seen but not expected: File /b/sanitizer-x86_64-linux-bootstrap-msan/build/llvm/tools/clang/test/SemaCXX/constant-expression-cxx1y.cpp Line 447: adding 'int' to a string does not append to the string error: 'note' diagnostics seen but not expected: File /b/sanitizer-x86_64-linux-bootstrap-msan/build/llvm/tools/clang/test/SemaCXX/constant-expression-cxx1y.cpp Line 447: use array indexing to silence this warning 2 errors generated. On Thu, Dec 13, 2018 at 8:09 AM Sylvestre Ledru via cfe-commits <cfe-commits@lists.llvm.org> wrote: > > Author: sylvestre > Date: Thu Dec 13 08:06:23 2018 > New Revision: 349054 > > URL: http://llvm.org/viewvc/llvm-project?rev=349054&view=rev > Log: > Make -Wstring-plus-int warns even if when the result is not out of bounds > > Summary: Patch by Arnaud Bienner > > Reviewers: sylvestre.ledru, thakis > > Reviewed By: thakis > > Subscribers: cfe-commits > > Differential Revision: https://reviews.llvm.org/D55382 > > Modified: > cfe/trunk/lib/Sema/SemaExpr.cpp > cfe/trunk/test/SemaCXX/string-plus-int.cpp > > Modified: cfe/trunk/lib/Sema/SemaExpr.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=349054&r1=349053&r2=349054&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaExpr.cpp (original) > +++ cfe/trunk/lib/Sema/SemaExpr.cpp Thu Dec 13 08:06:23 2018 > @@ -9135,16 +9135,6 @@ static void diagnoseStringPlusInt(Sema & > if (!IsStringPlusInt || IndexExpr->isValueDependent()) > return; > > - Expr::EvalResult Result; > - if (IndexExpr->EvaluateAsInt(Result, Self.getASTContext())) { > - llvm::APSInt index = Result.Val.getInt(); > - unsigned StrLenWithNull = StrExpr->getLength() + 1; > - if (index.isNonNegative() && > - index <= llvm::APSInt(llvm::APInt(index.getBitWidth(), > StrLenWithNull), > - index.isUnsigned())) > - return; > - } > - > SourceRange DiagRange(LHSExpr->getBeginLoc(), RHSExpr->getEndLoc()); > Self.Diag(OpLoc, diag::warn_string_plus_int) > << DiagRange << IndexExpr->IgnoreImpCasts()->getType(); > > Modified: cfe/trunk/test/SemaCXX/string-plus-int.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/string-plus-int.cpp?rev=349054&r1=349053&r2=349054&view=diff > ============================================================================== > --- cfe/trunk/test/SemaCXX/string-plus-int.cpp (original) > +++ cfe/trunk/test/SemaCXX/string-plus-int.cpp Thu Dec 13 08:06:23 2018 > @@ -31,37 +31,36 @@ void f(int index) { > consume("foo" + 5); // expected-warning {{adding 'int' to a string does > not append to the string}} expected-note {{use array indexing to silence this > warning}} > consume("foo" + index); // expected-warning {{adding 'int' to a string > does not append to the string}} expected-note {{use array indexing to silence > this warning}} > consume("foo" + kMyEnum); // expected-warning {{adding 'MyEnum' to a > string does not append to the string}} expected-note {{use array indexing to > silence this warning}} > + consume("foo" + kMySmallEnum); // expected-warning {{adding 'MyEnum' to a > string does not append to the string}} expected-note {{use array indexing to > silence this warning}} > > consume(5 + "foo"); // expected-warning {{adding 'int' to a string does > not append to the string}} expected-note {{use array indexing to silence this > warning}} > consume(index + "foo"); // expected-warning {{adding 'int' to a string > does not append to the string}} expected-note {{use array indexing to silence > this warning}} > consume(kMyEnum + "foo"); // expected-warning {{adding 'MyEnum' to a > string does not append to the string}} expected-note {{use array indexing to > silence this warning}} > + consume(kMySmallEnum + "foo"); // expected-warning {{adding 'MyEnum' to a > string does not append to the string}} expected-note {{use array indexing to > silence this warning}} > > // FIXME: suggest replacing with "foo"[5] > consumeChar(*("foo" + 5)); // expected-warning {{adding 'int' to a string > does not append to the string}} expected-note {{use array indexing to silence > this warning}} > consumeChar(*(5 + "foo")); // expected-warning {{adding 'int' to a string > does not append to the string}} expected-note {{use array indexing to silence > this warning}} > > consume(L"foo" + 5); // expected-warning {{adding 'int' to a string does > not append to the string}} expected-note {{use array indexing to silence this > warning}} > + consume(L"foo" + 2); // expected-warning {{adding 'int' to a string does > not append to the string}} expected-note {{use array indexing to silence this > warning}} > + > + consume("foo" + 3); // expected-warning {{adding 'int' to a string does > not append to the string}} expected-note {{use array indexing to silence this > warning}} > + consume("foo" + 4); // expected-warning {{adding 'int' to a string does > not append to the string}} expected-note {{use array indexing to silence this > warning}} > + consume("\pfoo" + 4); // expected-warning {{adding 'int' to a string does > not append to the string}} expected-note {{use array indexing to silence this > warning}} > + > + #define A "foo" > + #define B "bar" > + consume(A B + sizeof(A) - 1); // expected-warning {{to a string does not > append to the string}} expected-note {{use array indexing to silence this > warning}} > > // Should not warn. > consume(&("foo"[3])); > consume(&("foo"[index])); > consume(&("foo"[kMyEnum])); > - consume("foo" + kMySmallEnum); > - consume(kMySmallEnum + "foo"); > > - consume(L"foo" + 2); > - > - consume("foo" + 3); // Points at the \0 > - consume("foo" + 4); // Points 1 past the \0, which is legal too. > - consume("\pfoo" + 4); // Pascal strings don't have a trailing \0, but they > - // have a leading length byte, so this is fine too. > > consume("foo" + kMyOperatorOverloadedEnum); > consume(kMyOperatorOverloadedEnum + "foo"); > - > - #define A "foo" > - #define B "bar" > - consume(A B + sizeof(A) - 1); > } > > template <typename T> > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits