-
-
Notifications
You must be signed in to change notification settings - Fork 30.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Remove the Py_NO_NAN macro: require NAN to build Python 3.11 #90814
Comments
The macro Py_NAN may or may not be defined: in particular, a platform that doesn't have NaNs is supposed to be able to define Py_NO_NAN in pyport.h to indicate that. But not all of our uses of |
Here's the first point of failure on my machine. Fixing this shows up more failures. gcc -c -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -std=c99 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -I. -I./Include -DPy_BUILD_CORE -o Objects/complexobject.o Objects/complexobject.c |
Python uses Py_NAN without "#ifdef Py_NAN" guard since 2008. Building Python with Py_NO_NAN never worked. Nobody reported such build failure in the last 14 years... IMO it's time to stop supporting platforms without NaN support.
I only try a few Python versions: I reproduce this issue in Python 3.11, 3.5, 3.2 and... even Python 2.7! The Py_NO_NAN macro was introduced in Python 2.6 (2007) by bpo-1635 "Float patch for inf and nan on Windows (and other platforms)":commit 0a8143f
(...) +#if !defined(Py_NAN) && !defined(Py_NO_NAN) The following change started to use Py_NAN in many C files: ---
ork of Mark Dickinson and me. It was mostly done a few months ago. The patch fixes a lot of loose ends and
ces between platforms like different results or exceptions for edge cases. Have fun :) At this commit, floatobject.c and pymath.c use "#ifdef Py_NAN" carefully, whereas cmathmodule.c and complexobject.c use Py_NAN with no "#ifdef Py_NAN" guard. |
If someone suddenly requires platforms without NaN support, they can maintain a (downstream) patch, or we can revert the change in Python. |
See also bpo-46640 "Python can now use the C99 NAN constant or __builtin_nan()". |
Okay, the comments I made on bpo-46640 still apply (even though they didn't properly apply on that issue). I think this needs a python-dev discussion before it can be moved forward - requiring the existence of NaNs is very close to requiring IEEE 754 floating-point, and that's something we've been historically reluctant to do. |
Is the macro PY_NO_SHORT_FLOAT_REPR also related to platforms which don't support IEEE 754? In 2022, which platforms don't support IEEE 754? |
Yes, though it's a bit more than that: we also need the platform either not to have issues with double rounding for normal numbers, or we need to be able to control the x87 rounding mode in the case that double rounding might be an issue. See the explanations in the source. Lines 345 to 355 in 025cbe7
None that CPython might plausibly run on that I'm aware of. |
Hmm. Those explanations made more sense before PR #73068. :-( |
Requiring IEEE 754 support is being discussed on python-dev: https://mail.python.org/archives/list/python-dev@python.org/thread/J5FSP6J4EITPY5C2UJI7HSL2GQCTCUWN/ |
The current wording of this entry suggests that CPython won't work if optional compiler features are enabled. That's not the case. The change is that we require C11 rather than C89. Note that PEP 7 does say "Python 3.11 and newer versions use C11 without optional features." It is correct there: that's not a guide for users who compile Python, but for CPython devs who must avoid the features.
The previous wording of this entry suggests that CPython won't work if optional compiler features are enabled. That's not the case. The change is that we require C11 rather than C89. Note that PEP 7 does say "Python 3.11 and newer versions use C11 without optional features." It is correct there: that's not a guide for users who compile Python, but for CPython devs who must avoid the features.
…nGH-96309) The previous wording of this entry suggests that CPython won't work if optional compiler features are enabled. That's not the case. The change is that we require C11 rather than C89. Note that PEP 7 does say "Python 3.11 and newer versions use C11 without optional features." It is correct there: that's not a guide for users who compile Python, but for CPython devs who must avoid the features.
…H-96384) The previous wording of this entry suggests that CPython won't work if optional compiler features are enabled. That's not the case. The change is that we require C11 rather than C89. Note that PEP 7 does say "Python 3.11 and newer versions use C11 without optional features." It is correct there: that's not a guide for users who compile Python, but for CPython devs who must avoid the features.
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: