diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index eeb2bfa..e2446cd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -872,10 +872,12 @@
             .addAll(requestedFeatures)
             .addAll(toolchain.getFeatures().getDefaultFeaturesAndActionConfigs());
 
-    if (toolchain.isHostConfiguration()) {
-      allFeatures.add("host");
-    } else {
-      allFeatures.add("nonhost");
+    if (!cppConfiguration.dontEnableHostNonhost()) {
+      if (toolchain.isHostConfiguration()) {
+        allFeatures.add("host");
+      } else {
+        allFeatures.add("nonhost");
+      }
     }
 
     if (toolchain.useFission() && !cppConfiguration.disableLegacyCrosstoolFields()) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index 2797940..5a614b4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -597,4 +597,8 @@
   public boolean disableCrosstool() {
     return cppOptions.disableCrosstool;
   }
+
+  public boolean dontEnableHostNonhost() {
+    return cppOptions.dontEnableHostNonhost;
+  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
index 314919b..6e6415c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
@@ -686,6 +686,20 @@
   public boolean useLLVMCoverageMapFormat;
 
   @Option(
+      name = "incompatible_dont_enable_host_nonhost_crosstool_features",
+      defaultValue = "false",
+      documentationCategory = OptionDocumentationCategory.TOOLCHAIN,
+      effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS},
+      metadataTags = {
+        OptionMetadataTag.INCOMPATIBLE_CHANGE,
+        OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
+      },
+      help =
+          "If true, Bazel will not enable 'host' and 'nonhost' features in the c++ toolchain "
+              + "(see https://github.com/bazelbuild/bazel/issues/7407 for more information).")
+  public boolean dontEnableHostNonhost;
+
+  @Option(
       name = "incompatible_disable_legacy_crosstool_fields",
       oldName = "experimental_disable_legacy_crosstool_fields",
       defaultValue = "false",
@@ -886,6 +900,7 @@
     host.disableCrosstool = disableCrosstool;
     host.enableCcToolchainResolution = enableCcToolchainResolution;
     host.removeLegacyWholeArchive = removeLegacyWholeArchive;
+    host.dontEnableHostNonhost = dontEnableHostNonhost;
     return host;
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
index ebf1bf5..b219d81 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcLibraryConfiguredTargetTest.java
@@ -1230,12 +1230,17 @@
     assertThat(flags).containsNoneOf("-fastbuild", "-opt");
   }
 
-  private List<String> getHostAndTargetFlags(boolean useHost) throws Exception {
+  private List<String> getHostAndTargetFlags(boolean useHost, boolean isDisabledByFlag)
+      throws Exception {
     AnalysisMock.get()
         .ccSupport()
         .setupCrosstool(mockToolsConfig, MockCcSupport.HOST_AND_NONHOST_CONFIGURATION);
     scratch.overwriteFile("mode/BUILD", "cc_library(name = 'a', srcs = ['a.cc'])");
-    useConfiguration("--cpu=k8");
+    useConfiguration(
+        "--cpu=k8",
+        isDisabledByFlag
+            ? "--incompatible_dont_enable_host_nonhost_crosstool_features"
+            : "--noincompatible_dont_enable_host_nonhost_crosstool_features");
     ConfiguredTarget target;
     String objectPath;
     if (useHost) {
@@ -1255,16 +1260,29 @@
   public void testHostAndNonHostFeatures() throws Exception {
     List<String> flags;
 
-    flags = getHostAndTargetFlags(true);
+    flags = getHostAndTargetFlags(/* useHost= */ true, /* isDisabledByFlag= */ false);
     assertThat(flags).contains("-host");
     assertThat(flags).doesNotContain("-nonhost");
 
-    flags = getHostAndTargetFlags(false);
+    flags = getHostAndTargetFlags(/* useHost= */ false, /* isDisabledByFlag= */ false);
     assertThat(flags).contains("-nonhost");
     assertThat(flags).doesNotContain("-host");
   }
 
   @Test
+  public void testHostAndNonHostFeaturesDisabledByTheFlag() throws Exception {
+    List<String> flags;
+
+    flags = getHostAndTargetFlags(/* useHost= */ true, /* isDisabledByFlag= */ true);
+    assertThat(flags).doesNotContain("-host");
+    assertThat(flags).doesNotContain("-nonhost");
+
+    flags = getHostAndTargetFlags(/* useHost= */ false, /* isDisabledByFlag= */ true);
+    assertThat(flags).doesNotContain("-nonhost");
+    assertThat(flags).doesNotContain("-host");
+  }
+
+  @Test
   public void testIncludePathsOutsideExecutionRoot() throws Exception {
     scratchRule(
         "root",
