Revert "[clang][modules-driver] Add support for C++ named modules and import std" - #193677
Merged
Merged
Conversation
… `import…" This reverts commit 739c459.
Member
|
@llvm/pr-subscribers-clang-driver Author: Naveen Seth Hanig (naveen-seth) ChangesReverts llvm/llvm-project#193312 due to a failing test (Driver/modules-driver-import-std.cpp) Full diff: https://github.com/llvm/llvm-project/pull/193677.diff 8 Files Affected:
diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td
index 2e38c5f7d450f..469045948a47c 100644
--- a/clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -613,8 +613,6 @@ def err_drv_reduced_module_output_overrided : Warning<
"please consider use '-fmodule-output=' to specify the output file for reduced BMI explicitly">,
InGroup<DiagGroup<"reduced-bmi-output-overrided">>;
-def err_drv_modules_driver_requires_reduced_bmi : Error<
- "'-fmodules-driver' is currently incompatible with '-fno-modules-reduced-bmi'">;
def remark_performing_driver_managed_module_build : Remark<
"performing driver managed module build">, InGroup<ModulesDriver>;
def remark_modules_manifest_not_found : Remark<
diff --git a/clang/include/clang/Driver/ModulesDriver.h b/clang/include/clang/Driver/ModulesDriver.h
index 7146d2f6b143f..4f5fe7a7dfc1a 100644
--- a/clang/include/clang/Driver/ModulesDriver.h
+++ b/clang/include/clang/Driver/ModulesDriver.h
@@ -32,10 +32,6 @@ class Compilation;
namespace clang::driver::modules {
-/// Emits diagnostics for arguments incompatible with -fmodules-driver.
-void diagnoseModulesDriverArgs(llvm::opt::DerivedArgList &DAL,
- DiagnosticsEngine &Diags);
-
/// The parsed Standard library module manifest.
struct StdModuleManifest {
struct Module {
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 1e6a7b5e59d0f..2cbe3179892ff 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -1832,8 +1832,6 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
if (UseModulesDriver) {
Diags.Report(diag::remark_performing_driver_managed_module_build);
- modules::diagnoseModulesDriverArgs(C->getArgs(), Diags);
-
// Read the Standard library module manifest and, if available, add all
// discovered modules to this Compilation. Jobs for modules specified in
// the manifest that are not required by any command-line input are pruned
diff --git a/clang/lib/Driver/ModulesDriver.cpp b/clang/lib/Driver/ModulesDriver.cpp
index f439c7e733954..826ee4966a647 100644
--- a/clang/lib/Driver/ModulesDriver.cpp
+++ b/clang/lib/Driver/ModulesDriver.cpp
@@ -21,7 +21,6 @@
#include "clang/Driver/Job.h"
#include "clang/Driver/Tool.h"
#include "clang/Driver/ToolChain.h"
-#include "clang/Driver/Types.h"
#include "clang/Frontend/StandaloneDiagnostic.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/DepthFirstIterator.h"
@@ -48,14 +47,6 @@ using namespace clang;
using namespace driver;
using namespace modules;
-void driver::modules::diagnoseModulesDriverArgs(llvm::opt::DerivedArgList &DAL,
- DiagnosticsEngine &Diags) {
- if (!DAL.hasFlag(options::OPT_fmodules_reduced_bmi,
- options::OPT_fno_modules_reduced_bmi, true)) {
- Diags.Report(diag::err_drv_modules_driver_requires_reduced_bmi);
- }
-}
-
namespace clang::driver::modules {
static bool fromJSON(const llvm::json::Value &Params,
StdModuleManifest::Module::LocalArguments &LocalArgs,
@@ -1261,16 +1252,6 @@ static SmallVector<JobNode *> createNodesForUnusedStdlibModuleJobs(
return StdlibModuleNodesToPrune;
}
-// Returns the derived argument list for the tool chain responsible
-// for creating \p Job.
-static const DerivedArgList &getToolChainArgs(Compilation &C,
- const Command &Job) {
- const auto &TC = Job.getCreator().getToolChain();
- const auto &SourceAction = Job.getSource();
- return C.getArgsForToolChain(&TC, SourceAction.getOffloadingArch(),
- SourceAction.getOffloadingDeviceKind());
-}
-
/// Creates a job for the Clang module described by \p MD.
static std::unique_ptr<Command>
createClangModulePrecompileJob(Compilation &C, const Command &ImportingJob,
@@ -1282,7 +1263,9 @@ createClangModulePrecompileJob(Compilation &C, const Command &ImportingJob,
Action *PA = C.MakeAction<PrecompileJobAction>(IA, types::ID::TY_ModuleFile);
PA->propagateOffloadInfo(&ImportingJob.getSource());
- const auto &TCArgs = getToolChainArgs(C, ImportingJob);
+ const auto &TC = ImportingJob.getCreator().getToolChain();
+ const auto &TCArgs = C.getArgsForToolChain(&TC, PA->getOffloadingArch(),
+ PA->getOffloadingDeviceKind());
const auto &BuildArgs = MD.getBuildArguments();
ArgStringList JobArgs;
@@ -1336,7 +1319,12 @@ installScanCommandLines(Compilation &C,
ArgStringList JobArgs;
JobArgs.reserve(BuildArgs.size());
- auto &TCArgs = getToolChainArgs(C, Job);
+ const auto &SourceAction = Job.getSource();
+ const auto &TC = Job.getCreator().getToolChain();
+ auto &TCArgs =
+ C.getArgsForToolChain(&TC, SourceAction.getOffloadingArch(),
+ SourceAction.getOffloadingDeviceKind());
+
for (const auto &Arg : BuildArgs)
JobArgs.push_back(TCArgs.MakeArgString(Arg));
@@ -1539,73 +1527,6 @@ static void createAndConnectRoot(CompilationGraph &Graph) {
}
}
-/// Creates a temporary output path for \p ModuleName.
-static std::string createModuleOutputPath(const Compilation &C,
- StringRef ModuleName) {
- // Sanitize the ':' included in parition names. It is illegal for filenames on
- // Windows.
- SmallString<32> SanitizedModuleName(ModuleName);
- llvm::replace(SanitizedModuleName, ':', '-');
- auto ModuleOutputPath = C.getDriver().GetTemporaryPath(
- SanitizedModuleName, types::getTypeTempSuffix(types::TY_ModuleFile));
- return ModuleOutputPath;
-}
-
-/// Adds the '-fmodule-output=' argument for the module produced by \p Node.
-static void configureNamedModuleOutputArg(Compilation &C,
- NamedModuleJobNode &Node,
- StringRef ModuleOutputPath) {
- auto &Job = *Node.Job;
- const auto &TCArgs = getToolChainArgs(C, Job);
- auto JobArgs = Job.getArguments();
- JobArgs.push_back(
- TCArgs.MakeArgString("-fmodule-output=" + ModuleOutputPath));
- Job.replaceArguments(std::move(JobArgs));
-}
-
-/// Propagates the '-fmodule-file=' mapping for the named module described by
-/// \p Node to each dependent job.
-static void propagateModuleFileMappingArg(Compilation &C,
- NamedModuleJobNode &Node,
- StringRef ModuleOutputPath) {
- const StringRef ModuleName = Node.InputDeps.ModuleName;
-
- auto DependentNodes = llvm::drop_begin(llvm::depth_first<CGNode *>(&Node));
- auto DependentScannedNodes = llvm::map_range(
- llvm::make_filter_range(DependentNodes, llvm::IsaPred<ScannedJobNode>),
- llvm::CastTo<ScannedJobNode>);
-
- for (ScannedJobNode *DependentNode : DependentScannedNodes) {
- auto &DependentJob = *DependentNode->Job;
- const auto &TCArgs = getToolChainArgs(C, DependentJob);
- auto JobArgs = DependentJob.getArguments();
- JobArgs.push_back(TCArgs.MakeArgString("-fmodule-file=" + ModuleName + "=" +
- ModuleOutputPath));
- DependentJob.replaceArguments(std::move(JobArgs));
- }
-}
-
-/// Finalizes command lines for C++20 named module dependencies.
-///
-/// The command lines produced by dependency scanning are only adjusted to
-/// handle discovered Clang modules. For C++20 named modules, we update the
-/// command-lines here.
-static void fixupNamedModuleCommandLines(Compilation &C,
- CompilationGraph &Graph) {
- const auto NamedModuleNodes = llvm::map_range(
- llvm::make_filter_range(Graph, llvm::IsaPred<NamedModuleJobNode>),
- llvm::CastTo<NamedModuleJobNode>);
-
- for (NamedModuleJobNode *Node : NamedModuleNodes) {
- const StringRef ModuleName = Node->InputDeps.ModuleName;
- const auto ModuleOutputPath = createModuleOutputPath(C, ModuleName);
- C.addTempFile(C.getArgs().MakeArgString(ModuleOutputPath));
-
- configureNamedModuleOutputArg(C, *Node, ModuleOutputPath);
- propagateModuleFileMappingArg(C, *Node, ModuleOutputPath);
- }
-}
-
/// Moves jobs from \p Graph into \p C in the graph's topological order.
static void feedJobsBackIntoCompilation(Compilation &C,
CompilationGraph &&Graph) {
@@ -1679,6 +1600,7 @@ void driver::modules::runModulesDriver(
if (!Diags.isLastDiagnosticIgnored())
llvm::WriteGraph<const CompilationGraph *>(llvm::errs(), &Graph);
- fixupNamedModuleCommandLines(C, Graph);
+ // TODO: Fix-up command-lines for named module imports.
+
feedJobsBackIntoCompilation(C, std::move(Graph));
}
diff --git a/clang/test/Driver/modules-driver-both-modules-types.cpp b/clang/test/Driver/modules-driver-both-modules-types.cpp
deleted file mode 100644
index 0a88917165e37..0000000000000
--- a/clang/test/Driver/modules-driver-both-modules-types.cpp
+++ /dev/null
@@ -1,111 +0,0 @@
-// Checks that -fmodules-driver correctly handles compilations using both
-// Standard C++20 modules and Clang modules.
-// Importing a Standard C++20 module into Clang module is not supported yet.
-
-// RUN: split-file %s %t
-// RUN: rm -rf %t/modules-cache
-
-// RUN: %clang -c -std=c++23 \
-// RUN: -fmodules-driver -Rmodules-driver \
-// RUN: -fmodules -Rmodule-import \
-// RUN: -fmodule-map-file=%t/module.modulemap \
-// RUN: -fmodules-cache-path=%t/modules-cache \
-// RUN: %t/main.cpp %t/A.cppm %t/A-part1.cppm %t/A-part1-impl.cppm 2>&1 \
-// RUN: | sed 's:\\\\\?:/:g' \
-// RUN: | FileCheck -DPREFIX=%/t --check-prefix=CHECK-REMARKS %s
-
-// The scan itself will also produce [-Rmodule-import] remarks.
-// Let's skip past them, we only care about the final -cc1 commands.
-// CHECK-REMARKS: clang: remark: printing module dependency graph [-Rmodules-driver]
-// CHECK-REMARKS-NEXT: digraph "Module Dependency Graph" {
-// CHECK-REMARKS: }
-
-// CHECK-REMARKS: [[PREFIX]]/A-part1-impl.cppm:2:2: remark: importing module 'root' from
-// CHECK-REMARKS: [[PREFIX]]/A-part1.cppm:2:2: remark: importing module 'root' from
-// CHECK-REMARKS: [[PREFIX]]/A.cppm:2:2: remark: importing module 'root' from
-// CHECK-REMARKS: [[PREFIX]]/A.cppm:4:8: remark: importing module 'A:part1' from
-// CHECK-REMARKS: [[PREFIX]]/A.cppm:4:8: remark: importing module 'root' into 'A:part1' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'A' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'root' into 'A' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'A:part1' into 'A' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'root' into 'A:part1' from
-
-// RUN: %clang -std=c++23 \
-// RUN: -fmodules-driver -Rmodules-driver \
-// RUN: -fmodules -Rmodule-import \
-// RUN: -fmodule-map-file=%t/module.modulemap \
-// RUN: -fmodules-cache-path=%t/modules-cache \
-// RUN: %t/main.cpp %t/A.cppm %t/A-part1.cppm %t/A-part1-impl.cppm \
-// RUN: -### 2>&1 \
-// RUN: | sed 's:\\\\\?:/:g' \
-// RUN: | FileCheck -DPREFIX=%/t --check-prefix=CHECK-CC1 %s
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "-o" "[[ROOTPCM:[^"]+]]"
-// CHECK-CC1-SAME: "-emit-module"
-// CHECK-CC1-SAME: "[[PREFIX]]/module.modulemap"
-// CHECK-CC1-SAME: "-fmodule-name=root"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "[[PREFIX]]/A-part1-impl.cppm"
-// CHECK-CC1-SAME: "-fmodule-file=root=[[ROOTPCM]]"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-output=[[A_PART1_IMPL_PCM:[^"]+]]"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "[[PREFIX]]/A-part1.cppm"
-// CHECK-CC1-SAME: "-fmodule-file=root=[[ROOTPCM]]"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-output=[[A_PART1_PCM:[^"]+]]"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "[[PREFIX]]/A.cppm"
-// CHECK-CC1-SAME: "-fmodule-file=root=[[ROOTPCM]]"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-output=[[A_PCM:[^"]+]]"
-// CHECK-CC1-SAME: "-fmodule-file=A:part1=[[A_PART1_PCM]]"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "[[PREFIX]]/main.cpp"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-file=A=[[A_PCM]]"
-// CHECK-CC1-SAME: "-fmodule-file=A:part1=[[A_PART1_PCM]]"
-
-//--- main.cpp
-import A;
-
-int main() {
- a();
-}
-
-//--- A.cppm
-module;
-#include "root.h"
-export module A;
-export import :part1;
-
-export int a() {
- return part1() + root();
-}
-
-//--- A-part1.cppm
-module;
-#include "root.h"
-export module A:part1;
-export int part1();
-
-//--- A-part1-impl.cppm
-module;
-#include "root.h"
-module A:part1_impl;
-
-int part1() {
- return root();
-}
-
-//--- module.modulemap
-module root { header "root.h" export * }
-
-//--- root.h
-inline int root() { return 1; }
diff --git a/clang/test/Driver/modules-driver-cxx-modules-only.cpp b/clang/test/Driver/modules-driver-cxx-modules-only.cpp
deleted file mode 100644
index 1206983e32f7b..0000000000000
--- a/clang/test/Driver/modules-driver-cxx-modules-only.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-// Checks that -fmodules-driver correctly handles compilations using
-// Standard C++20 modules.
-
-// RUN: split-file %s %t
-
-// RUN: %clang -c -std=c++23 \
-// RUN: -fmodules-driver -Rmodules-driver -Rmodule-import \
-// RUN: %t/main.cpp %t/A.cppm %t/A-part1.cppm %t/A-part1-impl.cppm %t/B.cppm 2>&1 \
-// RUN: | sed 's:\\\\\?:/:g' \
-// RUN: | FileCheck -DPREFIX=%/t --check-prefix=CHECK-REMARKS %s
-
-// CHECK-REMARKS: [[PREFIX]]/A.cppm:2:8: remark: importing module 'A:part1' from
-// CHECK-REMARKS: [[PREFIX]]/A.cppm:3:1: remark: importing module 'B' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'A' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'A:part1' into 'A' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'B' into 'A' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:2:1: remark: importing module 'B' from
-
-// RUN: %clang -std=c++23 \
-// RUN: -fmodules-driver -Rmodules-driver -Rmodule-import \
-// RUN: %t/main.cpp %t/A.cppm %t/A-part1.cppm %t/A-part1-impl.cppm %t/B.cppm \
-// RUN: -### 2>&1 \
-// RUN: | sed 's:\\\\\?:/:g' \
-// RUN: | FileCheck --check-prefix=CHECK-CC1 %s
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "{{.*}}/B.cppm"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-output=[[B_PCM:[^"]+]]"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "{{.*}}/A-part1-impl.cppm"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-output=[[A_PART1_IMPL_PCM:[^"]+]]"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "{{.*}}/A-part1.cppm"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-output=[[A_PART1_PCM:[^"]+]]"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "{{.*}}/A.cppm"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-output=[[A_PCM:[^"]+]]"
-// CHECK-CC1-SAME: "-fmodule-file=A:part1=[[A_PART1_PCM]]"
-// CHECK-CC1-SAME: "-fmodule-file=B=[[B_PCM]]"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "{{.*}}/main.cpp"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-file=A=[[A_PCM]]"
-// CHECK-CC1-SAME: "-fmodule-file=A:part1=[[A_PART1_PCM]]"
-// CHECK-CC1-SAME: "-fmodule-file=B=[[B_PCM]]"
-
-//--- main.cpp
-import A;
-import B;
-
-int main() {
- return a() + b();
-}
-
-//--- A.cppm
-export module A;
-export import :part1;
-import B;
-
-export int a() {
- return part1() + b();
-}
-
-//--- A-part1.cppm
-export module A:part1;
-export int part1();
-
-//--- A-part1-impl.cppm
-module A:part1_impl;
-
-int part1() {
- return 30;
-}
-
-//--- B.cppm
-export module B;
-
-export int b() {
- return 12;
-}
diff --git a/clang/test/Driver/modules-driver-import-std.cpp b/clang/test/Driver/modules-driver-import-std.cpp
deleted file mode 100644
index 25dc059b73ec7..0000000000000
--- a/clang/test/Driver/modules-driver-import-std.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// Checks that -fmodules-driver correctly handles the import of Standard library
-// modules.
-
-// The standard library modules manifest (libc++.modules.json) is discovered
-// relative to the installed C++ standard library runtime libraries
-// We need to create them in order for Clang to find the manifest.
-// RUN: rm -rf %t && split-file %s %t
-// RUN: mkdir -p %t/Inputs/usr/lib/x86_64-linux-gnu
-// RUN: touch %t/Inputs/usr/lib/x86_64-linux-gnu/libc++.so
-// RUN: touch %t/Inputs/usr/lib/x86_64-linux-gnu/libc++.a
-
-// RUN: sed "s|DIR|%/t|g" %t/libc++.modules.json.in > \
-// RUN: %t/Inputs/usr/lib/x86_64-linux-gnu/libc++.modules.json
-
-// RUN: mkdir -p %t/Inputs/usr/lib/share/libc++/v1
-// RUN: cat %t/std.cppm > %t/Inputs/usr/lib/share/libc++/v1/std.cppm
-// RUN: cat %t/std.compat.cppm > %t/Inputs/usr/lib/share/libc++/v1/std.compat.cppm
-
-//--- libc++.modules.json.in
-{
- "version": 1,
- "revision": 1,
- "modules": [
- {
- "logical-name": "std",
- "source-path": "../share/libc++/v1/std.cppm",
- "is-std-library": true
- },
- {
- "logical-name": "std.compat",
- "source-path": "../share/libc++/v1/std.compat.cppm",
- "is-std-library": true
- }
- ]
-}
-
-//--- std.cppm
-export module std;
-
-//--- std.compat.cppm
-export module std.compat;
-import std;
-
-//--- main.cpp
-import std.compat;
-import std;
-
-int main() {}
-
-// RUN: %clang -std=c++23 -c -fmodules-driver -Rmodules-driver -Rmodule-import \
-// RUN: -stdlib=libc++ \
-// RUN: -resource-dir=%t/Inputs/usr/lib/x86_64-linux-gnu \
-// RUN: --target=x86_64-linux-gnu \
-// RUN: %t/main.cpp 2>&1 \
-// RUN: | sed 's:\\\\\?:/:g' \
-// RUN: | FileCheck -DPREFIX=%/t %s
-
-// CHECK: [[PREFIX]]/main.cpp:1:1: remark: importing module 'std.compat' from
-// CHECK: [[PREFIX]]/main.cpp:1:1: remark: importing module 'std' into 'std.compat' from
-// CHECK: [[PREFIX]]/main.cpp:2:1: remark: importing module 'std' from
diff --git a/clang/test/Driver/modules-driver-incompatible-options.cpp b/clang/test/Driver/modules-driver-incompatible-options.cpp
deleted file mode 100644
index 88de9a6eac0e9..0000000000000
--- a/clang/test/Driver/modules-driver-incompatible-options.cpp
+++ /dev/null
@@ -1,10 +0,0 @@
-// Checks for diagnostics that report incompatibilities between
-// -fmodules-driver and other options.
-
-// RUN: split-file %s %t
-// RUN: not %clang -std=c++20 -fmodules-driver -fno-modules-reduced-bmi main.cpp -###
-
-// CHECK: clang: error: '-fmodules-driver' is currently incompatible with '-fno-modules-reduced-bmi'
-
-//--- main.cpp
-int main() {}
|
Member
|
@llvm/pr-subscribers-clang Author: Naveen Seth Hanig (naveen-seth) ChangesReverts llvm/llvm-project#193312 due to a failing test (Driver/modules-driver-import-std.cpp) Full diff: https://github.com/llvm/llvm-project/pull/193677.diff 8 Files Affected:
diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td
index 2e38c5f7d450f..469045948a47c 100644
--- a/clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -613,8 +613,6 @@ def err_drv_reduced_module_output_overrided : Warning<
"please consider use '-fmodule-output=' to specify the output file for reduced BMI explicitly">,
InGroup<DiagGroup<"reduced-bmi-output-overrided">>;
-def err_drv_modules_driver_requires_reduced_bmi : Error<
- "'-fmodules-driver' is currently incompatible with '-fno-modules-reduced-bmi'">;
def remark_performing_driver_managed_module_build : Remark<
"performing driver managed module build">, InGroup<ModulesDriver>;
def remark_modules_manifest_not_found : Remark<
diff --git a/clang/include/clang/Driver/ModulesDriver.h b/clang/include/clang/Driver/ModulesDriver.h
index 7146d2f6b143f..4f5fe7a7dfc1a 100644
--- a/clang/include/clang/Driver/ModulesDriver.h
+++ b/clang/include/clang/Driver/ModulesDriver.h
@@ -32,10 +32,6 @@ class Compilation;
namespace clang::driver::modules {
-/// Emits diagnostics for arguments incompatible with -fmodules-driver.
-void diagnoseModulesDriverArgs(llvm::opt::DerivedArgList &DAL,
- DiagnosticsEngine &Diags);
-
/// The parsed Standard library module manifest.
struct StdModuleManifest {
struct Module {
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 1e6a7b5e59d0f..2cbe3179892ff 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -1832,8 +1832,6 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
if (UseModulesDriver) {
Diags.Report(diag::remark_performing_driver_managed_module_build);
- modules::diagnoseModulesDriverArgs(C->getArgs(), Diags);
-
// Read the Standard library module manifest and, if available, add all
// discovered modules to this Compilation. Jobs for modules specified in
// the manifest that are not required by any command-line input are pruned
diff --git a/clang/lib/Driver/ModulesDriver.cpp b/clang/lib/Driver/ModulesDriver.cpp
index f439c7e733954..826ee4966a647 100644
--- a/clang/lib/Driver/ModulesDriver.cpp
+++ b/clang/lib/Driver/ModulesDriver.cpp
@@ -21,7 +21,6 @@
#include "clang/Driver/Job.h"
#include "clang/Driver/Tool.h"
#include "clang/Driver/ToolChain.h"
-#include "clang/Driver/Types.h"
#include "clang/Frontend/StandaloneDiagnostic.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/DepthFirstIterator.h"
@@ -48,14 +47,6 @@ using namespace clang;
using namespace driver;
using namespace modules;
-void driver::modules::diagnoseModulesDriverArgs(llvm::opt::DerivedArgList &DAL,
- DiagnosticsEngine &Diags) {
- if (!DAL.hasFlag(options::OPT_fmodules_reduced_bmi,
- options::OPT_fno_modules_reduced_bmi, true)) {
- Diags.Report(diag::err_drv_modules_driver_requires_reduced_bmi);
- }
-}
-
namespace clang::driver::modules {
static bool fromJSON(const llvm::json::Value &Params,
StdModuleManifest::Module::LocalArguments &LocalArgs,
@@ -1261,16 +1252,6 @@ static SmallVector<JobNode *> createNodesForUnusedStdlibModuleJobs(
return StdlibModuleNodesToPrune;
}
-// Returns the derived argument list for the tool chain responsible
-// for creating \p Job.
-static const DerivedArgList &getToolChainArgs(Compilation &C,
- const Command &Job) {
- const auto &TC = Job.getCreator().getToolChain();
- const auto &SourceAction = Job.getSource();
- return C.getArgsForToolChain(&TC, SourceAction.getOffloadingArch(),
- SourceAction.getOffloadingDeviceKind());
-}
-
/// Creates a job for the Clang module described by \p MD.
static std::unique_ptr<Command>
createClangModulePrecompileJob(Compilation &C, const Command &ImportingJob,
@@ -1282,7 +1263,9 @@ createClangModulePrecompileJob(Compilation &C, const Command &ImportingJob,
Action *PA = C.MakeAction<PrecompileJobAction>(IA, types::ID::TY_ModuleFile);
PA->propagateOffloadInfo(&ImportingJob.getSource());
- const auto &TCArgs = getToolChainArgs(C, ImportingJob);
+ const auto &TC = ImportingJob.getCreator().getToolChain();
+ const auto &TCArgs = C.getArgsForToolChain(&TC, PA->getOffloadingArch(),
+ PA->getOffloadingDeviceKind());
const auto &BuildArgs = MD.getBuildArguments();
ArgStringList JobArgs;
@@ -1336,7 +1319,12 @@ installScanCommandLines(Compilation &C,
ArgStringList JobArgs;
JobArgs.reserve(BuildArgs.size());
- auto &TCArgs = getToolChainArgs(C, Job);
+ const auto &SourceAction = Job.getSource();
+ const auto &TC = Job.getCreator().getToolChain();
+ auto &TCArgs =
+ C.getArgsForToolChain(&TC, SourceAction.getOffloadingArch(),
+ SourceAction.getOffloadingDeviceKind());
+
for (const auto &Arg : BuildArgs)
JobArgs.push_back(TCArgs.MakeArgString(Arg));
@@ -1539,73 +1527,6 @@ static void createAndConnectRoot(CompilationGraph &Graph) {
}
}
-/// Creates a temporary output path for \p ModuleName.
-static std::string createModuleOutputPath(const Compilation &C,
- StringRef ModuleName) {
- // Sanitize the ':' included in parition names. It is illegal for filenames on
- // Windows.
- SmallString<32> SanitizedModuleName(ModuleName);
- llvm::replace(SanitizedModuleName, ':', '-');
- auto ModuleOutputPath = C.getDriver().GetTemporaryPath(
- SanitizedModuleName, types::getTypeTempSuffix(types::TY_ModuleFile));
- return ModuleOutputPath;
-}
-
-/// Adds the '-fmodule-output=' argument for the module produced by \p Node.
-static void configureNamedModuleOutputArg(Compilation &C,
- NamedModuleJobNode &Node,
- StringRef ModuleOutputPath) {
- auto &Job = *Node.Job;
- const auto &TCArgs = getToolChainArgs(C, Job);
- auto JobArgs = Job.getArguments();
- JobArgs.push_back(
- TCArgs.MakeArgString("-fmodule-output=" + ModuleOutputPath));
- Job.replaceArguments(std::move(JobArgs));
-}
-
-/// Propagates the '-fmodule-file=' mapping for the named module described by
-/// \p Node to each dependent job.
-static void propagateModuleFileMappingArg(Compilation &C,
- NamedModuleJobNode &Node,
- StringRef ModuleOutputPath) {
- const StringRef ModuleName = Node.InputDeps.ModuleName;
-
- auto DependentNodes = llvm::drop_begin(llvm::depth_first<CGNode *>(&Node));
- auto DependentScannedNodes = llvm::map_range(
- llvm::make_filter_range(DependentNodes, llvm::IsaPred<ScannedJobNode>),
- llvm::CastTo<ScannedJobNode>);
-
- for (ScannedJobNode *DependentNode : DependentScannedNodes) {
- auto &DependentJob = *DependentNode->Job;
- const auto &TCArgs = getToolChainArgs(C, DependentJob);
- auto JobArgs = DependentJob.getArguments();
- JobArgs.push_back(TCArgs.MakeArgString("-fmodule-file=" + ModuleName + "=" +
- ModuleOutputPath));
- DependentJob.replaceArguments(std::move(JobArgs));
- }
-}
-
-/// Finalizes command lines for C++20 named module dependencies.
-///
-/// The command lines produced by dependency scanning are only adjusted to
-/// handle discovered Clang modules. For C++20 named modules, we update the
-/// command-lines here.
-static void fixupNamedModuleCommandLines(Compilation &C,
- CompilationGraph &Graph) {
- const auto NamedModuleNodes = llvm::map_range(
- llvm::make_filter_range(Graph, llvm::IsaPred<NamedModuleJobNode>),
- llvm::CastTo<NamedModuleJobNode>);
-
- for (NamedModuleJobNode *Node : NamedModuleNodes) {
- const StringRef ModuleName = Node->InputDeps.ModuleName;
- const auto ModuleOutputPath = createModuleOutputPath(C, ModuleName);
- C.addTempFile(C.getArgs().MakeArgString(ModuleOutputPath));
-
- configureNamedModuleOutputArg(C, *Node, ModuleOutputPath);
- propagateModuleFileMappingArg(C, *Node, ModuleOutputPath);
- }
-}
-
/// Moves jobs from \p Graph into \p C in the graph's topological order.
static void feedJobsBackIntoCompilation(Compilation &C,
CompilationGraph &&Graph) {
@@ -1679,6 +1600,7 @@ void driver::modules::runModulesDriver(
if (!Diags.isLastDiagnosticIgnored())
llvm::WriteGraph<const CompilationGraph *>(llvm::errs(), &Graph);
- fixupNamedModuleCommandLines(C, Graph);
+ // TODO: Fix-up command-lines for named module imports.
+
feedJobsBackIntoCompilation(C, std::move(Graph));
}
diff --git a/clang/test/Driver/modules-driver-both-modules-types.cpp b/clang/test/Driver/modules-driver-both-modules-types.cpp
deleted file mode 100644
index 0a88917165e37..0000000000000
--- a/clang/test/Driver/modules-driver-both-modules-types.cpp
+++ /dev/null
@@ -1,111 +0,0 @@
-// Checks that -fmodules-driver correctly handles compilations using both
-// Standard C++20 modules and Clang modules.
-// Importing a Standard C++20 module into Clang module is not supported yet.
-
-// RUN: split-file %s %t
-// RUN: rm -rf %t/modules-cache
-
-// RUN: %clang -c -std=c++23 \
-// RUN: -fmodules-driver -Rmodules-driver \
-// RUN: -fmodules -Rmodule-import \
-// RUN: -fmodule-map-file=%t/module.modulemap \
-// RUN: -fmodules-cache-path=%t/modules-cache \
-// RUN: %t/main.cpp %t/A.cppm %t/A-part1.cppm %t/A-part1-impl.cppm 2>&1 \
-// RUN: | sed 's:\\\\\?:/:g' \
-// RUN: | FileCheck -DPREFIX=%/t --check-prefix=CHECK-REMARKS %s
-
-// The scan itself will also produce [-Rmodule-import] remarks.
-// Let's skip past them, we only care about the final -cc1 commands.
-// CHECK-REMARKS: clang: remark: printing module dependency graph [-Rmodules-driver]
-// CHECK-REMARKS-NEXT: digraph "Module Dependency Graph" {
-// CHECK-REMARKS: }
-
-// CHECK-REMARKS: [[PREFIX]]/A-part1-impl.cppm:2:2: remark: importing module 'root' from
-// CHECK-REMARKS: [[PREFIX]]/A-part1.cppm:2:2: remark: importing module 'root' from
-// CHECK-REMARKS: [[PREFIX]]/A.cppm:2:2: remark: importing module 'root' from
-// CHECK-REMARKS: [[PREFIX]]/A.cppm:4:8: remark: importing module 'A:part1' from
-// CHECK-REMARKS: [[PREFIX]]/A.cppm:4:8: remark: importing module 'root' into 'A:part1' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'A' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'root' into 'A' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'A:part1' into 'A' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'root' into 'A:part1' from
-
-// RUN: %clang -std=c++23 \
-// RUN: -fmodules-driver -Rmodules-driver \
-// RUN: -fmodules -Rmodule-import \
-// RUN: -fmodule-map-file=%t/module.modulemap \
-// RUN: -fmodules-cache-path=%t/modules-cache \
-// RUN: %t/main.cpp %t/A.cppm %t/A-part1.cppm %t/A-part1-impl.cppm \
-// RUN: -### 2>&1 \
-// RUN: | sed 's:\\\\\?:/:g' \
-// RUN: | FileCheck -DPREFIX=%/t --check-prefix=CHECK-CC1 %s
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "-o" "[[ROOTPCM:[^"]+]]"
-// CHECK-CC1-SAME: "-emit-module"
-// CHECK-CC1-SAME: "[[PREFIX]]/module.modulemap"
-// CHECK-CC1-SAME: "-fmodule-name=root"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "[[PREFIX]]/A-part1-impl.cppm"
-// CHECK-CC1-SAME: "-fmodule-file=root=[[ROOTPCM]]"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-output=[[A_PART1_IMPL_PCM:[^"]+]]"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "[[PREFIX]]/A-part1.cppm"
-// CHECK-CC1-SAME: "-fmodule-file=root=[[ROOTPCM]]"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-output=[[A_PART1_PCM:[^"]+]]"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "[[PREFIX]]/A.cppm"
-// CHECK-CC1-SAME: "-fmodule-file=root=[[ROOTPCM]]"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-output=[[A_PCM:[^"]+]]"
-// CHECK-CC1-SAME: "-fmodule-file=A:part1=[[A_PART1_PCM]]"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "[[PREFIX]]/main.cpp"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-file=A=[[A_PCM]]"
-// CHECK-CC1-SAME: "-fmodule-file=A:part1=[[A_PART1_PCM]]"
-
-//--- main.cpp
-import A;
-
-int main() {
- a();
-}
-
-//--- A.cppm
-module;
-#include "root.h"
-export module A;
-export import :part1;
-
-export int a() {
- return part1() + root();
-}
-
-//--- A-part1.cppm
-module;
-#include "root.h"
-export module A:part1;
-export int part1();
-
-//--- A-part1-impl.cppm
-module;
-#include "root.h"
-module A:part1_impl;
-
-int part1() {
- return root();
-}
-
-//--- module.modulemap
-module root { header "root.h" export * }
-
-//--- root.h
-inline int root() { return 1; }
diff --git a/clang/test/Driver/modules-driver-cxx-modules-only.cpp b/clang/test/Driver/modules-driver-cxx-modules-only.cpp
deleted file mode 100644
index 1206983e32f7b..0000000000000
--- a/clang/test/Driver/modules-driver-cxx-modules-only.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-// Checks that -fmodules-driver correctly handles compilations using
-// Standard C++20 modules.
-
-// RUN: split-file %s %t
-
-// RUN: %clang -c -std=c++23 \
-// RUN: -fmodules-driver -Rmodules-driver -Rmodule-import \
-// RUN: %t/main.cpp %t/A.cppm %t/A-part1.cppm %t/A-part1-impl.cppm %t/B.cppm 2>&1 \
-// RUN: | sed 's:\\\\\?:/:g' \
-// RUN: | FileCheck -DPREFIX=%/t --check-prefix=CHECK-REMARKS %s
-
-// CHECK-REMARKS: [[PREFIX]]/A.cppm:2:8: remark: importing module 'A:part1' from
-// CHECK-REMARKS: [[PREFIX]]/A.cppm:3:1: remark: importing module 'B' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'A' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'A:part1' into 'A' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:1:1: remark: importing module 'B' into 'A' from
-// CHECK-REMARKS: [[PREFIX]]/main.cpp:2:1: remark: importing module 'B' from
-
-// RUN: %clang -std=c++23 \
-// RUN: -fmodules-driver -Rmodules-driver -Rmodule-import \
-// RUN: %t/main.cpp %t/A.cppm %t/A-part1.cppm %t/A-part1-impl.cppm %t/B.cppm \
-// RUN: -### 2>&1 \
-// RUN: | sed 's:\\\\\?:/:g' \
-// RUN: | FileCheck --check-prefix=CHECK-CC1 %s
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "{{.*}}/B.cppm"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-output=[[B_PCM:[^"]+]]"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "{{.*}}/A-part1-impl.cppm"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-output=[[A_PART1_IMPL_PCM:[^"]+]]"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "{{.*}}/A-part1.cppm"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-output=[[A_PART1_PCM:[^"]+]]"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "{{.*}}/A.cppm"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-output=[[A_PCM:[^"]+]]"
-// CHECK-CC1-SAME: "-fmodule-file=A:part1=[[A_PART1_PCM]]"
-// CHECK-CC1-SAME: "-fmodule-file=B=[[B_PCM]]"
-
-// CHECK-CC1: "-cc1"
-// CHECK-CC1-SAME: "{{.*}}/main.cpp"
-// CHECK-CC1-SAME: "-fno-implicit-modules"
-// CHECK-CC1-SAME: "-fmodule-file=A=[[A_PCM]]"
-// CHECK-CC1-SAME: "-fmodule-file=A:part1=[[A_PART1_PCM]]"
-// CHECK-CC1-SAME: "-fmodule-file=B=[[B_PCM]]"
-
-//--- main.cpp
-import A;
-import B;
-
-int main() {
- return a() + b();
-}
-
-//--- A.cppm
-export module A;
-export import :part1;
-import B;
-
-export int a() {
- return part1() + b();
-}
-
-//--- A-part1.cppm
-export module A:part1;
-export int part1();
-
-//--- A-part1-impl.cppm
-module A:part1_impl;
-
-int part1() {
- return 30;
-}
-
-//--- B.cppm
-export module B;
-
-export int b() {
- return 12;
-}
diff --git a/clang/test/Driver/modules-driver-import-std.cpp b/clang/test/Driver/modules-driver-import-std.cpp
deleted file mode 100644
index 25dc059b73ec7..0000000000000
--- a/clang/test/Driver/modules-driver-import-std.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// Checks that -fmodules-driver correctly handles the import of Standard library
-// modules.
-
-// The standard library modules manifest (libc++.modules.json) is discovered
-// relative to the installed C++ standard library runtime libraries
-// We need to create them in order for Clang to find the manifest.
-// RUN: rm -rf %t && split-file %s %t
-// RUN: mkdir -p %t/Inputs/usr/lib/x86_64-linux-gnu
-// RUN: touch %t/Inputs/usr/lib/x86_64-linux-gnu/libc++.so
-// RUN: touch %t/Inputs/usr/lib/x86_64-linux-gnu/libc++.a
-
-// RUN: sed "s|DIR|%/t|g" %t/libc++.modules.json.in > \
-// RUN: %t/Inputs/usr/lib/x86_64-linux-gnu/libc++.modules.json
-
-// RUN: mkdir -p %t/Inputs/usr/lib/share/libc++/v1
-// RUN: cat %t/std.cppm > %t/Inputs/usr/lib/share/libc++/v1/std.cppm
-// RUN: cat %t/std.compat.cppm > %t/Inputs/usr/lib/share/libc++/v1/std.compat.cppm
-
-//--- libc++.modules.json.in
-{
- "version": 1,
- "revision": 1,
- "modules": [
- {
- "logical-name": "std",
- "source-path": "../share/libc++/v1/std.cppm",
- "is-std-library": true
- },
- {
- "logical-name": "std.compat",
- "source-path": "../share/libc++/v1/std.compat.cppm",
- "is-std-library": true
- }
- ]
-}
-
-//--- std.cppm
-export module std;
-
-//--- std.compat.cppm
-export module std.compat;
-import std;
-
-//--- main.cpp
-import std.compat;
-import std;
-
-int main() {}
-
-// RUN: %clang -std=c++23 -c -fmodules-driver -Rmodules-driver -Rmodule-import \
-// RUN: -stdlib=libc++ \
-// RUN: -resource-dir=%t/Inputs/usr/lib/x86_64-linux-gnu \
-// RUN: --target=x86_64-linux-gnu \
-// RUN: %t/main.cpp 2>&1 \
-// RUN: | sed 's:\\\\\?:/:g' \
-// RUN: | FileCheck -DPREFIX=%/t %s
-
-// CHECK: [[PREFIX]]/main.cpp:1:1: remark: importing module 'std.compat' from
-// CHECK: [[PREFIX]]/main.cpp:1:1: remark: importing module 'std' into 'std.compat' from
-// CHECK: [[PREFIX]]/main.cpp:2:1: remark: importing module 'std' from
diff --git a/clang/test/Driver/modules-driver-incompatible-options.cpp b/clang/test/Driver/modules-driver-incompatible-options.cpp
deleted file mode 100644
index 88de9a6eac0e9..0000000000000
--- a/clang/test/Driver/modules-driver-incompatible-options.cpp
+++ /dev/null
@@ -1,10 +0,0 @@
-// Checks for diagnostics that report incompatibilities between
-// -fmodules-driver and other options.
-
-// RUN: split-file %s %t
-// RUN: not %clang -std=c++20 -fmodules-driver -fno-modules-reduced-bmi main.cpp -###
-
-// CHECK: clang: error: '-fmodules-driver' is currently incompatible with '-fno-modules-reduced-bmi'
-
-//--- main.cpp
-int main() {}
|
naveen-seth
added a commit
that referenced
this pull request
Apr 23, 2026
…d `import std`" (#193815) This reverts #193677 and relands #193312. This adds basic support for explicit C++ named module builds, managed natively by the Clang driver, including support for use of the Standard library modules. This follows #187606, which adds the same for Clang modules. Current limitations: - Standard library modules are still compiled to object files instead of using the provided shared library. (This will be addressed in a follow-up soon.) - Caching is not supported yet (but likely to be added during the upcoming GSoC cycle). - Importing C++ standard library modules into Clang modules is not supported (and not expected in the near term). RFC: https://discourse.llvm.org/t/rfc-modules-support-simple-c-20-modules-use-from-the-clang-driver-without-a-build-system
naveen-seth
pushed a commit
to naveen-seth/llvm-project
that referenced
this pull request
Apr 27, 2026
…d `import std`" This reverts llvm#193677 and relands llvm#193312. This adds basic support for explicit C++ named module builds, managed natively by the Clang driver, including support for use of the Standard library modules. This follows llvm#187606, which adds the same for Clang modules. Current limitations: - Standard library modules are still compiled to object files instead of using the provided shared library. (This will be addressed in a follow-up soon.) - Caching is not supported yet (but likely to be added during the upcoming GSoC cycle). - Importing C++ standard library modules into Clang modules is not supported (and not expected in the near term). RFC: https://discourse.llvm.org/t/rfc-modules-support-simple-c-20-modules-use-from-the-clang-driver-without-a-build-system
yingopq
pushed a commit
to yingopq/llvm-project
that referenced
this pull request
Apr 29, 2026
… `import std`" (llvm#193677) Reverts llvm#193312 due to a failing test (Driver/modules-driver-import-std.cpp)
yingopq
pushed a commit
to yingopq/llvm-project
that referenced
this pull request
Apr 29, 2026
…d `import std`" (llvm#193815) This reverts llvm#193677 and relands llvm#193312. This adds basic support for explicit C++ named module builds, managed natively by the Clang driver, including support for use of the Standard library modules. This follows llvm#187606, which adds the same for Clang modules. Current limitations: - Standard library modules are still compiled to object files instead of using the provided shared library. (This will be addressed in a follow-up soon.) - Caching is not supported yet (but likely to be added during the upcoming GSoC cycle). - Importing C++ standard library modules into Clang modules is not supported (and not expected in the near term). RFC: https://discourse.llvm.org/t/rfc-modules-support-simple-c-20-modules-use-from-the-clang-driver-without-a-build-system
KHicketts
pushed a commit
to KHicketts/llvm-project
that referenced
this pull request
Apr 30, 2026
… `import std`" (llvm#193677) Reverts llvm#193312 due to a failing test (Driver/modules-driver-import-std.cpp)
KHicketts
pushed a commit
to KHicketts/llvm-project
that referenced
this pull request
Apr 30, 2026
…d `import std`" (llvm#193815) This reverts llvm#193677 and relands llvm#193312. This adds basic support for explicit C++ named module builds, managed natively by the Clang driver, including support for use of the Standard library modules. This follows llvm#187606, which adds the same for Clang modules. Current limitations: - Standard library modules are still compiled to object files instead of using the provided shared library. (This will be addressed in a follow-up soon.) - Caching is not supported yet (but likely to be added during the upcoming GSoC cycle). - Importing C++ standard library modules into Clang modules is not supported (and not expected in the near term). RFC: https://discourse.llvm.org/t/rfc-modules-support-simple-c-20-modules-use-from-the-clang-driver-without-a-build-system
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reverts #193312 due to a failing test (Driver/modules-driver-import-std.cpp)