C++: Changes to public API usable only from builtins

RELNOTES:none
PiperOrigin-RevId: 404225998
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
index 578af77..1ff392b 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCcModule.java
@@ -89,6 +89,7 @@
       Object textualHeaders,
       Object additionalExportedHeaders,
       Sequence<?> includes, // <String> expected
+      Object looseIncludes,
       Sequence<?> quoteIncludes, // <String> expected
       Sequence<?> systemIncludes, // <String> expected
       Sequence<?> frameworkIncludes, // <String> expected
@@ -98,6 +99,7 @@
       String stripIncludePrefix,
       Sequence<?> userCompileFlags, // <String> expected
       Sequence<?> ccCompilationContexts, // <CcCompilationContext> expected
+      Object implementationCcCompilationContexts,
       String name,
       boolean disallowPicOutputs,
       boolean disallowNopicOutputs,
@@ -112,6 +114,7 @@
       Object language,
       Object purpose,
       Object grepIncludes,
+      Object coptsFilter,
       StarlarkThread thread)
       throws EvalException, InterruptedException {
     return compile(
@@ -124,6 +127,7 @@
         textualHeaders,
         additionalExportedHeaders,
         includes,
+        looseIncludes,
         quoteIncludes,
         systemIncludes,
         frameworkIncludes,
@@ -133,6 +137,7 @@
         stripIncludePrefix,
         userCompileFlags,
         ccCompilationContexts,
+        implementationCcCompilationContexts,
         name,
         disallowPicOutputs,
         disallowNopicOutputs,
@@ -149,6 +154,7 @@
         variablesExtension,
         language,
         purpose,
+        coptsFilter,
         thread);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
index a8917e1..5f547b8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
@@ -584,7 +584,7 @@
   }
 
   /** Sets a pattern that is used to filter copts; set to {@code null} for no filtering. */
-  private void setCoptsFilter(CoptsFilter coptsFilter) {
+  public void setCoptsFilter(CoptsFilter coptsFilter) {
     this.coptsFilter = Preconditions.checkNotNull(coptsFilter);
   }
 
@@ -637,8 +637,8 @@
    * Sets the given directories to by loose include directories that are only allowed to be
    * referenced when headers checking is {@link HeadersCheckingMode#LOOSE}.
    */
-  private void setLooseIncludeDirs(Set<PathFragment> looseIncludeDirs) {
-    this.looseIncludeDirs = looseIncludeDirs;
+  public void setLooseIncludeDirs(Set<PathFragment> looseIncludeDirs) {
+    this.looseIncludeDirs = Preconditions.checkNotNull(looseIncludeDirs);
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
index 9e475a9..42f77c9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
@@ -47,6 +47,7 @@
 import com.google.devtools.build.lib.packages.TargetUtils;
 import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions;
 import com.google.devtools.build.lib.rules.cpp.CcBinary.CcLauncherInfo;
+import com.google.devtools.build.lib.rules.cpp.CcCommon.CoptsFilter;
 import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper.CompilationInfo;
 import com.google.devtools.build.lib.rules.cpp.CcCompilationHelper.SourceCategory;
 import com.google.devtools.build.lib.rules.cpp.CcLinkingContext.LinkOptions;
@@ -831,6 +832,24 @@
         featureConfig.getFeatureConfiguration());
   }
 
+  @StarlarkMethod(
+      name = "merge_linking_contexts",
+      documented = false,
+      parameters = {
+        @Param(
+            name = "linking_contexts",
+            documented = false,
+            positional = false,
+            named = true,
+            defaultValue = "[]"),
+      })
+  public CcLinkingContext mergeLinkingContexts(
+      Sequence<?> linkingContexts) // <CcLinkingContext> expected
+      throws EvalException {
+    return CcLinkingContext.merge(
+        Sequence.cast(linkingContexts, CcLinkingContext.class, "linking_contexts"));
+  }
+
   private static NestedSet<Artifact> toNestedSetOfArtifacts(Object obj, String fieldName)
       throws EvalException {
     if (obj == Starlark.UNBOUND) {
@@ -919,11 +938,14 @@
       // make sense here since LinkerInput takes a list of flags. For storing user_link_flags
       // without flattening they would have to be wrapped around a LinkerInput for which we keep
       // a depset that isn't flattened till the end.
-      LinkOptions options =
-          LinkOptions.of(
-              Depset.noneableCast(userLinkFlagsObject, String.class, "user_link_flags").toList(),
-              BazelStarlarkContext.from(thread).getSymbolGenerator());
-      optionsBuilder.add(options);
+      ImmutableList<String> userLinkFlagsFlattened =
+          Depset.noneableCast(userLinkFlagsObject, String.class, "user_link_flags").toList();
+      if (!userLinkFlagsFlattened.isEmpty()) {
+        LinkOptions options =
+            LinkOptions.of(
+                userLinkFlagsFlattened, BazelStarlarkContext.from(thread).getSymbolGenerator());
+        optionsBuilder.add(options);
+      }
     } else if (userLinkFlagsObject instanceof Sequence) {
       ImmutableList<Object> options =
           Sequence.cast(userLinkFlagsObject, Object.class, "user_link_flags[]").getImmutableList();
@@ -1826,8 +1848,18 @@
         convertFromNoneable(starlarkFeatureConfiguration, null);
     Label label = getCallerLabel(actions, name);
     FdoContext fdoContext = ccToolchainProvider.getFdoContext();
-    LinkTargetType staticLinkTargetType =
-        (language == Language.CPP) ? LinkTargetType.STATIC_LIBRARY : LinkTargetType.OBJC_ARCHIVE;
+    LinkTargetType staticLinkTargetType = null;
+    if (language == Language.CPP) {
+      if (alwayslink
+          && !actions.getRuleContext().getRule().getRuleClass().equals("swift_library")) {
+        // TODO(b/202252560): Fix for swift_library's implicit output.
+        staticLinkTargetType = LinkTargetType.ALWAYS_LINK_STATIC_LIBRARY;
+      } else {
+        staticLinkTargetType = LinkTargetType.STATIC_LIBRARY;
+      }
+    } else {
+      staticLinkTargetType = LinkTargetType.OBJC_ARCHIVE;
+    }
     CcLinkingHelper helper =
         new CcLinkingHelper(
                 actions.getActionConstructionContext().getRuleErrorConsumer(),
@@ -1858,6 +1890,7 @@
                         .isEnabled(CppRuleClasses.TARGETS_WINDOWS))
             .setStaticLinkType(staticLinkTargetType)
             .setDynamicLinkType(LinkTargetType.NODEPS_DYNAMIC_LIBRARY)
+            .emitInterfaceSharedLibraries(true)
             .addLinkopts(Sequence.cast(userLinkFlags, String.class, "user_link_flags"));
     if (!asDict(variablesExtension).isEmpty()) {
       helper.addVariableExtension(new UserVariablesExtension(asDict(variablesExtension)));
@@ -1983,6 +2016,7 @@
       Object textualHeadersStarlarkObject,
       Object additionalExportedHeadersObject,
       Sequence<?> includes, // <String> expected
+      Object starlarkIncludes,
       Sequence<?> quoteIncludes, // <String> expected
       Sequence<?> systemIncludes, // <String> expected
       Sequence<?> frameworkIncludes, // <String> expected
@@ -1992,6 +2026,7 @@
       String stripIncludePrefix,
       Sequence<?> userCompileFlags, // <String> expected
       Sequence<?> ccCompilationContexts, // <CcCompilationContext> expected
+      Object implementationCcCompilationContextsObject,
       String name,
       boolean disallowPicOutputs,
       boolean disallowNopicOutputs,
@@ -2007,6 +2042,7 @@
       Object variablesExtension,
       Object languageObject,
       Object purposeObject,
+      Object coptsFilterObject,
       StarlarkThread thread)
       throws EvalException, InterruptedException {
     if (checkObjectsBound(
@@ -2017,7 +2053,10 @@
         doNotGenerateModuleMapObject,
         codeCoverageEnabledObject,
         purposeObject,
-        hdrsCheckingModeObject)) {
+        hdrsCheckingModeObject,
+        implementationCcCompilationContextsObject,
+        coptsFilterObject,
+        starlarkIncludes)) {
       CcModule.checkPrivateStarlarkificationAllowlist(thread);
     }
 
@@ -2025,10 +2064,13 @@
     CcToolchainProvider ccToolchainProvider =
         convertFromNoneable(starlarkCcToolchainProvider, null);
 
+    ImmutableList<String> looseIncludes = asClassImmutableList(starlarkIncludes);
     CppModuleMap moduleMap = convertFromNoneable(moduleMapNoneable, /* defaultValue= */ null);
     ImmutableList<CppModuleMap> additionalModuleMaps =
         asClassImmutableList(additionalModuleMapsNoneable);
 
+    CoptsFilter coptsFilter = convertFromNoneable(coptsFilterObject, /* defaultValue= */ null);
+
     Object textualHeadersObject =
         asClassImmutableListOrNestedSet(
             textualHeadersStarlarkObject, Artifact.class, "textual_headers");
@@ -2057,28 +2099,20 @@
                     ccToolchainProvider)
                 .toString());
     String purpose = convertFromNoneable(purposeObject, null);
+    ImmutableList<CcCompilationContext> implementationContexts =
+        asClassImmutableList(implementationCcCompilationContextsObject);
 
-    List<Artifact> sources = Sequence.cast(sourcesUnchecked, Artifact.class, "srcs");
-    List<Artifact> publicHeaders =
-        Sequence.cast(publicHeadersUnchecked, Artifact.class, "public_hdrs");
-    List<Artifact> privateHeaders =
-        Sequence.cast(privateHeadersUnchecked, Artifact.class, "private_hdrs");
+    boolean tuple =
+        checkAllSourcesContainTuplesOrNoneOfThem(
+            ImmutableList.of(sourcesUnchecked, privateHeadersUnchecked, publicHeadersUnchecked));
+    if (tuple) {
+      CcModule.checkPrivateStarlarkificationAllowlist(thread);
+    }
 
     FeatureConfigurationForStarlark featureConfiguration =
         convertFromNoneable(starlarkFeatureConfiguration, null);
     Label label = getCallerLabel(actions, name);
     FdoContext fdoContext = ccToolchainProvider.getFdoContext();
-    validateExtensions(
-        "srcs",
-        sources,
-        CppFileTypes.ALL_C_CLASS_SOURCE.including(
-            CppFileTypes.ASSEMBLER_WITH_C_PREPROCESSOR, CppFileTypes.ASSEMBLER),
-        FileTypeSet.of(
-            CppFileTypes.CPP_SOURCE,
-            CppFileTypes.C_SOURCE,
-            CppFileTypes.ASSEMBLER_WITH_C_PREPROCESSOR,
-            CppFileTypes.ASSEMBLER),
-        /* allowAnyTreeArtifacts= */ true);
 
     if (disallowNopicOutputs && disallowPicOutputs) {
       throw Starlark.errorf("Either PIC or no PIC actions have to be created.");
@@ -2090,62 +2124,83 @@
     BuildConfiguration configuration = actions.getActionConstructionContext().getConfiguration();
     CcCompilationHelper helper =
         new CcCompilationHelper(
-                actions.asActionRegistry(actions),
-                actions.getActionConstructionContext(),
-                label,
-                grepIncludes,
-                getSemantics(language),
+            actions.asActionRegistry(actions),
+            actions.getActionConstructionContext(),
+            label,
+            grepIncludes,
+            getSemantics(language),
+            featureConfiguration.getFeatureConfiguration(),
+            sourceCategory,
+            ccToolchainProvider,
+            fdoContext,
+            actions.getActionConstructionContext().getConfiguration(),
+            TargetUtils.getExecutionInfo(
+                actions.getRuleContext().getRule(),
+                actions.getRuleContext().isAllowTagsPropagation()),
+            /* shouldProcessHeaders= */ ccToolchainProvider.shouldProcessHeaders(
                 featureConfiguration.getFeatureConfiguration(),
-                sourceCategory,
-                ccToolchainProvider,
-                fdoContext,
-                actions.getActionConstructionContext().getConfiguration(),
-                TargetUtils.getExecutionInfo(
-                    actions.getRuleContext().getRule(),
-                    actions.getRuleContext().isAllowTagsPropagation()),
-                /* shouldProcessHeaders= */ ccToolchainProvider.shouldProcessHeaders(
-                    featureConfiguration.getFeatureConfiguration(),
-                    configuration.getFragment(CppConfiguration.class)))
-            .addPublicHeaders(publicHeaders)
-            .addPrivateHeaders(privateHeaders)
-            .addSources(sources)
-            .addCcCompilationContexts(
-                Sequence.cast(
-                    ccCompilationContexts, CcCompilationContext.class, "compilation_contexts"))
-            .addIncludeDirs(
-                Sequence.cast(includes, String.class, "includes").stream()
-                    .map(PathFragment::create)
-                    .collect(ImmutableList.toImmutableList()))
-            .addQuoteIncludeDirs(
-                Sequence.cast(quoteIncludes, String.class, "quote_includes").stream()
-                    .map(PathFragment::create)
-                    .collect(ImmutableList.toImmutableList()))
-            .addSystemIncludeDirs(
-                Sequence.cast(systemIncludes, String.class, "system_includes").stream()
-                    .map(PathFragment::create)
-                    .collect(ImmutableList.toImmutableList()))
-            .addFrameworkIncludeDirs(
-                Sequence.cast(frameworkIncludes, String.class, "framework_includes").stream()
-                    .map(PathFragment::create)
-                    .collect(ImmutableList.toImmutableList()))
-            .addDefines(Sequence.cast(defines, String.class, "defines"))
-            .addNonTransitiveDefines(Sequence.cast(localDefines, String.class, "local_defines"))
-            .setCopts(
-                ImmutableList.copyOf(
-                    Sequence.cast(userCompileFlags, String.class, "user_compile_flags")))
-            .addAdditionalCompilationInputs(headersForClifDoNotUseThisParam)
-            .addAdditionalCompilationInputs(
-                Sequence.cast(additionalInputs, Artifact.class, "additional_inputs"))
-            .addAditionalIncludeScanningRoots(headersForClifDoNotUseThisParam)
-            .setPurpose(common.getPurpose(getSemantics(language)))
-            .addAdditionalExportedHeaders(
-                additionalExportedHeaders.stream()
-                    .map(PathFragment::create)
-                    .collect(ImmutableList.toImmutableList()))
-            .setPropagateModuleMapToCompileAction(propagateModuleMapToCompileAction)
-            .setCodeCoverageEnabled(codeCoverageEnabled)
-            .setHeadersCheckingMode(
-                HeadersCheckingMode.valueOf(Ascii.toUpperCase(hdrsCheckingMode)));
+                configuration.getFragment(CppConfiguration.class)));
+    if (tuple) {
+      ImmutableList<Pair<Artifact, Label>> sources = convertSequenceTupleToPair(sourcesUnchecked);
+      ImmutableList<Pair<Artifact, Label>> publicHeaders =
+          convertSequenceTupleToPair(publicHeadersUnchecked);
+      ImmutableList<Pair<Artifact, Label>> privateHeaders =
+          convertSequenceTupleToPair(privateHeadersUnchecked);
+      helper.addPublicHeaders(publicHeaders).addPrivateHeaders(privateHeaders).addSources(sources);
+    } else {
+      List<Artifact> sources = Sequence.cast(sourcesUnchecked, Artifact.class, "srcs");
+      List<Artifact> publicHeaders =
+          Sequence.cast(publicHeadersUnchecked, Artifact.class, "public_hdrs");
+      List<Artifact> privateHeaders =
+          Sequence.cast(privateHeadersUnchecked, Artifact.class, "private_hdrs");
+      helper.addPublicHeaders(publicHeaders).addPrivateHeaders(privateHeaders).addSources(sources);
+    }
+
+    helper
+        .addCcCompilationContexts(
+            Sequence.cast(
+                ccCompilationContexts, CcCompilationContext.class, "compilation_contexts"))
+        .addImplementationDepsCcCompilationContexts(implementationContexts)
+        .addIncludeDirs(
+            Sequence.cast(includes, String.class, "includes").stream()
+                .map(PathFragment::create)
+                .collect(ImmutableList.toImmutableList()))
+        .addQuoteIncludeDirs(
+            Sequence.cast(quoteIncludes, String.class, "quote_includes").stream()
+                .map(PathFragment::create)
+                .collect(ImmutableList.toImmutableList()))
+        .addSystemIncludeDirs(
+            Sequence.cast(systemIncludes, String.class, "system_includes").stream()
+                .map(PathFragment::create)
+                .collect(ImmutableList.toImmutableList()))
+        .addFrameworkIncludeDirs(
+            Sequence.cast(frameworkIncludes, String.class, "framework_includes").stream()
+                .map(PathFragment::create)
+                .collect(ImmutableList.toImmutableList()))
+        .addDefines(Sequence.cast(defines, String.class, "defines"))
+        .addNonTransitiveDefines(Sequence.cast(localDefines, String.class, "local_defines"))
+        .setCopts(
+            ImmutableList.copyOf(
+                Sequence.cast(userCompileFlags, String.class, "user_compile_flags")))
+        .addAdditionalCompilationInputs(headersForClifDoNotUseThisParam)
+        .addAdditionalCompilationInputs(
+            Sequence.cast(additionalInputs, Artifact.class, "additional_inputs"))
+        .addAditionalIncludeScanningRoots(headersForClifDoNotUseThisParam)
+        .setPurpose(common.getPurpose(getSemantics(language)))
+        .addAdditionalExportedHeaders(
+            additionalExportedHeaders.stream()
+                .map(PathFragment::create)
+                .collect(ImmutableList.toImmutableList()))
+        .setPropagateModuleMapToCompileAction(propagateModuleMapToCompileAction)
+        .setCodeCoverageEnabled(codeCoverageEnabled)
+        .setHeadersCheckingMode(HeadersCheckingMode.valueOf(Ascii.toUpperCase(hdrsCheckingMode)));
+
+    ImmutableList<PathFragment> looseIncludeDirs =
+        looseIncludes.stream().map(PathFragment::create).collect(ImmutableList.toImmutableList());
+    if (!looseIncludeDirs.isEmpty()) {
+      helper.setLooseIncludeDirs(ImmutableSet.copyOf(looseIncludeDirs));
+    }
+
     if (textualHeadersObject instanceof NestedSet) {
       helper.addPublicTextualHeaders((NestedSet<Artifact>) textualHeadersObject);
     } else {
@@ -2157,6 +2212,9 @@
     if (moduleMap != null) {
       helper.setCppModuleMap(moduleMap);
     }
+    if (coptsFilter != null) {
+      helper.setCoptsFilter(coptsFilter);
+    }
     for (CppModuleMap additionalModuleMap : additionalModuleMaps) {
       helper.registerAdditionalModuleMap(additionalModuleMap);
     }
@@ -2189,6 +2247,29 @@
     }
   }
 
+  private boolean checkAllSourcesContainTuplesOrNoneOfThem(ImmutableList<Sequence<?>> files)
+      throws EvalException {
+    boolean nonTuple = false;
+    boolean tuple = false;
+    for (Sequence<?> sequence : files) {
+      if (!sequence.isEmpty()) {
+        if (sequence.get(0) instanceof Tuple) {
+          tuple = true;
+        } else if (sequence.get(0) instanceof Artifact) {
+          nonTuple = true;
+        } else {
+          throw new EvalException(
+              "srcs, private_hdrs and public_hdrs must all be Tuples<File, Label> or File");
+        }
+        if (tuple && nonTuple) {
+          throw new EvalException(
+              "srcs, private_hdrs and public_hdrs must all be Tuples<File, Label> or File");
+        }
+      }
+    }
+    return tuple;
+  }
+
   protected CcLinkingOutputs link(
       StarlarkActionFactory actions,
       FeatureConfigurationForStarlark starlarkFeatureConfiguration,
@@ -2456,4 +2537,11 @@
                 outputReplacement,
                 getSemantics()));
   }
+
+  private ImmutableList<Pair<Artifact, Label>> convertSequenceTupleToPair(Sequence<?> sequenceTuple)
+      throws EvalException {
+    return Sequence.cast(sequenceTuple, Tuple.class, "files").stream()
+        .map(p -> Pair.of((Artifact) p.get(0), (Label) p.get(1)))
+        .collect(ImmutableList.toImmutableList());
+  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
index 3cee927..81403da 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java
@@ -143,6 +143,13 @@
             named = true,
             defaultValue = "[]"),
         @Param(
+            name = "loose_includes",
+            documented = false,
+            positional = false,
+            named = true,
+            defaultValue = "unbound",
+            allowedTypes = {@ParamType(type = Sequence.class), @ParamType(type = NoneType.class)}),
+        @Param(
             name = "quote_includes",
             doc =
                 "Search paths for header files referenced by quotes, "
@@ -223,6 +230,16 @@
             named = true,
             defaultValue = "[]"),
         @Param(
+            name = "implementation_compilation_contexts",
+            documented = false,
+            positional = false,
+            defaultValue = "unbound",
+            allowedTypes = {
+              @ParamType(type = Sequence.class, generic1 = CcCompilationContextApi.class),
+              @ParamType(type = NoneType.class)
+            },
+            named = true),
+        @Param(
             name = "name",
             doc =
                 "This is used for naming the output artifacts of actions created by this "
@@ -321,17 +338,24 @@
               @ParamType(type = FileApi.class),
               @ParamType(type = NoneType.class),
             }),
+        @Param(
+            name = "copts_filter",
+            documented = false,
+            positional = false,
+            named = true,
+            defaultValue = "unbound"),
       })
   Tuple compile(
       StarlarkActionFactoryT starlarkActionFactoryApi,
       FeatureConfigurationT starlarkFeatureConfiguration,
       CcToolchainProviderT starlarkCcToolchainProvider,
-      Sequence<?> sources, // <FileT> expected
-      Sequence<?> publicHeaders, // <FileT> expected
-      Sequence<?> privateHeaders, // <FileT> expected
+      Sequence<?> sources, // <FileT> or Tuple<FileT,Label> expected
+      Sequence<?> publicHeaders, // <FileT> or Tuple<FileT,Label> expected
+      Sequence<?> privateHeaders, // <FileT> or Tuple<FileT,Label> expected
       Object textualHeaders,
       Object additionalExportedHeaders,
       Sequence<?> includes, // <String> expected
+      Object starlarkLooseIncludes,
       Sequence<?> quoteIncludes, // <String> expected
       Sequence<?> systemIncludes, // <String> expected
       Sequence<?> frameworkIncludes, // <String> expected
@@ -341,6 +365,7 @@
       String stripIncludePrefix,
       Sequence<?> userCompileFlags, // <String> expected
       Sequence<?> ccCompilationContexts, // <CompilationContextT> expected
+      Object implementationCcCompilationContexts,
       String name,
       boolean disallowPicOutputs,
       boolean disallowNopicOutputs,
@@ -355,6 +380,7 @@
       Object language,
       Object purpose,
       Object grepIncludes,
+      Object coptsFilter,
       StarlarkThread thread)
       throws EvalException, InterruptedException;
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
index deebb85..c293a48 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java
@@ -5482,7 +5482,7 @@
     createFilesForTestingCompilation(
         scratch, "third_party/tools/build_defs/foo", "include_prefix='prefix'");
     scratch.file(
-        "bar/BUILD",
+        "third_party/bar/BUILD",
         "load('//third_party/tools/build_defs/foo:extension.bzl', 'cc_starlark_library')",
         "cc_starlark_library(",
         "    name = 'starlark_lib',",
@@ -5490,11 +5490,11 @@
         "    public_hdrs = ['starlark_lib.h'],",
         "    private_hdrs = ['private_starlark_lib.h'],",
         ")");
-    ConfiguredTarget target = getConfiguredTarget("//bar:starlark_lib");
+    ConfiguredTarget target = getConfiguredTarget("//third_party/bar:starlark_lib");
     assertThat(target).isNotNull();
     CcInfo ccInfo = target.get(CcInfo.PROVIDER);
     assertThat(artifactsToStrings(ccInfo.getCcCompilationContext().getDirectPublicHdrs()))
-        .contains("bin bar/_virtual_includes/starlark_lib/prefix/starlark_lib.h");
+        .contains("bin third_party/bar/_virtual_includes/starlark_lib/prefix/starlark_lib.h");
   }
 
   @Test
@@ -5502,7 +5502,7 @@
     createFilesForTestingCompilation(
         scratch, "third_party/tools/build_defs/foo", "strip_include_prefix='v1'");
     scratch.file(
-        "bar/BUILD",
+        "third_party/bar/BUILD",
         "load('//third_party/tools/build_defs/foo:extension.bzl', 'cc_starlark_library')",
         "cc_starlark_library(",
         "    name = 'starlark_lib',",
@@ -5510,11 +5510,11 @@
         "    public_hdrs = ['v1/starlark_lib.h'],",
         "    private_hdrs = ['v1/private_starlark_lib.h'],",
         ")");
-    ConfiguredTarget target = getConfiguredTarget("//bar:starlark_lib");
+    ConfiguredTarget target = getConfiguredTarget("//third_party/bar:starlark_lib");
     assertThat(target).isNotNull();
     CcInfo ccInfo = target.get(CcInfo.PROVIDER);
     assertThat(artifactsToStrings(ccInfo.getCcCompilationContext().getDirectPublicHdrs()))
-        .contains("bin bar/_virtual_includes/starlark_lib/starlark_lib.h");
+        .contains("bin third_party/bar/_virtual_includes/starlark_lib/starlark_lib.h");
   }
 
   @Test
@@ -5524,7 +5524,7 @@
         "third_party/tools/build_defs/foo",
         "strip_include_prefix='v1', include_prefix='prefix'");
     scratch.file(
-        "bar/BUILD",
+        "third_party/bar/BUILD",
         "load('//third_party/tools/build_defs/foo:extension.bzl', 'cc_starlark_library')",
         "cc_starlark_library(",
         "    name = 'starlark_lib',",
@@ -5532,11 +5532,11 @@
         "    public_hdrs = ['v1/starlark_lib.h'],",
         "    private_hdrs = ['v1/private_starlark_lib.h'],",
         ")");
-    ConfiguredTarget target = getConfiguredTarget("//bar:starlark_lib");
+    ConfiguredTarget target = getConfiguredTarget("//third_party/bar:starlark_lib");
     assertThat(target).isNotNull();
     CcInfo ccInfo = target.get(CcInfo.PROVIDER);
     assertThat(artifactsToStrings(ccInfo.getCcCompilationContext().getDirectPublicHdrs()))
-        .contains("bin bar/_virtual_includes/starlark_lib/prefix/starlark_lib.h");
+        .contains("bin third_party/bar/_virtual_includes/starlark_lib/prefix/starlark_lib.h");
   }
 
   @Test
@@ -5686,27 +5686,6 @@
     doTestTreeAtrifactInSrcsAndHdrs("public_hdrs");
   }
 
-  @Test
-  public void testWrongSrcsExtensionGivesError() throws Exception {
-    doTestWrongExtensionOfSrcsAndHdrs("srcs");
-  }
-
-  @Test
-  public void testWrongSrcExtensionGivesError() throws Exception {
-    createFiles(scratch, "tools/build_defs/foo");
-
-    scratch.file(
-        "bar/BUILD",
-        "load('//tools/build_defs/foo:extension.bzl', 'cc_starlark_library')",
-        "cc_starlark_library(",
-        "    name = 'starlark_lib',",
-        "    srcs = ['starlark_lib.qweqwe'],",
-        ")");
-    reporter.removeHandler(failFastHandler);
-    getConfiguredTarget("//bar:starlark_lib");
-    assertContainsEvent("The list of possible extensions for 'srcs'");
-  }
-
   private static void createFilesForTestingCompilation(
       Scratch scratch, String bzlFilePath, String compileProviderLines) throws Exception {
     createFiles(scratch, bzlFilePath, compileProviderLines, "");
@@ -6184,21 +6163,6 @@
         ")");
   }
 
-  private void doTestWrongExtensionOfSrcsAndHdrs(String attrName) throws Exception {
-    createFiles(scratch, "tools/build_defs/foo");
-    scratch.file(
-        "bar/BUILD",
-        "load('//tools/build_defs/foo:extension.bzl', 'cc_starlark_library')",
-        "cc_starlark_library(",
-        "    name = 'starlark_lib',",
-        "    " + attrName + " = ['starlark_lib.cannotpossiblybevalid'],",
-        ")");
-    reporter.removeHandler(failFastHandler);
-    getConfiguredTarget("//bar:starlark_lib");
-    assertContainsEvent(
-        "has wrong extension. The list of possible extensions for '" + attrName + "'");
-  }
-
   private void doTestPossibleExtensionsOfSrcsAndHdrs(String attrName, List<String> extensions)
       throws Exception {
     createFiles(scratch, "tools/build_defs/foo");