Rename impl:$MODULE to $MODULE_Private.

The latter is specifically hardcoded to be treated as a private module
by clang.

Change-Id: I6990356d8d318f42b6a266eb088273496a6a6964
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/21941
Reviewed-by: Takuto Ikuta <tikuta@google.com>
Commit-Queue: Matt Stark <msta@google.com>
diff --git a/src/gn/ninja_binary_target_writer.cc b/src/gn/ninja_binary_target_writer.cc
index b93bd28..163141b 100644
--- a/src/gn/ninja_binary_target_writer.cc
+++ b/src/gn/ninja_binary_target_writer.cc
@@ -135,7 +135,10 @@
                                                     const SourceDir& out_dir) {
   auto base = target_->modulemap_file()->GetDir();
   auto module_name = target_->module_name();
-  out << "module \"impl:" << module_name << "\" {\n";
+  // Though it's not documented, clang special-cases modules suffixed with
+  // _Private. Private and public in the context of clang means basically the
+  // same thing as in the context of GN.
+  out << "module \"" << module_name << "_Private\" {\n";
   if (!target_->all_headers_public()) {
     WriteModuleMapHeaders(out, out_dir, target_->sources(), settings_);
   }
diff --git a/src/gn/ninja_c_binary_target_writer_unittest.cc b/src/gn/ninja_c_binary_target_writer_unittest.cc
index 623098a..81fb1ed 100644
--- a/src/gn/ninja_c_binary_target_writer_unittest.cc
+++ b/src/gn/ninja_c_binary_target_writer_unittest.cc
@@ -3127,7 +3127,7 @@
       .WritePrivateModuleMap(private_modulemap, out_dir);
 
   const char expected_private[] =
-      "module \"impl://foo:root\" {\n"
+      "module \"//foo:root_Private\" {\n"
       "  textual header \"../../../foo/private_header.h\"\n"
       "  extern module \"//foo:root\" \"root.modulemap\"\n"
       "  use \"//foo:root\"\n"
diff --git a/src/gn/ninja_module_writer_util.cc b/src/gn/ninja_module_writer_util.cc
index cfadb25..5190d4a 100644
--- a/src/gn/ninja_module_writer_util.cc
+++ b/src/gn/ninja_module_writer_util.cc
@@ -78,7 +78,7 @@
   if (has_generated_modulemap) {
     // Add the private modulemap as a dependency.
     ret.emplace(target->private_modulemap_file(),
-                base::StringPrintf("impl:%s", target->module_name().c_str()),
+                base::StringPrintf("%s_Private", target->module_name().c_str()),
                 std::nullopt, true);
   } else {
     add_if_new(target, true, has_generated_modulemap);