Alert whenever an ActionLookupValue is missing. In practice, this should never happen, and probably indicates a crash coming very soon.

PiperOrigin-RevId: 244428074
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
index f5874ea..047587d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -57,6 +57,7 @@
 import com.google.devtools.build.lib.actions.extra.CppCompileInfo;
 import com.google.devtools.build.lib.actions.extra.EnvironmentVariable;
 import com.google.devtools.build.lib.actions.extra.ExtraActionInfo;
+import com.google.devtools.build.lib.bugreport.BugReport;
 import com.google.devtools.build.lib.cmdline.LabelConstants;
 import com.google.devtools.build.lib.collect.CollectionUtils;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
@@ -1701,6 +1702,13 @@
             Iterables.transform(
                 usedModules, module -> (ActionLookupKey) module.getArtifactOwner()));
     if (env.valuesMissing()) {
+      ImmutableList<SkyKey> missingKeys =
+          actionLookupValues.entrySet().stream()
+              .filter(e -> e.getValue() == null)
+              .map(Map.Entry::getKey)
+              .collect(ImmutableList.toImmutableList());
+      BugReport.sendBugReport(
+          new IllegalStateException("Missing keys: " + missingKeys + ". Modules " + usedModules));
       return null;
     }
     ArrayList<ActionLookupData> executionValueLookups = new ArrayList<>(usedModules.size());
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java
index 3b0f6d9..d8b5b5f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java
@@ -26,6 +26,7 @@
 import com.google.devtools.build.lib.actions.ArtifactPrefixConflictException;
 import com.google.devtools.build.lib.actions.ArtifactSkyKey;
 import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException;
+import com.google.devtools.build.lib.bugreport.BugReport;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.skyframe.ActionTemplateExpansionValue.ActionTemplateExpansionKey;
 import com.google.devtools.build.skyframe.SkyFunction;
@@ -58,6 +59,7 @@
       // Because of the phase boundary separating analysis and execution, all needed
       // ActionLookupValues must have already been evaluated, so a missing ActionLookupValue is
       // unexpected. However, we tolerate this case.
+      BugReport.sendBugReport(new IllegalStateException("Unexpected absent value for " + key));
       return null;
     }
     ActionTemplate<?> actionTemplate = value.getActionTemplate(key.getActionIndex());
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java
index 9a7d7a6..503a124 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestCompletionFunction.java
@@ -22,6 +22,7 @@
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactContext;
 import com.google.devtools.build.lib.analysis.test.TestProvider;
+import com.google.devtools.build.lib.bugreport.BugReport;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.skyframe.SkyFunction;
 import com.google.devtools.build.skyframe.SkyKey;
@@ -58,6 +59,16 @@
         ActionLookupValue actionLookupValue =
             ArtifactFunction.getActionLookupValue(actionLookupKey, env, testArtifact);
         if (actionLookupValue == null) {
+          BugReport.sendBugReport(
+              new IllegalStateException(
+                  "Unexpected absent value for "
+                      + actionLookupKey
+                      + " from "
+                      + testArtifact
+                      + " and "
+                      + ct
+                      + " for "
+                      + skyKey));
           return null;
         }
         env.getValue(getActionLookupData(testArtifact, actionLookupKey, actionLookupValue));