summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compilerplugins/clang/redundantcast.cxx24
-rw-r--r--sal/osl/unx/socket.cxx2
2 files changed, 25 insertions, 1 deletions
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,