diff --git a/tools/gn/builder.cc b/tools/gn/builder.cc
index ca11e88..5548d2b 100644
--- a/tools/gn/builder.cc
+++ b/tools/gn/builder.cc
@@ -416,7 +416,6 @@
         !ResolveConfigs(&target->configs(), err) ||
         !ResolveConfigs(&target->all_dependent_configs(), err) ||
         !ResolveConfigs(&target->public_configs(), err) ||
-        !ResolveForwardDependentConfigs(target, err) ||
         !ResolveToolchain(target, err))
       return false;
   } else if (record->type() == BuilderRecord::ITEM_CONFIG) {
@@ -477,37 +476,6 @@
   return true;
 }
 
-// "Forward dependent configs" should refer to targets in the deps that should
-// have their configs forwarded.
-bool Builder::ResolveForwardDependentConfigs(Target* target, Err* err) {
-  const UniqueVector<LabelTargetPair>& configs =
-      target->forward_dependent_configs();
-
-  // Assume that the lists are small so that brute-force n^2 is appropriate.
-  for (const auto& config : configs) {
-    for (const auto& dep_pair : target->GetDeps(Target::DEPS_LINKED)) {
-      if (config.label == dep_pair.label) {
-        DCHECK(dep_pair.ptr);  // Should already be resolved.
-        // UniqueVector's contents are constant so uniqueness is preserved, but
-        // we want to update this pointer which doesn't change uniqueness
-        // (uniqueness in this vector is determined by the label only).
-        const_cast<LabelTargetPair&>(config).ptr = dep_pair.ptr;
-        break;
-      }
-    }
-    if (!config.ptr) {
-      *err = Err(target->defined_from(),
-          "Target in forward_dependent_configs_from was not listed in the deps",
-          "This target has a forward_dependent_configs_from entry that was "
-          "not present in\nthe deps. A target can only forward things it "
-          "depends on. It was forwarding:\n  " +
-          config.label.GetUserVisibleName(false));
-      return false;
-    }
-  }
-  return true;
-}
-
 bool Builder::ResolveToolchain(Target* target, Err* err) {
   BuilderRecord* record = GetResolvedRecordOfType(
       target->settings()->toolchain_label(), target->defined_from(),
diff --git a/tools/gn/builder.h b/tools/gn/builder.h
index 7f9e59b..3a22266 100644
--- a/tools/gn/builder.h
+++ b/tools/gn/builder.h
@@ -118,7 +118,6 @@
   // if anything isn't found or if the type doesn't match.
   bool ResolveDeps(LabelTargetVector* deps, Err* err);
   bool ResolveConfigs(UniqueVector<LabelConfigPair>* configs, Err* err);
-  bool ResolveForwardDependentConfigs(Target* target, Err* err);
   bool ResolveToolchain(Target* target, Err* err);
 
   // Given a list of unresolved records, tries to find any circular
diff --git a/tools/gn/command_desc.cc b/tools/gn/command_desc.cc
index 01422c5..3f2bbaf 100644
--- a/tools/gn/command_desc.cc
+++ b/tools/gn/command_desc.cc
@@ -153,25 +153,6 @@
   }
 }
 
-void PrintForwardDependentConfigsFrom(const Target* target,
-                                      bool display_header) {
-  if (target->forward_dependent_configs().empty())
-    return;
-
-  if (display_header)
-    OutputString("\nforward_dependent_configs_from:\n");
-
-  // Collect the sorted list of deps.
-  std::vector<Label> forward;
-  for (const auto& pair : target->forward_dependent_configs())
-    forward.push_back(pair.label);
-  std::sort(forward.begin(), forward.end());
-
-  Label toolchain_label = target->label().GetToolchainLabel();
-  for (const auto& fwd : forward)
-    OutputString("  " + fwd.GetUserVisibleName(toolchain_label) + "\n");
-}
-
 // libs and lib_dirs are special in that they're inherited. We don't currently
 // implement a blame feature for this since the bottom-up inheritance makes
 // this difficult.
@@ -527,10 +508,6 @@
     "      Shows the labels of configs applied to targets that depend on this\n"
     "      one (either directly or all of them).\n"
     "\n"
-    "  forward_dependent_configs_from\n"
-    "      Shows the labels of dependencies for which dependent configs will\n"
-    "      be pushed to targets depending on the current one.\n"
-    "\n"
     "  script\n"
     "  args\n"
     "  depfile\n"
@@ -647,8 +624,6 @@
       PrintPublicConfigs(target, false);
     } else if (what == variables::kAllDependentConfigs) {
       PrintAllDependentConfigs(target, false);
-    } else if (what == variables::kForwardDependentConfigsFrom) {
-      PrintForwardDependentConfigsFrom(target, false);
     } else if (what == variables::kSources) {
       PrintSources(target, false);
     } else if (what == variables::kPublic) {
@@ -736,7 +711,6 @@
 
   PrintPublicConfigs(target, true);
   PrintAllDependentConfigs(target, true);
-  PrintForwardDependentConfigsFrom(target, true);
 
   PrintInputs(target, true);
 
diff --git a/tools/gn/docs/reference.md b/tools/gn/docs/reference.md
index c837037..657796a 100644
--- a/tools/gn/docs/reference.md
+++ b/tools/gn/docs/reference.md
@@ -378,10 +378,6 @@
       Shows the labels of configs applied to targets that depend on this
       one (either directly or all of them).
 
-  forward_dependent_configs_from
-      Shows the labels of dependencies for which dependent configs will
-      be pushed to targets depending on the current one.
-
   script
   args
   depfile
@@ -1036,8 +1032,7 @@
 
 ### **Variables on a target used to apply configs**:
 ```
-  all_dependent_configs, configs, public_configs,
-  forward_dependent_configs_from
+  all_dependent_configs, configs, public_configs
 
 ```
 
@@ -1230,7 +1225,7 @@
   Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
          defines, include_dirs, ldflags, lib_dirs, libs,
          precompiled_header, precompiled_source
-  Deps: data_deps, deps, forward_dependent_configs_from, public_deps
+  Deps: data_deps, deps, public_deps
   Dependent configs: all_dependent_configs, public_configs
   General: check_includes, configs, data, inputs, output_name,
            output_extension, public, sources, testonly, visibility
@@ -1587,16 +1582,14 @@
   specify configs that apply to their dependents.
 
   Depending on a group is exactly like depending directly on that
-  group's deps. Direct dependent configs will get automatically
-  forwarded through the group so you shouldn't need to use
-  "forward_dependent_configs_from.
+  group's deps.
 
 ```
 
 ### **Variables**
 
 ```
-  Deps: data_deps, deps, forward_dependent_configs_from, public_deps
+  Deps: data_deps, deps, public_deps
   Dependent configs: all_dependent_configs, public_configs
 
 ```
@@ -2005,7 +1998,7 @@
   Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
          defines, include_dirs, ldflags, lib_dirs, libs,
          precompiled_header, precompiled_source
-  Deps: data_deps, deps, forward_dependent_configs_from, public_deps
+  Deps: data_deps, deps, public_deps
   Dependent configs: all_dependent_configs, public_configs
   General: check_includes, configs, data, inputs, output_name,
            output_extension, public, sources, testonly, visibility
@@ -2046,7 +2039,7 @@
   Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
          defines, include_dirs, ldflags, lib_dirs, libs,
          precompiled_header, precompiled_source
-  Deps: data_deps, deps, forward_dependent_configs_from, public_deps
+  Deps: data_deps, deps, public_deps
   Dependent configs: all_dependent_configs, public_configs
   General: check_includes, configs, data, inputs, output_name,
            output_extension, public, sources, testonly, visibility
@@ -2070,7 +2063,7 @@
   Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
          defines, include_dirs, ldflags, lib_dirs, libs,
          precompiled_header, precompiled_source
-  Deps: data_deps, deps, forward_dependent_configs_from, public_deps
+  Deps: data_deps, deps, public_deps
   Dependent configs: all_dependent_configs, public_configs
   General: check_includes, configs, data, inputs, output_name,
            output_extension, public, sources, testonly, visibility
@@ -3725,56 +3718,6 @@
 
 
 ```
-## **forward_dependent_configs_from**
-
-```
-  A list of target labels.
-
-  DEPRECATED. Use public_deps instead which will have the same effect.
-
-  Exposes the public_configs from a private dependent target as
-  public_configs of the current one. Each label in this list
-  must also be in the deps.
-
-  Generally you should use public_deps instead of this variable to
-  express the concept of exposing a dependency as part of a target's
-  public API. We're considering removing this variable.
-
-```
-
-### **Discussion**
-
-```
-  Sometimes you depend on a child library that exports some necessary
-  configuration via public_configs. If your target in turn exposes the
-  child library's headers in its public headers, it might mean that
-  targets that depend on you won't work: they'll be seeing the child
-  library's code but not the necessary configuration. This list
-  specifies which of your deps' direct dependent configs to expose as
-  your own.
-
-```
-
-### **Examples**
-
-```
-  If we use a given library "a" from our public headers:
-
-    deps = [ ":a", ":b", ... ]
-    forward_dependent_configs_from = [ ":a" ]
-
-  This example makes a "transparent" target that forwards a dependency
-  to another:
-
-    group("frob") {
-      if (use_system_frob) {
-        deps = ":system_frob"
-      } else {
-        deps = "//third_party/fallback_frob"
-      }
-      forward_dependent_configs_from = deps
-    }
-
 
 ```
 ## **include_dirs**: Additional include directories.
diff --git a/tools/gn/functions.cc b/tools/gn/functions.cc
index 01d0aeb..9413a7f 100644
--- a/tools/gn/functions.cc
+++ b/tools/gn/functions.cc
@@ -265,8 +265,7 @@
     CONFIG_VALUES_VARS_HELP
     "\n"
     "Variables on a target used to apply configs:\n"
-    "  all_dependent_configs, configs, public_configs,\n"
-    "  forward_dependent_configs_from\n"
+    "  all_dependent_configs, configs, public_configs\n"
     "\n"
     "Example:\n"
     "  config(\"myconfig\") {\n"
diff --git a/tools/gn/functions_target.cc b/tools/gn/functions_target.cc
index ffe8f5f..fbac2d2 100644
--- a/tools/gn/functions_target.cc
+++ b/tools/gn/functions_target.cc
@@ -16,7 +16,7 @@
 #define DEPENDENT_CONFIG_VARS \
     "  Dependent configs: all_dependent_configs, public_configs\n"
 #define DEPS_VARS \
-    "  Deps: data_deps, deps, forward_dependent_configs_from, public_deps\n"
+    "  Deps: data_deps, deps, public_deps\n"
 #define GENERAL_TARGET_VARS \
     "  General: check_includes, configs, data, inputs, output_name,\n" \
     "           output_extension, public, sources, testonly, visibility\n"
@@ -330,9 +330,7 @@
     "  specify configs that apply to their dependents.\n"
     "\n"
     "  Depending on a group is exactly like depending directly on that\n"
-    "  group's deps. Direct dependent configs will get automatically\n"
-    "  forwarded through the group so you shouldn't need to use\n"
-    "  \"forward_dependent_configs_from.\n"
+    "  group's deps. \n"
     "\n"
     "Variables\n"
     "\n"
diff --git a/tools/gn/misc/emacs/gn-mode.el b/tools/gn/misc/emacs/gn-mode.el
index d867567..e61dec5 100644
--- a/tools/gn/misc/emacs/gn-mode.el
+++ b/tools/gn/misc/emacs/gn-mode.el
@@ -73,10 +73,9 @@
   '("all_dependent_configs" "allow_circular_includes_from" "args" "asmflags"
     "cflags" "cflags_c" "cflags_cc" "cflags_objc" "cflags_objcc"
     "check_includes" "complete_static_lib" "configs" "data" "data_deps"
-    "defines" "depfile" "deps" "forward_dependent_configs_from" "include_dirs"
-    "inputs" "ldflags" "lib_dirs" "libs" "output_extension" "output_name"
-    "outputs" "public" "public_configs" "public_deps" "script" "sources"
-    "testonly" "visibility"))
+    "defines" "depfile" "deps" "include_dirs" "inputs" "ldflags" "lib_dirs"
+    "libs" "output_extension" "output_name" "outputs" "public" "public_configs"
+    "public_deps" "script" "sources" "testonly" "visibility"))
 
 (defconst gn-font-lock-keywords
   `((,(regexp-opt gn-font-lock-target-declaration-keywords 'words) .
diff --git a/tools/gn/misc/tm/GN.tmLanguage b/tools/gn/misc/tm/GN.tmLanguage
index 44cb611..5f39f01 100644
--- a/tools/gn/misc/tm/GN.tmLanguage
+++ b/tools/gn/misc/tm/GN.tmLanguage
@@ -89,7 +89,7 @@
       <key>comment</key>
       <string>target variables</string>
       <key>match</key>
-      <string>\b(?:all_dependent_configs|allow_circular_includes_from|args|asmflags|cflags|cflags_c|cflags_cc|cflags_objc|cflags_objcc|check_includes|complete_static_lib|configs|data|data_deps|defines|depfile|deps|forward_dependent_configs_from|include_dirs|inputs|ldflags|lib_dirs|libs|output_extension|output_name|outputs|public|public_configs|public_deps|script|sources|testonly|visibility)\b</string>
+      <string>\b(?:all_dependent_configs|allow_circular_includes_from|args|asmflags|cflags|cflags_c|cflags_cc|cflags_objc|cflags_objcc|check_includes|complete_static_lib|configs|data|data_deps|defines|depfile|deps|include_dirs|inputs|ldflags|lib_dirs|libs|output_extension|output_name|outputs|public|public_configs|public_deps|script|sources|testonly|visibility)\b</string>
       <key>name</key>
       <string>entity.other.attribute-name.gn</string>
     </dict>
diff --git a/tools/gn/misc/vim/syntax/gn.vim b/tools/gn/misc/vim/syntax/gn.vim
index d9757e3..b7cef23 100644
--- a/tools/gn/misc/vim/syntax/gn.vim
+++ b/tools/gn/misc/vim/syntax/gn.vim
@@ -44,10 +44,10 @@
 syn keyword     gnVariable args asmflags cflags cflags_c cflags_cc cflags_objc
 syn keyword     gnVariable cflags_objcc check_includes complete_static_lib
 syn keyword     gnVariable configs data data_deps defines depfile deps
-syn keyword     gnVariable forward_dependent_configs_from include_dirs inputs
-syn keyword     gnVariable ldflags lib_dirs libs output_extension output_name
-syn keyword     gnVariable outputs public public_configs public_deps script
-syn keyword     gnVariable sources testonly visibility
+syn keyword     gnVariable include_dirs inputs ldflags lib_dirs libs
+syn keyword     gnVariable output_extension output_name outputs public
+syn keyword     gnVariable public_configs public_deps scripte sources testonly
+syn keyword     gnVariable visibility
 hi def link     gnVariable          Keyword
 
 " Strings
diff --git a/tools/gn/target.cc b/tools/gn/target.cc
index 585c850..a27a5c4 100644
--- a/tools/gn/target.cc
+++ b/tools/gn/target.cc
@@ -168,7 +168,7 @@
   }
 
   PullDependentTargets();
-  PullForwardedDependentConfigs();
+  PullPublicConfigs();
   PullRecursiveHardDeps();
   if (!ResolvePrecompiledHeaders(err))
     return false;
@@ -305,30 +305,13 @@
     PullDependentTarget(dep.ptr, false);
 }
 
-void Target::PullForwardedDependentConfigs() {
+void Target::PullPublicConfigs() {
   // Pull public configs from each of our dependency's public deps.
   for (const auto& dep : public_deps_)
-    PullForwardedDependentConfigsFrom(dep.ptr);
-
-  // Forward public configs if explicitly requested.
-  for (const auto& dep : forward_dependent_configs_) {
-    const Target* from_target = dep.ptr;
-
-    // The forward_dependent_configs_ must be in the deps (public or private)
-    // already, so we don't need to bother copying to our configs, only
-    // forwarding.
-    DCHECK(std::find_if(private_deps_.begin(), private_deps_.end(),
-                        LabelPtrPtrEquals<Target>(from_target)) !=
-               private_deps_.end() ||
-           std::find_if(public_deps_.begin(), public_deps_.end(),
-                        LabelPtrPtrEquals<Target>(from_target)) !=
-               public_deps_.end());
-
-    PullForwardedDependentConfigsFrom(from_target);
-  }
+    PullPublicConfigsFrom(dep.ptr);
 }
 
-void Target::PullForwardedDependentConfigsFrom(const Target* from) {
+void Target::PullPublicConfigsFrom(const Target* from) {
   public_configs_.Append(from->public_configs().begin(),
                          from->public_configs().end());
 }
diff --git a/tools/gn/target.h b/tools/gn/target.h
index a983241..fc752ac 100644
--- a/tools/gn/target.h
+++ b/tools/gn/target.h
@@ -174,15 +174,6 @@
     return public_configs_;
   }
 
-  // A list of a subset of deps where we'll re-export public_configs as
-  // public_configs of this target.
-  const UniqueVector<LabelTargetPair>& forward_dependent_configs() const {
-    return forward_dependent_configs_;
-  }
-  UniqueVector<LabelTargetPair>& forward_dependent_configs() {
-    return forward_dependent_configs_;
-  }
-
   // Dependencies that can include files from this target.
   const std::set<Label>& allow_circular_includes_from() const {
     return allow_circular_includes_from_;
@@ -260,8 +251,8 @@
 
   // These each pull specific things from dependencies to this one when all
   // deps have been resolved.
-  void PullForwardedDependentConfigs();
-  void PullForwardedDependentConfigsFrom(const Target* from);
+  void PullPublicConfigs();
+  void PullPublicConfigsFrom(const Target* from);
   void PullRecursiveHardDeps();
 
   // Fills the link and dependency output files when a target is resolved.
@@ -298,7 +289,6 @@
   UniqueVector<LabelConfigPair> configs_;
   UniqueVector<LabelConfigPair> all_dependent_configs_;
   UniqueVector<LabelConfigPair> public_configs_;
-  UniqueVector<LabelTargetPair> forward_dependent_configs_;
 
   std::set<Label> allow_circular_includes_from_;
 
diff --git a/tools/gn/target_generator.cc b/tools/gn/target_generator.cc
index 833b382..366210c 100644
--- a/tools/gn/target_generator.cc
+++ b/tools/gn/target_generator.cc
@@ -247,10 +247,6 @@
       return false;
   }
 
-  // This is a list of dependent targets to have their configs fowarded, so
-  // it goes here rather than in FillConfigs.
-  if (!FillForwardDependentConfigs())
-    return false;
   return true;
 }
 
@@ -359,14 +355,3 @@
   }
   return !err_->has_error();
 }
-
-bool TargetGenerator::FillForwardDependentConfigs() {
-  const Value* value = scope_->GetValue(
-      variables::kForwardDependentConfigsFrom, true);
-  if (value) {
-    ExtractListOfUniqueLabels(*value, scope_->GetSourceDir(),
-                              ToolchainLabelForScope(scope_),
-                              &target_->forward_dependent_configs(), err_);
-  }
-  return !err_->has_error();
-}
diff --git a/tools/gn/target_generator.h b/tools/gn/target_generator.h
index 83e3af1..1fd055b 100644
--- a/tools/gn/target_generator.h
+++ b/tools/gn/target_generator.h
@@ -77,8 +77,6 @@
                           UniqueVector<LabelConfigPair>* dest);
   bool FillGenericDeps(const char* var_name, LabelTargetVector* dest);
 
-  bool FillForwardDependentConfigs();
-
   DISALLOW_COPY_AND_ASSIGN(TargetGenerator);
 };
 
diff --git a/tools/gn/target_unittest.cc b/tools/gn/target_unittest.cc
index 1eeac25..f4acaca 100644
--- a/tools/gn/target_unittest.cc
+++ b/tools/gn/target_unittest.cc
@@ -75,8 +75,7 @@
   EXPECT_EQ(0u, exec.all_lib_dirs().size());
 }
 
-// Test all_dependent_configs, public_config inheritance, and
-// forward_dependent_configs_from
+// Test all_dependent_configs and public_config inheritance.
 TEST(Target, DependentConfigs) {
   TestWithScope setup;
   Err err;
@@ -124,15 +123,13 @@
   TestTarget b_fwd(setup, "//foo:b_fwd", Target::STATIC_LIBRARY);
   a_fwd.private_deps().push_back(LabelTargetPair(&b_fwd));
   b_fwd.private_deps().push_back(LabelTargetPair(&c));
-  b_fwd.forward_dependent_configs().push_back(LabelTargetPair(&c));
 
   ASSERT_TRUE(b_fwd.OnResolved(&err));
   ASSERT_TRUE(a_fwd.OnResolved(&err));
 
   // A_fwd should now have both configs.
-  ASSERT_EQ(2u, a_fwd.configs().size());
+  ASSERT_EQ(1u, a_fwd.configs().size());
   EXPECT_EQ(&all, a_fwd.configs()[0].ptr);
-  EXPECT_EQ(&direct, a_fwd.configs()[1].ptr);
   ASSERT_EQ(1u, a_fwd.all_dependent_configs().size());
   EXPECT_EQ(&all, a_fwd.all_dependent_configs()[0].ptr);
 }
@@ -387,15 +384,7 @@
   // This target has a private dependency on dest for forwards configs.
   TestTarget forward(setup, "//a:f", Target::SOURCE_SET);
   forward.private_deps().push_back(LabelTargetPair(&dest));
-  forward.forward_dependent_configs().push_back(LabelTargetPair(&dest));
   ASSERT_TRUE(forward.OnResolved(&err));
-
-  // Depending on the forward target should apply the config.
-  TestTarget dep_on_forward(setup, "//a:dof", Target::SOURCE_SET);
-  dep_on_forward.private_deps().push_back(LabelTargetPair(&forward));
-  ASSERT_TRUE(dep_on_forward.OnResolved(&err));
-  ASSERT_EQ(1u, dep_on_forward.configs().size());
-  EXPECT_EQ(&pub_config, dep_on_forward.configs()[0].ptr);
 }
 
 // Tests that different link/depend outputs work for solink tools.
diff --git a/tools/gn/variables.cc b/tools/gn/variables.cc
index 6f9c848..d4e978d 100644
--- a/tools/gn/variables.cc
+++ b/tools/gn/variables.cc
@@ -731,54 +731,6 @@
     "\n"
     "  See also \"public_deps\" and \"data_deps\".\n";
 
-// TODO(brettw) remove this, deprecated.
-const char kForwardDependentConfigsFrom[] = "forward_dependent_configs_from";
-const char kForwardDependentConfigsFrom_HelpShort[] =
-    "forward_dependent_configs_from: [label list] DEPRECATED.";
-const char kForwardDependentConfigsFrom_Help[] =
-    "forward_dependent_configs_from\n"
-    "\n"
-    "  A list of target labels.\n"
-    "\n"
-    "  DEPRECATED. Use public_deps instead which will have the same effect.\n"
-    "\n"
-    "  Exposes the public_configs from a private dependent target as\n"
-    "  public_configs of the current one. Each label in this list\n"
-    "  must also be in the deps.\n"
-    "\n"
-    "  Generally you should use public_deps instead of this variable to\n"
-    "  express the concept of exposing a dependency as part of a target's\n"
-    "  public API. We're considering removing this variable.\n"
-    "\n"
-    "Discussion\n"
-    "\n"
-    "  Sometimes you depend on a child library that exports some necessary\n"
-    "  configuration via public_configs. If your target in turn exposes the\n"
-    "  child library's headers in its public headers, it might mean that\n"
-    "  targets that depend on you won't work: they'll be seeing the child\n"
-    "  library's code but not the necessary configuration. This list\n"
-    "  specifies which of your deps' direct dependent configs to expose as\n"
-    "  your own.\n"
-    "\n"
-    "Examples\n"
-    "\n"
-    "  If we use a given library \"a\" from our public headers:\n"
-    "\n"
-    "    deps = [ \":a\", \":b\", ... ]\n"
-    "    forward_dependent_configs_from = [ \":a\" ]\n"
-    "\n"
-    "  This example makes a \"transparent\" target that forwards a dependency\n"
-    "  to another:\n"
-    "\n"
-    "    group(\"frob\") {\n"
-    "      if (use_system_frob) {\n"
-    "        deps = \":system_frob\"\n"
-    "      } else {\n"
-    "        deps = \"//third_party/fallback_frob\"\n"
-    "      }\n"
-    "      forward_dependent_configs_from = deps\n"
-    "    }\n";
-
 const char kIncludeDirs[] = "include_dirs";
 const char kIncludeDirs_HelpShort[] =
     "include_dirs: [directory list] Additional include directories.";
@@ -1393,7 +1345,6 @@
     INSERT_VARIABLE(Defines)
     INSERT_VARIABLE(Depfile)
     INSERT_VARIABLE(Deps)
-    INSERT_VARIABLE(ForwardDependentConfigsFrom)
     INSERT_VARIABLE(IncludeDirs)
     INSERT_VARIABLE(Inputs)
     INSERT_VARIABLE(Ldflags)
diff --git a/tools/gn/variables.h b/tools/gn/variables.h
index a08270c..074f731 100644
--- a/tools/gn/variables.h
+++ b/tools/gn/variables.h
@@ -143,10 +143,6 @@
 extern const char kDeps_HelpShort[];
 extern const char kDeps_Help[];
 
-extern const char kForwardDependentConfigsFrom[];
-extern const char kForwardDependentConfigsFrom_HelpShort[];
-extern const char kForwardDependentConfigsFrom_Help[];
-
 extern const char kIncludeDirs[];
 extern const char kIncludeDirs_HelpShort[];
 extern const char kIncludeDirs_Help[];
