diff options
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java index 5c1c57af9f..5d456784e4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java @@ -19,6 +19,7 @@ import com.google.common.base.Preconditions; import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; @@ -481,7 +482,7 @@ public class CppCompileActionBuilder { } private void verifyActionIncludePaths(CppCompileAction action, Consumer<String> errorReporter) { - Iterable<PathFragment> ignoredDirs = action.getValidationIgnoredDirs(); + ImmutableSet<PathFragment> ignoredDirs = ImmutableSet.copyOf(action.getValidationIgnoredDirs()); // We currently do not check the output of: // - getQuoteIncludeDirs(): those only come from includes attributes, and are checked in // CcCommon.getIncludeDirsFromIncludesAttribute(). @@ -491,7 +492,11 @@ public class CppCompileActionBuilder { Iterable<PathFragment> includePathsToVerify = Iterables.concat(action.getIncludeDirs(), action.getSystemIncludeDirs()); for (PathFragment includePath : includePathsToVerify) { - if (FileSystemUtils.startsWithAny(includePath, ignoredDirs)) { + // includePathsToVerify contains all paths that are added as -isystem directive on the command + // line, most of which are added for include directives in the CcCompilationContext and are + // thus also in ignoredDirs. The hash lookup prevents this from becoming O(N^2) for these. + if (ignoredDirs.contains(includePath) + || FileSystemUtils.startsWithAny(includePath, ignoredDirs)) { continue; } // One starting ../ is okay for getting to a sibling repository. |