From: Serhiy Storchaka Date: Tue, 31 May 2022 05:46:16 +0000 (+0300) Subject: gh-93345: Fix a crash in substitution of nested TypeVar after TypeVarTuple (GH-93346) X-Git-Tag: v3.12.0a1~1392 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f545fc955aeb701ae4e73b07ff2283f823d857b8;p=thirdparty%2FPython%2Fcpython.git gh-93345: Fix a crash in substitution of nested TypeVar after TypeVarTuple (GH-93346) For example: tuple[*Ts, list[T]][int, str, bool] --- diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 2afac2353915..d6cd3d9bdd6a 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -768,12 +768,18 @@ class GenericAliasSubstitutionTests(BaseTestCase): ('generic[T, *Ts]', '[int]', 'generic[int]'), ('generic[T, *Ts]', '[int, str]', 'generic[int, str]'), ('generic[T, *Ts]', '[int, str, bool]', 'generic[int, str, bool]'), + ('generic[list[T], *Ts]', '[int]', 'generic[list[int]]'), + ('generic[list[T], *Ts]', '[int, str]', 'generic[list[int], str]'), + ('generic[list[T], *Ts]', '[int, str, bool]', 'generic[list[int], str, bool]'), ('generic[T, *Ts]', '[*tuple[int, ...]]', 'TypeError'), # Should be generic[int, *tuple[int, ...]] ('generic[*Ts, T]', '[int]', 'generic[int]'), ('generic[*Ts, T]', '[int, str]', 'generic[int, str]'), - ('generic[*Ts, T]', '[int, str, bool]', 'generic[int, str, bool]'), + ('generic[*Ts, T]', '[int, str, bool]', 'generic[int, str, bool]'), + ('generic[*Ts, list[T]]', '[int]', 'generic[list[int]]'), + ('generic[*Ts, list[T]]', '[int, str]', 'generic[int, list[str]]'), + ('generic[*Ts, list[T]]', '[int, str, bool]', 'generic[int, str, list[bool]]'), ('generic[T, *tuple_type[int, ...]]', '[str]', 'generic[str, *tuple_type[int, ...]]'), ('generic[T1, T2, *tuple_type[int, ...]]', '[str, bool]', 'generic[str, bool, *tuple_type[int, ...]]'), diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-05-30-10-22-46.gh-issue-93345.gi1A4L.rst b/Misc/NEWS.d/next/Core and Builtins/2022-05-30-10-22-46.gh-issue-93345.gi1A4L.rst new file mode 100644 index 000000000000..4cdb37cfe469 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2022-05-30-10-22-46.gh-issue-93345.gi1A4L.rst @@ -0,0 +1,2 @@ +Fix a crash in substitution of a ``TypeVar`` in nested generic alias after +``TypeVarTuple``. diff --git a/Objects/genericaliasobject.c b/Objects/genericaliasobject.c index 39fd70999ecb..59420816496f 100644 --- a/Objects/genericaliasobject.c +++ b/Objects/genericaliasobject.c @@ -296,7 +296,7 @@ subs_tvars(PyObject *obj, PyObject *params, else { if (iparam >= 0) { if (iparam > varparam) { - iparam += nargs - nsubargs; + iparam += nargs - nparams; } arg = argitems[iparam]; }