From 2c5d49cffc1f2db52e5119bdbb44f0b10a678fb7 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Sat, 3 Dec 2022 20:17:05 +0000 Subject: [PATCH] [Driver] llvm::Optional => std::optional and change a few referenced Basic and llvm/lib/WindowsDriver API --- clang/include/clang/Basic/DarwinSDKInfo.h | 12 +++--- clang/include/clang/Basic/TargetID.h | 2 +- clang/include/clang/Driver/ToolChain.h | 6 +-- clang/lib/Basic/DarwinSDKInfo.cpp | 8 ++-- clang/lib/Basic/TargetID.cpp | 2 +- clang/lib/Driver/Driver.cpp | 22 +++++----- clang/lib/Driver/OffloadBundler.cpp | 30 ++++++++------ clang/lib/Driver/ToolChains/AMDGPU.h | 6 +-- clang/lib/Driver/ToolChains/AVR.cpp | 18 ++++----- clang/lib/Driver/ToolChains/AVR.h | 2 +- clang/lib/Driver/ToolChains/Arch/ARM.cpp | 3 +- clang/lib/Driver/ToolChains/Arch/CSKY.cpp | 8 ++-- clang/lib/Driver/ToolChains/Arch/CSKY.h | 6 +-- clang/lib/Driver/ToolChains/Cuda.cpp | 2 +- clang/lib/Driver/ToolChains/Darwin.cpp | 62 ++++++++++++++--------------- clang/lib/Driver/ToolChains/Darwin.h | 6 +-- clang/lib/Driver/ToolChains/Gnu.cpp | 3 +- clang/lib/Driver/ToolChains/Gnu.h | 4 +- clang/lib/Driver/ToolChains/HLSL.cpp | 4 +- clang/lib/Driver/ToolChains/HLSL.h | 3 +- clang/lib/Driver/ToolChains/Hexagon.cpp | 11 ++--- clang/lib/Driver/ToolChains/Hexagon.h | 4 +- clang/lib/Driver/ToolChains/MSVC.cpp | 2 +- clang/lib/Driver/ToolChains/MSVC.h | 2 +- clang/lib/Sema/SemaDeclAttr.cpp | 16 ++++---- llvm/include/llvm/WindowsDriver/MSVCPaths.h | 22 +++++----- llvm/lib/WindowsDriver/MSVCPaths.cpp | 27 +++++++------ 27 files changed, 150 insertions(+), 143 deletions(-) diff --git a/clang/include/clang/Basic/DarwinSDKInfo.h b/clang/include/clang/Basic/DarwinSDKInfo.h index cac9d22..8cc10df 100644 --- a/clang/include/clang/Basic/DarwinSDKInfo.h +++ b/clang/include/clang/Basic/DarwinSDKInfo.h @@ -100,9 +100,9 @@ public: /// Returns the mapped key, or the appropriate Minimum / MaximumValue if /// they key is outside of the mapping bounds. If they key isn't mapped, but /// within the minimum and maximum bounds, None is returned. - Optional map(const VersionTuple &Key, - const VersionTuple &MinimumValue, - Optional MaximumValue) const; + std::optional + map(const VersionTuple &Key, const VersionTuple &MinimumValue, + std::optional MaximumValue) const; static Optional parseJSON(const llvm::json::Object &Obj, @@ -145,7 +145,7 @@ public: return Mapping->getSecond() ? &*Mapping->getSecond() : nullptr; } - static Optional + static std::optional parseDarwinSDKSettingsJSON(const llvm::json::Object *Obj); private: @@ -162,8 +162,8 @@ private: /// /// \returns an error if the SDKSettings.json file is invalid, None if the /// SDK has no SDKSettings.json, or a valid \c DarwinSDKInfo otherwise. -Expected> parseDarwinSDKInfo(llvm::vfs::FileSystem &VFS, - StringRef SDKRootPath); +Expected> +parseDarwinSDKInfo(llvm::vfs::FileSystem &VFS, StringRef SDKRootPath); } // end namespace clang diff --git a/clang/include/clang/Basic/TargetID.h b/clang/include/clang/Basic/TargetID.h index a34bebb..de24253 100644 --- a/clang/include/clang/Basic/TargetID.h +++ b/clang/include/clang/Basic/TargetID.h @@ -49,7 +49,7 @@ std::string getCanonicalTargetID(llvm::StringRef Processor, /// Get the conflicted pair of target IDs for a compilation or a bundled code /// object, assuming \p TargetIDs are canonicalized. If there is no conflicts, /// returns None. -llvm::Optional> +std::optional> getConflictTargetIDCombination(const std::set &TargetIDs); /// Check whether the provided target ID is compatible with the requested diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h index ec00bf9..396cf6a 100644 --- a/clang/include/clang/Driver/ToolChain.h +++ b/clang/include/clang/Driver/ToolChain.h @@ -181,9 +181,9 @@ private: EffectiveTriple = std::move(ET); } - mutable llvm::Optional cxxStdlibType; - mutable llvm::Optional runtimeLibType; - mutable llvm::Optional unwindLibType; + mutable std::optional cxxStdlibType; + mutable std::optional runtimeLibType; + mutable std::optional unwindLibType; protected: MultilibSet Multilibs; diff --git a/clang/lib/Basic/DarwinSDKInfo.cpp b/clang/lib/Basic/DarwinSDKInfo.cpp index ca24120..a1c071c 100644 --- a/clang/lib/Basic/DarwinSDKInfo.cpp +++ b/clang/lib/Basic/DarwinSDKInfo.cpp @@ -14,9 +14,9 @@ using namespace clang; -Optional DarwinSDKInfo::RelatedTargetVersionMapping::map( +std::optional DarwinSDKInfo::RelatedTargetVersionMapping::map( const VersionTuple &Key, const VersionTuple &MinimumValue, - Optional MaximumValue) const { + std::optional MaximumValue) const { if (Key < MinimumKeyVersion) return MinimumValue; if (Key > MaximumKeyVersion) @@ -72,7 +72,7 @@ static Optional getVersionKey(const llvm::json::Object &Obj, return Version; } -Optional +std::optional DarwinSDKInfo::parseDarwinSDKSettingsJSON(const llvm::json::Object *Obj) { auto Version = getVersionKey(*Obj, "Version"); if (!Version) @@ -126,7 +126,7 @@ DarwinSDKInfo::parseDarwinSDKSettingsJSON(const llvm::json::Object *Obj) { std::move(VersionMappings)); } -Expected> +Expected> clang::parseDarwinSDKInfo(llvm::vfs::FileSystem &VFS, StringRef SDKRootPath) { llvm::SmallString<256> Filepath = SDKRootPath; llvm::sys::path::append(Filepath, "SDKSettings.json"); diff --git a/clang/lib/Basic/TargetID.cpp b/clang/lib/Basic/TargetID.cpp index e50080c..23c0281 100644 --- a/clang/lib/Basic/TargetID.cpp +++ b/clang/lib/Basic/TargetID.cpp @@ -140,7 +140,7 @@ std::string getCanonicalTargetID(llvm::StringRef Processor, // For a specific processor, a feature either shows up in all target IDs, or // does not show up in any target IDs. Otherwise the target ID combination // is invalid. -llvm::Optional> +std::optional> getConflictTargetIDCombination(const std::set &TargetIDs) { struct Info { llvm::StringRef TargetID; diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index d01df7f..05cc68e 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -106,8 +106,8 @@ using namespace clang::driver; using namespace clang; using namespace llvm::opt; -static llvm::Optional -getOffloadTargetTriple(const Driver &D, const ArgList &Args) { +static std::optional getOffloadTargetTriple(const Driver &D, + const ArgList &Args) { auto OffloadTargets = Args.getAllArgValues(options::OPT_offload_EQ); // Offload compilation flow does not support multiple targets for now. We // need the HIPActionBuilder (and possibly the CudaActionBuilder{,Base}too) @@ -125,7 +125,7 @@ getOffloadTargetTriple(const Driver &D, const ArgList &Args) { return llvm::Triple(OffloadTargets[0]); } -static llvm::Optional +static std::optional getNVIDIAOffloadTargetTriple(const Driver &D, const ArgList &Args, const llvm::Triple &HostTriple) { if (!Args.hasArg(options::OPT_offload_EQ)) { @@ -143,7 +143,7 @@ getNVIDIAOffloadTargetTriple(const Driver &D, const ArgList &Args, D.Diag(diag::err_drv_invalid_or_unsupported_offload_target) << TT->str(); return std::nullopt; } -static llvm::Optional +static std::optional getHIPOffloadTargetTriple(const Driver &D, const ArgList &Args) { if (!Args.hasArg(options::OPT_offload_EQ)) { return llvm::Triple("amdgcn-amd-amdhsa"); // Default HIP triple. @@ -234,7 +234,7 @@ Driver::Driver(StringRef ClangExecutable, StringRef TargetTriple, void Driver::setDriverMode(StringRef Value) { static const std::string OptName = getOpts().getOption(options::OPT_driver_mode).getPrefixedName(); - if (auto M = llvm::StringSwitch>(Value) + if (auto M = llvm::StringSwitch>(Value) .Case("gcc", GCCMode) .Case("g++", GXXMode) .Case("cpp", CPPMode) @@ -2988,7 +2988,7 @@ class OffloadingActionBuilder final { /// option is invalid. virtual StringRef getCanonicalOffloadArch(StringRef Arch) = 0; - virtual llvm::Optional> + virtual std::optional> getConflictOffloadArchCombination(const std::set &GpuArchs) = 0; bool initialize() override { @@ -3125,7 +3125,7 @@ class OffloadingActionBuilder final { return CudaArchToString(Arch); } - llvm::Optional> + std::optional> getConflictOffloadArchCombination( const std::set &GpuArchs) override { return std::nullopt; @@ -3244,7 +3244,7 @@ class OffloadingActionBuilder final { // Bundle code objects except --no-gpu-output is specified for device // only compilation. Bundle other type of output files only if // --gpu-bundle-output is specified for device only compilation. - Optional BundleOutput; + std::optional BundleOutput; public: HIPActionBuilder(Compilation &C, DerivedArgList &Args, @@ -3275,7 +3275,7 @@ class OffloadingActionBuilder final { return Args.MakeArgStringRef(CanId); }; - llvm::Optional> + std::optional> getConflictOffloadArchCombination( const std::set &GpuArchs) override { return getConflictTargetIDCombination(GpuArchs); @@ -4207,7 +4207,7 @@ static StringRef getCanonicalArchString(Compilation &C, /// Checks if the set offloading architectures does not conflict. Returns the /// incompatible pair if a conflict occurs. -static llvm::Optional> +static std::optional> getConflictOffloadArchCombination(const llvm::DenseSet &Archs, Action::OffloadKind Kind) { if (Kind != Action::OFK_HIP) @@ -5710,7 +5710,7 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, std::string Driver::GetFilePath(StringRef Name, const ToolChain &TC) const { // Search for Name in a list of paths. auto SearchPaths = [&](const llvm::SmallVectorImpl &P) - -> llvm::Optional { + -> std::optional { // Respect a limited subset of the '-Bprefix' functionality in GCC by // attempting to use this prefix when looking for file paths. for (const auto &Dir : P) { diff --git a/clang/lib/Driver/OffloadBundler.cpp b/clang/lib/Driver/OffloadBundler.cpp index a21deef..46c4092 100644 --- a/clang/lib/Driver/OffloadBundler.cpp +++ b/clang/lib/Driver/OffloadBundler.cpp @@ -202,7 +202,7 @@ public: /// Read the marker of the next bundled to be read in the file. The bundle /// name is returned if there is one in the file, or `None` if there are no /// more bundles to be read. - virtual Expected> + virtual Expected> ReadBundleStart(MemoryBuffer &Input) = 0; /// Read the marker that closes the current bundle. @@ -245,7 +245,8 @@ public: Error forEachBundle(MemoryBuffer &Input, std::function Func) { while (true) { - Expected> CurTripleOrErr = ReadBundleStart(Input); + Expected> CurTripleOrErr = + ReadBundleStart(Input); if (!CurTripleOrErr) return CurTripleOrErr.takeError(); @@ -415,7 +416,8 @@ public: return Error::success(); } - Expected> ReadBundleStart(MemoryBuffer &Input) final { + Expected> + ReadBundleStart(MemoryBuffer &Input) final { if (NextBundleInfo == BundlesInfo.end()) return std::nullopt; CurBundleInfo = NextBundleInfo++; @@ -501,7 +503,7 @@ public: } // Creates temporary file with given contents. - Expected Create(Optional> Contents) { + Expected Create(std::optional> Contents) { SmallString<128u> File; if (std::error_code EC = sys::fs::createTemporaryFile("clang-offload-bundler", "tmp", File)) @@ -538,7 +540,8 @@ class ObjectFileHandler final : public FileHandler { /// Return bundle name (-) if the provided section is an offload /// section. - static Expected> IsOffloadSection(SectionRef CurSection) { + static Expected> + IsOffloadSection(SectionRef CurSection) { Expected NameOrErr = CurSection.getName(); if (!NameOrErr) return NameOrErr.takeError(); @@ -576,14 +579,15 @@ public: Error ReadHeader(MemoryBuffer &Input) final { return Error::success(); } - Expected> ReadBundleStart(MemoryBuffer &Input) final { + Expected> + ReadBundleStart(MemoryBuffer &Input) final { while (NextSection != Obj->section_end()) { CurrentSection = NextSection; ++NextSection; // Check if the current section name starts with the reserved prefix. If // so, return the triple. - Expected> TripleOrErr = + Expected> TripleOrErr = IsOffloadSection(*CurrentSection); if (!TripleOrErr) return TripleOrErr.takeError(); @@ -733,7 +737,8 @@ class TextFileHandler final : public FileHandler { protected: Error ReadHeader(MemoryBuffer &Input) final { return Error::success(); } - Expected> ReadBundleStart(MemoryBuffer &Input) final { + Expected> + ReadBundleStart(MemoryBuffer &Input) final { StringRef FC = Input.getBuffer(); // Find start of the bundle. @@ -989,7 +994,8 @@ Error OffloadBundler::UnbundleFiles() { // assume the file is meant for the host target. bool FoundHostBundle = false; while (!Worklist.empty()) { - Expected> CurTripleOrErr = FH->ReadBundleStart(Input); + Expected> CurTripleOrErr = + FH->ReadBundleStart(Input); if (!CurTripleOrErr) return CurTripleOrErr.takeError(); @@ -1180,12 +1186,12 @@ Error OffloadBundler::UnbundleArchive() { if (Error ReadErr = FileHandler.get()->ReadHeader(*CodeObjectBuffer)) return ReadErr; - Expected> CurBundleIDOrErr = + Expected> CurBundleIDOrErr = FileHandler->ReadBundleStart(*CodeObjectBuffer); if (!CurBundleIDOrErr) return CurBundleIDOrErr.takeError(); - Optional OptionalCurBundleID = *CurBundleIDOrErr; + std::optional OptionalCurBundleID = *CurBundleIDOrErr; // No device code in this child, skip. if (!OptionalCurBundleID) continue; @@ -1245,7 +1251,7 @@ Error OffloadBundler::UnbundleArchive() { if (Error Err = FileHandler.get()->ReadBundleEnd(*CodeObjectBuffer)) return Err; - Expected> NextTripleOrErr = + Expected> NextTripleOrErr = FileHandler->ReadBundleStart(*CodeObjectBuffer); if (!NextTripleOrErr) return NextTripleOrErr.takeError(); diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h index ddcc124..0ac13ec 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.h +++ b/clang/lib/Driver/ToolChains/AMDGPU.h @@ -113,9 +113,9 @@ protected: /// The struct type returned by getParsedTargetID. struct ParsedTargetIDType { - Optional OptionalTargetID; - Optional OptionalGPUArch; - Optional> OptionalFeatures; + std::optional OptionalTargetID; + std::optional OptionalGPUArch; + std::optional> OptionalFeatures; }; /// Get target ID, GPU arch, and target ID features if the target ID is diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp index dad8669d..feee3d0 100644 --- a/clang/lib/Driver/ToolChains/AVR.cpp +++ b/clang/lib/Driver/ToolChains/AVR.cpp @@ -341,17 +341,17 @@ std::string GetMCUSubPath(StringRef MCUName) { return ""; } -llvm::Optional GetMCUFamilyName(StringRef MCUName) { +std::optional GetMCUFamilyName(StringRef MCUName) { for (const auto &MCU : MCUInfo) if (MCU.Name == MCUName) - return Optional(MCU.Family); + return std::optional(MCU.Family); return std::nullopt; } -llvm::Optional GetMCUSectionAddressData(StringRef MCUName) { +std::optional GetMCUSectionAddressData(StringRef MCUName) { for (const auto &MCU : MCUInfo) if (MCU.Name == MCUName && MCU.DataAddr > 0) - return Optional(MCU.DataAddr); + return std::optional(MCU.DataAddr); return std::nullopt; } @@ -388,7 +388,7 @@ void AVRToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs, return; // Omit if there is no avr-libc installed. - Optional AVRLibcRoot = findAVRLibcInstallation(); + std::optional AVRLibcRoot = findAVRLibcInstallation(); if (!AVRLibcRoot) return; @@ -443,9 +443,9 @@ void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, // Compute information about the target AVR. std::string CPU = getCPUName(D, Args, getToolChain().getTriple()); - llvm::Optional FamilyName = GetMCUFamilyName(CPU); - llvm::Optional AVRLibcRoot = TC.findAVRLibcInstallation(); - llvm::Optional SectionAddressData = GetMCUSectionAddressData(CPU); + std::optional FamilyName = GetMCUFamilyName(CPU); + std::optional AVRLibcRoot = TC.findAVRLibcInstallation(); + std::optional SectionAddressData = GetMCUSectionAddressData(CPU); // Compute the linker program path, and use GNU "avr-ld" as default. const Arg *A = Args.getLastArg(options::OPT_fuse_ld_EQ); @@ -562,7 +562,7 @@ void AVR::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs, Inputs, Output)); } -llvm::Optional AVRToolChain::findAVRLibcInstallation() const { +std::optional AVRToolChain::findAVRLibcInstallation() const { // Search avr-libc installation according to avr-gcc installation. std::string GCCParent(GCCInstallation.getParentLibPath()); std::string Path(GCCParent + "/avr"); diff --git a/clang/lib/Driver/ToolChains/AVR.h b/clang/lib/Driver/ToolChains/AVR.h index cd2bbee..ea161fe 100644 --- a/clang/lib/Driver/ToolChains/AVR.h +++ b/clang/lib/Driver/ToolChains/AVR.h @@ -31,7 +31,7 @@ public: llvm::opt::ArgStringList &CC1Args, Action::OffloadKind DeviceOffloadKind) const override; - llvm::Optional findAVRLibcInstallation() const; + std::optional findAVRLibcInstallation() const; StringRef getGCCInstallPath() const { return GCCInstallPath; } std::string getCompilerRT(const llvm::opt::ArgList &Args, StringRef Component, FileType Type) const override; diff --git a/clang/lib/Driver/ToolChains/Arch/ARM.cpp b/clang/lib/Driver/ToolChains/Arch/ARM.cpp index bbf466b..b6a9df28 100644 --- a/clang/lib/Driver/ToolChains/Arch/ARM.cpp +++ b/clang/lib/Driver/ToolChains/Arch/ARM.cpp @@ -442,8 +442,7 @@ void arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, bool KernelOrKext = Args.hasArg(options::OPT_mkernel, options::OPT_fapple_kext); arm::FloatABI ABI = arm::getARMFloatABI(D, Triple, Args); - llvm::Optional> WaCPU, WaFPU, WaHDiv, - WaArch; + std::optional> WaCPU, WaFPU, WaHDiv, WaArch; // This vector will accumulate features from the architecture // extension suffixes on -mcpu and -march (e.g. the 'bar' in diff --git a/clang/lib/Driver/ToolChains/Arch/CSKY.cpp b/clang/lib/Driver/ToolChains/Arch/CSKY.cpp index b6e50ee..94c8406 100644 --- a/clang/lib/Driver/ToolChains/Arch/CSKY.cpp +++ b/clang/lib/Driver/ToolChains/Arch/CSKY.cpp @@ -25,7 +25,7 @@ using namespace clang::driver::tools; using namespace clang; using namespace llvm::opt; -llvm::Optional +std::optional csky::getCSKYArchName(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) { if (const Arg *A = Args.getLastArg(options::OPT_march_EQ)) { @@ -35,7 +35,7 @@ csky::getCSKYArchName(const Driver &D, const ArgList &Args, D.Diag(clang::diag::err_drv_invalid_arch_name) << A->getAsString(Args); return std::nullopt; } - return llvm::Optional(A->getValue()); + return std::optional(A->getValue()); } if (const Arg *A = Args.getLastArg(clang::driver::options::OPT_mcpu_EQ)) { @@ -44,10 +44,10 @@ csky::getCSKYArchName(const Driver &D, const ArgList &Args, D.Diag(clang::diag::err_drv_clang_unsupported) << A->getAsString(Args); return std::nullopt; } - return llvm::Optional(llvm::CSKY::getArchName(ArchKind)); + return std::optional(llvm::CSKY::getArchName(ArchKind)); } - return llvm::Optional("ck810"); + return std::optional("ck810"); } csky::FloatABI csky::getCSKYFloatABI(const Driver &D, const ArgList &Args) { diff --git a/clang/lib/Driver/ToolChains/Arch/CSKY.h b/clang/lib/Driver/ToolChains/Arch/CSKY.h index d23da1d..f3730d2 100644 --- a/clang/lib/Driver/ToolChains/Arch/CSKY.h +++ b/clang/lib/Driver/ToolChains/Arch/CSKY.h @@ -35,9 +35,9 @@ void getCSKYTargetFeatures(const Driver &D, const llvm::Triple &Triple, llvm::opt::ArgStringList &CmdArgs, std::vector &Features); -llvm::Optional getCSKYArchName(const Driver &D, - const llvm::opt::ArgList &Args, - const llvm::Triple &Triple); +std::optional getCSKYArchName(const Driver &D, + const llvm::opt::ArgList &Args, + const llvm::Triple &Triple); } // end namespace csky } // namespace tools diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index 0f69369..f4bcb73 100644 --- a/clang/lib/Driver/ToolChains/Cuda.cpp +++ b/clang/lib/Driver/ToolChains/Cuda.cpp @@ -81,7 +81,7 @@ CudaVersion parseCudaHFile(llvm::StringRef Input) { // None otherwise. auto StartsWithWords = [](llvm::StringRef Line, - const SmallVector words) -> llvm::Optional { + const SmallVector words) -> std::optional { for (StringRef word : words) { if (!Line.consume_front(word)) return {}; diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index 5d536b8..f77a512 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -1555,7 +1555,7 @@ struct DarwinPlatform { /// Returns true if the simulator environment can be inferred from the arch. bool canInferSimulatorFromArch() const { return InferSimulatorFromArch; } - const Optional &getTargetVariantTriple() const { + const std::optional &getTargetVariantTriple() const { return TargetVariantTriple; } @@ -1606,7 +1606,7 @@ struct DarwinPlatform { void setEnvironment(llvm::Triple::EnvironmentType EnvType, const VersionTuple &OSVersion, - const Optional &SDKInfo) { + const std::optional &SDKInfo) { switch (EnvType) { case llvm::Triple::Simulator: Environment = DarwinEnvironmentKind::Simulator; @@ -1643,8 +1643,8 @@ struct DarwinPlatform { static DarwinPlatform createFromTarget(const llvm::Triple &TT, StringRef OSVersion, Arg *A, - Optional TargetVariantTriple, - const Optional &SDKInfo) { + std::optional TargetVariantTriple, + const std::optional &SDKInfo) { DarwinPlatform Result(TargetArg, getPlatformFromOS(TT.getOS()), OSVersion, A); VersionTuple OsVersion = TT.getOSVersion(); @@ -1657,7 +1657,7 @@ struct DarwinPlatform { static DarwinPlatform createFromMTargetOS(llvm::Triple::OSType OS, VersionTuple OSVersion, llvm::Triple::EnvironmentType Environment, Arg *A, - const Optional &SDKInfo) { + const std::optional &SDKInfo) { DarwinPlatform Result(MTargetOSArg, getPlatformFromOS(OS), OSVersion.getAsString(), A); Result.InferSimulatorFromArch = false; @@ -1739,12 +1739,12 @@ private: bool HasOSVersion = true, InferSimulatorFromArch = true; Arg *Argument; StringRef EnvVarName; - Optional TargetVariantTriple; + std::optional TargetVariantTriple; }; /// Returns the deployment target that's specified using the -m-version-min /// argument. -Optional +std::optional getDeploymentTargetFromOSVersionArg(DerivedArgList &Args, const Driver &TheDriver) { Arg *macOSVersion = Args.getLastArg(options::OPT_mmacos_version_min_EQ); @@ -1796,7 +1796,7 @@ getDeploymentTargetFromOSVersionArg(DerivedArgList &Args, /// Returns the deployment target that's specified using the /// OS_DEPLOYMENT_TARGET environment variable. -Optional +std::optional getDeploymentTargetFromEnvironmentVariables(const Driver &TheDriver, const llvm::Triple &Triple) { std::string Targets[Darwin::LastDarwinPlatform + 1]; @@ -1861,9 +1861,9 @@ static StringRef dropSDKNamePrefix(StringRef SDKName) { /// Tries to infer the deployment target from the SDK specified by -isysroot /// (or SDKROOT). Uses the version specified in the SDKSettings.json file if /// it's available. -Optional +std::optional inferDeploymentTargetFromSDK(DerivedArgList &Args, - const Optional &SDKInfo) { + const std::optional &SDKInfo) { const Arg *A = Args.getLastArg(options::OPT_isysroot); if (!A) return std::nullopt; @@ -1888,7 +1888,7 @@ inferDeploymentTargetFromSDK(DerivedArgList &Args, return std::nullopt; auto CreatePlatformFromSDKName = - [&](StringRef SDK) -> Optional { + [&](StringRef SDK) -> std::optional { if (SDK.startswith("iPhoneOS") || SDK.startswith("iPhoneSimulator")) return DarwinPlatform::createFromSDK( Darwin::IPhoneOS, Version, @@ -1958,7 +1958,7 @@ std::string getOSVersion(llvm::Triple::OSType OS, const llvm::Triple &Triple, } /// Tries to infer the target OS from the -arch. -Optional +std::optional inferDeploymentTargetFromArch(DerivedArgList &Args, const Darwin &Toolchain, const llvm::Triple &Triple, const Driver &TheDriver) { @@ -1981,16 +1981,16 @@ inferDeploymentTargetFromArch(DerivedArgList &Args, const Darwin &Toolchain, } /// Returns the deployment target that's specified using the -target option. -Optional getDeploymentTargetFromTargetArg( +std::optional getDeploymentTargetFromTargetArg( DerivedArgList &Args, const llvm::Triple &Triple, const Driver &TheDriver, - const Optional &SDKInfo) { + const std::optional &SDKInfo) { if (!Args.hasArg(options::OPT_target)) return std::nullopt; if (Triple.getOS() == llvm::Triple::Darwin || Triple.getOS() == llvm::Triple::UnknownOS) return std::nullopt; std::string OSVersion = getOSVersion(Triple.getOS(), Triple, TheDriver); - Optional TargetVariantTriple; + std::optional TargetVariantTriple; for (const Arg *A : Args.filtered(options::OPT_darwin_target_variant)) { llvm::Triple TVT(A->getValue()); // Find a matching - target variant triple that can be used. @@ -2021,10 +2021,9 @@ Optional getDeploymentTargetFromTargetArg( } /// Returns the deployment target that's specified using the -mtargetos option. -Optional -getDeploymentTargetFromMTargetOSArg(DerivedArgList &Args, - const Driver &TheDriver, - const Optional &SDKInfo) { +std::optional getDeploymentTargetFromMTargetOSArg( + DerivedArgList &Args, const Driver &TheDriver, + const std::optional &SDKInfo) { auto *A = Args.getLastArg(options::OPT_mtargetos_EQ); if (!A) return std::nullopt; @@ -2051,9 +2050,9 @@ getDeploymentTargetFromMTargetOSArg(DerivedArgList &Args, TT.getEnvironment(), A, SDKInfo); } -Optional parseSDKSettings(llvm::vfs::FileSystem &VFS, - const ArgList &Args, - const Driver &TheDriver) { +std::optional parseSDKSettings(llvm::vfs::FileSystem &VFS, + const ArgList &Args, + const Driver &TheDriver) { const Arg *A = Args.getLastArg(options::OPT_isysroot); if (!A) return std::nullopt; @@ -2096,7 +2095,7 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const { SDKInfo = parseSDKSettings(getVFS(), Args, getDriver()); // The OS and the version can be specified using the -target argument. - Optional OSTarget = + std::optional OSTarget = getDeploymentTargetFromTargetArg(Args, getTriple(), getDriver(), SDKInfo); if (OSTarget) { // Disallow mixing -target and -mtargetos=. @@ -2106,7 +2105,7 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const { getDriver().Diag(diag::err_drv_cannot_mix_options) << TargetArgStr << MTargetOSArgStr; } - Optional OSVersionArgTarget = + std::optional OSVersionArgTarget = getDeploymentTargetFromOSVersionArg(Args, getDriver()); if (OSVersionArgTarget) { unsigned TargetMajor, TargetMinor, TargetMicro; @@ -2141,7 +2140,7 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const { SDKInfo))) { // The OS target can be specified using the -mtargetos= argument. // Disallow mixing -mtargetos= and -mversion-min=. - Optional OSVersionArgTarget = + std::optional OSVersionArgTarget = getDeploymentTargetFromOSVersionArg(Args, getDriver()); if (OSVersionArgTarget) { std::string MTargetOSArgStr = OSTarget->getAsString(Args, Opts); @@ -2159,7 +2158,7 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const { getDeploymentTargetFromEnvironmentVariables(getDriver(), getTriple()); if (OSTarget) { // Don't infer simulator from the arch when the SDK is also specified. - Optional SDKTarget = + std::optional SDKTarget = inferDeploymentTargetFromSDK(Args, SDKInfo); if (SDKTarget) OSTarget->setEnvironment(SDKTarget->getEnvironment()); @@ -2829,7 +2828,7 @@ void Darwin::addClangCC1ASTargetOptions( if (isTargetMacCatalyst()) { if (const auto *MacOStoMacCatalystMapping = SDKInfo->getVersionMapping( DarwinSDKInfo::OSEnvPair::macOStoMacCatalystPair())) { - Optional SDKVersion = MacOStoMacCatalystMapping->map( + std::optional SDKVersion = MacOStoMacCatalystMapping->map( SDKInfo->getVersion(), minimumMacCatalystDeploymentTarget(), std::nullopt); EmitTargetSDKVersionArg( @@ -2850,9 +2849,10 @@ void Darwin::addClangCC1ASTargetOptions( } else if (const auto *MacOStoMacCatalystMapping = SDKInfo->getVersionMapping( DarwinSDKInfo::OSEnvPair::macOStoMacCatalystPair())) { - if (Optional SDKVersion = MacOStoMacCatalystMapping->map( - SDKInfo->getVersion(), minimumMacCatalystDeploymentTarget(), - std::nullopt)) { + if (std::optional SDKVersion = + MacOStoMacCatalystMapping->map( + SDKInfo->getVersion(), minimumMacCatalystDeploymentTarget(), + std::nullopt)) { std::string Arg; llvm::raw_string_ostream OS(Arg); OS << "-darwin-target-variant-sdk-version=" << *SDKVersion; @@ -3091,7 +3091,7 @@ void Darwin::addPlatformVersionArgs(const llvm::opt::ArgList &Args, if (TargetPlatform == IPhoneOS && TargetEnvironment == MacCatalyst) { // Mac Catalyst programs must use the appropriate iOS SDK version // that corresponds to the macOS SDK version used for the compilation. - Optional iOSSDKVersion; + std::optional iOSSDKVersion; if (SDKInfo) { if (const auto *MacOStoMacCatalystMapping = SDKInfo->getVersionMapping( diff --git a/clang/lib/Driver/ToolChains/Darwin.h b/clang/lib/Driver/ToolChains/Darwin.h index ecf8b87..f64e718 100644 --- a/clang/lib/Driver/ToolChains/Darwin.h +++ b/clang/lib/Driver/ToolChains/Darwin.h @@ -148,7 +148,7 @@ private: mutable std::unique_ptr VerifyDebug; /// The version of the linker known to be available in the tool chain. - mutable Optional LinkerVersion; + mutable std::optional LinkerVersion; public: MachO(const Driver &D, const llvm::Triple &Triple, @@ -318,10 +318,10 @@ public: mutable VersionTuple OSTargetVersion; /// The information about the darwin SDK that was used. - mutable Optional SDKInfo; + mutable std::optional SDKInfo; /// The target variant triple that was specified (if any). - mutable Optional TargetVariantTriple; + mutable std::optional TargetVariantTriple; CudaInstallationDetector CudaInstallation; RocmInstallationDetector RocmInstallation; diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index 8236451..4621850 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -1623,7 +1623,8 @@ static void findCSKYMultilibs(const Driver &D, const llvm::Triple &TargetTriple, FilterNonExistent NonExistent(Path, "/crtbegin.o", D.getVFS()); tools::csky::FloatABI TheFloatABI = tools::csky::getCSKYFloatABI(D, Args); - llvm::Optional Res = tools::csky::getCSKYArchName(D, Args, TargetTriple); + std::optional Res = + tools::csky::getCSKYArchName(D, Args, TargetTriple); if (!Res) return; diff --git a/clang/lib/Driver/ToolChains/Gnu.h b/clang/lib/Driver/ToolChains/Gnu.h index 7199e0b..b861072 100644 --- a/clang/lib/Driver/ToolChains/Gnu.h +++ b/clang/lib/Driver/ToolChains/Gnu.h @@ -27,7 +27,7 @@ struct DetectedMultilibs { /// On Biarch systems, this corresponds to the default multilib when /// targeting the non-default multilib. Otherwise, it is empty. - llvm::Optional BiarchSibling; + std::optional BiarchSibling; }; bool findMIPSMultilibs(const Driver &D, const llvm::Triple &TargetTriple, @@ -201,7 +201,7 @@ public: Multilib SelectedMultilib; /// On Biarch systems, this corresponds to the default multilib when /// targeting the non-default multilib. Otherwise, it is empty. - llvm::Optional BiarchSibling; + std::optional BiarchSibling; GCCVersion Version; diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index a3ad9ba..1741461 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -64,7 +64,7 @@ bool isLegalShaderModel(Triple &T) { return false; } -llvm::Optional tryParseProfile(StringRef Profile) { +std::optional tryParseProfile(StringRef Profile) { // [ps|vs|gs|hs|ds|cs|ms|as]_[major]_[minor] SmallVector Parts; Profile.split(Parts, "_"); @@ -138,7 +138,7 @@ HLSLToolChain::HLSLToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) : ToolChain(D, Triple, Args) {} -llvm::Optional +std::optional clang::driver::toolchains::HLSLToolChain::parseTargetProfile( StringRef TargetProfile) { return tryParseProfile(TargetProfile); diff --git a/clang/lib/Driver/ToolChains/HLSL.h b/clang/lib/Driver/ToolChains/HLSL.h index 5573b0c..47eefdc 100644 --- a/clang/lib/Driver/ToolChains/HLSL.h +++ b/clang/lib/Driver/ToolChains/HLSL.h @@ -29,8 +29,7 @@ public: llvm::opt::DerivedArgList * TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch, Action::OffloadKind DeviceOffloadKind) const override; - static llvm::Optional - parseTargetProfile(StringRef TargetProfile); + static std::optional parseTargetProfile(StringRef TargetProfile); }; } // end namespace toolchains diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp index ba5d468..86c3450 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.cpp +++ b/clang/lib/Driver/ToolChains/Hexagon.cpp @@ -120,9 +120,10 @@ static void handleHVXTargetFeatures(const Driver &D, const ArgList &Args, HvxVerNum = 0; // Handle HVX floating point flags. - auto checkFlagHvxVersion = [&](auto FlagOn, auto FlagOff, - unsigned MinVerNum) -> Optional { - // Return an Optional: + auto checkFlagHvxVersion = + [&](auto FlagOn, auto FlagOff, + unsigned MinVerNum) -> std::optional { + // Return an std::optional: // - None indicates a verification failure, or that the flag was not // present in Args. // - Otherwise the returned value is that name of the feature to add @@ -519,8 +520,8 @@ std::string HexagonToolChain::getHexagonTargetDir( return InstalledDir; } -Optional HexagonToolChain::getSmallDataThreshold( - const ArgList &Args) { +std::optional +HexagonToolChain::getSmallDataThreshold(const ArgList &Args) { StringRef Gn = ""; if (Arg *A = Args.getLastArg(options::OPT_G)) { Gn = A->getValue(); diff --git a/clang/lib/Driver/ToolChains/Hexagon.h b/clang/lib/Driver/ToolChains/Hexagon.h index c742012..47a3304 100644 --- a/clang/lib/Driver/ToolChains/Hexagon.h +++ b/clang/lib/Driver/ToolChains/Hexagon.h @@ -107,8 +107,8 @@ public: static StringRef GetDefaultCPU(); static StringRef GetTargetCPUVersion(const llvm::opt::ArgList &Args); - static Optional getSmallDataThreshold( - const llvm::opt::ArgList &Args); + static std::optional + getSmallDataThreshold(const llvm::opt::ArgList &Args); }; } // end namespace toolchains diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp index 7e549bf..8ad67ca 100644 --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -410,7 +410,7 @@ MSVCToolChain::MSVCToolChain(const Driver &D, const llvm::Triple &Triple, if (getDriver().getInstalledDir() != getDriver().Dir) getProgramPaths().push_back(getDriver().Dir); - Optional VCToolsDir, VCToolsVersion; + std::optional VCToolsDir, VCToolsVersion; if (Arg *A = Args.getLastArg(options::OPT__SLASH_vctoolsdir)) VCToolsDir = A->getValue(); if (Arg *A = Args.getLastArg(options::OPT__SLASH_vctoolsversion)) diff --git a/clang/lib/Driver/ToolChains/MSVC.h b/clang/lib/Driver/ToolChains/MSVC.h index a3e94db..2826ee6 100644 --- a/clang/lib/Driver/ToolChains/MSVC.h +++ b/clang/lib/Driver/ToolChains/MSVC.h @@ -133,7 +133,7 @@ protected: Tool *buildLinker() const override; Tool *buildAssembler() const override; private: - llvm::Optional WinSdkDir, WinSdkVersion, WinSysRoot; + std::optional WinSdkDir, WinSdkVersion, WinSysRoot; std::string VCToolChainPath; llvm::ToolsetLayout VSLayout = llvm::ToolsetLayout::OlderVS; CudaInstallationDetector CudaInstallation; diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 4615383..4032e96 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -2795,7 +2795,7 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) { // attributes that are inferred from 'ios'. NewII = &S.Context.Idents.get("maccatalyst"); auto RemapMacOSVersion = - [&](const VersionTuple &V) -> Optional { + [&](const VersionTuple &V) -> std::optional { if (V.empty()) return std::nullopt; // API_TO_BE_DEPRECATED is 100000. @@ -2805,15 +2805,15 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) { return MacOStoMacCatalystMapping->map(V, VersionTuple(13, 1), std::nullopt); }; - Optional NewIntroduced = - RemapMacOSVersion(Introduced.Version), - NewDeprecated = - RemapMacOSVersion(Deprecated.Version), - NewObsoleted = - RemapMacOSVersion(Obsoleted.Version); + std::optional NewIntroduced = + RemapMacOSVersion(Introduced.Version), + NewDeprecated = + RemapMacOSVersion(Deprecated.Version), + NewObsoleted = + RemapMacOSVersion(Obsoleted.Version); if (NewIntroduced || NewDeprecated || NewObsoleted) { auto VersionOrEmptyVersion = - [](const Optional &V) -> VersionTuple { + [](const std::optional &V) -> VersionTuple { return V ? *V : VersionTuple(); }; AvailabilityAttr *NewAttr = S.mergeAvailabilityAttr( diff --git a/llvm/include/llvm/WindowsDriver/MSVCPaths.h b/llvm/include/llvm/WindowsDriver/MSVCPaths.h index 66c93cd..414e096 100644 --- a/llvm/include/llvm/WindowsDriver/MSVCPaths.h +++ b/llvm/include/llvm/WindowsDriver/MSVCPaths.h @@ -13,6 +13,7 @@ #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/Triple.h" +#include #include namespace llvm { @@ -65,25 +66,24 @@ bool useUniversalCRT(ToolsetLayout VSLayout, const std::string &VCToolChainPath, /// Get Windows SDK installation directory. bool getWindowsSDKDir(vfs::FileSystem &VFS, - llvm::Optional WinSdkDir, - llvm::Optional WinSdkVersion, - llvm::Optional WinSysRoot, + std::optional WinSdkDir, + std::optional WinSdkVersion, + std::optional WinSysRoot, std::string &Path, int &Major, std::string &WindowsSDKIncludeVersion, std::string &WindowsSDKLibVersion); bool getUniversalCRTSdkDir(vfs::FileSystem &VFS, - llvm::Optional WinSdkDir, - llvm::Optional WinSdkVersion, - llvm::Optional WinSysRoot, - std::string &Path, - std::string &UCRTVersion); + std::optional WinSdkDir, + std::optional WinSdkVersion, + std::optional WinSysRoot, + std::string &Path, std::string &UCRTVersion); // Check command line arguments to try and find a toolchain. bool findVCToolChainViaCommandLine( - vfs::FileSystem &VFS, llvm::Optional VCToolsDir, - llvm::Optional VCToolsVersion, - llvm::Optional WinSysRoot, std::string &Path, + vfs::FileSystem &VFS, std::optional VCToolsDir, + std::optional VCToolsVersion, + std::optional WinSysRoot, std::string &Path, ToolsetLayout &VSLayout); // Check various environment variables to try and find a toolchain. diff --git a/llvm/lib/WindowsDriver/MSVCPaths.cpp b/llvm/lib/WindowsDriver/MSVCPaths.cpp index 0661ed7..36a6096 100644 --- a/llvm/lib/WindowsDriver/MSVCPaths.cpp +++ b/llvm/lib/WindowsDriver/MSVCPaths.cpp @@ -94,9 +94,9 @@ static bool getWindows10SDKVersionFromPath(llvm::vfs::FileSystem &VFS, } static bool getWindowsSDKDirViaCommandLine( - llvm::vfs::FileSystem &VFS, llvm::Optional WinSdkDir, - llvm::Optional WinSdkVersion, - llvm::Optional WinSysRoot, std::string &Path, int &Major, + llvm::vfs::FileSystem &VFS, std::optional WinSdkDir, + std::optional WinSdkVersion, + std::optional WinSysRoot, std::string &Path, int &Major, std::string &Version) { if (WinSdkDir || WinSysRoot) { // Don't validate the input; trust the value supplied by the user. @@ -393,9 +393,9 @@ bool useUniversalCRT(ToolsetLayout VSLayout, const std::string &VCToolChainPath, return !VFS.exists(TestPath); } -bool getWindowsSDKDir(vfs::FileSystem &VFS, Optional WinSdkDir, - Optional WinSdkVersion, - Optional WinSysRoot, std::string &Path, +bool getWindowsSDKDir(vfs::FileSystem &VFS, std::optional WinSdkDir, + std::optional WinSdkVersion, + std::optional WinSysRoot, std::string &Path, int &Major, std::string &WindowsSDKIncludeVersion, std::string &WindowsSDKLibVersion) { // Trust /winsdkdir and /winsdkversion if present. @@ -448,10 +448,11 @@ bool getWindowsSDKDir(vfs::FileSystem &VFS, Optional WinSdkDir, return false; } -bool getUniversalCRTSdkDir(vfs::FileSystem &VFS, Optional WinSdkDir, - Optional WinSdkVersion, - Optional WinSysRoot, std::string &Path, - std::string &UCRTVersion) { +bool getUniversalCRTSdkDir(vfs::FileSystem &VFS, + std::optional WinSdkDir, + std::optional WinSdkVersion, + std::optional WinSysRoot, + std::string &Path, std::string &UCRTVersion) { // If /winsdkdir is passed, use it as location for the UCRT too. // FIXME: Should there be a dedicated /ucrtdir to override /winsdkdir? int Major; @@ -473,9 +474,9 @@ bool getUniversalCRTSdkDir(vfs::FileSystem &VFS, Optional WinSdkDir, } bool findVCToolChainViaCommandLine(vfs::FileSystem &VFS, - Optional VCToolsDir, - Optional VCToolsVersion, - Optional WinSysRoot, + std::optional VCToolsDir, + std::optional VCToolsVersion, + std::optional WinSysRoot, std::string &Path, ToolsetLayout &VSLayout) { // Don't validate the input; trust the value supplied by the user. // The primary motivation is to prevent unnecessary file and registry access. -- 2.7.4