From a42bb8b57a6dcf298789ae88b36bbbba19e151fb Mon Sep 17 00:00:00 2001 From: Cameron McInally Date: Fri, 6 Jun 2025 17:59:24 -0400 Subject: [PATCH] [Driver] Move CommonArgs to a location visible by the Frontend Drivers (#142800) This patch moves the CommonArgs utilities into a location visible by the Frontend Drivers, so that the Frontend Drivers may share option parsing code with the Compiler Driver. This is useful when the Frontend Drivers would like to verify that their incoming options are well-formed and also not reinvent the option parsing wheel. We already see code in the Clang/Flang Drivers that is parsing and verifying its incoming options. E.g. OPT_ffp_contract. This option is parsed in the Compiler Driver, Clang Driver, and Flang Driver, all with slightly different parsing code. It would be nice if the Frontend Drivers were not required to duplicate this Compiler Driver code. That way there is no/low maintenance burden on keeping all these parsing functions in sync. Along those lines, the Frontend Drivers will now have a useful mechanism to verify their incoming options are well-formed. Currently, the Frontend Drivers trust that the Compiler Driver is not passing back junk in some cases. The Language Drivers may even accept junk with no error at all. E.g.: `clang -cc1 -mprefer-vector-width=junk test.c' With this patch, we'll now be able to tighten up incomming options to the Frontend drivers in a lightweight way. --------- Co-authored-by: Cameron McInally Co-authored-by: Shafik Yaghmour --- .../clang/Driver}/CommonArgs.h | 6 ++++ clang/lib/Driver/MultilibBuilder.cpp | 2 +- clang/lib/Driver/ToolChain.cpp | 2 +- clang/lib/Driver/ToolChains/AIX.cpp | 2 +- clang/lib/Driver/ToolChains/AMDGPU.cpp | 2 +- clang/lib/Driver/ToolChains/AVR.cpp | 2 +- clang/lib/Driver/ToolChains/Arch/AArch64.cpp | 2 +- .../lib/Driver/ToolChains/Arch/LoongArch.cpp | 2 +- clang/lib/Driver/ToolChains/Arch/Mips.cpp | 2 +- clang/lib/Driver/ToolChains/Arch/PPC.cpp | 2 +- clang/lib/Driver/ToolChains/Arch/RISCV.cpp | 2 +- clang/lib/Driver/ToolChains/BareMetal.cpp | 2 +- clang/lib/Driver/ToolChains/CSKYToolChain.cpp | 2 +- clang/lib/Driver/ToolChains/Clang.cpp | 28 ++++--------------- clang/lib/Driver/ToolChains/CommonArgs.cpp | 24 +++++++++++++++- clang/lib/Driver/ToolChains/CrossWindows.cpp | 2 +- clang/lib/Driver/ToolChains/Cuda.cpp | 2 +- clang/lib/Driver/ToolChains/Cygwin.cpp | 2 +- clang/lib/Driver/ToolChains/Darwin.cpp | 2 +- clang/lib/Driver/ToolChains/DragonFly.cpp | 2 +- clang/lib/Driver/ToolChains/Flang.cpp | 2 +- clang/lib/Driver/ToolChains/FreeBSD.cpp | 2 +- clang/lib/Driver/ToolChains/Fuchsia.cpp | 2 +- clang/lib/Driver/ToolChains/Gnu.cpp | 2 +- clang/lib/Driver/ToolChains/HIPAMD.cpp | 2 +- clang/lib/Driver/ToolChains/HIPSPV.cpp | 2 +- clang/lib/Driver/ToolChains/HIPUtility.cpp | 2 +- clang/lib/Driver/ToolChains/HLSL.cpp | 2 +- clang/lib/Driver/ToolChains/Haiku.cpp | 2 +- clang/lib/Driver/ToolChains/Hexagon.cpp | 2 +- clang/lib/Driver/ToolChains/Hurd.cpp | 2 +- .../lib/Driver/ToolChains/InterfaceStubs.cpp | 2 +- clang/lib/Driver/ToolChains/Linux.cpp | 2 +- clang/lib/Driver/ToolChains/MSP430.cpp | 2 +- clang/lib/Driver/ToolChains/MSVC.cpp | 2 +- clang/lib/Driver/ToolChains/MinGW.cpp | 2 +- clang/lib/Driver/ToolChains/NaCl.cpp | 2 +- clang/lib/Driver/ToolChains/NetBSD.cpp | 2 +- clang/lib/Driver/ToolChains/OHOS.cpp | 2 +- clang/lib/Driver/ToolChains/OpenBSD.cpp | 2 +- clang/lib/Driver/ToolChains/PS4CPU.cpp | 2 +- .../lib/Driver/ToolChains/RISCVToolchain.cpp | 2 +- clang/lib/Driver/ToolChains/SPIRV.cpp | 2 +- clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp | 2 +- clang/lib/Driver/ToolChains/SYCL.cpp | 2 +- clang/lib/Driver/ToolChains/Solaris.cpp | 2 +- clang/lib/Driver/ToolChains/UEFI.cpp | 2 +- clang/lib/Driver/ToolChains/VEToolchain.cpp | 2 +- clang/lib/Driver/ToolChains/WebAssembly.cpp | 2 +- clang/lib/Driver/ToolChains/XCore.cpp | 2 +- clang/lib/Driver/ToolChains/ZOS.cpp | 2 +- clang/lib/Driver/XRayArgs.cpp | 2 +- .../unittests/Driver/MultilibBuilderTest.cpp | 2 +- clang/unittests/Driver/MultilibTest.cpp | 2 +- flang/lib/Frontend/CompilerInvocation.cpp | 16 ++--------- flang/test/Driver/prefer-vector-width.f90 | 2 +- llvm/include/llvm/Support/Compiler.h | 6 ++++ 57 files changed, 95 insertions(+), 89 deletions(-) rename clang/{lib/Driver/ToolChains => include/clang/Driver}/CommonArgs.h (97%) diff --git a/clang/lib/Driver/ToolChains/CommonArgs.h b/clang/include/clang/Driver/CommonArgs.h similarity index 97% rename from clang/lib/Driver/ToolChains/CommonArgs.h rename to clang/include/clang/Driver/CommonArgs.h index b5b9c1e66e38..59b68030a4d6 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.h +++ b/clang/include/clang/Driver/CommonArgs.h @@ -270,6 +270,12 @@ void handleVectorizeLoopsArgs(const llvm::opt::ArgList &Args, /// Enable -fslp-vectorize based on the optimization level selected. void handleVectorizeSLPArgs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs); + +// Parse -mprefer-vector-width=. Return the Value string if well-formed. +// Otherwise, return an empty string and issue a diagnosic message if needed. +StringRef ParseMPreferVectorWidthOption(clang::DiagnosticsEngine &Diags, + const llvm::opt::ArgList &Args); + } // end namespace tools } // end namespace driver } // end namespace clang diff --git a/clang/lib/Driver/MultilibBuilder.cpp b/clang/lib/Driver/MultilibBuilder.cpp index 8440a82f78be..9d44d8681cf8 100644 --- a/clang/lib/Driver/MultilibBuilder.cpp +++ b/clang/lib/Driver/MultilibBuilder.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "clang/Driver/MultilibBuilder.h" -#include "ToolChains/CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "llvm/ADT/StringMap.h" #include "llvm/Support/Path.h" #include "llvm/Support/Regex.h" diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index f2911713668a..571ac53f4571 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -11,13 +11,13 @@ #include "ToolChains/Arch/ARM.h" #include "ToolChains/Arch/RISCV.h" #include "ToolChains/Clang.h" -#include "ToolChains/CommonArgs.h" #include "ToolChains/Flang.h" #include "ToolChains/InterfaceStubs.h" #include "clang/Basic/ObjCRuntime.h" #include "clang/Basic/Sanitizers.h" #include "clang/Config/config.h" #include "clang/Driver/Action.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Job.h" diff --git a/clang/lib/Driver/ToolChains/AIX.cpp b/clang/lib/Driver/ToolChains/AIX.cpp index a1a94e37116c..066b59305fe3 100644 --- a/clang/lib/Driver/ToolChains/AIX.cpp +++ b/clang/lib/Driver/ToolChains/AIX.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "AIX.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Options.h" #include "clang/Driver/SanitizerArgs.h" diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index dfbe936d5a5d..cf9c24f1e1cd 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -7,9 +7,9 @@ //===----------------------------------------------------------------------===// #include "AMDGPU.h" -#include "CommonArgs.h" #include "clang/Basic/TargetID.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp index f1529f857eef..b0523a7f4e40 100644 --- a/clang/lib/Driver/ToolChains/AVR.cpp +++ b/clang/lib/Driver/ToolChains/AVR.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "AVR.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp index eaae9f876e3a..ea906d2e2acf 100644 --- a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "AArch64.h" -#include "../CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "llvm/Option/ArgList.h" diff --git a/clang/lib/Driver/ToolChains/Arch/LoongArch.cpp b/clang/lib/Driver/ToolChains/Arch/LoongArch.cpp index a35f8276737f..3318e498a74f 100644 --- a/clang/lib/Driver/ToolChains/Arch/LoongArch.cpp +++ b/clang/lib/Driver/ToolChains/Arch/LoongArch.cpp @@ -8,8 +8,8 @@ #include "LoongArch.h" #include "../Clang.h" -#include "ToolChains/CommonArgs.h" #include "clang/Basic/DiagnosticDriver.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "llvm/TargetParser/Host.h" diff --git a/clang/lib/Driver/ToolChains/Arch/Mips.cpp b/clang/lib/Driver/ToolChains/Arch/Mips.cpp index 0d847587e866..8787c8276721 100644 --- a/clang/lib/Driver/ToolChains/Arch/Mips.cpp +++ b/clang/lib/Driver/ToolChains/Arch/Mips.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "Mips.h" -#include "ToolChains/CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "llvm/ADT/StringSwitch.h" diff --git a/clang/lib/Driver/ToolChains/Arch/PPC.cpp b/clang/lib/Driver/ToolChains/Arch/PPC.cpp index afa86230085e..361a68a892a8 100644 --- a/clang/lib/Driver/ToolChains/Arch/PPC.cpp +++ b/clang/lib/Driver/ToolChains/Arch/PPC.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "PPC.h" -#include "ToolChains/CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "llvm/ADT/StringSwitch.h" diff --git a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp index d0b620980bce..baa2c8c0bcfb 100644 --- a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp +++ b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp @@ -8,7 +8,7 @@ #include "RISCV.h" #include "../Clang.h" -#include "ToolChains/CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "llvm/Option/ArgList.h" diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp index 6bf2302d3bd9..d8168ed15feb 100644 --- a/clang/lib/Driver/ToolChains/BareMetal.cpp +++ b/clang/lib/Driver/ToolChains/BareMetal.cpp @@ -8,8 +8,8 @@ #include "BareMetal.h" -#include "CommonArgs.h" #include "Gnu.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/InputInfo.h" #include "Arch/ARM.h" diff --git a/clang/lib/Driver/ToolChains/CSKYToolChain.cpp b/clang/lib/Driver/ToolChains/CSKYToolChain.cpp index e944cba0eb23..e4db3307ee3a 100644 --- a/clang/lib/Driver/ToolChains/CSKYToolChain.cpp +++ b/clang/lib/Driver/ToolChains/CSKYToolChain.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "CSKYToolChain.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 80dd72a23a67..65f101ddf1d0 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -14,7 +14,6 @@ #include "Arch/RISCV.h" #include "Arch/Sparc.h" #include "Arch/SystemZ.h" -#include "CommonArgs.h" #include "Hexagon.h" #include "PS4CPU.h" #include "clang/Basic/CLWarnings.h" @@ -26,6 +25,7 @@ #include "clang/Basic/Version.h" #include "clang/Config/config.h" #include "clang/Driver/Action.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Distro.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Options.h" @@ -264,27 +264,6 @@ static void ParseMRecip(const Driver &D, const ArgList &Args, OutStrings.push_back(Args.MakeArgString(Out)); } -/// The -mprefer-vector-width option accepts either a positive integer -/// or the string "none". -static void ParseMPreferVectorWidth(const Driver &D, const ArgList &Args, - ArgStringList &CmdArgs) { - Arg *A = Args.getLastArg(options::OPT_mprefer_vector_width_EQ); - if (!A) - return; - - StringRef Value = A->getValue(); - if (Value == "none") { - CmdArgs.push_back("-mprefer-vector-width=none"); - } else { - unsigned Width; - if (Value.getAsInteger(10, Width)) { - D.Diag(diag::err_drv_invalid_value) << A->getOption().getName() << Value; - return; - } - CmdArgs.push_back(Args.MakeArgString("-mprefer-vector-width=" + Value)); - } -} - static bool shouldUseExceptionTablesForObjCExceptions(const ObjCRuntime &runtime, const llvm::Triple &Triple) { @@ -7607,7 +7586,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, handleVectorizeLoopsArgs(Args, CmdArgs); handleVectorizeSLPArgs(Args, CmdArgs); - ParseMPreferVectorWidth(D, Args, CmdArgs); + + StringRef VecWidth = ParseMPreferVectorWidthOption(D.getDiags(), Args); + if (!VecWidth.empty()) + CmdArgs.push_back(Args.MakeArgString("-mprefer-vector-width=" + VecWidth)); Args.AddLastArg(CmdArgs, options::OPT_fshow_overloads_EQ); Args.AddLastArg(CmdArgs, diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 937ee09cac7c..02b6e2383548 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "Arch/AArch64.h" #include "Arch/ARM.h" #include "Arch/CSKY.h" @@ -3167,3 +3167,25 @@ void tools::handleInterchangeLoopsArgs(const ArgList &Args, options::OPT_fno_loop_interchange, EnableInterchange)) CmdArgs.push_back("-floop-interchange"); } + +// Parse -mprefer-vector-width=. Return the Value string if well-formed. +// Otherwise, return an empty string and issue a diagnosic message if needed. +StringRef tools::ParseMPreferVectorWidthOption(clang::DiagnosticsEngine &Diags, + const llvm::opt::ArgList &Args) { + Arg *A = Args.getLastArg(clang::driver::options::OPT_mprefer_vector_width_EQ); + if (!A) + return ""; + + StringRef Value = A->getValue(); + unsigned Width LLVM_ATTRIBUTE_UNINITIALIZED; + + // Only "none" and Integer values are accepted by + // -mprefer-vector-width=. + if (Value != "none" && Value.getAsInteger(10, Width)) { + Diags.Report(clang::diag::err_drv_invalid_value) + << A->getOption().getName() << Value; + return ""; + } + + return Value; +} diff --git a/clang/lib/Driver/ToolChains/CrossWindows.cpp b/clang/lib/Driver/ToolChains/CrossWindows.cpp index 3c5dfba329cf..51c892fc9171 100644 --- a/clang/lib/Driver/ToolChains/CrossWindows.cpp +++ b/clang/lib/Driver/ToolChains/CrossWindows.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "CrossWindows.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index 073861dade4f..a91e4de41c8d 100644 --- a/clang/lib/Driver/ToolChains/Cuda.cpp +++ b/clang/lib/Driver/ToolChains/Cuda.cpp @@ -7,9 +7,9 @@ //===----------------------------------------------------------------------===// #include "Cuda.h" -#include "CommonArgs.h" #include "clang/Basic/Cuda.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Distro.h" #include "clang/Driver/Driver.h" diff --git a/clang/lib/Driver/ToolChains/Cygwin.cpp b/clang/lib/Driver/ToolChains/Cygwin.cpp index f0e90deee98b..d9c16347daa3 100644 --- a/clang/lib/Driver/ToolChains/Cygwin.cpp +++ b/clang/lib/Driver/ToolChains/Cygwin.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "Cygwin.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "llvm/Support/Path.h" diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index 70737927145b..77d857b32d67 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -8,10 +8,10 @@ #include "Darwin.h" #include "Arch/ARM.h" -#include "CommonArgs.h" #include "clang/Basic/AlignedAllocation.h" #include "clang/Basic/ObjCRuntime.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/DragonFly.cpp b/clang/lib/Driver/ToolChains/DragonFly.cpp index 38a29ae49e8d..524f5f2ff391 100644 --- a/clang/lib/Driver/ToolChains/DragonFly.cpp +++ b/clang/lib/Driver/ToolChains/DragonFly.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "DragonFly.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index dcc46469df3e..e0a366bfb922 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -8,9 +8,9 @@ #include "Flang.h" #include "Arch/RISCV.h" -#include "CommonArgs.h" #include "clang/Basic/CodeGenOptions.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Options.h" #include "llvm/Frontend/Debug/Options.h" #include "llvm/Support/Path.h" diff --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp b/clang/lib/Driver/ToolChains/FreeBSD.cpp index ccf6987a2ea6..b17b76233ad3 100644 --- a/clang/lib/Driver/ToolChains/FreeBSD.cpp +++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp @@ -10,8 +10,8 @@ #include "Arch/ARM.h" #include "Arch/Mips.h" #include "Arch/Sparc.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Options.h" #include "clang/Driver/SanitizerArgs.h" diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp b/clang/lib/Driver/ToolChains/Fuchsia.cpp index 910db1dde0d1..1c165bbfe84f 100644 --- a/clang/lib/Driver/ToolChains/Fuchsia.cpp +++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "Fuchsia.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/MultilibBuilder.h" diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index e42cd0f97cb4..9c68c5c6de2b 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -15,8 +15,8 @@ #include "Arch/RISCV.h" #include "Arch/Sparc.h" #include "Arch/SystemZ.h" -#include "CommonArgs.h" #include "clang/Config/config.h" // for GCC_INSTALL_PREFIX +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/MultilibBuilder.h" diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index fc067e905227..a8f2b09b1b20 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -8,10 +8,10 @@ #include "HIPAMD.h" #include "AMDGPU.h" -#include "CommonArgs.h" #include "HIPUtility.h" #include "SPIRV.h" #include "clang/Basic/Cuda.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/InputInfo.h" diff --git a/clang/lib/Driver/ToolChains/HIPSPV.cpp b/clang/lib/Driver/ToolChains/HIPSPV.cpp index 02ec36df273a..ec29c62976e1 100644 --- a/clang/lib/Driver/ToolChains/HIPSPV.cpp +++ b/clang/lib/Driver/ToolChains/HIPSPV.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "HIPSPV.h" -#include "CommonArgs.h" #include "HIPUtility.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/InputInfo.h" diff --git a/clang/lib/Driver/ToolChains/HIPUtility.cpp b/clang/lib/Driver/ToolChains/HIPUtility.cpp index 8a3dd494f3b4..cb061ffede23 100644 --- a/clang/lib/Driver/ToolChains/HIPUtility.cpp +++ b/clang/lib/Driver/ToolChains/HIPUtility.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "HIPUtility.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Options.h" #include "llvm/ADT/StringExtras.h" diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index eb8f6881bffc..dcc51e182924 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "HLSL.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Job.h" #include "llvm/ADT/StringSwitch.h" diff --git a/clang/lib/Driver/ToolChains/Haiku.cpp b/clang/lib/Driver/ToolChains/Haiku.cpp index 5d0d8b7f5024..dd6ada8f5697 100644 --- a/clang/lib/Driver/ToolChains/Haiku.cpp +++ b/clang/lib/Driver/ToolChains/Haiku.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "Haiku.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/SanitizerArgs.h" #include "llvm/Support/Path.h" diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index bed8de94130c..9f8b676fc7dc 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "Hexagon.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/InputInfo.h" diff --git a/clang/lib/Driver/ToolChains/Hurd.cpp b/clang/lib/Driver/ToolChains/Hurd.cpp index 0bc114b90ffc..a22a8face179 100644 --- a/clang/lib/Driver/ToolChains/Hurd.cpp +++ b/clang/lib/Driver/ToolChains/Hurd.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "Hurd.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "llvm/Support/Path.h" diff --git a/clang/lib/Driver/ToolChains/InterfaceStubs.cpp b/clang/lib/Driver/ToolChains/InterfaceStubs.cpp index 05a13db8d0cf..59a6742c406c 100644 --- a/clang/lib/Driver/ToolChains/InterfaceStubs.cpp +++ b/clang/lib/Driver/ToolChains/InterfaceStubs.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "InterfaceStubs.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "llvm/Support/Path.h" diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp index 19919cf5136d..151b2bfced81 100644 --- a/clang/lib/Driver/ToolChains/Linux.cpp +++ b/clang/lib/Driver/ToolChains/Linux.cpp @@ -12,8 +12,8 @@ #include "Arch/Mips.h" #include "Arch/PPC.h" #include "Arch/RISCV.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Distro.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/MSP430.cpp b/clang/lib/Driver/ToolChains/MSP430.cpp index be0f9f214538..9eca1ad5f286 100644 --- a/clang/lib/Driver/ToolChains/MSP430.cpp +++ b/clang/lib/Driver/ToolChains/MSP430.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "MSP430.h" -#include "CommonArgs.h" #include "Gnu.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Multilib.h" diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp index a14691c5a4e7..1e244865b211 100644 --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -7,9 +7,9 @@ //===----------------------------------------------------------------------===// #include "MSVC.h" -#include "CommonArgs.h" #include "Darwin.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index 2245b036b845..7d093d20b3dd 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "MinGW.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/InputInfo.h" diff --git a/clang/lib/Driver/ToolChains/NaCl.cpp b/clang/lib/Driver/ToolChains/NaCl.cpp index ab619615d67e..f7acaa1f3a78 100644 --- a/clang/lib/Driver/ToolChains/NaCl.cpp +++ b/clang/lib/Driver/ToolChains/NaCl.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "NaCl.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/InputInfo.h" diff --git a/clang/lib/Driver/ToolChains/NetBSD.cpp b/clang/lib/Driver/ToolChains/NetBSD.cpp index ae164be1b4e8..8db00deeb80d 100644 --- a/clang/lib/Driver/ToolChains/NetBSD.cpp +++ b/clang/lib/Driver/ToolChains/NetBSD.cpp @@ -10,8 +10,8 @@ #include "Arch/ARM.h" #include "Arch/Mips.h" #include "Arch/Sparc.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/OHOS.cpp b/clang/lib/Driver/ToolChains/OHOS.cpp index 72f36d08f4da..00991504e97a 100644 --- a/clang/lib/Driver/ToolChains/OHOS.cpp +++ b/clang/lib/Driver/ToolChains/OHOS.cpp @@ -8,8 +8,8 @@ #include "OHOS.h" #include "Arch/ARM.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/OpenBSD.cpp b/clang/lib/Driver/ToolChains/OpenBSD.cpp index 668626259809..79b1b6960da1 100644 --- a/clang/lib/Driver/ToolChains/OpenBSD.cpp +++ b/clang/lib/Driver/ToolChains/OpenBSD.cpp @@ -10,8 +10,8 @@ #include "Arch/ARM.h" #include "Arch/Mips.h" #include "Arch/Sparc.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Options.h" #include "clang/Driver/SanitizerArgs.h" diff --git a/clang/lib/Driver/ToolChains/PS4CPU.cpp b/clang/lib/Driver/ToolChains/PS4CPU.cpp index cb56a7ebeba2..e965786d269f 100644 --- a/clang/lib/Driver/ToolChains/PS4CPU.cpp +++ b/clang/lib/Driver/ToolChains/PS4CPU.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "PS4CPU.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/RISCVToolchain.cpp b/clang/lib/Driver/ToolChains/RISCVToolchain.cpp index d88ddc264d72..42bbc130637b 100644 --- a/clang/lib/Driver/ToolChains/RISCVToolchain.cpp +++ b/clang/lib/Driver/ToolChains/RISCVToolchain.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "RISCVToolchain.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/SPIRV.cpp b/clang/lib/Driver/ToolChains/SPIRV.cpp index d9292cf01f8d..ea824dbad54c 100644 --- a/clang/lib/Driver/ToolChains/SPIRV.cpp +++ b/clang/lib/Driver/ToolChains/SPIRV.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// #include "SPIRV.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/InputInfo.h" diff --git a/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp b/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp index a688fd8d9fb5..4e09d5eac26f 100644 --- a/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp @@ -6,7 +6,7 @@ // //==------------------------------------------------------------------------==// #include "SPIRVOpenMP.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" using namespace clang::driver; using namespace clang::driver::toolchains; diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index 6611c142a5ef..0232b047a6c4 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// #include "SYCL.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" using namespace clang::driver; using namespace clang::driver::toolchains; diff --git a/clang/lib/Driver/ToolChains/Solaris.cpp b/clang/lib/Driver/ToolChains/Solaris.cpp index 48d100238176..a3574e1b701e 100644 --- a/clang/lib/Driver/ToolChains/Solaris.cpp +++ b/clang/lib/Driver/ToolChains/Solaris.cpp @@ -7,10 +7,10 @@ //===----------------------------------------------------------------------===// #include "Solaris.h" -#include "CommonArgs.h" #include "Gnu.h" #include "clang/Basic/LangStandard.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/UEFI.cpp b/clang/lib/Driver/ToolChains/UEFI.cpp index 2ef719bb43aa..ac6668e6bdd5 100644 --- a/clang/lib/Driver/ToolChains/UEFI.cpp +++ b/clang/lib/Driver/ToolChains/UEFI.cpp @@ -7,8 +7,8 @@ //===----------------------------------------------------------------------===// #include "UEFI.h" -#include "CommonArgs.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/VEToolchain.cpp b/clang/lib/Driver/ToolChains/VEToolchain.cpp index cf85a691dbdb..ad9129046c3e 100644 --- a/clang/lib/Driver/ToolChains/VEToolchain.cpp +++ b/clang/lib/Driver/ToolChains/VEToolchain.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "VEToolchain.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/WebAssembly.cpp b/clang/lib/Driver/ToolChains/WebAssembly.cpp index b3ed49662999..5054868b5ff4 100644 --- a/clang/lib/Driver/ToolChains/WebAssembly.cpp +++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp @@ -7,9 +7,9 @@ //===----------------------------------------------------------------------===// #include "WebAssembly.h" -#include "CommonArgs.h" #include "Gnu.h" #include "clang/Config/config.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/XCore.cpp b/clang/lib/Driver/ToolChains/XCore.cpp index c95ebabdd30c..6a2a75cb9973 100644 --- a/clang/lib/Driver/ToolChains/XCore.cpp +++ b/clang/lib/Driver/ToolChains/XCore.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "XCore.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" diff --git a/clang/lib/Driver/ToolChains/ZOS.cpp b/clang/lib/Driver/ToolChains/ZOS.cpp index d05202972825..57bcb3c306ce 100644 --- a/clang/lib/Driver/ToolChains/ZOS.cpp +++ b/clang/lib/Driver/ToolChains/ZOS.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "ZOS.h" -#include "CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Compilation.h" #include "clang/Driver/Options.h" #include "llvm/Option/ArgList.h" diff --git a/clang/lib/Driver/XRayArgs.cpp b/clang/lib/Driver/XRayArgs.cpp index 701dd2906dcc..ceed7cb6acbb 100644 --- a/clang/lib/Driver/XRayArgs.cpp +++ b/clang/lib/Driver/XRayArgs.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// #include "clang/Driver/XRayArgs.h" -#include "ToolChains/CommonArgs.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/Options.h" #include "clang/Driver/ToolChain.h" diff --git a/clang/unittests/Driver/MultilibBuilderTest.cpp b/clang/unittests/Driver/MultilibBuilderTest.cpp index 0e5385c91353..38c9344d2966 100644 --- a/clang/unittests/Driver/MultilibBuilderTest.cpp +++ b/clang/unittests/Driver/MultilibBuilderTest.cpp @@ -12,9 +12,9 @@ //===----------------------------------------------------------------------===// #include "clang/Driver/MultilibBuilder.h" -#include "../../lib/Driver/ToolChains/CommonArgs.h" #include "SimpleDiagnosticConsumer.h" #include "clang/Basic/LLVM.h" +#include "clang/Driver/CommonArgs.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSwitch.h" diff --git a/clang/unittests/Driver/MultilibTest.cpp b/clang/unittests/Driver/MultilibTest.cpp index c03e117d9930..4c11e6a32d7c 100644 --- a/clang/unittests/Driver/MultilibTest.cpp +++ b/clang/unittests/Driver/MultilibTest.cpp @@ -11,10 +11,10 @@ //===----------------------------------------------------------------------===// #include "clang/Driver/Multilib.h" -#include "../../lib/Driver/ToolChains/CommonArgs.h" #include "SimpleDiagnosticConsumer.h" #include "clang/Basic/LLVM.h" #include "clang/Basic/Version.h" +#include "clang/Driver/CommonArgs.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSwitch.h" diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index 89aaee9f1385..fb9d0ad30398 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -23,6 +23,7 @@ #include "clang/Basic/AllDiagnostics.h" #include "clang/Basic/DiagnosticDriver.h" #include "clang/Basic/DiagnosticOptions.h" +#include "clang/Driver/CommonArgs.h" #include "clang/Driver/Driver.h" #include "clang/Driver/DriverDiagnostic.h" #include "clang/Driver/OptionUtils.h" @@ -309,19 +310,8 @@ static void parseCodeGenArgs(Fortran::frontend::CodeGenOptions &opts, for (auto *a : args.filtered(clang::driver::options::OPT_fpass_plugin_EQ)) opts.LLVMPassPlugins.push_back(a->getValue()); - // -mprefer_vector_width option - if (const llvm::opt::Arg *a = args.getLastArg( - clang::driver::options::OPT_mprefer_vector_width_EQ)) { - llvm::StringRef s = a->getValue(); - unsigned width; - if (s == "none") - opts.PreferVectorWidth = "none"; - else if (s.getAsInteger(10, width)) - diags.Report(clang::diag::err_drv_invalid_value) - << a->getAsString(args) << a->getValue(); - else - opts.PreferVectorWidth = s.str(); - } + opts.PreferVectorWidth = + clang::driver::tools::ParseMPreferVectorWidthOption(diags, args); // -fembed-offload-object option for (auto *a : diff --git a/flang/test/Driver/prefer-vector-width.f90 b/flang/test/Driver/prefer-vector-width.f90 index 3622b2805633..89dc6d35d8ba 100644 --- a/flang/test/Driver/prefer-vector-width.f90 +++ b/flang/test/Driver/prefer-vector-width.f90 @@ -15,4 +15,4 @@ end subroutine func ! CHECK-NONE-SAME: "prefer-vector-width"="none" ! CHECK-128-SAME: "prefer-vector-width"="128" ! CHECK-256-SAME: "prefer-vector-width"="256" -! CHECK-INVALID: error: invalid value 'xxx' in '-mprefer-vector-width=xxx' \ No newline at end of file +! CHECK-INVALID: error: invalid value 'xxx' in 'mprefer-vector-width=' diff --git a/llvm/include/llvm/Support/Compiler.h b/llvm/include/llvm/Support/Compiler.h index b4382057654b..f6bc05011e3c 100644 --- a/llvm/include/llvm/Support/Compiler.h +++ b/llvm/include/llvm/Support/Compiler.h @@ -238,6 +238,12 @@ #define LLVM_PREFETCH(addr, rw, locality) #endif +#if __has_attribute(uninitialized) +#define LLVM_ATTRIBUTE_UNINITIALIZED __attribute__((uninitialized)) +#else +#define LLVM_ATTRIBUTE_UNINITIALIZED +#endif + #if __has_attribute(used) #define LLVM_ATTRIBUTE_USED __attribute__((__used__)) #else