Here is a patch. The last version consistently failed on 5.28.1 with -Duseshrplib
diff -purd Math-Cephes-0.5305/Cephes_wrap.c Math-Cephes-0.5305-0/Cephes_wrap.c
--- Math-Cephes-0.5305/Cephes_wrap.c 2012-11-10 10:31:23.000000000 +0100
+++ Math-Cephes-0.5305-0/Cephes_wrap.c 2018-12-09 19:02:05.991423445 +0100
@@ -1685,7 +1685,7 @@ XS(_wrap_airy) {
sv_setiv(ST(argvi++), (IV) result);
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg2));
@@ -1693,7 +1693,7 @@ XS(_wrap_airy) {
}
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg3));
@@ -1701,7 +1701,7 @@ XS(_wrap_airy) {
}
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg4));
@@ -1709,7 +1709,7 @@ XS(_wrap_airy) {
}
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg5));
@@ -2855,7 +2855,7 @@ XS(_wrap_euclid) {
sv_setnv(ST(argvi++), (double) result);
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg1));
@@ -2863,7 +2863,7 @@ XS(_wrap_euclid) {
}
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg2));
@@ -3325,7 +3325,7 @@ XS(_wrap_ellpj) {
sv_setiv(ST(argvi++), (IV) result);
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg3));
@@ -3333,7 +3333,7 @@ XS(_wrap_ellpj) {
}
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg4));
@@ -3341,7 +3341,7 @@ XS(_wrap_ellpj) {
}
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg5));
@@ -3349,7 +3349,7 @@ XS(_wrap_ellpj) {
}
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg6));
@@ -3709,7 +3709,7 @@ XS(_wrap_md_frexp) {
sv_setnv(ST(argvi++), (double) result);
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setiv(ST(argvi),(IV) *(arg2));
@@ -3773,7 +3773,7 @@ XS(_wrap_fresnl) {
sv_setiv(ST(argvi++), (IV) result);
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg2));
@@ -3781,7 +3781,7 @@ XS(_wrap_fresnl) {
}
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg3));
@@ -3995,7 +3995,7 @@ XS(_wrap_hyp2f0) {
sv_setnv(ST(argvi++), (double) result);
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg5));
@@ -5157,7 +5157,7 @@ XS(_wrap_shichi) {
sv_setiv(ST(argvi++), (IV) result);
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg2));
@@ -5165,7 +5165,7 @@ XS(_wrap_shichi) {
}
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg3));
@@ -5203,7 +5203,7 @@ XS(_wrap_sici) {
sv_setiv(ST(argvi++), (IV) result);
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg2));
@@ -5211,7 +5211,7 @@ XS(_wrap_sici) {
}
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg3));
@@ -5505,7 +5505,7 @@ XS(_wrap_onef2) {
sv_setnv(ST(argvi++), (double) result);
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg5));
@@ -5549,7 +5549,7 @@ XS(_wrap_threef0) {
sv_setnv(ST(argvi++), (double) result);
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg5));
@@ -5904,7 +5904,7 @@ XS(_wrap_drand) {
sv_setiv(ST(argvi++), (IV) result);
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setnv(ST(argvi),(double) *(arg1));
@@ -6534,7 +6534,7 @@ XS(_wrap_cpmul_wrap) {
}
{
if (argvi >= items) {
- EXTEND(sp,1);
+ EXTEND(sp,argvi);
}
ST(argvi) = sv_newmortal();
sv_setiv(ST(argvi),(IV) *(arg9));