Skip to content

Commit c7a79bd

Browse files
authored
gh-158567: Workaround GCC crash in PyFloat_Pack2() (#158568)
Avoid __builtin_bswap16() with _Float16 on s390x.
1 parent 82fcaf8 commit c7a79bd

1 file changed

Lines changed: 10 additions & 0 deletions

File tree

‎Objects/floatobject.c‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1907,10 +1907,20 @@ PyFloat_Pack2(double x, char *data, int le)
19071907
}
19081908

19091909
if ((_PY_FLOAT_LITTLE_ENDIAN && !le) || (_PY_FLOAT_BIG_ENDIAN && le)) {
1910+
#if defined(__s390x__) && defined(__GNUC__)
1911+
// gh-158567: Workaround GCC crash on s390x.
1912+
// Avoid __builtin_bswap16() with _Float16.
1913+
// https://bugzilla.redhat.com/show_bug.cgi?id=2544649
1914+
char buffer[2];
1915+
memcpy(buffer, &y, 2);
1916+
data[0] = buffer[1];
1917+
data[1] = buffer[0];
1918+
#else
19101919
uint16_t word;
19111920
memcpy(&word, &y, 2);
19121921
word = _Py_bswap16(word);
19131922
memcpy(data, &word, 2);
1923+
#endif
19141924
}
19151925
else {
19161926
memcpy(data, &y, sizeof(_Float16));

0 commit comments

Comments
 (0)