   }
   private func tryTouchingOther(checkDiagnostics: Bool = false,
                         extraArguments: [String] = []
-  ) {
+  ) throws {
     touch("other")
-    try! doABuild(
+    try doABuild(
       "non-propagating",
       checkDiagnostics: checkDiagnostics,
       extraArguments: extraArguments,

                extraArguments: [String],
                expecting expectations: [Diagnostic.Message],
                expectingWhenAutolinking autolinkExpectations: [Diagnostic.Message]
  ) throws -> Driver? {
    print("*** starting build \(message) ***", to: &stderrStream); stderrStream.flush()

    func doTheCompile(_ driver: inout Driver) {
      let jobs = try! driver.planBuild()
      try? driver.run(jobs: jobs)
    }

    guard let sdkArgumentsForTesting = try Driver.sdkArgumentsForTesting()
    else {
      throw XCTSkip("Cannot perform this test on this host")
    }
    let allArgs = commonArgs + extraArguments + sdkArgumentsForTesting
    let postMortemDriver: Driver?
    if checkDiagnostics {
      postMortemDriver = try assertDriverDiagnostics(args: allArgs) {driver, verifier in
        verifier.forbidUnexpected(.error, .warning, .note, .remark, .ignored)
        expectations.forEach {verifier.expect($0)}
        if driver.isAutolinkExtractJobNeeded {
          autolinkExpectations.forEach {verifier.expect($0)}
        }
        doTheCompile(&driver)
        return driver
      }
    }
    else {
      let diagnosticEngine = DiagnosticsEngine(handlers: [
        {print($0, to: &stderrStream); stderrStream.flush()}
      ])
      var driver = try Driver(args: allArgs, env: ProcessEnv.vars,
                              diagnosticsEngine: diagnosticEngine,
                              fileSystem: localFileSystem)
      doTheCompile(&driver)
      postMortemDriver = driver
    }
    print("", to: &stderrStream); stderrStream.flush()
    return postMortemDriver
  }
}


  private func tryReplacingMain(checkDiagnostics: Bool = false,
                        extraArguments: [String] = []
  ) throws {
    replace(contentsOf: "main", with: "let foo = \"hello\"")
    try doABuild(
      "propagating into 2nd wave",
      checkDiagnostics: checkDiagnostics,
      extraArguments: extraArguments,
