https://github.com/ChuanqiXu9 updated 
https://github.com/llvm/llvm-project/pull/107194

>From f18b50fb6ae778ac9b4ddaee4029d54f859c50f9 Mon Sep 17 00:00:00 2001
From: Chuanqi Xu <yedeng...@linux.alibaba.com>
Date: Wed, 4 Sep 2024 16:02:53 +0800
Subject: [PATCH 1/3] [C++20] [Modules] Offer -fmodules-embed-all-files option

See
https://discourse.llvm.org/t/rfc-modules-should-we-embed-sources-to-the-bmi/81029
for details.

Close https://github.com/llvm/llvm-project/issues/72383
---
 clang/docs/StandardCPlusPlusModules.rst       | 34 +++++++++++++++++++
 clang/include/clang/Driver/Options.td         | 10 +++---
 clang/lib/Driver/ToolChains/Clang.cpp         |  3 ++
 .../test/Driver/fmodules-embed-all-files.cpp  |  2 ++
 4 files changed, 45 insertions(+), 4 deletions(-)
 create mode 100644 clang/test/Driver/fmodules-embed-all-files.cpp

diff --git a/clang/docs/StandardCPlusPlusModules.rst 
b/clang/docs/StandardCPlusPlusModules.rst
index 2b757a807a0e6e..02ca0db3f937b3 100644
--- a/clang/docs/StandardCPlusPlusModules.rst
+++ b/clang/docs/StandardCPlusPlusModules.rst
@@ -462,6 +462,33 @@ Currently, Clang accepts the above example, though it may 
produce surprising
 results if the debugging code depends on consistent use of ``NDEBUG`` in other
 translation units.
 
+Source Files Consistency
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+Clang may open the input files (*) of a BMI during the compilation. It implies 
that
+when we consume a BMI, all the input files need to be present with the same 
path
+and the same contents.
+
+To overcome the requirements and simplify cases like distributed builds and 
sandboxed
+builds, users can use ``-fmodules-embed-all-files`` flag to embed all input 
files
+into the BMI so that clang won't ask to open the corresponding file on disk.
+
+Input files (*): The source files that took part in the compilation of the BMI.
+For example,
+
+.. code-block:: c++
+
+  // M.cppm
+  module;
+  #include "foo.h"
+  export module M;
+
+  // foo.h
+  #pragma once
+  #include "bar.h"
+
+The ``M.cppm``, ``foo.h`` and ``bar.h`` are input files for the BMI of 
``M.cppm``.
+
 Object definition consistency
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
@@ -484,6 +511,13 @@ fragment is disabled by default. These checks can be 
enabled by specifying
 and you encounter incorrect or missing diagnostics, please report them via the
 `community issue tracker <https://github.com/llvm/llvm-project/issues/>`_.
 
+Privacy Issue
+-------------
+
+BMIs are not and should not be treated as an information hiding mechanism.
+They should always be assumed to contain all the information that was used to
+create them, in a recoverable form.
+
 ABI Impacts
 -----------
 
diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index 1142416e227fc8..954cffc0f66950 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3162,6 +3162,12 @@ def modules_reduced_bmi : Flag<["-"], 
"fexperimental-modules-reduced-bmi">,
   HelpText<"Generate the reduced BMI">,
   MarshallingInfoFlag<FrontendOpts<"GenReducedBMI">>;
 
+def fmodules_embed_all_files : Joined<["-"], "fmodules-embed-all-files">,
+  Visibility<[ClangOption, CC1Option, CLOption]>,
+  HelpText<"Embed the contents of all files read by this compilation into "
+           "the produced module file.">,
+  MarshallingInfoFlag<FrontendOpts<"ModulesEmbedAllFiles">>;
+
 def fmodules_prune_interval : Joined<["-"], "fmodules-prune-interval=">, 
Group<i_Group>,
   Visibility<[ClangOption, CC1Option]>, MetaVarName<"<seconds>">,
   HelpText<"Specify the interval (in seconds) between attempts to prune the 
module cache">,
@@ -7665,10 +7671,6 @@ def fmodules_embed_file_EQ : Joined<["-"], 
"fmodules-embed-file=">,
   HelpText<"Embed the contents of the specified file into the module file "
            "being compiled.">,
   MarshallingInfoStringVector<FrontendOpts<"ModulesEmbedFiles">>;
-def fmodules_embed_all_files : Joined<["-"], "fmodules-embed-all-files">,
-  HelpText<"Embed the contents of all files read by this compilation into "
-           "the produced module file.">,
-  MarshallingInfoFlag<FrontendOpts<"ModulesEmbedAllFiles">>;
 defm fimplicit_modules_use_lock : BoolOption<"f", "implicit-modules-use-lock",
   FrontendOpts<"BuildingImplicitModuleUsesLock">, DefaultTrue,
   NegFlag<SetFalse>,
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index 3fe4ce5d893b8d..870575bb8a907c 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -4214,6 +4214,9 @@ static bool RenderModulesOptions(Compilation &C, const 
Driver &D,
     Args.ClaimAllArgs(options::OPT_fmodule_output_EQ);
   }
 
+  if (Args.hasArg(options::OPT_fmodules_embed_all_files))
+    CmdArgs.push_back("-fmodules-embed-all-files");
+
   return HaveModules;
 }
 
diff --git a/clang/test/Driver/fmodules-embed-all-files.cpp 
b/clang/test/Driver/fmodules-embed-all-files.cpp
new file mode 100644
index 00000000000000..f8e232f792d540
--- /dev/null
+++ b/clang/test/Driver/fmodules-embed-all-files.cpp
@@ -0,0 +1,2 @@
+// RUN: %clang -std=c++20 %s -fmodules-embed-all-files -### 2>&1 | FileCheck %s
+// CHECK: -fmodules-embed-all-files

>From d539f51c09d76170fe93644f00451989fc90e86d Mon Sep 17 00:00:00 2001
From: Chuanqi Xu <yedeng...@linux.alibaba.com>
Date: Thu, 19 Sep 2024 10:31:34 +0800
Subject: [PATCH 2/3] update

---
 clang/docs/StandardCPlusPlusModules.rst       | 20 +++++++++++--------
 .../test/Driver/fmodules-embed-all-files.cpp  |  3 +++
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/clang/docs/StandardCPlusPlusModules.rst 
b/clang/docs/StandardCPlusPlusModules.rst
index 02ca0db3f937b3..f2ac3ee11ceb42 100644
--- a/clang/docs/StandardCPlusPlusModules.rst
+++ b/clang/docs/StandardCPlusPlusModules.rst
@@ -465,16 +465,20 @@ translation units.
 Source Files Consistency
 ^^^^^^^^^^^^^^^^^^^^^^^^
 
-Clang may open the input files (*) of a BMI during the compilation. It implies 
that
-when we consume a BMI, all the input files need to be present with the same 
path
-and the same contents.
+Clang may open the input files\ :sup:`*` of a BMI during the compilation. This 
implies that
+when Clang consumes a BMI, all the input files need to be present in the 
original path
+and with the original contents.
 
-To overcome the requirements and simplify cases like distributed builds and 
sandboxed
-builds, users can use ``-fmodules-embed-all-files`` flag to embed all input 
files
-into the BMI so that clang won't ask to open the corresponding file on disk.
+To overcome these requirements and simplify cases like distributed builds and 
sandboxed
+builds, users can use the ``-fmodules-embed-all-files`` flag to embed all 
input files
+into the BMI so that Clang does not need to open the corresponding file on 
disk.
 
-Input files (*): The source files that took part in the compilation of the BMI.
-For example,
+When the ``-fmodules-embed-all-files`` flag are enabled, Clang explicitly 
emits the source
+code into the BMI file, the contents of the BMI file contain a sufficiently 
verbose
+representation to reproduce the original source file.
+
+:sup:`*`Input files: The source files which took part in the compilation of 
the BMI.
+For example:
 
 .. code-block:: c++
 
diff --git a/clang/test/Driver/fmodules-embed-all-files.cpp 
b/clang/test/Driver/fmodules-embed-all-files.cpp
index f8e232f792d540..8da836a40446c4 100644
--- a/clang/test/Driver/fmodules-embed-all-files.cpp
+++ b/clang/test/Driver/fmodules-embed-all-files.cpp
@@ -1,2 +1,5 @@
 // RUN: %clang -std=c++20 %s -fmodules-embed-all-files -### 2>&1 | FileCheck %s
 // CHECK: -fmodules-embed-all-files
+
+// RUN: %clang -std=c++20 %s -### 2>&1 | FileCheck %s --check-prefix=NON-EMBED
+// NON-EMBED-NOT: -fmodules-embed-all-files

>From 19cd17896ecb8367ddc9f106c7baa76fb3e76b37 Mon Sep 17 00:00:00 2001
From: Chuanqi Xu <yedeng...@linux.alibaba.com>
Date: Thu, 19 Sep 2024 10:49:35 +0800
Subject: [PATCH 3/3] use ''*'' instead of '*'

---
 clang/docs/StandardCPlusPlusModules.rst | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/docs/StandardCPlusPlusModules.rst 
b/clang/docs/StandardCPlusPlusModules.rst
index f2ac3ee11ceb42..8a79c83ea014bb 100644
--- a/clang/docs/StandardCPlusPlusModules.rst
+++ b/clang/docs/StandardCPlusPlusModules.rst
@@ -465,7 +465,7 @@ translation units.
 Source Files Consistency
 ^^^^^^^^^^^^^^^^^^^^^^^^
 
-Clang may open the input files\ :sup:`*` of a BMI during the compilation. This 
implies that
+Clang may open the input files\ :sup:``*`` of a BMI during the compilation. 
This implies that
 when Clang consumes a BMI, all the input files need to be present in the 
original path
 and with the original contents.
 
@@ -477,7 +477,7 @@ When the ``-fmodules-embed-all-files`` flag are enabled, 
Clang explicitly emits
 code into the BMI file, the contents of the BMI file contain a sufficiently 
verbose
 representation to reproduce the original source file.
 
-:sup:`*`Input files: The source files which took part in the compilation of 
the BMI.
+:sup:``*``Input files: The source files which took part in the compilation of 
the BMI.
 For example:
 
 .. code-block:: c++

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to