diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetCycleReporter.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetCycleReporter.java
index fe73b63..24b01e8 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetCycleReporter.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetCycleReporter.java
@@ -20,7 +20,7 @@
 import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.collect.Iterables;
-import com.google.devtools.build.lib.actions.ActionLookupValue;
+import com.google.devtools.build.lib.actions.ActionLookupValue.ActionLookupKey;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
 import com.google.devtools.build.lib.pkgcache.PackageProvider;
@@ -89,9 +89,13 @@
   }
 
   private SkyKey asTransitiveTargetKey(SkyKey key) {
-    return IS_TRANSITIVE_TARGET_SKY_KEY.apply(key)
-        ? key
-        : TransitiveTargetKey.of(((ConfiguredTargetKey) key.argument()).getLabel());
+    if (IS_TRANSITIVE_TARGET_SKY_KEY.apply(key)) {
+      return key;
+    } else if (key.argument() instanceof ActionLookupKey) {
+      return TransitiveTargetKey.of(((ActionLookupKey) key.argument()).getLabel());
+    } else {
+      throw new IllegalArgumentException("Unknown type: " + key);
+    }
   }
 
   @Override
@@ -109,9 +113,8 @@
 
   @Override
   public Label getLabel(SkyKey key) {
-    if (key instanceof ActionLookupValue.ActionLookupKey) {
-      return Preconditions.checkNotNull(
-          ((ActionLookupValue.ActionLookupKey) key.argument()).getLabel(), key);
+    if (key instanceof ActionLookupKey) {
+      return Preconditions.checkNotNull(((ActionLookupKey) key.argument()).getLabel(), key);
     } else if (SkyFunctions.isSkyFunction(TRANSITIVE_TARGET).apply(key)) {
       return ((TransitiveTargetKey) key).getLabel();
     } else {
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetCycleReporterTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetCycleReporterTest.java
new file mode 100644
index 0000000..e455350
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetCycleReporterTest.java
@@ -0,0 +1,86 @@
+// Copyright 2019 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.skyframe;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
+import com.google.devtools.build.lib.skyframe.AspectValue.AspectKey;
+import com.google.devtools.build.skyframe.CycleInfo;
+import com.google.devtools.build.skyframe.SkyKey;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/** Tests for {@link ConfiguredTargetCycleReporter}. */
+@RunWith(JUnit4.class)
+public class ConfiguredTargetCycleReporterTest extends BuildViewTestCase {
+
+  /**
+   * Regression test for b/142966884 : Blaze crashes when building with --aspects and --keep_going
+   * on a target where the transitive deps have a genquery which finds a cycle over //foo:c that
+   * doesn't happen when actually building //foo:c because of a select() on its deps that skips the
+   * path that happens to make the cycle.
+   *
+   * <p>That results in top-level keys that aren't {@link ConfiguredTargetKey} in {@link
+   * ConfiguredTargetCycleReporter#getAdditionalMessageAboutCycle}.
+   */
+  @Test
+  public void loadingPhaseCycleWithDifferentTopLevelKeyTypes() throws Exception {
+    scratch.file(
+        "foo/BUILD",
+        "genrule(name = 'a', srcs = [], outs = ['a.o'], cmd = 'echo uh > $@')",
+        "genrule(name = 'b', srcs = [], outs = ['b.o'], cmd = 'echo hi > $@', visibility = [':c'])",
+        "genrule(name = 'c', srcs = [], outs = ['c.o'], cmd = 'echo hi > $@')");
+    ConfiguredTargetCycleReporter cycleReporter =
+        new ConfiguredTargetCycleReporter(getPackageManager());
+    CycleInfo cycle =
+        new CycleInfo(
+            ImmutableList.of(
+                TransitiveTargetKey.of(makeLabel("//foo:b")),
+                TransitiveTargetKey.of(makeLabel("//foo:c"))));
+
+    ConfiguredTargetKey ctKey = ConfiguredTargetKey.of(makeLabel("//foo:a"), targetConfig);
+    assertThat(cycleReporter.getAdditionalMessageAboutCycle(reporter, ctKey, cycle))
+        .contains(
+            "The cycle is caused by a visibility edge from //foo:b to the non-package-group "
+                + "target //foo:c");
+
+    SkyKey aspectKey =
+        AspectKey.createAspectKey(
+            makeLabel("//foo:a"),
+            ctKey,
+            ImmutableList.of(),
+            null,
+            BuildConfigurationValue.key(targetConfig),
+            /*aspectConfigurationIsHost=*/ false);
+    assertThat(cycleReporter.getAdditionalMessageAboutCycle(reporter, aspectKey, cycle))
+        .contains(
+            "The cycle is caused by a visibility edge from //foo:b to the non-package-group "
+                + "target //foo:c");
+
+    SkyKey starlarkAspectKey =
+        AspectValue.createSkylarkAspectKey(
+            makeLabel("//foo:a"),
+            targetConfig,
+            targetConfig,
+            makeLabel("//foo:b"),
+            "my Starlark key");
+    assertThat(cycleReporter.getAdditionalMessageAboutCycle(reporter, starlarkAspectKey, cycle))
+        .contains(
+            "The cycle is caused by a visibility edge from //foo:b to the non-package-group "
+                + "target //foo:c");
+  }
+}
