]> granicus.if.org Git - python/commitdiff
bpo-27643 - skip test_ctypes test case with XLC compiler. (GH-5164)
authorMichael Felt <aixtools@users.noreply.github.com>
Wed, 26 Dec 2018 03:54:22 +0000 (04:54 +0100)
committerNick Coghlan <ncoghlan@gmail.com>
Wed, 26 Dec 2018 03:54:22 +0000 (13:54 +1000)
This test case needs "signed short" bitfields, but the
IBM XLC compiler (on AIX) does not support this.

Skip the code and test when AIX and XLC are used.

Use __xlc__ as identifier to detect the XLC compiler.

Lib/ctypes/test/test_bitfields.py
Misc/NEWS.d/next/Tests/2018-01-12-09-05-19.bpo-27643._6z49y.rst [new file with mode: 0644]
Modules/_ctypes/_ctypes_test.c

index c71d71de69548fa8cc065d2c07b9f7aa6cddce13..992b8c4da3a7767ef33acca80d86203a8b066356 100644 (file)
@@ -40,6 +40,10 @@ class C_Test(unittest.TestCase):
                 self.assertEqual(getattr(b, name), func(byref(b), name.encode('ascii')))
 
     def test_shorts(self):
+        b = BITS()
+        name = "M"
+        if func(byref(b), name.encode('ascii')) == 999:
+            self.skipTest("Compiler does not support signed short bitfields")
         for i in range(256):
             for name in "MNOPQRS":
                 b = BITS()
diff --git a/Misc/NEWS.d/next/Tests/2018-01-12-09-05-19.bpo-27643._6z49y.rst b/Misc/NEWS.d/next/Tests/2018-01-12-09-05-19.bpo-27643._6z49y.rst
new file mode 100644 (file)
index 0000000..7daf748
--- /dev/null
@@ -0,0 +1,5 @@
+Test_C test case needs "signed short" bitfields, but the
+IBM XLC compiler (on AIX) does not support this
+Skip the code and test when AIX and XLC are used
+
+Applicable to Python2-2.7 and later
index 0152945ca1ad50c9f453e4cd0240b28cee020a93..f8420580ffa811ad71723366c653fa2873160cb9 100644 (file)
@@ -414,8 +414,15 @@ EXPORT(long long) last_tf_arg_s = 0;
 EXPORT(unsigned long long) last_tf_arg_u = 0;
 
 struct BITS {
-    int A: 1, B:2, C:3, D:4, E: 5, F: 6, G: 7, H: 8, I: 9;
-    short M: 1, N: 2, O: 3, P: 4, Q: 5, R: 6, S: 7;
+    signed int A: 1, B:2, C:3, D:4, E: 5, F: 6, G: 7, H: 8, I: 9;
+/*
+ * The test case needs/uses "signed short" bitfields, but the
+ * IBM XLC compiler does not support this
+ */
+#ifndef __xlc__
+#define SIGNED_SHORT_BITFIELDS
+     short M: 1, N: 2, O: 3, P: 4, Q: 5, R: 6, S: 7;
+#endif
 };
 
 EXPORT(void) set_bitfields(struct BITS *bits, char name, int value)
@@ -430,7 +437,7 @@ EXPORT(void) set_bitfields(struct BITS *bits, char name, int value)
     case 'G': bits->G = value; break;
     case 'H': bits->H = value; break;
     case 'I': bits->I = value; break;
-
+#ifdef SIGNED_SHORT_BITFIELDS
     case 'M': bits->M = value; break;
     case 'N': bits->N = value; break;
     case 'O': bits->O = value; break;
@@ -438,6 +445,7 @@ EXPORT(void) set_bitfields(struct BITS *bits, char name, int value)
     case 'Q': bits->Q = value; break;
     case 'R': bits->R = value; break;
     case 'S': bits->S = value; break;
+#endif
     }
 }
 
@@ -454,6 +462,7 @@ EXPORT(int) unpack_bitfields(struct BITS *bits, char name)
     case 'H': return bits->H;
     case 'I': return bits->I;
 
+#ifdef SIGNED_SHORT_BITFIELDS
     case 'M': return bits->M;
     case 'N': return bits->N;
     case 'O': return bits->O;
@@ -461,8 +470,9 @@ EXPORT(int) unpack_bitfields(struct BITS *bits, char name)
     case 'Q': return bits->Q;
     case 'R': return bits->R;
     case 'S': return bits->S;
+#endif
     }
-    return 0;
+    return 999;
 }
 
 static PyMethodDef module_methods[] = {