diff --git a/tools/gn/function_toolchain.cc b/tools/gn/function_toolchain.cc
index 0072e65..9b08809 100644
--- a/tools/gn/function_toolchain.cc
+++ b/tools/gn/function_toolchain.cc
@@ -1052,46 +1052,4 @@
   return Value();
 }
 
-extern const char kToolchainArgs[] = "toolchain_args";
-extern const char kToolchainArgs_HelpShort[] =
-    "toolchain_args: Set build arguments for toolchain build setup.";
-extern const char kToolchainArgs_Help[] =
-    "toolchain_args: Set build arguments for toolchain build setup.\n"
-    "\n"
-    "  DEPRECATED. Instead use:\n"
-    "    toolchain_args = { ... }\n"
-    "\n"
-    "  See \"gn help toolchain\" for documentation.\n";
-
-Value RunToolchainArgs(Scope* scope,
-                       const FunctionCallNode* function,
-                       const std::vector<Value>& args,
-                       BlockNode* block,
-                       Err* err) {
-  // This is a backwards-compatible shim that converts the old form of:
-  //   toolchain_args() {
-  //     foo = bar
-  //   }
-  // to the new form:
-  //   toolchain_args = {
-  //     foo = bar
-  //   }
-  // It will be deleted when all users of toolchain_args as a function are
-  // deleted.
-  if (!args.empty()) {
-    *err = Err(function->function(), "This function takes no arguments.");
-    return Value();
-  }
-
-  std::unique_ptr<Scope> block_scope(new Scope(scope));
-  block->Execute(block_scope.get(), err);
-  if (err->has_error())
-    return Value();
-
-  block_scope->DetachFromContaining();
-  scope->SetValue("toolchain_args", Value(function, std::move(block_scope)),
-                  function);
-  return Value();
-}
-
 }  // namespace functions
diff --git a/tools/gn/functions.cc b/tools/gn/functions.cc
index 02129a8..e584f87 100644
--- a/tools/gn/functions.cc
+++ b/tools/gn/functions.cc
@@ -1014,7 +1014,6 @@
     INSERT_FUNCTION(Template, false)
     INSERT_FUNCTION(Tool, false)
     INSERT_FUNCTION(Toolchain, false)
-    INSERT_FUNCTION(ToolchainArgs, false)
     INSERT_FUNCTION(WriteFile, false)
 
     #undef INSERT_FUNCTION
diff --git a/tools/gn/functions.h b/tools/gn/functions.h
index 48e9302..9668658 100644
--- a/tools/gn/functions.h
+++ b/tools/gn/functions.h
@@ -358,15 +358,6 @@
                    BlockNode* block,
                    Err* err);
 
-extern const char kToolchainArgs[];
-extern const char kToolchainArgs_HelpShort[];
-extern const char kToolchainArgs_Help[];
-Value RunToolchainArgs(Scope* scope,
-                       const FunctionCallNode* function,
-                       const std::vector<Value>& args,
-                       BlockNode* block,
-                       Err* err);
-
 extern const char kWriteFile[];
 extern const char kWriteFile_HelpShort[];
 extern const char kWriteFile_Help[];
