Skip to content

Commit

Permalink
bpo-27643 - skip test_ctypes test case with XLC compiler. (pythonGH-5164
Browse files Browse the repository at this point in the history
)

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.
  • Loading branch information
aixtools authored and ncoghlan committed Dec 26, 2018
1 parent 5661459 commit 22462da
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 4 deletions.
4 changes: 4 additions & 0 deletions Lib/ctypes/test/test_bitfields.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ def test_ints(self):
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()
Expand Down
Original file line number Diff line number Diff line change
@@ -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
18 changes: 14 additions & 4 deletions Modules/_ctypes/_ctypes_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -430,14 +437,15 @@ 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;
case 'P': bits->P = value; break;
case 'Q': bits->Q = value; break;
case 'R': bits->R = value; break;
case 'S': bits->S = value; break;
#endif
}
}

Expand All @@ -454,15 +462,17 @@ 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;
case 'P': return bits->P;
case 'Q': return bits->Q;
case 'R': return bits->R;
case 'S': return bits->S;
#endif
}
return 0;
return 999;
}

static PyMethodDef module_methods[] = {
Expand Down

0 comments on commit 22462da

Please sign in to comment.