Program: 52429
Project: 52429
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=6, j=14;
    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_5&=M;
    zz_7+=(zz_6 >>> 32) + x_4 * x_3;
    zz_6&=M;
    zz_8+=zz_7 >>> 32;
    zz_7&=M;
  }
  long x_5=x[xOff + 5] & M;
  long zz_9=zz[zzOff + 9] & M;
  long zz_10=zz[zzOff + 10] & M;
{
    zz_5+=x_5 * x_0;
    w=(int)zz_5;
    zz[zzOff + 5]=(w << 1) | c;
    c=w >>> 31;
    zz_6+=(zz_5 >>> 32) + x_5 * x_1;
    zz_7+=(zz_6 >>> 32) + x_5 * x_2;
    zz_6&=M;
    zz_8+=(zz_7 >>> 32) + x_5 * x_3;
    zz_7&=M;
    zz_9+=(zz_8 >>> 32) + x_5 * x_4;
    zz_8&=M;
    zz_10+=zz_9 >>> 32;
    zz_9&=M;
  }
  long x_6=x[xOff + 6] & M;
  long zz_11=zz[zzOff + 11] & M;
  long zz_12=zz[zzOff + 12] & M;
{
    zz_6+=x_6 * x_0;
    w=(int)zz_6;
    zz[zzOff + 6]=(w << 1) | c;
    c=w >>> 31;
    zz_7+=(zz_6 >>> 32) + x_6 * x_1;
    zz_8+=(zz_7 >>> 32) + x_6 * x_2;
    zz_9+=(zz_8 >>> 32) + x_6 * x_3;
    zz_10+=(zz_9 >>> 32) + x_6 * x_4;
    zz_11+=(zz_10 >>> 32) + x_6 * x_5;
    zz_12+=zz_11 >>> 32;
  }
  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=(int)zz_9;
  zz[zzOff + 9]=(w << 1) | c;
  c=w >>> 31;
  w=(int)zz_10;
  zz[zzOff + 10]=(w << 1) | c;
  c=w >>> 31;
  w=(int)zz_11;
  zz[zzOff + 11]=(w << 1) | c;
  c=w >>> 31;
  w=(int)zz_12;
  zz[zzOff + 12]=(w << 1) | c;
  c=w >>> 31;
  w=zz[zzOff + 13] + (int)(zz_12 >> 32);
  zz[zzOff + 13]=(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=6, j=14;
    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_5&=M;
    zz_7+=(zz_6 >>> 32) + x_4 * x_3;
    zz_6&=M;
    zz_8+=zz_7 >>> 32;
    zz_7&=M;
  }
  long x_5=x[xOff + 5] & M;
  long zz_9=(zz[zzOff + 9] & M) + (zz_8 >>> 32);
  zz_8&=M;
  long zz_10=(zz[zzOff + 10] & M) + (zz_9 >>> 32);
  zz_9&=M;
{
    zz_5+=x_5 * x_0;
    w=(int)zz_5;
    zz[zzOff + 5]=(w << 1) | c;
    c=w >>> 31;
    zz_6+=(zz_5 >>> 32) + x_5 * x_1;
    zz_7+=(zz_6 >>> 32) + x_5 * x_2;
    zz_6&=M;
    zz_8+=(zz_7 >>> 32) + x_5 * x_3;
    zz_7&=M;
    zz_9+=(zz_8 >>> 32) + x_5 * x_4;
    zz_8&=M;
    zz_10+=zz_9 >>> 32;
    zz_9&=M;
  }
  long x_6=x[xOff + 6] & M;
  long zz_11=(zz[zzOff + 11] & M) + (zz_10 >>> 32);
  zz_10&=M;
  long zz_12=(zz[zzOff + 12] & M) + (zz_11 >>> 32);
  zz_11&=M;
{
    zz_6+=x_6 * x_0;
    w=(int)zz_6;
    zz[zzOff + 6]=(w << 1) | c;
    c=w >>> 31;
    zz_7+=(zz_6 >>> 32) + x_6 * x_1;
    zz_8+=(zz_7 >>> 32) + x_6 * x_2;
    zz_9+=(zz_8 >>> 32) + x_6 * x_3;
    zz_10+=(zz_9 >>> 32) + x_6 * x_4;
    zz_11+=(zz_10 >>> 32) + x_6 * x_5;
    zz_12+=zz_11 >>> 32;
  }
  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=(int)zz_9;
  zz[zzOff + 9]=(w << 1) | c;
  c=w >>> 31;
  w=(int)zz_10;
  zz[zzOff + 10]=(w << 1) | c;
  c=w >>> 31;
  w=(int)zz_11;
  zz[zzOff + 11]=(w << 1) | c;
  c=w >>> 31;
  w=(int)zz_12;
  zz[zzOff + 12]=(w << 1) | c;
  c=w >>> 31;
  w=zz[zzOff + 13] + (int)(zz_12 >>> 32);
  zz[zzOff + 13]=(w << 1) | c;
}