Suppress sign-compare warnings for musl libc

Closes https://github.com/dart-lang/sdk/pull/51225

GitOrigin-RevId: 0c2d3d4b79a461d1af2127061b3857f08c22856d
Change-Id: I9e58cccfdf65604baf0789c2a4294dfb50590e95
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/280252
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Slava Egorov <vegorov@google.com>
This commit is contained in:
なつき 2023-02-02 09:07:58 +00:00 committed by Commit Queue
parent 3257cc8f1d
commit 9fefe1054e
2 changed files with 22 additions and 7 deletions

View file

@ -672,12 +672,9 @@ config("chromium_code") {
cflags = [
"-Wall",
"-Wextra",
"-Werror",
]
if (dart_sysroot != "alpine") {
cflags += [ "-Werror" ]
}
defines = []
if (!using_sanitizer && !is_clang) {
# _FORTIFY_SOURCE isn't really supported by Clang now, see

View file

@ -21,6 +21,24 @@
#include "bin/socket_base_macos.h"
#include "platform/signal_blocker.h"
// We wrap CMSG_NXTHDR to suppress sign-compare warnings which occur on musl.
#if defined(__clang__)
#define CMSG_NEXTHDR(mhdr, cmsg) \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Wsign-compare\"") \
CMSG_NXTHDR(mhdr, cmsg) \
_Pragma("clang diagnostic pop")
#elif defined(__GNUC__)
#define CMSG_NEXTHDR(mhdr, cmsg) \
_Pragma("GCC diagnostic push") \
_Pragma("GCC diagnostic ignored \"-Wsign-compare\"") \
CMSG_NXTHDR(mhdr, cmsg) \
_Pragma("GCC diagnostic pop")
#else
#define CMSG_NEXTHDR(mhdr, cmsg) \
CMSG_NXTHDR(mhdr, cmsg)
#endif
namespace dart {
namespace bin {
@ -151,13 +169,13 @@ intptr_t SocketBase::ReceiveMessage(intptr_t fd,
size_t num_messages = 0;
while (cmsg != nullptr) {
num_messages++;
cmsg = CMSG_NXTHDR(&msg, cmsg);
cmsg = CMSG_NEXTHDR(&msg, cmsg);
}
(*p_messages) = reinterpret_cast<SocketControlMessage*>(
Dart_ScopeAllocate(sizeof(SocketControlMessage) * num_messages));
SocketControlMessage* control_message = *p_messages;
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != nullptr;
cmsg = CMSG_NXTHDR(&msg, cmsg), control_message++) {
cmsg = CMSG_NEXTHDR(&msg, cmsg), control_message++) {
void* data = CMSG_DATA(cmsg);
size_t data_length = cmsg->cmsg_len - (reinterpret_cast<uint8_t*>(data) -
reinterpret_cast<uint8_t*>(cmsg));
@ -260,7 +278,7 @@ intptr_t SocketBase::SendMessage(intptr_t fd,
struct cmsghdr* cmsg = CMSG_FIRSTHDR(&msg);
message = messages;
for (intptr_t i = 0; i < num_messages;
i++, message++, cmsg = CMSG_NXTHDR(&msg, cmsg)) {
i++, message++, cmsg = CMSG_NEXTHDR(&msg, cmsg)) {
ASSERT(message->is_file_descriptors_control_message());
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_type = SCM_RIGHTS;