Suppress ThinLTO indexing for testonly targets

Applies ThinLTO scalability fix https://github.com/bazelbuild/bazel/commit/8c5e290dfab3cab378a9ca107ecdd6267403cd4b to targets (e.g. cc_binary) marked
"testonly = 1".

RELNOTES: None
PiperOrigin-RevId: 184991176
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 73fb629..994ef13 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -1327,6 +1327,11 @@
     return TargetUtils.isTestRule(getTarget());
   }
 
+  /** Returns true if the testonly attribute is set on this context. */
+  public boolean isTestOnlyTarget() {
+    return attributes().has("testonly", Type.BOOLEAN) && attributes().get("testonly", Type.BOOLEAN);
+  }
+
   /**
    * @return true if {@code rule} is visible from {@code prerequisite}.
    *
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
index 731ac97..200bd3a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
@@ -765,7 +765,7 @@
     // optimizations applied to the associated main binaries anyway.
     boolean allowLtoIndexing =
         linkStaticness == LinkStaticness.DYNAMIC
-            || !ruleContext.isTestTarget()
+            || !(ruleContext.isTestTarget() || ruleContext.isTestOnlyTarget())
             || !featureConfiguration.isEnabled(
                 CppRuleClasses.THIN_LTO_LINKSTATIC_TESTS_USE_SHARED_NONLTO_BACKENDS);