diff options
author | Greg Estren <gregce@google.com> | 2015-11-17 22:28:32 +0000 |
---|---|---|
committer | Lukacs Berki <lberki@google.com> | 2015-11-18 15:30:37 +0000 |
commit | 65a82881365b918a2db88d94de5a86f7da1672b0 (patch) | |
tree | 04243d4bedd402bd291276ceaa6a3a618cc5b582 /src/main | |
parent | 865e5a9c5ef80f58c7c4c67e768068f95f30f9dd (diff) |
LipoDataTransition is only meaningful for C++
options. If a rule (such as a filegroup) doesn't
have C++ options in its transitive closure, then
buildOptions.get(CppOptions.class) returns null
and crashes.
So add a check to just fast-return for these cases.
--
MOS_MIGRATED_REVID=108079561
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java | 7 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/LipoDataTransition.java | 6 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java index c79d8b1612..6bba7a3c4c 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java @@ -150,6 +150,13 @@ public final class BuildOptions implements Cloneable, Serializable { } /** + * Returns true if these options contain the given {@link FragmentOptions}. + */ + public boolean contains(Class<? extends FragmentOptions> optionsClass) { + return fragmentOptionsMap.containsKey(optionsClass); + } + + /** * Returns a multimap of all labels that were specified as options, keyed by the name to be * displayed to the user if something goes wrong. This should be the set of all labels * mentioned in explicit command line options that are not already covered by the diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/LipoDataTransition.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/LipoDataTransition.java index 7fab820017..3556eecb24 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/LipoDataTransition.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/transitions/LipoDataTransition.java @@ -37,6 +37,12 @@ public final class LipoDataTransition implements PatchTransition { return options; } + // If this target and its transitive closure don't have C++ options, there's no + // LIPO context to change. + if (!options.contains(CppOptions.class)) { + return options; + } + CppOptions cppOptions = options.get(CppOptions.class); if (cppOptions.lipoMode == CrosstoolConfig.LipoMode.OFF) { return options; |