Allow absolute symlinks in TreeArtifacts. Let the downstream action (if there is one) worry about it.

--
PiperOrigin-RevId: 148249223
MOS_MIGRATED_REVID=148249223
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
index 0f86ad1..5a132c3 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
@@ -191,14 +191,12 @@
             pathToExplode.getChild(subpath.getBaseName()), valuesBuilder);
       } else if (subpath.isSymbolicLink()) {
         PathFragment linkTarget = subpath.readSymbolicLinkUnchecked();
+        valuesBuilder.add(canonicalSubpathFragment);
         if (linkTarget.isAbsolute()) {
-          String errorMessage = String.format(
-              "A TreeArtifact may not contain absolute symlinks, found %s pointing to %s.",
-              subpath,
-              linkTarget);
-          throw new IOException(errorMessage);
+          // We tolerate absolute symlinks here. They will probably be dangling if any downstream
+          // consumer tries to read them, but let that be downstream's problem.
+          continue;
         }
-
         // We visit each path segment of the link target to catch any path traversal outside of the
         // TreeArtifact root directory. For example, for TreeArtifact a/b/c, it is possible to have
         // a symlink, a/b/c/sym_link that points to ../outside_dir/../c/link_target. Although this
@@ -216,7 +214,6 @@
             throw new IOException(errorMessage);
           }
         }
-        valuesBuilder.add(canonicalSubpathFragment);
       } else if (subpath.isFile()) {
         valuesBuilder.add(canonicalSubpathFragment);
       } else {