From f6dda4e1603ee1d901bf747c60f232db1f1b56a5 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Tue, 30 May 2017 13:40:53 +0200 Subject: Make loplugin:redundantcast accept bool(FD_ISSET(...)) again Change-Id: I4e96c55c246cf806f17df31844a00d0e8a5e4f56 --- compilerplugins/clang/redundantcast.cxx | 24 ++++++++++++++++++++++++ sal/osl/unx/socket.cxx | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/compilerplugins/clang/redundantcast.cxx b/compilerplugins/clang/redundantcast.cxx index 148cdbead9be..6a554a774ee2 100644 --- a/compilerplugins/clang/redundantcast.cxx +++ b/compilerplugins/clang/redundantcast.cxx @@ -483,6 +483,30 @@ bool RedundantCast::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr const * exp if (loplugin::hasPathnamePrefix(aFileName, SRCDIR "/svx/source/tbxctrls/fillctrl.cxx")) return true; + // See the commit message of d0e7d020fa405ab94f19916ec96fbd4611da0031 + // "socket.c -> socket.cxx" for the reason to have + // + // bool(FD_ISSET(...)) + // + // in sal/osl/unx/socket.cxx: + auto const sub = compat::getSubExprAsWritten(expr); + //TODO: Better check that sub is exactly an expansion of FD_ISSET: + if (sub->getLocEnd().isMacroID()) { + for (auto loc = sub->getLocStart(); + loc.isMacroID() + && (compiler.getSourceManager() + .isAtStartOfImmediateMacroExpansion(loc)); + loc = compiler.getSourceManager().getImmediateMacroCallerLoc(loc)) + { + if (Lexer::getImmediateMacroName( + loc, compiler.getSourceManager(), compiler.getLangOpts()) + == "FD_ISSET") + { + return true; + } + } + } + auto const t1 = expr->getTypeAsWritten(); auto const t2 = compat::getSubExprAsWritten(expr)->getType(); if (t1 != t2) diff --git a/sal/osl/unx/socket.cxx b/sal/osl/unx/socket.cxx index bb8bf337766e..6b24b0ab0143 100644 --- a/sal/osl/unx/socket.cxx +++ b/sal/osl/unx/socket.cxx @@ -2399,7 +2399,7 @@ sal_Bool SAL_CALL osl_isInSocketSet(oslSocketSet Set, oslSocket pSocket) return false; } - return FD_ISSET(pSocket->m_Socket, &Set->m_Set); + return bool(FD_ISSET(pSocket->m_Socket, &Set->m_Set)); } sal_Int32 SAL_CALL osl_demultiplexSocketEvents(oslSocketSet IncomingSet, -- cgit v1.2.3