Skip to content

Conversation

naveen-seth
Copy link
Contributor

This reverts commit 9403c2d.

During the review of #152770, it was decided to remove the logic that would have been used to implicitly enable the -fmodules-driver feature in the future. (Currently, this logic is only used for diagnostics.)

If we find that implicitly enabling the -fmodules-driver feature is really useful in practice later on, it may be re-added.

Link to review comment: #152770 (comment)

@llvmbot llvmbot added clang Clang issues not falling into any other category clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl' clang:frontend Language frontend issues, e.g. anything involving "Sema" labels Oct 14, 2025
@llvmbot
Copy link
Member

llvmbot commented Oct 14, 2025

@llvm/pr-subscribers-clang-driver

@llvm/pr-subscribers-clang

Author: Naveen Seth Hanig (naveen-seth)

Changes

This reverts commit 9403c2d.

During the review of #152770, it was decided to remove the logic that would have been used to implicitly enable the -fmodules-driver feature in the future. (Currently, this logic is only used for diagnostics.)

If we find that implicitly enabling the -fmodules-driver feature is really useful in practice later on, it may be re-added.

Link to review comment: #152770 (comment)


Patch is 23.31 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/163371.diff

9 Files Affected:

  • (modified) clang/include/clang/Basic/DiagnosticDriverKinds.td (-7)
  • (modified) clang/include/clang/Basic/DiagnosticGroups.td (-1)
  • (modified) clang/include/clang/Driver/Driver.h (-32)
  • (modified) clang/include/clang/Driver/Options.td (-7)
  • (modified) clang/include/clang/Lex/DependencyDirectivesScanner.h (-7)
  • (modified) clang/lib/Driver/CMakeLists.txt (-1)
  • (modified) clang/lib/Driver/Driver.cpp (+4-88)
  • (modified) clang/lib/Lex/DependencyDirectivesScanner.cpp (-50)
  • (removed) clang/test/Driver/modules-driver-cxx20-module-usage-scanner.cpp (-192)
diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td
index 0581bf353d936..d91146eabaaf3 100644
--- a/clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -581,13 +581,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 remark_found_cxx20_module_usage : Remark<
-  "found C++20 module usage in file '%0'">,
-  InGroup<ModulesDriver>;
-def remark_performing_driver_managed_module_build : Remark<
-  "performing driver managed module build">,
-  InGroup<ModulesDriver>;
-
 def warn_drv_delayed_template_parsing_after_cxx20 : Warning<
   "-fdelayed-template-parsing is deprecated after C++20">,
   InGroup<DiagGroup<"delayed-template-parsing-in-cxx20">>;
diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td
index 8aa3489a2a62b..92a26a7871b7c 100644
--- a/clang/include/clang/Basic/DiagnosticGroups.td
+++ b/clang/include/clang/Basic/DiagnosticGroups.td
@@ -636,7 +636,6 @@ def ModuleConflict : DiagGroup<"module-conflict">;
 def ModuleFileExtension : DiagGroup<"module-file-extension">;
 def ModuleIncludeDirectiveTranslation : DiagGroup<"module-include-translation">;
 def ModuleMap : DiagGroup<"module-map">;
-def ModulesDriver : DiagGroup<"modules-driver">;
 def RoundTripCC1Args : DiagGroup<"round-trip-cc1-args">;
 def NewlineEOF : DiagGroup<"newline-eof">;
 def Nullability : DiagGroup<"nullability">;
diff --git a/clang/include/clang/Driver/Driver.h b/clang/include/clang/Driver/Driver.h
index b9b187ada8add..4d32552b7f85f 100644
--- a/clang/include/clang/Driver/Driver.h
+++ b/clang/include/clang/Driver/Driver.h
@@ -512,9 +512,6 @@ class Driver {
 
   /// BuildActions - Construct the list of actions to perform for the
   /// given arguments, which are only done for a single architecture.
-  /// If the compilation is an explicit module build, delegates to
-  /// BuildDriverManagedModuleBuildActions. Otherwise, BuildDefaultActions is
-  /// used.
   ///
   /// \param C - The compilation that is being built.
   /// \param Args - The input arguments.
@@ -799,35 +796,6 @@ class Driver {
   /// compilation based on which -f(no-)?lto(=.*)? option occurs last.
   void setLTOMode(const llvm::opt::ArgList &Args);
 
-  /// BuildDefaultActions - Constructs the list of actions to perform
-  /// for the provided arguments, which are only done for a single architecture.
-  ///
-  /// \param C - The compilation that is being built.
-  /// \param Args - The input arguments.
-  /// \param Actions - The list to store the resulting actions onto.
-  void BuildDefaultActions(Compilation &C, llvm::opt::DerivedArgList &Args,
-                           const InputList &Inputs, ActionList &Actions) const;
-
-  /// BuildDriverManagedModuleBuildActions - Performs a dependency
-  /// scan and constructs the list of actions to perform for dependency order
-  /// and the provided arguments. This is only done for a single a architecture.
-  ///
-  /// \param C - The compilation that is being built.
-  /// \param Args - The input arguments.
-  /// \param Actions - The list to store the resulting actions onto.
-  void BuildDriverManagedModuleBuildActions(Compilation &C,
-                                            llvm::opt::DerivedArgList &Args,
-                                            const InputList &Inputs,
-                                            ActionList &Actions) const;
-
-  /// Scans the leading lines of the C++ source inputs to detect C++20 module
-  /// usage.
-  ///
-  /// \returns True if module usage is detected, false otherwise, or an error on
-  /// read failure.
-  llvm::ErrorOr<bool>
-  ScanInputsForCXX20ModulesUsage(const InputList &Inputs) const;
-
   /// Retrieves a ToolChain for a particular \p Target triple.
   ///
   /// Will cache ToolChains for the life of the driver object, and create them
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index 611b68e5281f0..a1a268f774c71 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3342,13 +3342,6 @@ defm modules_reduced_bmi : BoolOption<"f", "modules-reduced-bmi",
   PosFlag<SetTrue, [], [ClangOption, CC1Option],
           "Generate the reduced BMI">>;
 
-def fmodules_driver : Flag<["-"], "fmodules-driver">,
-  Group<f_Group>, Visibility<[ClangOption]>,
-  HelpText<"Enable support for driver managed module builds (experimental)">;
-def fno_modules_driver : Flag<["-"], "fno-modules-driver">,
-  Group<f_Group>, Visibility<[ClangOption]>,
-  HelpText<"Disable support for driver managed module builds (experimental)">;
-
 def experimental_modules_reduced_bmi : Flag<["-"], "fexperimental-modules-reduced-bmi">,
   Group<f_Group>, Visibility<[ClangOption, CC1Option]>, Alias<fmodules_reduced_bmi>;
 
diff --git a/clang/include/clang/Lex/DependencyDirectivesScanner.h b/clang/include/clang/Lex/DependencyDirectivesScanner.h
index c0b742d652a03..f9fec3998ca53 100644
--- a/clang/include/clang/Lex/DependencyDirectivesScanner.h
+++ b/clang/include/clang/Lex/DependencyDirectivesScanner.h
@@ -135,13 +135,6 @@ void printDependencyDirectivesAsSource(
     ArrayRef<dependency_directives_scan::Directive> Directives,
     llvm::raw_ostream &OS);
 
-/// Scan an input source buffer for C++20 named module usage.
-///
-/// \param Source The input source buffer.
-///
-/// \returns true if any C++20 named modules related directive was found.
-bool scanInputForCXX20ModulesUsage(StringRef Source);
-
 /// Functor that returns the dependency directives for a given file.
 class DependencyDirectivesGetter {
 public:
diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt
index 7c4f70b966c48..45782cbd9d16d 100644
--- a/clang/lib/Driver/CMakeLists.txt
+++ b/clang/lib/Driver/CMakeLists.txt
@@ -98,6 +98,5 @@ add_clang_library(clangDriver
 
   LINK_LIBS
   clangBasic
-  clangLex
   ${system_libs}
   )
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 40ea513e85427..8c0bba938a09b 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -66,7 +66,6 @@
 #include "clang/Driver/Tool.h"
 #include "clang/Driver/ToolChain.h"
 #include "clang/Driver/Types.h"
-#include "clang/Lex/DependencyDirectivesScanner.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/SmallSet.h"
@@ -4189,11 +4188,6 @@ void Driver::handleArguments(Compilation &C, DerivedArgList &Args,
     YcArg = nullptr;
   }
 
-  if (Args.hasArgNoClaim(options::OPT_fmodules_driver))
-    // TODO: Check against all incompatible -fmodules-driver arguments
-    if (!ModulesModeCXX20 && !Args.hasArgNoClaim(options::OPT_fmodules))
-      Args.eraseArg(options::OPT_fmodules_driver);
-
   Arg *FinalPhaseArg;
   phases::ID FinalPhase = getFinalPhase(Args, &FinalPhaseArg);
 
@@ -4320,33 +4314,6 @@ void Driver::handleArguments(Compilation &C, DerivedArgList &Args,
   }
 }
 
-static bool hasCXXModuleInputType(const Driver::InputList &Inputs) {
-  const auto IsTypeCXXModule = [](const auto &Input) -> bool {
-    const auto TypeID = Input.first;
-    return (TypeID == types::TY_CXXModule);
-  };
-  return llvm::any_of(Inputs, IsTypeCXXModule);
-}
-
-llvm::ErrorOr<bool>
-Driver::ScanInputsForCXX20ModulesUsage(const InputList &Inputs) const {
-  const auto CXXInputs = llvm::make_filter_range(
-      Inputs, [](const auto &Input) { return types::isCXX(Input.first); });
-  for (const auto &Input : CXXInputs) {
-    StringRef Filename = Input.second->getSpelling();
-    auto ErrOrBuffer = VFS->getBufferForFile(Filename);
-    if (!ErrOrBuffer)
-      return ErrOrBuffer.getError();
-    const auto Buffer = std::move(*ErrOrBuffer);
-
-    if (scanInputForCXX20ModulesUsage(Buffer->getBuffer())) {
-      Diags.Report(diag::remark_found_cxx20_module_usage) << Filename;
-      return true;
-    }
-  }
-  return false;
-}
-
 void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
                           const InputList &Inputs, ActionList &Actions) const {
   llvm::PrettyStackTraceString CrashInfo("Building compilation actions");
@@ -4358,33 +4325,6 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
 
   handleArguments(C, Args, Inputs, Actions);
 
-  if (Args.hasFlag(options::OPT_fmodules_driver,
-                   options::OPT_fno_modules_driver, false)) {
-    // TODO: Move the logic for implicitly enabling explicit-module-builds out
-    // of -fmodules-driver once it is no longer experimental.
-    // Currently, this serves diagnostic purposes only.
-    bool UsesCXXModules = hasCXXModuleInputType(Inputs);
-    if (!UsesCXXModules) {
-      const auto ErrOrScanResult = ScanInputsForCXX20ModulesUsage(Inputs);
-      if (!ErrOrScanResult) {
-        Diags.Report(diag::err_cannot_open_file)
-            << ErrOrScanResult.getError().message();
-        return;
-      }
-      UsesCXXModules = *ErrOrScanResult;
-    }
-    if (UsesCXXModules || Args.hasArg(options::OPT_fmodules))
-      BuildDriverManagedModuleBuildActions(C, Args, Inputs, Actions);
-    return;
-  }
-
-  BuildDefaultActions(C, Args, Inputs, Actions);
-}
-
-void Driver::BuildDefaultActions(Compilation &C, DerivedArgList &Args,
-                                 const InputList &Inputs,
-                                 ActionList &Actions) const {
-
   bool UseNewOffloadingDriver =
       C.isOffloadingHostKind(Action::OFK_OpenMP) ||
       C.isOffloadingHostKind(Action::OFK_SYCL) ||
@@ -4642,28 +4582,16 @@ void Driver::BuildDefaultActions(Compilation &C, DerivedArgList &Args,
     }
   }
 
+  // Call validator for dxil when -Vd not in Args.
   if (C.getDefaultToolChain().getTriple().isDXIL()) {
+    // Only add action when needValidation.
     const auto &TC =
         static_cast<const toolchains::HLSLToolChain &>(C.getDefaultToolChain());
-
-    // Call objcopy for manipulation of the unvalidated DXContainer when an
-    // option in Args requires it.
-    if (TC.requiresObjcopy(Args)) {
-      Action *LastAction = Actions.back();
-      // llvm-objcopy expects an unvalidated DXIL container (TY_OBJECT).
-      if (LastAction->getType() == types::TY_Object)
-        Actions.push_back(
-            C.MakeAction<ObjcopyJobAction>(LastAction, types::TY_Object));
-    }
-
-    // Call validator for dxil when -Vd not in Args.
     if (TC.requiresValidation(Args)) {
       Action *LastAction = Actions.back();
       Actions.push_back(C.MakeAction<BinaryAnalyzeJobAction>(
           LastAction, types::TY_DX_CONTAINER));
     }
-
-    // Call metal-shaderconverter when targeting metal.
     if (TC.requiresBinaryTranslation(Args)) {
       Action *LastAction = Actions.back();
       // Metal shader converter runs on DXIL containers, which can either be
@@ -4680,12 +4608,6 @@ void Driver::BuildDefaultActions(Compilation &C, DerivedArgList &Args,
   Args.ClaimAllArgs(options::OPT_cl_ignored_Group);
 }
 
-void Driver::BuildDriverManagedModuleBuildActions(
-    Compilation &C, llvm::opt::DerivedArgList &Args, const InputList &Inputs,
-    ActionList &Actions) const {
-  Diags.Report(diag::remark_performing_driver_managed_module_build);
-}
-
 /// Returns the canonical name for the offloading architecture when using a HIP
 /// or CUDA architecture.
 static StringRef getCanonicalArchString(Compilation &C,
@@ -6265,9 +6187,8 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA,
        C.getArgs().hasArg(options::OPT_dxc_Fo)) ||
       JA.getType() == types::TY_DX_CONTAINER) {
     StringRef FoValue = C.getArgs().getLastArgValue(options::OPT_dxc_Fo);
-    // If we are targeting DXIL and not validating/translating/objcopying, we
-    // should set the final result file. Otherwise we should emit to a
-    // temporary.
+    // If we are targeting DXIL and not validating or translating, we should set
+    // the final result file. Otherwise we should emit to a temporary.
     if (C.getDefaultToolChain().getTriple().isDXIL()) {
       const auto &TC = static_cast<const toolchains::HLSLToolChain &>(
           C.getDefaultToolChain());
@@ -6613,9 +6534,6 @@ std::string Driver::GetStdModuleManifestPath(const Compilation &C,
                                              const ToolChain &TC) const {
   std::string error = "<NOT PRESENT>";
 
-  if (C.getArgs().hasArg(options::OPT_nostdlib))
-    return error;
-
   switch (TC.GetCXXStdlibType(C.getArgs())) {
   case ToolChain::CST_Libcxx: {
     auto evaluate = [&](const char *library) -> std::optional<std::string> {
@@ -6836,8 +6754,6 @@ const ToolChain &Driver::getToolChain(const ArgList &Args,
         TC = std::make_unique<toolchains::VEToolChain>(*this, Target, Args);
       else if (Target.isOHOSFamily())
         TC = std::make_unique<toolchains::OHOS>(*this, Target, Args);
-      else if (Target.isWALI())
-        TC = std::make_unique<toolchains::WebAssembly>(*this, Target, Args);
       else
         TC = std::make_unique<toolchains::Linux>(*this, Target, Args);
       break;
diff --git a/clang/lib/Lex/DependencyDirectivesScanner.cpp b/clang/lib/Lex/DependencyDirectivesScanner.cpp
index eee57c786442a..9ccff5e3342d5 100644
--- a/clang/lib/Lex/DependencyDirectivesScanner.cpp
+++ b/clang/lib/Lex/DependencyDirectivesScanner.cpp
@@ -83,8 +83,6 @@ struct Scanner {
   /// \returns True on error.
   bool scan(SmallVectorImpl<Directive> &Directives);
 
-  friend bool clang::scanInputForCXX20ModulesUsage(StringRef Source);
-
 private:
   /// Lexes next token and advances \p First and the \p Lexer.
   [[nodiscard]] dependency_directives_scan::Token &
@@ -1077,51 +1075,3 @@ void clang::printDependencyDirectivesAsSource(
     }
   }
 }
-
-static void skipUntilMaybeCXX20ModuleDirective(const char *&First,
-                                               const char *const End) {
-  assert(First <= End);
-  while (First != End) {
-    if (*First == '#') {
-      ++First;
-      skipToNewlineRaw(First, End);
-    }
-    skipWhitespace(First, End);
-    if (const auto Len = isEOL(First, End)) {
-      First += Len;
-      continue;
-    }
-    break;
-  }
-}
-
-bool clang::scanInputForCXX20ModulesUsage(StringRef Source) {
-  const char *First = Source.begin();
-  const char *const End = Source.end();
-  skipUntilMaybeCXX20ModuleDirective(First, End);
-  if (First == End)
-    return false;
-
-  // Check if the next token can even be a module directive before creating a
-  // full lexer.
-  if (!(*First == 'i' || *First == 'e' || *First == 'm'))
-    return false;
-
-  llvm::SmallVector<dependency_directives_scan::Token> Tokens;
-  Scanner S(StringRef(First, End - First), Tokens, nullptr, SourceLocation());
-  S.TheLexer.setParsingPreprocessorDirective(true);
-  if (S.lexModule(First, End))
-    return false;
-  auto IsCXXNamedModuleDirective = [](const DirectiveWithTokens &D) {
-    switch (D.Kind) {
-    case dependency_directives_scan::cxx_module_decl:
-    case dependency_directives_scan::cxx_import_decl:
-    case dependency_directives_scan::cxx_export_module_decl:
-    case dependency_directives_scan::cxx_export_import_decl:
-      return true;
-    default:
-      return false;
-    }
-  };
-  return llvm::any_of(S.DirsWithToks, IsCXXNamedModuleDirective);
-}
diff --git a/clang/test/Driver/modules-driver-cxx20-module-usage-scanner.cpp b/clang/test/Driver/modules-driver-cxx20-module-usage-scanner.cpp
deleted file mode 100644
index a434587a78759..0000000000000
--- a/clang/test/Driver/modules-driver-cxx20-module-usage-scanner.cpp
+++ /dev/null
@@ -1,192 +0,0 @@
-// The driver never checks to implicitly enable the explicit module build 
-// support unless at least two input files are provided.
-// To trigger the C++20 module usage check, we always pass a second dummy file
-// as input.
-// TODO: Remove -fmodules everywhere once implicitly enabled explicit module 
-// builds are supported.
-
-// RUN: split-file %s %t
-//--- empty.cpp
-// Nothing here
-
-//--- only-global.cpp
-// RUN: %clang -std=c++20 -ccc-print-phases -fmodules-driver -Rmodules-driver \
-// RUN:   %t/only-global.cpp %t/empty.cpp 2>&1 \
-// RUN:   | FileCheck %s --check-prefix=CHECK1
-// CHECK1: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver]
-module;
-
-//--- only-import.cpp
-// RUN: %clang -std=c++20 -ccc-print-phases -fmodules-driver -Rmodules-driver \
-// RUN:   %t/only-import.cpp %t/empty.cpp 2>&1 \
-// RUN:   | FileCheck %s --check-prefix=CHECK2
-// CHECK2: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver]
-import A;
-
-//--- only-export.cpp
-// RUN: %clang -std=c++20 -ccc-print-phases -fmodules-driver -Rmodules-driver \
-// RUN:   %t/only-export.cpp %t/empty.cpp 2>&1 \
-// RUN:   | FileCheck %s --check-prefix=CHECK3
-// CHECK3: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver]
-export module A;
-
-//--- leading-line-comment.cpp
-// RUN: %clang -std=c++20 -ccc-print-phases -fmodules-driver -Rmodules-driver \
-// RUN:   %t/leading-line-comment.cpp %t/empty.cpp 2>&1 \
-// RUN:   | FileCheck %s --check-prefix=CHECK4
-// CHECK4: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver]
-// My line comment
-import A;
-
-//--- leading-block-comment1.cpp
-// RUN: %clang -std=c++20 -ccc-print-phases -fmodules-driver -Rmodules-driver \
-// RUN:   %t/leading-block-comment1.cpp %t/empty.cpp 2>&1 \
-// RUN:   | FileCheck %s --check-prefix=CHECK5
-// CHECK5: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver]
-/*My block comment */
-import A;
-
-//--- leading-block-comment2.cpp
-// RUN: %clang -std=c++20 -ccc-print-phases -fmodules-driver -Rmodules-driver \
-// RUN:   %t/leading-block-comment2.cpp %t/empty.cpp 2>&1 \
-// RUN:   | FileCheck %s --check-prefix=CHECK6
-// CHECK6: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver]
-/*My line comment */ import A;
-
-//--- inline-block-comment1.cpp
-// RUN: %clang -std=c++20 -ccc-print-phases -fmodules-driver -Rmodules-driver \
-// RUN:   %t/leading-block-comment1.cpp %t/empty.cpp 2>&1 \
-// RUN:   | FileCheck %s --check-prefix=CHECK7
-// CHECK7: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver]
-export/*a comment*/module/*another comment*/A;
-
-//--- inline-block-comment2.cpp
-// RUN: %clang -std=c++20 -ccc-print-phases -fmodules-driver -Rmodules-driver \
-// RUN:   %t/leading-block-comment2.cpp %t/empty.cpp 2>&1 \
-// RUN:   | FileCheck %s --check-prefix=CHECK8
-// CHECK8: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver]
-module/*a comment*/;
-
-//--- leading-directives.cpp
-// RUN: %clang -std=c++23 -ccc-print-phases -fmodules-driver -Rmodules-driver \
-// RUN:   %t/leading-directives.cpp %t/empty.cpp 2>&1 \
-// RUN:   | FileCheck %s --check-prefix=CHECK9
-// CHECK9: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver]
-#define A
-#undef A
-#if A
-#ifdef A
-#elifdef A
-#elifndef A
-#endif
-#ifndef A
-#elif A
-#else
-#endif
-#endif
-#pragma once;
-#include <iostream>
-import m;
-
-//--- multiline-directive.cpp
-// RUN: %clang -std=c++23 -ccc-print-phases -fmodules-driver -Rmodules-driver \
-// RUN:   %t/multiline-directive.cpp %t/empty.cpp 2>&1 \
-// RUN:   | FileCheck %s --check-prefix=CHECK10
-// CHECK10: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver]
-#define MACRO(a,  \
-              b)  \
-        call((a), \
-             (b)
-import a;
-
-//--- leading-line-splice.cpp
-// RUN: %clang -std=c++23 -ccc-print-phases -fmodules-driver -Rmodules-driver \
-// RUN:   %t/leading-line-splice.cpp %t/empty.cpp 2>&1 \
-// RUN:   | FileCheck %s --check-prefix=CHECK11
-// CHECK11: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver]
-\
-module;
-
-//--- leading-line-splice-trailing-whitespace.cpp
-// RUN: %clang -std=c++23 -ccc-print-phases -fmodules-driver -Rmodules-driver \
-// RUN:   %t/leading-line-splice-trailing-whitespace.cpp %t/empty.cpp 2>&1 \
-// RUN:   | FileCheck %s --check-prefix=CHECK12
-// CHECK12: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver]
-// v This backslash has trailing whitespace.
-   \      
-export module A;
-
-//--- comment-line-splice.cpp
-// RUN: %clang -std=c++23 -ccc-print-phases -fmodules-driver -Rmodules-driver \
-// RUN:   %t/comment-line-splice.cpp %t/empty...
[truncated]

…dule presence (llvm#153497)"

This reverts commit 9403c2d.

During the review of llvm#152770, it was decided to remove the logic that
would have been used to implicitly enable the -fmodules-driver feature
in the future. (Currently, this logic is only used for diagnostics.)

If we find that implicitly enabling the -fmodules-driver feature is
really useful in practice later on, it may be re-added.

Link to review comment: llvm#152770 (comment)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl' clang:frontend Language frontend issues, e.g. anything involving "Sema" clang Clang issues not falling into any other category

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants