diff --git a/Lib/test/test_clinic.py b/Lib/test/test_clinic.py index e57f4c4a9d556af..966bb359ff3f5fc 100644 --- a/Lib/test/test_clinic.py +++ b/Lib/test/test_clinic.py @@ -3570,6 +3570,18 @@ class Foo "FooObject *" "Foo_Type" """ self.expect_failure(block, err, lineno=7) + def test_vectorcall_with_deprecated_parameters(self): + err = "@vectorcall does not support deprecated parameters" + block = """ + module m + class Foo "FooObject *" "Foo_Type" + @vectorcall + Foo.__init__ + a: object = None + / [from 3.14] + """ + self.expect_failure(block, err, lineno=5) + def test_unused_param(self): block = self.parse(""" module foo diff --git a/Tools/clinic/libclinic/dsl_parser.py b/Tools/clinic/libclinic/dsl_parser.py index d4fcf4d6b350c6d..7ac6b3b3d253947 100644 --- a/Tools/clinic/libclinic/dsl_parser.py +++ b/Tools/clinic/libclinic/dsl_parser.py @@ -1643,6 +1643,9 @@ def check_vectorcall_parameters(self, lineno: int) -> None: if p.group: fail("@vectorcall does not support optional groups", line_number=lineno) + if p.deprecated_positional or p.deprecated_keyword: + fail("@vectorcall does not support deprecated parameters", + line_number=lineno) if p.is_vararg() or p.is_var_keyword(): continue if isinstance(p.converter, (self_converter,