diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2017-06-01 14:37:02 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2017-06-01 14:37:02 +0200 |
commit | 93aeaa75a4bfd5756b2d3ada59be4f452e320aab (patch) | |
tree | 582afb0b96fb677629e06c271aa4914ec0870ccc /compilerplugins/clang/redundantcast.cxx | |
parent | 064a01527e5942a6b293c4c51597dfc7be0dde55 (diff) |
Improve suppression of loplugin:redundantcast in CPPUNIT_ASSERT
Change-Id: I65f95e7245f08592ea11cc75e1cf34dcbdf16b40
Diffstat (limited to 'compilerplugins/clang/redundantcast.cxx')
-rw-r--r-- | compilerplugins/clang/redundantcast.cxx | 42 |
1 files changed, 11 insertions, 31 deletions
diff --git a/compilerplugins/clang/redundantcast.cxx b/compilerplugins/clang/redundantcast.cxx index 2c9a6fa49c89..de3353b295c1 100644 --- a/compilerplugins/clang/redundantcast.cxx +++ b/compilerplugins/clang/redundantcast.cxx @@ -456,37 +456,6 @@ bool RedundantCast::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr const * exp if (ignoreLocation(expr)) { return true; } - // A bit of a rabbit hole here, these expressions look like - // CPPUNIT_ASSERT( bool(aVec.find(p1.get()) == aVec.end()) ) - // If I remove the bool, then another plugin wants me to change it to CPPUNIT_ASSERT_EQUAL, - // but that fails because CppUnit can't do "std::ostream << iterator". - StringRef aFileName = compiler.getSourceManager().getFilename(compiler.getSourceManager().getSpellingLoc(expr->getLocStart())); - if (loplugin::hasPathnamePrefix(aFileName, SRCDIR "/o3tl/qa/")) - return true; - if (loplugin::hasPathnamePrefix(aFileName, SRCDIR "/sfx2/qa/")) - return true; - if (loplugin::hasPathnamePrefix(aFileName, SRCDIR "/postprocess/qa/")) - return true; - if (loplugin::hasPathnamePrefix(aFileName, SRCDIR "/sc/qa/")) - return true; - if (loplugin::hasPathnamePrefix(aFileName, SRCDIR "/cppu/qa/")) - return true; - if (loplugin::hasPathnamePrefix(aFileName, SRCDIR "/vcl/qa/")) - return true; - if (loplugin::hasPathnamePrefix(aFileName, SRCDIR "/cppuhelper/qa/")) - return true; - if (loplugin::hasPathnamePrefix(aFileName, SRCDIR "/comphelper/qa/")) - return true; - if (loplugin::hasPathnamePrefix(aFileName, SRCDIR "/connectivity/qa/")) - return true; - if (loplugin::hasPathnamePrefix(aFileName, SRCDIR "/sal/qa/")) - return true; - if (loplugin::hasPathnamePrefix(aFileName, SRCDIR "/salhelper/qa/")) - return true; - if (loplugin::hasPathnamePrefix(aFileName, SRCDIR "/sw/qa/")) - return true; - if (loplugin::hasPathnamePrefix(aFileName, SRCDIR "/svl/qa/")) - return true; // Restrict this to "real" casts (compared to uses of braced-init-list, like // @@ -502,6 +471,17 @@ bool RedundantCast::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr const * exp return true; } + // See "There might even be good reasons(?) not to warn inside explicit + // casts" block in compilerplugins/clang/test/cppunitassertequals.cxx: + auto const eloc = expr->getExprLoc(); + if (compiler.getSourceManager().isMacroArgExpansion(eloc)) { + auto const name = Lexer::getImmediateMacroName( + eloc, compiler.getSourceManager(), compiler.getLangOpts()); + if (name == "CPPUNIT_ASSERT" || name == "CPPUNIT_ASSERT_MESSAGE") { + return true; + } + } + // See the commit message of d0e7d020fa405ab94f19916ec96fbd4611da0031 // "socket.c -> socket.cxx" for the reason to have // |