diff options
author | Tal Einat <taleinat@gmail.com> | 2017-11-03 09:09:00 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2017-11-03 09:09:00 (GMT) |
commit | 4f57409a2f7bdf8fb559cddc7c6533ca2c471c67 (patch) | |
tree | fe4ded27d3d8ade96a60a849ddce32c6facfbc6e | |
parent | 700d2e4755921d6c339ff20dacecde1aea64de34 (diff) | |
download | cpython-4f57409a2f7bdf8fb559cddc7c6533ca2c471c67.zip cpython-4f57409a2f7bdf8fb559cddc7c6533ca2c471c67.tar.gz cpython-4f57409a2f7bdf8fb559cddc7c6533ca2c471c67.tar.bz2 |
bpo-31926: fix missing *_METHODDEF statements by argument clinic (#4230)
When a single .c file contains several functions and/or methods with
the same name, a safety _METHODDEF #define statement is generated
only for one of them.
This fixes the bug by using the full name of the function to avoid
duplicates rather than just the name.
-rw-r--r-- | Misc/NEWS.d/next/Build/2017-11-03-10-07-14.bpo-31926.57wE98.rst | 2 | ||||
-rw-r--r-- | Modules/clinic/zlibmodule.c.h | 6 | ||||
-rw-r--r-- | Modules/zlibmodule.c | 4 | ||||
-rwxr-xr-x | Tools/clinic/clinic.py | 4 |
4 files changed, 9 insertions, 7 deletions
diff --git a/Misc/NEWS.d/next/Build/2017-11-03-10-07-14.bpo-31926.57wE98.rst b/Misc/NEWS.d/next/Build/2017-11-03-10-07-14.bpo-31926.57wE98.rst new file mode 100644 index 0000000..2a42104 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2017-11-03-10-07-14.bpo-31926.57wE98.rst @@ -0,0 +1,2 @@ +Fixed Argument Clinic sometimes causing compilation errors when there was +more than one function and/or method in a .c file with the same name. diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h index 3edf7db..33c7672 100644 --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -467,4 +467,8 @@ exit: #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=e0184313eb431e95 input=a9049054013a1b77]*/ + +#ifndef ZLIB_DECOMPRESS_COPY_METHODDEF + #define ZLIB_DECOMPRESS_COPY_METHODDEF +#endif /* !defined(ZLIB_DECOMPRESS_COPY_METHODDEF) */ +/*[clinic end generated code: output=6378d429f0819817 input=a9049054013a1b77]*/ diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index cf086de..cb2aae1 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -1138,9 +1138,7 @@ static PyMethodDef comp_methods[] = { ZLIB_COMPRESS_COMPRESS_METHODDEF ZLIB_COMPRESS_FLUSH_METHODDEF -#ifdef HAVE_ZLIB_COPY ZLIB_COMPRESS_COPY_METHODDEF -#endif {NULL, NULL} }; @@ -1148,9 +1146,7 @@ static PyMethodDef Decomp_methods[] = { ZLIB_DECOMPRESS_DECOMPRESS_METHODDEF ZLIB_DECOMPRESS_FLUSH_METHODDEF -#ifdef HAVE_ZLIB_COPY ZLIB_DECOMPRESS_COPY_METHODDEF -#endif {NULL, NULL} }; diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py index 91d8440..4cdfebb 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -957,8 +957,8 @@ class CLanguage(Language): cpp_if = "#if " + conditional cpp_endif = "#endif /* " + conditional + " */" - if methoddef_define and f.name not in clinic.ifndef_symbols: - clinic.ifndef_symbols.add(f.name) + if methoddef_define and f.full_name not in clinic.ifndef_symbols: + clinic.ifndef_symbols.add(f.full_name) methoddef_ifndef = normalize_snippet(""" #ifndef {methoddef_name} #define {methoddef_name} |