Program: 76876
Project: 76876
Buggy source:
private final int jjMoveNfa_3(int startState,int curPos){
  int[] nextStates;
  int startsAt=0;
  jjnewStateCnt=3;
  int i=1;
  jjstateSet[0]=startState;
  int j, kind=0x7fffffff;
  for (; ; ) {
    if (++jjround == 0x7fffffff)     ReInitRounds();
    if (curChar < 64) {
      long l=1L << curChar;
      MatchLoop:       do {
switch (jjstateSet[--i]) {
case 1:
          if ((0xffffdfffffffffffL & l) != 0L) {
            if (kind > 18)             kind=18;
            jjCheckNAdd(0);
          }
 else           if (curChar == 45)           jjCheckNAdd(2);
        break;
case 0:
      if ((0xffffdfffffffffffL & l) == 0L)       break;
    if (kind > 18)     kind=18;
  jjCheckNAdd(0);
break;
case 2:
if ((0xffffdfffffffffffL & l) == 0L) break;
if (kind > 19) kind=19;
jjCheckNAdd(2);
break;
default :
break;
}
}
 while (i != startsAt);
}
 else if (curChar < 128) {
long l=1L << (curChar & 077);
MatchLoop: do {
switch (jjstateSet[--i]) {
case 1:
case 0:
if (kind > 18) kind=18;
jjCheckNAdd(0);
break;
case 2:
if (kind > 19) kind=19;
jjstateSet[jjnewStateCnt++]=2;
break;
default :
break;
}
}
 while (i != startsAt);
}
 else {
int hiByte=(int)(curChar >> 8);
int i1=hiByte >> 6;
long l1=1L << (hiByte & 077);
int i2=(curChar & 0xff) >> 6;
long l2=1L << (curChar & 077);
MatchLoop: do {
switch (jjstateSet[--i]) {
case 1:
case 0:
if (!jjCanMove_0(hiByte,i1,i2,l1,l2)) break;
if (kind > 18) kind=18;
jjCheckNAdd(0);
break;
case 2:
if (!jjCanMove_0(hiByte,i1,i2,l1,l2)) break;
if (kind > 19) kind=19;
jjstateSet[jjnewStateCnt++]=2;
break;
default :
break;
}
}
 while (i != startsAt);
}
if (kind != 0x7fffffff) {
jjmatchedKind=kind;
jjmatchedPos=curPos;
kind=0x7fffffff;
}
++curPos;
if ((i=jjnewStateCnt) == (startsAt=3 - (jjnewStateCnt=startsAt))) return curPos;
try {
curChar=input_stream.readChar();
}
 catch (java.io.IOException e) {
return curPos;
}
}
}

Fixed version (ground truth):
private final int jjMoveNfa_3(int startState,int curPos){
  int startsAt=0;
  jjnewStateCnt=3;
  int i=1;
  jjstateSet[0]=startState;
  int kind=0x7fffffff;
  for (; ; ) {
    if (++jjround == 0x7fffffff)     ReInitRounds();
    if (curChar < 64) {
      long l=1L << curChar;
      do {
switch (jjstateSet[--i]) {
case 1:
          if ((0xffffdfffffffffffL & l) != 0L) {
            if (kind > 18)             kind=18;
            jjCheckNAdd(0);
          }
 else           if (curChar == 45)           jjCheckNAdd(2);
        break;
case 0:
      if ((0xffffdfffffffffffL & l) == 0L)       break;
    if (kind > 18)     kind=18;
  jjCheckNAdd(0);
break;
case 2:
if ((0xffffdfffffffffffL & l) == 0L) break;
if (kind > 19) kind=19;
jjCheckNAdd(2);
break;
default :
break;
}
}
 while (i != startsAt);
}
 else if (curChar < 128) {
do {
switch (jjstateSet[--i]) {
case 1:
case 0:
if (kind > 18) kind=18;
jjCheckNAdd(0);
break;
case 2:
if (kind > 19) kind=19;
jjstateSet[jjnewStateCnt++]=2;
break;
default :
break;
}
}
 while (i != startsAt);
}
 else {
int hiByte=(int)(curChar >> 8);
int i1=hiByte >> 6;
long l1=1L << (hiByte & 077);
int i2=(curChar & 0xff) >> 6;
long l2=1L << (curChar & 077);
do {
switch (jjstateSet[--i]) {
case 1:
case 0:
if (!jjCanMove_0(hiByte,i1,i2,l1,l2)) break;
if (kind > 18) kind=18;
jjCheckNAdd(0);
break;
case 2:
if (!jjCanMove_0(hiByte,i1,i2,l1,l2)) break;
if (kind > 19) kind=19;
jjstateSet[jjnewStateCnt++]=2;
break;
default :
break;
}
}
 while (i != startsAt);
}
if (kind != 0x7fffffff) {
jjmatchedKind=kind;
jjmatchedPos=curPos;
kind=0x7fffffff;
}
++curPos;
if ((i=jjnewStateCnt) == (startsAt=3 - (jjnewStateCnt=startsAt))) return curPos;
try {
curChar=input_stream.readChar();
}
 catch (java.io.IOException e) {
return curPos;
}
}
}