Correctly propagagate "catastrophic" failure modes in keep_going mode.

--
MOS_MIGRATED_REVID=108740689
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java b/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java
index 8bd0da3..bb06d3d 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java
@@ -234,12 +234,13 @@
         skyframeExecutor.reportCycles(eventHandler, cycles, entry.getKey());
         hasCycles |= !Iterables.isEmpty(cycles);
       }
-      if (keepGoing && !resultHasCatastrophicError(result)) {
+      boolean hasCatastrophe = resultHasCatastrophicError(result);
+      if (keepGoing && !hasCatastrophe) {
         return false;
       }
       if (hasCycles || result.errorMap().isEmpty()) {
         // error map may be empty in the case of a catastrophe.
-        throw new BuildFailedException();
+        throw new BuildFailedException(null, hasCatastrophe);
       } else {
         rethrow(Preconditions.checkNotNull(result.getError().getException()));
       }