From: Brett Cannon Date: Tue, 7 Jan 2014 22:01:01 +0000 (-0500) Subject: Issue #12837: Silence a Clang compiler warning on OS X. X-Git-Tag: v3.4.0b3~213 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b05cbe61b3751bf829198bd8b75aa8c7b3d2ee56;p=python Issue #12837: Silence a Clang compiler warning on OS X. Now makes CPython build without warnings on OS X under Clang with -Wno-unused-value -Wno-empty-body -Qunused-arguments -Wno-deprecated-declarations. Thanks to David Watson for taking an initial stab at a solution. --- diff --git a/Misc/NEWS b/Misc/NEWS index d774926c08..c1aa48f273 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -43,6 +43,12 @@ Tools/Demos - Issue #20142: Py_buffer variables generated by Argument Clinic are now initialized with a default value. +Build +----- + +- Issue #12837: Silence a tautological comparison warning on OS X under Clang in + socketmodule.c. + What's New in Python 3.4.0 Beta 2? ================================== diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 0aba5911e2..6c229bcc10 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1885,8 +1885,22 @@ cmsg_min_space(struct msghdr *msg, struct cmsghdr *cmsgh, size_t space) sizeof(cmsgh->cmsg_len)); /* Note that POSIX allows msg_controllen to be of signed type. */ - if (cmsgh == NULL || msg->msg_control == NULL || msg->msg_controllen < 0) + if (cmsgh == NULL || msg->msg_control == NULL) return 0; + /* Note that POSIX allows msg_controllen to be of a signed type. This is + annoying under OS X as it's unsigned there and so it triggers a + tautological comparison warning under Clang when compared against 0. + Since the check is valid on other platforms, silence the warning under + Clang. */ + #ifdef __clang__ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wtautological-compare" + #endif + if (msg->msg_controllen < 0) + return 0; + #ifdef __clang__ + #pragma clang diagnostic pop + #endif if (space < cmsg_len_end) space = cmsg_len_end; cmsg_offset = (char *)cmsgh - (char *)msg->msg_control;