From f8b3f6b178e48773cd7298141cbaf408c6917e41 Mon Sep 17 00:00:00 2001 From: Tal Einat Date: Fri, 3 Nov 2017 15:43:13 +0200 Subject: [3.6] bpo-31926: fix missing *_METHODDEF statements by argument clinic (GH-4230) (#4253) When a single .c file contains several functions and/or methods with the same name, a safety _METHODDEF GH-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.. (cherry picked from commit 4f57409a2f7bdf8fb559cddc7c6533ca2c471c67) --- Misc/NEWS.d/next/Build/2017-11-03-10-07-14.bpo-31926.57wE98.rst | 2 ++ Modules/clinic/zlibmodule.c.h | 6 +++++- Modules/zlibmodule.c | 4 ---- Tools/clinic/clinic.py | 4 ++-- 4 files changed, 9 insertions(+), 7 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2017-11-03-10-07-14.bpo-31926.57wE98.rst 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 fda392a..7339596 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=3a4e2bfe750423a3 input=a9049054013a1b77]*/ + +#ifndef ZLIB_DECOMPRESS_COPY_METHODDEF + #define ZLIB_DECOMPRESS_COPY_METHODDEF +#endif /* !defined(ZLIB_DECOMPRESS_COPY_METHODDEF) */ +/*[clinic end generated code: output=497dad1132c962e2 input=a9049054013a1b77]*/ diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c index cfe7f88..29f55bd 100644 --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -1149,9 +1149,7 @@ static PyMethodDef comp_methods[] = { ZLIB_COMPRESS_COMPRESS_METHODDEF ZLIB_COMPRESS_FLUSH_METHODDEF -#ifdef HAVE_ZLIB_COPY ZLIB_COMPRESS_COPY_METHODDEF -#endif {NULL, NULL} }; @@ -1159,9 +1157,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 75ac673..f8663f0 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -928,8 +928,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} -- cgit v0.12