You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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:
assignee=Noneclosed_at=<Date2020-02-13.02:00:28.910>created_at=<Date2020-02-12.11:55:07.068>labels= ['interpreter-core', 'invalid', '3.9']
title='cpython/abstract.h not compatible with C90'updated_at=<Date2020-03-24.10:30:42.551>user='https://github.com/petere'
Some inline functions use mixed declarations and code. These end up visible in third-party code that includes Python.h, which might not be using a C99 compiler.
Example:
In file included from /Users/peter/python-builds/3.9/include/python3.9/abstract.h:843,
from /Users/peter/python-builds/3.9/include/python3.9/Python.h:147,
from plpython.h:59,
from plpy_typeio.h:10,
from plpy_cursorobject.h:8,
from plpy_cursorobject.c:14:
/Users/peter/python-builds/3.9/include/python3.9/cpython/abstract.h:74:5: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
74 | Py_ssize_t offset = tp->tp_vectorcall_offset;
| ^~~~~~~~~~
Python versions greater than or equal to 3.6 use C89 with several select C99 features:
...
intermingled declarations
So I don't think these changes should be accepted.
petere commented on Feb 12, 2020
peteremannequin
MannequinAuthor
More actions
That's fair for code internal to CPython itself, but these are header files included by third-party code that is embedding Python, so a bit more flexibility and adaptability would be welcome there.
I think we should distinguish minimal supported C standard for compiling CPython itself and for compiling extensions. We can use all C99 features supported by main compilers in the code of CPython, but C99 is not even compatible with C++, and it may be not compatible with extensions written in other languages (D, Rust, Go, etc), so I think we should use more restricted version in headers.
Activity
petere commentedon Feb 12, 2020
Some inline functions use mixed declarations and code. These end up visible in third-party code that includes Python.h, which might not be using a C99 compiler.
Example:
In file included from /Users/peter/python-builds/3.9/include/python3.9/abstract.h:843,
from /Users/peter/python-builds/3.9/include/python3.9/Python.h:147,
from plpython.h:59,
from plpy_typeio.h:10,
from plpy_cursorobject.h:8,
from plpy_cursorobject.c:14:
/Users/peter/python-builds/3.9/include/python3.9/cpython/abstract.h:74:5: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
74 | Py_ssize_t offset = tp->tp_vectorcall_offset;
| ^~~~~~~~~~
ericvsmith commentedon Feb 12, 2020
PEP-7 says that this is allowed:
Python versions greater than or equal to 3.6 use C89 with several select C99 features:
...
So I don't think these changes should be accepted.
petere commentedon Feb 12, 2020
That's fair for code internal to CPython itself, but these are header files included by third-party code that is embedding Python, so a bit more flexibility and adaptability would be welcome there.
ericvsmith commentedon Feb 12, 2020
I'd suggest mentioning this on python-dev, if you want to change the policy.
benjaminp commentedon Feb 13, 2020
C99 is not disallowed in headers.
serhiy-storchaka commentedon Mar 14, 2020
I think we should distinguish minimal supported C standard for compiling CPython itself and for compiling extensions. We can use all C99 features supported by main compilers in the code of CPython, but C99 is not even compatible with C++, and it may be not compatible with extensions written in other languages (D, Rust, Go, etc), so I think we should use more restricted version in headers.
petere commentedon Mar 24, 2020
3.9.0a5 fixes my original issue. Thanks.