Allow returning None for null maps in LibraryToLink shared_non_lto_backend Starlark methods.

Dict.immutableCopyOf will fail if the input is null. In this case, we
have to return null because there is a distinction between an empty
map and "no map" (at least from the point of view of Go
compilation and linking).

PiperOrigin-RevId: 415469870
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java
index 970fd75..d31cf55 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LibraryToLink.java
@@ -129,7 +129,8 @@
   public final Dict<Artifact, LtoBackendArtifacts> getSharedNonLtoBackendsForStarlark(
       StarlarkThread thread) throws EvalException {
     CcModule.checkPrivateStarlarkificationAllowlist(thread);
-    return Dict.immutableCopyOf(getSharedNonLtoBackends());
+    ImmutableMap<Artifact, LtoBackendArtifacts> backends = getSharedNonLtoBackends();
+    return backends != null ? Dict.immutableCopyOf(backends) : null;
   }
 
   @Override
@@ -148,7 +149,8 @@
   public final Dict<Artifact, LtoBackendArtifacts> getPicSharedNonLtoBackendsForStarlark(
       StarlarkThread thread) throws EvalException {
     CcModule.checkPrivateStarlarkificationAllowlist(thread);
-    return Dict.immutableCopyOf(getPicSharedNonLtoBackends());
+    ImmutableMap<Artifact, LtoBackendArtifacts> backends = getPicSharedNonLtoBackends();
+    return backends != null ? Dict.immutableCopyOf(backends) : null;
   }
 
   LinkerInputs.LibraryToLink getStaticLibraryToLink() {