       case .needsNonCascadingBuild:
         reporter?.report("Scheduling noncascading build", path: input)
       }
-      return (input, previousCompilationStatus, datesMatch)
-    }
-  }
-
+      return ChangedInput(filePath: input,
+                          status: previousCompilationStatus,
+                          datesMatch: datesMatch)
+    }
+  }
 
   /// Any files dependent on modified files from other modules must be compiled, too.
   private static func computeExternallyDependentInputs(

      }

      switch previousCompilationStatus {

      case .upToDate where datesMatch:
        reporter?.report("May skip current input:", path: input)
        return nil

    outOfDateBuildRecord: BuildRecord,
    fileSystem: FileSystem,
    reporter: IncrementalCompilationState.Reporter?
  ) -> [ChangedInput] {
    groups.compactMap { group in
      let input = group.primaryInput
      let modDate = buildRecordInfo.compilationInputModificationDates[input]
