Coder Social home page Coder Social logo

Comments (14)

eli-schwartz avatar eli-schwartz commented on August 16, 2024

Previously: #105059

git blame fingers 060a96f / #117144

from cpython.

eli-schwartz avatar eli-schwartz commented on August 16, 2024

It's trivial to catch.

$ cat /tmp/foo.c 
#include <Python.h>
$ gcc -std=c99 -Werror=pedantic -I/usr/include/python3.13 -c /tmp/foo.c -o /tmp/foo.o
In file included from /usr/include/python3.13/Python.h:92,
                 from /tmp/foo.c:1:
/usr/include/python3.13/cpython/code.h:32:10: error: ISO C99 doesn’t support unnamed structs/unions [-Werror=pedantic]
   32 |         };
      |          ^
/usr/include/python3.13/cpython/code.h:34:6: error: ISO C99 doesn’t support unnamed structs/unions [-Werror=pedantic]
   34 |     };
      |      ^
/usr/include/python3.13/cpython/code.h:27:9: error: struct has no named members [-Werror=pedantic]
   27 | typedef struct {
      |         ^~~~~~
In file included from /usr/include/python3.13/Python.h:128:
/usr/include/python3.13/cpython/optimizer.h:60:14: error: ISO C99 doesn’t support unnamed structs/unions [-Werror=pedantic]
   60 |             };
      |              ^
/usr/include/python3.13/cpython/optimizer.h:62:10: error: ISO C99 doesn’t support unnamed structs/unions [-Werror=pedantic]
   62 |         };
      |          ^
/usr/include/python3.13/cpython/optimizer.h:63:6: error: ISO C99 doesn’t support unnamed structs/unions [-Werror=pedantic]
   63 |     };
      |      ^
cc1: some warnings being treated as errors

If the objective is to continue supporting external users of Python.h that unlike cpython, haven't upgraded to c11 -- then this seems like a useful unittest to add.

from cpython.

sobolevn avatar sobolevn commented on August 16, 2024

cc @vstinner as of #105059

from cpython.

vstinner avatar vstinner commented on August 16, 2024

The Python C API doesn't support -Werror=pedantic compiler flag. I don't think that it's a flag that we want to support. I suggest closing the issue as "WONT FIX".

from cpython.

vstinner avatar vstinner commented on August 16, 2024

If I try to build test_cext with that flag, the compiler fails early:

building 'cext' extension
gcc -fno-strict-overflow -Wsign-compare -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -g -Og -Wall -fPIC -I/home/vstinner/python/main/env/include -I/home/vstinner/python/main/Include -I/home/vstinner/python/main -c extension.c -o build/temp.linux-x86_64-cpython-314-pydebug/extension.o -Werror -Werror=pedantic -Werror=declaration-after-statement -DMODULE_NAME=cext
extension.c:56:19: error: ISO C forbids conversion of function pointer to object pointer type [-Werror=pedantic]
   56 |     {Py_mod_exec, (void*)_testcext_exec},
      |                   ^

from cpython.

ndparker avatar ndparker commented on August 16, 2024

Hmm. -pedantic support is not documented in PEP 7. Any pointers for a documentation here?

That being said - the change of title is not right. It was one -pedantic error (with C99 - it does work with C11, thatswhy the question about version compat). However, the first error is related to -Wcast-qual (and definitely seems valid to me).

from cpython.

ndparker avatar ndparker commented on August 16, 2024

If I try to build test_cext with that flag, the compiler fails early:

building 'cext' extension
gcc -fno-strict-overflow -Wsign-compare -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -g -Og -Wall -fPIC -I/home/vstinner/python/main/env/include -I/home/vstinner/python/main/Include -I/home/vstinner/python/main -c extension.c -o build/temp.linux-x86_64-cpython-314-pydebug/extension.o -Werror -Werror=pedantic -Werror=declaration-after-statement -DMODULE_NAME=cext
extension.c:56:19: error: ISO C forbids conversion of function pointer to object pointer type [-Werror=pedantic]
   56 |     {Py_mod_exec, (void*)_testcext_exec},
      |                   ^

I'd like to add that it's not about compiling my extension, I can deal with that. It's simply about including Python.h.

from cpython.

vstinner avatar vstinner commented on August 16, 2024

I'd like to add that it's not about compiling my extension, I can deal with that.

What I mean is that it seems impossible to build any non-trivial C extension with -Werror=pedantic, since Python requires syntax which is denied by -Werror=pedantic. Like my example.

My example comes from Lib/test/test_cext/extension.c which is a trivial C extension which does basically nothing.

from cpython.

encukou avatar encukou commented on August 16, 2024

IMO, the headers should definitely compile in pedantic mode with -std=c11, since that checks we actually use the standard we chose.
Possibly with C99 too. IMO, having an anonymous union in the public headers is a regression in 3.13.

from cpython.

ndparker avatar ndparker commented on August 16, 2024

FWIW, I'm casting the member functions like this and gcc doesn't complain:

#define EXT_CFUNC(func) ((PyCFunction)(void (*) (void))(func))

[...]
PyDoc_STRVAR(myfunc__doc__,
"myfunc(self)...");
[...]
static PyObject *
myfunc(mytype_t *self)
{
    ...
    return someobject;
}

[...]
static PyMethodDef mytype_methods[] = {
[...]
    {"somename", EXT_CFUNC(myfunc), METH_NOARGS, myfunc__doc__},
[...]

I looked into the headers, to verify what I'm doing here and I might have just stolen that from _PyCFunction_CAST (methodobject.h) a long time ago. I don't remember.

from cpython.

ndparker avatar ndparker commented on August 16, 2024

And again, to make sure it doesn't get lost in the discussion: I've started off with another error not related to -pedantic:

    /usr/include/python3.13/cpython/pyatomic_gcc.h: In function '_Py_atomic_load_ptr':
    /usr/include/python3.13/cpython/pyatomic_gcc.h:300:34: error: cast discards 'const' qualifier from pointer target type [-Werror=cast-qual]
      300 | { return (void *)__atomic_load_n((void **)obj, __ATOMIC_SEQ_CST); }
          |                                  ^
    /usr/include/python3.13/cpython/pyatomic_gcc.h: In function '_Py_atomic_load_ptr_relaxed':
    /usr/include/python3.13/cpython/pyatomic_gcc.h:359:34: error: cast discards 'const' qualifier from pointer target xt (line 8))

Should I open another issue for that one?

from cpython.

vstinner avatar vstinner commented on August 16, 2024

Good idea, please open a separated issue for the cast issue in pyatomic_gcc.h.

from cpython.

ndparker avatar ndparker commented on August 16, 2024

Good idea, please open a separated issue for the cast issue in pyatomic_gcc.h.

Done.

from cpython.

ndparker avatar ndparker commented on August 16, 2024

I've changed the title to reflect the actual issue I was seeing (modulo the const messup).

from cpython.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.