Don't assert on gn builds without any target.

NinjaWriter::RunAndWriteFiles() returned false but wrote a diag
to stdout instead of filling in *err. Later, RunGen() would
call `err.PrintToStdout();` when RunAndWriteFiles() returned false,
which DCHECK(has_error_)ed which failed since err wasn't set.

Change-Id: Ia4ca29507bcc3855da3d6c233c6f13b9538ea96d
Bug: none
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/8800
Commit-Queue: Brett Wilson <brettw@chromium.org>
Reviewed-by: Brett Wilson <brettw@chromium.org>
diff --git a/src/gn/ninja_writer.cc b/src/gn/ninja_writer.cc
index b2bd98a..999718a 100644
--- a/src/gn/ninja_writer.cc
+++ b/src/gn/ninja_writer.cc
@@ -31,9 +31,8 @@
 bool NinjaWriter::WriteToolchains(const PerToolchainRules& per_toolchain_rules,
                                   Err* err) {
   if (per_toolchain_rules.empty()) {
-    Err(Location(), "No targets.",
-        "I could not find any targets to write, so I'm doing nothing.")
-        .PrintToStdout();
+    *err = Err(Location(), "No targets.",
+        "I could not find any targets to write, so I'm doing nothing.");
     return false;
   }
 
@@ -42,8 +41,8 @@
     const Settings* settings =
         builder_.loader()->GetToolchainSettings(toolchain->label());
     if (!NinjaToolchainWriter::RunAndWriteFile(settings, toolchain, i.second)) {
-      Err(Location(), "Couldn't open toolchain buildfile(s) for writing")
-          .PrintToStdout();
+      *err =
+          Err(Location(), "Couldn't open toolchain buildfile(s) for writing");
       return false;
     }
   }