Program: 53450
Project: 53450
Buggy source:
private void assertDeterministicBuild(String topLevelModule,int optimizationLevel) throws UnableToCompleteException, IOException {
  final CompilerOptionsImpl options=new CompilerOptionsImpl();
  options.setOptimizationLevel(optimizationLevel);
  File firstCompileWorkDir=Utility.makeTemporaryDirectory(null,"String_Node_Str");
  File secondCompileWorkDir=Utility.makeTemporaryDirectory(null,"String_Node_Str");
  String oldPersistentUnitCacheValue=System.setProperty(UnitCacheSingleton.GWT_PERSISTENTUNITCACHE,"String_Node_Str");
  try {
    options.addModuleName(topLevelModule);
    options.setWarDir(new File(firstCompileWorkDir,"String_Node_Str"));
    options.setExtraDir(new File(firstCompileWorkDir,"String_Node_Str"));
    TreeLogger logger=TreeLogger.NULL;
    new Compiler(options).run(logger);
    Set<String> firstTimeOutput=Sets.newHashSet(new File(options.getWarDir() + "String_Node_Str").list());
    options.setWarDir(new File(secondCompileWorkDir,"String_Node_Str"));
    options.setExtraDir(new File(secondCompileWorkDir,"String_Node_Str"));
    new Compiler(options).run(logger);
    Set<String> secondTimeOutput=Sets.newHashSet(new File(options.getWarDir() + "String_Node_Str").list());
    assertEquals("String_Node_Str",firstTimeOutput,secondTimeOutput);
  }
  finally {
    if (oldPersistentUnitCacheValue == null) {
      System.clearProperty(UnitCacheSingleton.GWT_PERSISTENTUNITCACHE);
    }
 else {
      System.setProperty(UnitCacheSingleton.GWT_PERSISTENTUNITCACHE,oldPersistentUnitCacheValue);
    }
    Util.recursiveDelete(firstCompileWorkDir,false);
    Util.recursiveDelete(secondCompileWorkDir,false);
  }
}

Fixed version (ground truth):
private void assertDeterministicBuild(String topLevelModule,int optimizationLevel) throws UnableToCompleteException, IOException {
  final CompilerOptionsImpl options=new CompilerOptionsImpl();
  options.setOptimizationLevel(optimizationLevel);
  File firstCompileWorkDir=Utility.makeTemporaryDirectory(null,"String_Node_Str");
  File secondCompileWorkDir=Utility.makeTemporaryDirectory(null,"String_Node_Str");
  String oldPersistentUnitCacheValue=System.setProperty(UnitCacheSingleton.GWT_PERSISTENTUNITCACHE,"String_Node_Str");
  try {
    options.addModuleName(topLevelModule);
    options.setWarDir(new File(firstCompileWorkDir,"String_Node_Str"));
    options.setExtraDir(new File(firstCompileWorkDir,"String_Node_Str"));
    PrintWriterTreeLogger logger=new PrintWriterTreeLogger();
    logger.setMaxDetail(TreeLogger.WARN);
    new Compiler(options).run(logger);
    Set<String> firstTimeOutput=Sets.newHashSet(new File(options.getWarDir() + "String_Node_Str").list());
    options.setWarDir(new File(secondCompileWorkDir,"String_Node_Str"));
    options.setExtraDir(new File(secondCompileWorkDir,"String_Node_Str"));
    new Compiler(options).run(logger);
    Set<String> secondTimeOutput=Sets.newHashSet(new File(options.getWarDir() + "String_Node_Str").list());
    assertEquals("String_Node_Str",firstTimeOutput,secondTimeOutput);
  }
  finally {
    if (oldPersistentUnitCacheValue == null) {
      System.clearProperty(UnitCacheSingleton.GWT_PERSISTENTUNITCACHE);
    }
 else {
      System.setProperty(UnitCacheSingleton.GWT_PERSISTENTUNITCACHE,oldPersistentUnitCacheValue);
    }
    Util.recursiveDelete(firstCompileWorkDir,false);
    Util.recursiveDelete(secondCompileWorkDir,false);
  }
}