diff --git a/Lib/test/test_clinic.py b/Lib/test/test_clinic.py index 3aa41631d36..59669d61f01 100644 --- a/Lib/test/test_clinic.py +++ b/Lib/test/test_clinic.py @@ -416,6 +416,16 @@ def __init__(self): """ self.expect_failure(block, err, lineno=8) + def test_module_already_got_one(self): + err = "Already defined module 'm'!" + block = """ + /*[clinic input] + module m + module m + [clinic start generated code]*/ + """ + self.expect_failure(block, err, lineno=3) + class ClinicGroupPermuterTest(TestCase): def _test(self, l, m, r, output): diff --git a/Misc/NEWS.d/next/Tools-Demos/2023-08-04-00-04-40.gh-issue-107609.2DqgtL.rst b/Misc/NEWS.d/next/Tools-Demos/2023-08-04-00-04-40.gh-issue-107609.2DqgtL.rst new file mode 100644 index 00000000000..080a6c15d9b --- /dev/null +++ b/Misc/NEWS.d/next/Tools-Demos/2023-08-04-00-04-40.gh-issue-107609.2DqgtL.rst @@ -0,0 +1,3 @@ +Fix duplicate module check in Argument Clinic. Previously, a duplicate +definition would incorrectly be silently accepted. Patch by Erlend E. +Aasland. diff --git a/Modules/_testcapi/vectorcall.c b/Modules/_testcapi/vectorcall.c index 61c6e0f485f..2b5110fcba2 100644 --- a/Modules/_testcapi/vectorcall.c +++ b/Modules/_testcapi/vectorcall.c @@ -155,10 +155,9 @@ VectorCallClass_vectorcall(PyObject *callable, } /*[clinic input] -module _testcapi class _testcapi.VectorCallClass "PyObject *" "&PyType_Type" [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=8423a8e919f2f0df]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=95c63c1a47f9a995]*/ /*[clinic input] _testcapi.VectorCallClass.set_vectorcall diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py index 733a83ee58c..7525c1ca524 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -4472,7 +4472,7 @@ def directive_module(self, name: str) -> None: if cls: fail("Can't nest a module inside a class!") - if name in module.classes: + if name in module.modules: fail("Already defined module " + repr(name) + "!") m = Module(name, module)