Program: 13985
Project: 13985
Buggy source:
/** 
 * @param julian chronology used before the cutover instant
 * @param gregorian chronology used at and after the cutover instant
 * @param cutoverInstant instant when the gregorian chronology began
 */
CutoverChronology(JulianChronology julian,GregorianChronology gregorian,long cutoverInstant){
  checkUTC(julian);
  checkUTC(gregorian);
  if (julian.getMinimumDaysInFirstWeek() != gregorian.getMinimumDaysInFirstWeek()) {
    throw new IllegalArgumentException();
  }
  if (julian.isCenturyISO() != gregorian.isCenturyISO()) {
    throw new IllegalArgumentException();
  }
  iJulianChronology=julian;
  iGregorianChronology=gregorian;
  iCutoverInstant=cutoverInstant;
  iGapDuration=cutoverInstant - julianToGregorian(cutoverInstant);
  copyFields(gregorian);
  if (gregorian.millisOfDay().get(cutoverInstant) == 0) {
    iMillisOfSecondField=new CutoverField(julian.millisOfSecond(),iMillisOfSecondField);
    iMillisOfDayField=new CutoverField(julian.millisOfDay(),iMillisOfDayField);
    iSecondOfMinuteField=new CutoverField(julian.secondOfMinute(),iSecondOfMinuteField);
    iSecondOfDayField=new CutoverField(julian.secondOfDay(),iSecondOfDayField);
    iMinuteOfHourField=new CutoverField(julian.minuteOfHour(),iMinuteOfHourField);
    iMinuteOfDayField=new CutoverField(julian.minuteOfDay(),iMinuteOfDayField);
    iHourOfDayField=new CutoverField(julian.hourOfDay(),iHourOfDayField);
    iHourOfHalfdayField=new CutoverField(julian.hourOfHalfday(),iHourOfHalfdayField);
    iClockhourOfDayField=new CutoverField(julian.clockhourOfDay(),iClockhourOfDayField);
    iClockhourOfHalfdayField=new CutoverField(julian.clockhourOfHalfday(),iClockhourOfHalfdayField);
    iHalfdayOfDayField=new CutoverField(julian.halfdayOfDay(),iHalfdayOfDayField);
  }
{
    iEraField=new CutoverField(julian.era(),gregorian.era());
    iDayOfMonthField=new CutoverField(julian.dayOfMonth(),gregorian.dayOfMonth());
  }
{
    long cutover=gregorian.year().roundCeiling(iCutoverInstant);
    iDayOfYearField=new CutoverField(julian.dayOfYear(),gregorian.dayOfYear(),cutover);
  }
{
    long cutover=gregorian.weekyear().roundCeiling(iCutoverInstant);
    iWeekOfWeekyearField=new CutoverField(julian.weekOfWeekyear(),gregorian.weekOfWeekyear(),cutover);
  }
{
    iYearField=new ImpreciseCutoverField(julian.year(),gregorian.year());
    iYearsField=iYearField.getDurationField();
    iYearOfEraField=new ImpreciseCutoverField(julian.yearOfEra(),gregorian.yearOfEra(),iYearsField);
    iYearOfCenturyField=new ImpreciseCutoverField(julian.yearOfCentury(),gregorian.yearOfCentury(),iYearsField);
    iCenturyOfEraField=new ImpreciseCutoverField(julian.centuryOfEra(),gregorian.centuryOfEra());
    iCenturiesField=iCenturyOfEraField.getDurationField();
    iMonthOfYearField=new ImpreciseCutoverField(julian.monthOfYear(),gregorian.monthOfYear());
    iMonthsField=iMonthOfYearField.getDurationField();
    iWeekyearField=new ImpreciseCutoverField(julian.weekyear(),gregorian.weekyear());
    iWeekyearsField=iWeekyearField.getDurationField();
  }
}

Fixed version (ground truth):
/** 
 * @param julian chronology used before the cutover instant
 * @param gregorian chronology used at and after the cutover instant
 * @param cutoverInstant instant when the gregorian chronology began
 */
CutoverChronology(JulianChronology julian,GregorianChronology gregorian,long cutoverInstant){
  checkUTC(julian);
  checkUTC(gregorian);
  if (julian.getMinimumDaysInFirstWeek() != gregorian.getMinimumDaysInFirstWeek()) {
    throw new IllegalArgumentException();
  }
  if (julian.isCenturyISO() != gregorian.isCenturyISO()) {
    throw new IllegalArgumentException();
  }
  iJulianChronology=julian;
  iGregorianChronology=gregorian;
  iCutoverInstant=cutoverInstant;
  iGapDuration=cutoverInstant - julianToGregorianByYear(cutoverInstant);
  copyFields(gregorian);
  if (gregorian.millisOfDay().get(cutoverInstant) == 0) {
    iMillisOfSecondField=new CutoverField(julian.millisOfSecond(),iMillisOfSecondField);
    iMillisOfDayField=new CutoverField(julian.millisOfDay(),iMillisOfDayField);
    iSecondOfMinuteField=new CutoverField(julian.secondOfMinute(),iSecondOfMinuteField);
    iSecondOfDayField=new CutoverField(julian.secondOfDay(),iSecondOfDayField);
    iMinuteOfHourField=new CutoverField(julian.minuteOfHour(),iMinuteOfHourField);
    iMinuteOfDayField=new CutoverField(julian.minuteOfDay(),iMinuteOfDayField);
    iHourOfDayField=new CutoverField(julian.hourOfDay(),iHourOfDayField);
    iHourOfHalfdayField=new CutoverField(julian.hourOfHalfday(),iHourOfHalfdayField);
    iClockhourOfDayField=new CutoverField(julian.clockhourOfDay(),iClockhourOfDayField);
    iClockhourOfHalfdayField=new CutoverField(julian.clockhourOfHalfday(),iClockhourOfHalfdayField);
    iHalfdayOfDayField=new CutoverField(julian.halfdayOfDay(),iHalfdayOfDayField);
  }
{
    iEraField=new CutoverField(julian.era(),gregorian.era());
    iDayOfMonthField=new CutoverField(julian.dayOfMonth(),gregorian.dayOfMonth());
  }
{
    long cutover=gregorian.year().roundCeiling(iCutoverInstant);
    iDayOfYearField=new CutoverField(julian.dayOfYear(),gregorian.dayOfYear(),cutover);
  }
{
    long cutover=gregorian.weekyear().roundCeiling(iCutoverInstant);
    iWeekOfWeekyearField=new CutoverField(julian.weekOfWeekyear(),gregorian.weekOfWeekyear(),cutover,true);
  }
{
    iYearField=new ImpreciseCutoverField(julian.year(),gregorian.year());
    iYearsField=iYearField.getDurationField();
    iYearOfEraField=new ImpreciseCutoverField(julian.yearOfEra(),gregorian.yearOfEra(),iYearsField);
    iYearOfCenturyField=new ImpreciseCutoverField(julian.yearOfCentury(),gregorian.yearOfCentury(),iYearsField);
    iCenturyOfEraField=new ImpreciseCutoverField(julian.centuryOfEra(),gregorian.centuryOfEra());
    iCenturiesField=iCenturyOfEraField.getDurationField();
    iMonthOfYearField=new ImpreciseCutoverField(julian.monthOfYear(),gregorian.monthOfYear());
    iMonthsField=iMonthOfYearField.getDurationField();
    iWeekyearField=new ImpreciseCutoverField(julian.weekyear(),gregorian.weekyear(),true);
    iWeekyearsField=iWeekyearField.getDurationField();
  }
}