diff --git a/tools/gn/functions.cc b/tools/gn/functions.cc
index 937ffd2..47d987c 100644
--- a/tools/gn/functions.cc
+++ b/tools/gn/functions.cc
@@ -778,10 +778,10 @@
     for (const Value& cur : value->list_value()) {
       if (!cur.VerifyTypeIs(Value::STRING, err))
         return Value();
-      if (!source->GetValue(cur.string_value(), true)) {
-        *err = Err(cur, "Undefined identifier");
-        return Value();
-      }
+      // We don't need the return value, we invoke scope::GetValue only to mark
+      // the value as used. Note that we cannot use Scope::MarkUsed because we
+      // want to also search in the parent scope.
+      (void) source->GetValue(cur.string_value(), true);
     }
     return Value();
   }
diff --git a/tools/gn/functions_target_unittest.cc b/tools/gn/functions_target_unittest.cc
index 40c6fde..af8b0e0 100644
--- a/tools/gn/functions_target_unittest.cc
+++ b/tools/gn/functions_target_unittest.cc
@@ -66,6 +66,16 @@
   scoped_input.parsed()->Execute(setup.scope(), &err);
   ASSERT_FALSE(err.has_error()) << err.message();
 
+  TestParseInput nonexistent_arg_input(
+      "source_set(\"foo\") {\n"
+      "  a = {x = 1}\n"
+      "  not_needed(a, [ \"x\", \"y\" ])\n"
+      "}\n");
+  ASSERT_FALSE(nonexistent_arg_input.has_error());
+  err = Err();
+  nonexistent_arg_input.parsed()->Execute(setup.scope(), &err);
+  ASSERT_FALSE(err.has_error()) << err.message();
+
   TestParseInput exclusion_input(
       "source_set(\"foo\") {\n"
       "  x = 1\n"
@@ -193,4 +203,4 @@
   good_input.parsed()->Execute(setup.scope(), &err);
   ASSERT_TRUE(err.has_error());
   ASSERT_EQ(err.message(), "More than one language used in target sources.");
-}
\ No newline at end of file
+}
