Author: Corentin Jabot Date: 2025-07-07T14:22:41+02:00 New Revision: db389bda9b28908788824febdc0ec2d802782962
URL: https://github.com/llvm/llvm-project/commit/db389bda9b28908788824febdc0ec2d802782962 DIFF: https://github.com/llvm/llvm-project/commit/db389bda9b28908788824febdc0ec2d802782962.diff LOG: Revert "[clang][modules-driver] Add scanner to detect C++20 module presence" (#147286) Reverts llvm/llvm-project#145220 This breaks CI when building the documentation ``` Included from /home/runner/work/llvm-project/llvm-project/clang/docs/../include/clang/Basic/Diagnostic.td:74: /home/runner/work/llvm-project/llvm-project/clang/docs/../include/clang/Basic/DiagnosticGroups.td:628:5: error: Diagnostic group contains both remark and non-remark diagnostics def ModulesDriver : DiagGroup<"modules-driver">; ^ ``` https://github.com/llvm/llvm-project/actions/runs/16116118496/job/45470268367 Added: Modified: clang/include/clang/Basic/DiagnosticDriverKinds.td clang/include/clang/Basic/DiagnosticGroups.td clang/include/clang/Driver/Driver.h clang/include/clang/Driver/Options.td clang/lib/Driver/Driver.cpp clang/test/Frontend/warning-options.cpp Removed: clang/test/Driver/modules-driver-cxx20-module-usage-scanner.cpp ################################################################################ diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index efba09dc140f6..34b6c0d7a8acd 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -577,16 +577,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_modules_driver_unsupported_standard : Warning< - "'-fmodules-driver' is not supported before C++20">, - 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 d2aa380f8d73f..36fa3227fd6a6 100644 --- a/clang/include/clang/Basic/DiagnosticGroups.td +++ b/clang/include/clang/Basic/DiagnosticGroups.td @@ -625,7 +625,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 2a04f6dd27655..d9e328fe918bc 100644 --- a/clang/include/clang/Driver/Driver.h +++ b/clang/include/clang/Driver/Driver.h @@ -504,9 +504,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. @@ -792,35 +789,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> - ScanInputsForCXXModuleUsage(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 4f453aa8b7732..54c71b066f9d4 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3259,13 +3259,6 @@ def modules_reduced_bmi : Flag<["-"], "fmodules-reduced-bmi">, HelpText<"Generate the reduced BMI">, MarshallingInfoFlag<FrontendOpts<"GenReducedBMI">>; -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<modules_reduced_bmi>; diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 60c5bda14af2f..55748c0bce918 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -53,7 +53,6 @@ #include "ToolChains/WebAssembly.h" #include "ToolChains/XCore.h" #include "ToolChains/ZOS.h" -#include "clang/Basic/CharInfo.h" #include "clang/Basic/DiagnosticDriver.h" #include "clang/Basic/TargetID.h" #include "clang/Basic/Version.h" @@ -4292,13 +4291,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) { - Diag(diag::warn_modules_driver_unsupported_standard); - Args.eraseArg(options::OPT_fmodules_driver); - } - Arg *FinalPhaseArg; phases::ID FinalPhase = getFinalPhase(Args, &FinalPhaseArg); @@ -4425,174 +4417,6 @@ void Driver::handleArguments(Compilation &C, DerivedArgList &Args, } } -static void skipWhitespace(const char *&Ptr) { - while (isWhitespace(*Ptr)) - ++Ptr; -} - -// Returns the length of EOL, either 0 (no end-of-line), 1 (\n) or 2 (\r\n). -static unsigned isEOL(const char *Ptr) { - if (*Ptr == '\0') - return 0; - if (*(Ptr + 1) != '\0' && isVerticalWhitespace(Ptr[0]) && - isVerticalWhitespace(Ptr[1]) && Ptr[0] != Ptr[1]) - return 2; - return !!isVerticalWhitespace(Ptr[0]); -} - -static void skipLine(const char *&Ptr) { - for (;;) { - char LastNonWhitespace = ' '; - while (!isVerticalWhitespace(*Ptr) && *Ptr != '\0') { - if (!isHorizontalWhitespace(*Ptr)) - LastNonWhitespace = *Ptr; - ++Ptr; - } - - const unsigned Len = isEOL(Ptr); - if (!Len) - return; - - Ptr += Len; - if (LastNonWhitespace != '\\') - break; - } -} - -// Returns the length of a line splice sequence (including trailing -// whitespace), or 0 if no line splice is found. -static unsigned isLineSplice(const char *Start) { - if (*Start != '\\') - return 0; - - const char *Ptr = Start + 1; - while (isHorizontalWhitespace(*Ptr)) - ++Ptr; - - if (unsigned Len = isEOL(Ptr)) - return Ptr - Start + Len; - return 0; -} - -static bool trySkipLineSplice(const char *&Ptr) { - if (unsigned Len = isLineSplice(Ptr); Len) { - Ptr += Len; - return true; - } - return false; -} - -static bool trySkipDirective(const char *&Ptr) { - if (*Ptr != '#') - return false; - - ++Ptr; - skipLine(Ptr); - return true; -} - -static bool trySkipLineComment(const char *&Ptr) { - if (Ptr[0] != '/' || Ptr[1] != '/') - return false; - - Ptr += 2; - skipLine(Ptr); - return true; -} - -static bool trySkipBlockComment(const char *&Ptr) { - if (Ptr[0] != '/' || Ptr[1] != '*') - return false; - - Ptr += 2; - while (*Ptr != '\0') { - if (Ptr[0] == '*' && Ptr[1] == '/') { - Ptr += 2; // '*/' - return true; - } - ++Ptr; - } - return true; -} - -static bool trySkipComment(const char *&Ptr) { - return trySkipLineComment(Ptr) || trySkipBlockComment(Ptr); -} - -// Skipps over comments and (non-module) directives -static void skipToRelevantCXXModuleText(const char *&Ptr) { - while (*Ptr != '\0') { - skipWhitespace(Ptr); - if (trySkipComment(Ptr) || trySkipDirective(Ptr) || trySkipLineSplice(Ptr)) - continue; - break; // Found relevant text! - } -} - -static bool scanBufferForCXXModuleUsage(const llvm::MemoryBuffer &Buffer) { - const char *Ptr = Buffer.getBufferStart(); - skipToRelevantCXXModuleText(Ptr); - - // Check if the buffer has enough remaining bytes left for any of the - // module-related declaration fragments we are checking for, without making - // the potentially memory-mapped buffer load unnecessary pages. - constexpr int MinKeywordLength = 6; - const char *Begin = Ptr; - for (int i = 0; i < MinKeywordLength; ++i) { - if (*Ptr == '\0') - return false; - ++Ptr; - } - StringRef Text(Begin, MinKeywordLength); - - const bool IsGlobalModule = Text.starts_with("module"); - if (!IsGlobalModule && !Text.starts_with("import") && - !Text.starts_with("export")) - return false; - - // Ensure the keyword has a proper ending and isn't part of a identifier - // or namespace. For this we might have to skip comments and line - // continuations. - while (*Ptr != '\0') { - if (isWhitespace(*Ptr) || (IsGlobalModule && *Ptr == ';')) - return true; - if (trySkipBlockComment(Ptr) || trySkipLineSplice(Ptr)) - continue; - return false; - } - - return false; -} - -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::ScanInputsForCXXModuleUsage(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 (scanBufferForCXXModuleUsage(*Buffer)) { - 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"); @@ -4604,33 +4428,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 = ScanInputsForCXXModuleUsage(Inputs); - if (!ErrOrScanResult) { - Diags.Report(diag::err_cannot_open_file) - << ErrOrScanResult.getError().message(); - return; - } - UsesCXXModules = *ErrOrScanResult; - } - if (UsesCXXModules) - 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) || @@ -4914,13 +4711,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); - return; -} - /// Returns the canonical name for the offloading architecture when using a HIP /// or CUDA architecture. static StringRef getCanonicalArchString(Compilation &C, 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.cpp 2>&1 \ -// RUN: | FileCheck %s --allow-empty --check-prefix=CHECK13 -// CHECK13-NOT: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver] -// My comment continues next-line!\ -import A; - -//--- comment-line-splice-trailing-whitespace.cpp -// RUN: %clang -std=c++23 -ccc-print-phases -fmodules-driver -Rmodules-driver \ -// RUN: %t/comment-line-splice-trailing-whitespace.cpp %t/empty.cpp 2>&1 \ -// RUN: | FileCheck %s --allow-empty --check-prefix=CHECK14 -// CHECK14-NOT: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver] -// My comment continues next-line! This backslash has trailing whitespace. -> \ -module; - -//--- line-splice-in-directive1.cpp -// RUN: %clang -std=c++23 -ccc-print-phases -fmodules-driver -Rmodules-driver \ -// RUN: %t/line-splice-in-directive1.cpp %t/empty.cpp 2>&1 \ -// RUN: | FileCheck %s --check-prefix=CHECK15 -// CHECK15: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver] - -module\ -; - -//--- line-splice-in-directive2.cpp -// RUN: %clang -std=c++23 -ccc-print-phases -fmodules-driver -Rmodules-driver \ -// RUN: %t/line-splice-in-directive2.cpp %t/empty.cpp 2>&1 \ -// RUN: | FileCheck %s --check-prefix=CHECK16 -// CHECK16: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver] - -export\ - module\ - A; - -//--- no-module-usage1.cpp -// RUN: %clang -std=c++23 -ccc-print-phases -fmodules-driver -Rmodules-driver \ -// RUN: %t/no-module-usage1.cpp %t/empty.cpp 2>&1 \ -// RUN: | FileCheck %s --allow-empty --check-prefix=CHECK17 -// CHECK17-NOT: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver] -auto main() -> int {} - -//--- no-module-usage2.cpp -// RUN: %clang -std=c++23 -ccc-print-phases -fmodules-driver -Rmodules-driver \ -// RUN: %t/no-module-usage2.cpp %t/empty.cpp 2>&1 \ -// RUN: | FileCheck %s --allow-empty --check-prefix=CHECK18 -// CHECK18-NOT: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver] -moduleStruct{}; - -//--- no-module-usage3.cpp -// RUN: %clang -std=c++23 -ccc-print-phases -fmodules-driver -Rmodules-driver \ -// RUN: %t/no-module-usage3.cpp %t/empty.cpp 2>&1 \ -// RUN: | FileCheck %s --allow-empty --check-prefix=CHECK19 -// CHECK19-NOT: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver] -export_struct{}; - -//--- no-module-usage-namespace-import.cpp -// RUN: %clang -std=c++23 -ccc-print-phases -fmodules-driver -Rmodules-driver \ -// RUN: %t/no-module-usage-namespace-import.cpp %t/empty.cpp 2>&1 \ -// RUN: | FileCheck %s --allow-empty --check-prefix=CHECK20 -// CHECK20-NOT: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver] -import::inner xi = {}; - -//--- no-module-usage-namespace-module.cpp -// RUN: %clang -std=c++23 -ccc-print-phases -fmodules-driver -Rmodules-driver \ -// RUN: %t/no-module-usage-namespace-module.cpp %t/empty.cpp 2>&1 \ -// RUN: | FileCheck %s --allow-empty --check-prefix=CHECK21 -// CHECK21-NOT: remark: found C++20 module usage in file '{{.*}}' [-Rmodules-driver] -module::inner yi = {}; - -// RUN: not %clang -std=c++20 -ccc-print-phases -fmodules-driver -Rmodules-driver \ -// RUN: imaginary-file.cpp %t/empty.cpp 2>&1 \ -// RUN: | FileCheck %s --check-prefix=CHECK-NON-EXISTING-FILE-ERR -// CHECK-NON-EXISTING-FILE-ERR: clang: error: no such file or directory: 'imaginary-file.cpp' diff --git a/clang/test/Frontend/warning-options.cpp b/clang/test/Frontend/warning-options.cpp index 21863cac2e788..444733c8b7f36 100644 --- a/clang/test/Frontend/warning-options.cpp +++ b/clang/test/Frontend/warning-options.cpp @@ -3,6 +3,6 @@ // CHECK: unknown warning option '-Wmonkey' // CHECK: unknown warning option '-Wno-monkey' // CHECK: unknown warning option '-Wno-unused-command-line-arguments'; did you mean '-Wno-unused-command-line-argument'? -// CHECK: unknown warning option '-Wmodule-build'; did you mean '-Wmodules-driver'? +// CHECK: unknown warning option '-Wmodule-build'; did you mean '-Wmodule-conflict'? // CHECK-NEXT: unknown -Werror warning specifier: '-Werror-vla' // CHECK: unknown remark option '-Rmodule-built'; did you mean '-Rmodule-build'? _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits