anchor.diff:            int colNumber = int.parse(groups[5]);
             File source = new File(filename);
             List<String> sourceLines = source.readAsLinesSync();
  -          String sourceLine = (lineNumber < sourceLines.length) ? sourceLines[lineNumber-1] : '';
  +          String sourceLine;
  +          try {
  +            if (lineNumber > sourceLines.length)
  +              throw new FileChanged();
  +            sourceLine = sourceLines[lineNumber-1];
  +            if (colNumber > sourceLine.length)
  +              throw new FileChanged();
  +          } on FileChanged {
  +            if (changedFiles.add(filename))
  +              printError('[warning] File shrank during analysis ($filename)');
  +            sourceLine = '';
  +            lineNumber = 1;
  +            colNumber = 1;
  +          }
             bool shouldIgnore = false;
             if (filename == mainFile.path) {
               Match libs = conflictingNamesPattern.firstMatch(errorMessage);
  
positive.code:     return 0;
    }
  }
  
negative.code:     RegExp ignorePattern = new RegExp(r'// analyzer says "([^"]+)"');
      RegExp conflictingNamesPattern = new RegExp('^The imported libraries \'([^\']+)\' and \'([^\']+)\' cannot have the same name \'([^\']+)\'\$');
  
      Set<String> changedFiles = new Set<String>(); // files about which we've complained that they changed
  
      List<String> errorLines = output.toString().split('\n');
      for (String errorLine in errorLines) {
        if (patternsToSkip.every((Pattern pattern) => pattern.allMatches(errorLine).isEmpty)) {
  