]> granicus.if.org Git - python/commitdiff
Issue #12837: Silence a Clang compiler warning on OS X.
authorBrett Cannon <brett@python.org>
Tue, 7 Jan 2014 22:01:01 +0000 (17:01 -0500)
committerBrett Cannon <brett@python.org>
Tue, 7 Jan 2014 22:01:01 +0000 (17:01 -0500)
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.

Misc/NEWS
Modules/socketmodule.c

index d774926c084fce0b90b9b298243216ad20a50c47..c1aa48f2731959f54c7cd440fb8275d98ee59e86 100644 (file)
--- 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?
 ==================================
 
index 0aba5911e25bc9234eb3fe8a715808f221f2db6a..6c229bcc10e42a8e13a8cb05e406c5e540198a9d 100644 (file)
@@ -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;