Had some spare cycles, so gave it a go... didn't take long to come back with the commit quoted below. It's over two years ago now (first appeared in v5.17.2), and from the commit message looks like maybe a path where the check doesn't happen was overlooked?:
commit c087f08cbf44e0e4794563768e3adf95e484be98
Author: Father Chrysostomos <sprout@cpan.org>
Date: Sat Jul 14 12:28:15 2012
op.c: ck_grep does not need to check num of args
It calls ck_fun first, which does the same check, so it is
unnecessary.
diff --git a/op.c b/op.c
index acea933..b5a78d5 100644
--- a/op.c
+++ b/op.c
@@ -8622,8 +8622,6 @@ Perl_ck_grep(pTHX_ OP *o)
}
kid = cLISTOPo->op_first->op_sibling;
- if (!kid || !kid->op_sibling)
- return too_few_arguments_pv(o,OP_DESC(o), 0);
for (kid = kid->op_sibling; kid; kid = kid->op_sibling)
op_lvalue(kid, OP_GREPSTART);