Index: Python/ast.c =================================================================== --- Python/ast.c (revision 59431) +++ Python/ast.c (working copy) @@ -649,7 +649,11 @@ arg_ty arg; int i = start; int j = 0; /* index for kwdefaults and kwonlyargs */ - assert(kwonlyargs != NULL); + + if (kwonlyargs == NULL) { + ast_error(CHILD(n, start), "no name for vararg"); + return -1; + } assert(kwdefaults != NULL); while (i < NCH(n)) { ch = CHILD(n, i); Index: Lib/test/test_keywordonlyarg.py =================================================================== --- Lib/test/test_keywordonlyarg.py (revision 59431) +++ Lib/test/test_keywordonlyarg.py (working copy) @@ -48,6 +48,7 @@ self.assertRaisesSyntaxError("def f(p1, *, p1=100):\n pass\n") self.assertRaisesSyntaxError("def f(p1, *k1, k1=100):\n pass\n") self.assertRaisesSyntaxError("def f(p1, *, k1, k1=100):\n pass\n") + self.assertRaisesSyntaxError("def f(p1, *, **k1):\n pass\n") self.assertRaisesSyntaxError("def f(p1, *, k1, **k1):\n pass\n") self.assertRaisesSyntaxError("def f(p1, *, None, **k1):\n pass\n") self.assertRaisesSyntaxError("def f(p, *, (k1, k2), **kw):\n pass\n")