Tolerate Skyframe errors encountered during target pattern parsing.

PiperOrigin-RevId: 295178674
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
index c37f308..187b5d8 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
@@ -184,8 +184,6 @@
               + fileRootedPath.asPath()),
           Transience.PERSISTENT);
     } catch (IOException e) {
-      // TODO(bazel-team): throw an IOException here and let PackageFunction wrap that into a
-      // BuildFileNotFoundException.
       throw new PackageLookupFunctionException(new BuildFileNotFoundException(packageIdentifier,
           "IO errors while looking for " + basename + " file reading "
               + fileRootedPath.asPath() + ": " + e.getMessage(), e),
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 33e34fb..fe51536 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -2902,11 +2902,6 @@
       } else {
         Exception e = Preconditions.checkNotNull(errorInfo.getException());
 
-        // TargetPatternPhaseFunction never directly throws. Thus, the only way
-        // evalResult.hasError() && keepGoing can hold is if there are cycles, which is handled
-        // above.
-        Preconditions.checkState(!keepGoing, e.getMessage());
-
         // Following SkyframeTargetPatternEvaluator, we convert any exception into a
         // TargetParsingException.
         exc =
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisWithIOExceptionsTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisWithIOExceptionsTest.java
index e099990..f7f0132 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisWithIOExceptionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisWithIOExceptionsTest.java
@@ -17,6 +17,7 @@
 
 import com.google.devtools.build.lib.analysis.util.AnalysisTestCase;
 import com.google.devtools.build.lib.clock.BlazeClock;
+import com.google.devtools.build.lib.cmdline.TargetParsingException;
 import com.google.devtools.build.lib.vfs.FileStatus;
 import com.google.devtools.build.lib.vfs.FileSystem;
 import com.google.devtools.build.lib.vfs.Path;
@@ -56,4 +57,14 @@
     reporter.removeHandler(failFastHandler);
     assertThrows(ViewCreationFailedException.class, () -> update("//b:b"));
   }
+
+  @Test
+  public void testWorkspaceError() throws IOException {
+    scratch.file("a/BUILD");
+    crashMessage = path -> path.toString().contains("WORKSPACE") ? "bork" : null;
+    reporter.removeHandler(failFastHandler);
+    assertThrows(
+        TargetParsingException.class,
+        () -> update(new FlagBuilder().with(Flag.KEEP_GOING), "//a:a"));
+  }
 }