https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101737

Ilya Zakharevich <nospam-abuse at ilyaz dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |nospam-abuse at ilyaz dot org

--- Comment #3 from Ilya Zakharevich <nospam-abuse at ilyaz dot org> ---
Another occurrence:

cc -c -I pari-2.3.5/src -I pari-2.3.5/src/headers -I pari-2.3.5/src -I
./libPARI  -I ../pari-2.3.5/src -I ../pari-2.3.5/src/headers -I
../pari-2.3.5/src/graph -I . -fwrapv -fno-strict-aliasing -pipe
-fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64  -O2   -DVERSION=\"\" -DXS_VERSION=\"\" -fPIC
-DPLOT_IS_TUNABLE -DHAS_STAT -DHAS_OPENDIR -DASMINLINE -DGCC_INLINE
-DDYNAMIC_PLOTTING -o trans2.o ../pari-2.3.5/src/basemath/trans2.c
during RTL pass: split1
../pari-2.3.5/src/basemath/trans2.c: In function âÂÂgasinâÂÂ:
../pari-2.3.5/src/basemath/trans2.c:214:1: internal compiler error:
Segmentation fault
  214 | }
      | ^

This was extracted from the remote testing report:
  https://www.cpantesters.org/cpan/report/cdb99a16-b09c-11ec-abe2-d569c5ce77ec
(This is “remote testing”, so this report is “as good as it gets”; I cannot
provide more details than in the report above.)

To reproduce: one should get and untar 
 
https://cpan.metacpan.org/authors/id/I/IL/ILYAZ/modules/Math-Pari-2.030522a.tar.gz

then run (in the extracted directory)
  perl Makefile.PL
  make

⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜

In fact, I can also produce the text of the subroutine, and how it is
preprocessed (on MY machine, with gcc 4.9.3):

GEN
gasin(GEN x, long prec)
{
  long sx;
  pari_sp av;
  GEN a, y, p1;

  switch(typ(x))
  {
    case t_REAL: sx = signe(x);
      if (!sx) return real_0_bit(expo(x));
      if (absrnz_egal1(x)) { /* |x| = 1 */
        if (sx > 0) return Pi2n(-1, lg(x)); /* 1 */
        y = Pi2n(-1, lg(x)); setsigne(y, -1); return y; /* -1 */
      }
      if (expo(x) < 0) return mpasin(x);
      y = cgetg(3,t_COMPLEX);
      gel(y,1) = Pi2n(-1, lg(x));
      gel(y,2) = mpach(x);
      if (sx < 0)
      {
        setsigne(y[1],-signe(y[1]));
        setsigne(y[2],-signe(y[2]));
      }
      return y;

    case t_COMPLEX:
      av = avma;
      return gerepilecopy(av, mulcxmI(gash(mulcxI(x), prec)));

    case t_INTMOD: case t_PADIC: pari_err(typeer,"gasin");
    default:
      av = avma; if (!(y = toser_i(x))) break;
      if (gcmp0(y)) return gcopy(y);
      /* lg(y) > 2*/
      if (valp(y) < 0) pari_err(negexper,"gasin");
      p1 = gsubsg(1,gsqr(y));
      if (gcmp0(p1))
      {
        GEN t = Pi2n(-1,prec);
        if (gsigne(gel(y,2)) < 0) setsigne(t, -1);
        return gerepileupto(av, scalarser(t, varn(y), valp(p1)>>1));
      }
      p1 = gdiv(derivser(y), gsqrt(p1,prec));
      a = integ(p1,varn(y));
      if (!valp(y)) a = gadd(a, gasin(gel(y,2),prec));
      return gerepileupto(av, a);
  }
  return transc(gasin,x,prec);
}

⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜  Proprocessed (with gcc v4.9.3)

GEN
gasin(GEN x, long prec)
{
  long sx;
  pari_sp av;
  GEN a, y, p1;

  switch(((long)(((pari_ulong)((x)[0])) >> (32 - 7))))
  {
    case t_REAL: sx = (((long)((x)[1])) >> (32 - 2));
      if (!sx) return real_0_bit(((long) ((((pari_ulong)((x)[1])) & ((1UL<<(32
- 2))-1)) - (1UL<<((32 - 2)-1)))));
      if (absrnz_equal1(x)) {
        if (sx > 0) return Pi2n(-1, ((long)(((pari_ulong)((x)[0])) & ((1UL<<(32
- 1 - 7))-1))));
        y = Pi2n(-1, ((long)(((pari_ulong)((x)[0])) & ((1UL<<(32 - 1 -
7))-1)))); (((pari_ulong*)(y))[1]= (((pari_ulong*)(y))[1]&(~(~((1UL<<(32 - 2))
- 1)))) | (pari_ulong)(((pari_ulong)(-1)) << (32 - 2))); return y;
      }
      if (((long) ((((pari_ulong)((x)[1])) & ((1UL<<(32 - 2))-1)) - (1UL<<((32
- 2)-1)))) < 0) return mpasin(x);
      y = cgetg(3,t_COMPLEX);
      (((GEN*) (y))[1]) = Pi2n(-1, ((long)(((pari_ulong)((x)[0])) & ((1UL<<(32
- 1 - 7))-1))));
      (((GEN*) (y))[2]) = mpacosh(x);
      if (sx < 0) togglesign((((GEN*) (y))[1])); else togglesign((((GEN*)
(y))[2]));
      return y;

    case t_COMPLEX:
      if (ismpzero((((GEN*) (x))[2]))) return gasin((((GEN*) (x))[1]), prec);
      av = avma;
      return gerepilecopy(av, mulcxmI(gasinh(mulcxI(x), prec)));
    default:
      av = avma; if (!(y = toser_i(x))) break;
      if (gequal0(y)) return gerepilecopy(av, y);

      if (((long) ((((pari_ulong)((y)[1])) & ((1UL<<(32 - 2 - 14))-1)) -
(1UL<<((32 - 2 - 14)-1)))) < 0) pari_err_DOMAIN("asin","valuation", "<", gen_0,
x);
      p1 = gsubsg(1,gsqr(y));
      if (gequal0(p1))
      {
        GEN t = Pi2n(-1,prec);
        if (gsigne((((GEN*) (y))[2])) < 0) (((pari_ulong*)(t))[1]=
(((pari_ulong*)(t))[1]&(~(~((1UL<<(32 - 2)) - 1)))) |
(pari_ulong)(((pari_ulong)(-1)) << (32 - 2)));
        return gerepileupto(av, scalarser(t,
((long)((((pari_ulong)((y)[1]))&(((1UL<<14)-1)<<(32 - 2 - 14))) >> (32 - 2 -
14))), ((long) ((((pari_ulong)((p1)[1])) & ((1UL<<(32 - 2 - 14))-1)) -
(1UL<<((32 - 2 - 14)-1))))>>1));
      }
      p1 = gdiv(derivser(y), gsqrt(p1,prec));
      a = integser(p1);
      if (!((long) ((((pari_ulong)((y)[1])) & ((1UL<<(32 - 2 - 14))-1)) -
(1UL<<((32 - 2 - 14)-1))))) a = gadd(a, gasin((((GEN*) (y))[2]),prec));
      return gerepileupto(av, a);
  }
  return trans_eval("asin",gasin,x,prec);
}

Reply via email to