Program: 52427
Project: 52427
Buggy source:
public static void square(int[] x,int xOff,int[] zz,int zzOff){
  long x_0=x[xOff + 0] & M;
  long zz_1;
  int c=0, w;
{
    int i=4, j=10;
    do {
      long xVal=(x[xOff + i--] & M);
      long p=xVal * xVal;
      zz[zzOff + --j]=(c << 31) | (int)(p >>> 33);
      zz[zzOff + --j]=(int)(p >>> 1);
      c=(int)p;
    }
 while (i > 0);
{
      long p=x_0 * x_0;
      zz_1=((c << 31) & M) | (p >>> 33);
      zz[zzOff + 0]=(int)p;
      c=(int)(p >>> 32) & 1;
    }
  }
  long x_1=x[xOff + 1] & M;
  long zz_2=zz[zzOff + 2] & M;
{
    zz_1+=x_1 * x_0;
    w=(int)zz_1;
    zz[zzOff + 1]=(w << 1) | c;
    c=w >>> 31;
    zz_2+=zz_1 >>> 32;
  }
  long x_2=x[xOff + 2] & M;
  long zz_3=zz[zzOff + 3] & M;
  long zz_4=zz[zzOff + 4] & M;
{
    zz_2+=x_2 * x_0;
    w=(int)zz_2;
    zz[zzOff + 2]=(w << 1) | c;
    c=w >>> 31;
    zz_3+=(zz_2 >>> 32) + x_2 * x_1;
    zz_4+=zz_3 >>> 32;
    zz_3&=M;
  }
  long x_3=x[xOff + 3] & M;
  long zz_5=zz[zzOff + 5] & M;
  long zz_6=zz[zzOff + 6] & M;
{
    zz_3+=x_3 * x_0;
    w=(int)zz_3;
    zz[zzOff + 3]=(w << 1) | c;
    c=w >>> 31;
    zz_4+=(zz_3 >>> 32) + x_3 * x_1;
    zz_5+=(zz_4 >>> 32) + x_3 * x_2;
    zz_4&=M;
    zz_6+=zz_5 >>> 32;
    zz_5&=M;
  }
  long x_4=x[xOff + 4] & M;
  long zz_7=zz[zzOff + 7] & M;
  long zz_8=zz[zzOff + 8] & M;
{
    zz_4+=x_4 * x_0;
    w=(int)zz_4;
    zz[zzOff + 4]=(w << 1) | c;
    c=w >>> 31;
    zz_5+=(zz_4 >>> 32) + x_4 * x_1;
    zz_6+=(zz_5 >>> 32) + x_4 * x_2;
    zz_7+=(zz_6 >>> 32) + x_4 * x_3;
    zz_8+=zz_7 >>> 32;
  }
  w=(int)zz_5;
  zz[zzOff + 5]=(w << 1) | c;
  c=w >>> 31;
  w=(int)zz_6;
  zz[zzOff + 6]=(w << 1) | c;
  c=w >>> 31;
  w=(int)zz_7;
  zz[zzOff + 7]=(w << 1) | c;
  c=w >>> 31;
  w=(int)zz_8;
  zz[zzOff + 8]=(w << 1) | c;
  c=w >>> 31;
  w=zz[zzOff + 9] + (int)(zz_8 >> 32);
  zz[zzOff + 9]=(w << 1) | c;
}

Fixed version (ground truth):
public static void square(int[] x,int xOff,int[] zz,int zzOff){
  long x_0=x[xOff + 0] & M;
  long zz_1;
  int c=0, w;
{
    int i=4, j=10;
    do {
      long xVal=(x[xOff + i--] & M);
      long p=xVal * xVal;
      zz[zzOff + --j]=(c << 31) | (int)(p >>> 33);
      zz[zzOff + --j]=(int)(p >>> 1);
      c=(int)p;
    }
 while (i > 0);
{
      long p=x_0 * x_0;
      zz_1=((c << 31) & M) | (p >>> 33);
      zz[zzOff + 0]=(int)p;
      c=(int)(p >>> 32) & 1;
    }
  }
  long x_1=x[xOff + 1] & M;
  long zz_2=zz[zzOff + 2] & M;
{
    zz_1+=x_1 * x_0;
    w=(int)zz_1;
    zz[zzOff + 1]=(w << 1) | c;
    c=w >>> 31;
    zz_2+=zz_1 >>> 32;
  }
  long x_2=x[xOff + 2] & M;
  long zz_3=zz[zzOff + 3] & M;
  long zz_4=zz[zzOff + 4] & M;
{
    zz_2+=x_2 * x_0;
    w=(int)zz_2;
    zz[zzOff + 2]=(w << 1) | c;
    c=w >>> 31;
    zz_3+=(zz_2 >>> 32) + x_2 * x_1;
    zz_4+=zz_3 >>> 32;
    zz_3&=M;
  }
  long x_3=x[xOff + 3] & M;
  long zz_5=(zz[zzOff + 5] & M) + (zz_4 >>> 32);
  zz_4&=M;
  long zz_6=(zz[zzOff + 6] & M) + (zz_5 >>> 32);
  zz_5&=M;
{
    zz_3+=x_3 * x_0;
    w=(int)zz_3;
    zz[zzOff + 3]=(w << 1) | c;
    c=w >>> 31;
    zz_4+=(zz_3 >>> 32) + x_3 * x_1;
    zz_5+=(zz_4 >>> 32) + x_3 * x_2;
    zz_4&=M;
    zz_6+=zz_5 >>> 32;
    zz_5&=M;
  }
  long x_4=x[xOff + 4] & M;
  long zz_7=(zz[zzOff + 7] & M) + (zz_6 >>> 32);
  zz_6&=M;
  long zz_8=(zz[zzOff + 8] & M) + (zz_7 >>> 32);
  zz_7&=M;
{
    zz_4+=x_4 * x_0;
    w=(int)zz_4;
    zz[zzOff + 4]=(w << 1) | c;
    c=w >>> 31;
    zz_5+=(zz_4 >>> 32) + x_4 * x_1;
    zz_6+=(zz_5 >>> 32) + x_4 * x_2;
    zz_7+=(zz_6 >>> 32) + x_4 * x_3;
    zz_8+=zz_7 >>> 32;
  }
  w=(int)zz_5;
  zz[zzOff + 5]=(w << 1) | c;
  c=w >>> 31;
  w=(int)zz_6;
  zz[zzOff + 6]=(w << 1) | c;
  c=w >>> 31;
  w=(int)zz_7;
  zz[zzOff + 7]=(w << 1) | c;
  c=w >>> 31;
  w=(int)zz_8;
  zz[zzOff + 8]=(w << 1) | c;
  c=w >>> 31;
  w=zz[zzOff + 9] + (int)(zz_8 >>> 32);
  zz[zzOff + 9]=(w << 1) | c;
}