https://github.com/kraj updated https://github.com/llvm/llvm-project/pull/174528
>From 73e4871f745f13a87dddd061ff7d48eca822f754 Mon Sep 17 00:00:00 2001 From: Khem Raj <[email protected]> Date: Mon, 5 Jan 2026 18:30:54 -0800 Subject: [PATCH] [Clang] Rename UNUSED and UNKNOWN elements of OffloadArch enum to avoid macro collisions OffloadArch uses enumerator named `UNUSED` `UNKNOWN`, which are common macro name in external codebases (e.g. Mesa defines UNUSED as an attribute helper). If such a macro is visible when including clang/Basic/OffloadArch.h, the preprocessor expands the token inside the enum and breaks compilation of the installed Clang headers. Rename the enumerator to `Unused` and `Unknown` and update all in-tree references. This is a spelling-only change (no behavioral impact) and mirrors the existing approach used for SM_32_ to avoid macro clashes. --- clang/include/clang/Basic/OffloadArch.h | 6 +++--- clang/lib/Basic/Cuda.cpp | 4 ++-- clang/lib/Basic/OffloadArch.cpp | 4 ++-- clang/lib/Basic/Targets/NVPTX.cpp | 5 +++-- clang/lib/Basic/Targets/NVPTX.h | 6 +++--- clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp | 10 +++++----- clang/lib/Driver/Driver.cpp | 14 +++++++------- clang/lib/Driver/OffloadBundler.cpp | 2 +- clang/lib/Driver/ToolChains/Cuda.cpp | 4 ++-- clang/lib/Sema/SemaDeclAttr.cpp | 2 +- 10 files changed, 29 insertions(+), 28 deletions(-) diff --git a/clang/include/clang/Basic/OffloadArch.h b/clang/include/clang/Basic/OffloadArch.h index ea665b1f49e08..970487c973772 100644 --- a/clang/include/clang/Basic/OffloadArch.h +++ b/clang/include/clang/Basic/OffloadArch.h @@ -16,8 +16,8 @@ class StringRef; namespace clang { enum class OffloadArch { - UNUSED, - UNKNOWN, + Unused, + Unknown, // TODO: Deprecate and remove GPU architectures older than sm_52. SM_20, SM_21, @@ -145,7 +145,7 @@ const char *OffloadArchToString(OffloadArch A); const char *OffloadArchToVirtualArchString(OffloadArch A); // Convert a string to an OffloadArch enum value. Returns -// OffloadArch::UNKNOWN if the string is not recognized. +// OffloadArch::Unknown if the string is not recognized. OffloadArch StringToOffloadArch(llvm::StringRef S); } // namespace clang diff --git a/clang/lib/Basic/Cuda.cpp b/clang/lib/Basic/Cuda.cpp index 514fa2f2a4ca7..7884910ffbc76 100644 --- a/clang/lib/Basic/Cuda.cpp +++ b/clang/lib/Basic/Cuda.cpp @@ -75,7 +75,7 @@ CudaVersion ToCudaVersion(llvm::VersionTuple Version) { } CudaVersion MinVersionForOffloadArch(OffloadArch A) { - if (A == OffloadArch::UNKNOWN) + if (A == OffloadArch::Unknown) return CudaVersion::UNKNOWN; // AMD GPUs do not depend on CUDA versions. @@ -141,7 +141,7 @@ CudaVersion MaxVersionForOffloadArch(OffloadArch A) { return CudaVersion::NEW; switch (A) { - case OffloadArch::UNKNOWN: + case OffloadArch::Unknown: return CudaVersion::UNKNOWN; case OffloadArch::SM_20: case OffloadArch::SM_21: diff --git a/clang/lib/Basic/OffloadArch.cpp b/clang/lib/Basic/OffloadArch.cpp index 05177f1c58038..f3bbe64bad96b 100644 --- a/clang/lib/Basic/OffloadArch.cpp +++ b/clang/lib/Basic/OffloadArch.cpp @@ -17,7 +17,7 @@ struct OffloadArchToStringMap { #define GFX(gpu) {OffloadArch::GFX##gpu, "gfx" #gpu, "compute_amdgcn"} static const OffloadArchToStringMap ArchNames[] = { // clang-format off - {OffloadArch::UNUSED, "", ""}, + {OffloadArch::Unused, "", ""}, SM(20), {OffloadArch::SM_21, "sm_21", "compute_20"}, // Fermi SM(30), {OffloadArch::SM_32_, "sm_32", "compute_32"}, SM(35), SM(37), // Kepler SM(50), SM(52), SM(53), // Maxwell @@ -132,7 +132,7 @@ OffloadArch StringToOffloadArch(llvm::StringRef S) { return S == Map.ArchName; }); if (Result == std::end(ArchNames)) - return OffloadArch::UNKNOWN; + return OffloadArch::Unknown; return Result->Arch; } diff --git a/clang/lib/Basic/Targets/NVPTX.cpp b/clang/lib/Basic/Targets/NVPTX.cpp index dec076ac54f41..ca043a9cf444b 100644 --- a/clang/lib/Basic/Targets/NVPTX.cpp +++ b/clang/lib/Basic/Targets/NVPTX.cpp @@ -62,7 +62,7 @@ NVPTXTargetInfo::NVPTXTargetInfo(const llvm::Triple &Triple, // Define available target features // These must be defined in sorted order! NoAsmVariants = true; - GPU = OffloadArch::UNUSED; + GPU = OffloadArch::Unused; // PTX supports f16 as a fundamental type. HasFastHalfType = true; @@ -175,7 +175,8 @@ void NVPTXTargetInfo::getTargetDefines(const LangOptions &Opts, // Skip setting architecture dependent macros if undefined. if (!IsNVIDIAOffloadArch(GPU)) - return; + if (GPU == OffloadArch::Unused && !HostTarget) + return; if (Opts.CUDAIsDevice || Opts.OpenMPIsTargetDevice || !HostTarget) { // Set __CUDA_ARCH__ for the GPU specified. diff --git a/clang/lib/Basic/Targets/NVPTX.h b/clang/lib/Basic/Targets/NVPTX.h index 6338a4f2f9036..8455fa5ab43a2 100644 --- a/clang/lib/Basic/Targets/NVPTX.h +++ b/clang/lib/Basic/Targets/NVPTX.h @@ -87,7 +87,7 @@ class LLVM_LIBRARY_VISIBILITY NVPTXTargetInfo : public TargetInfo { initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const override { - if (GPU != OffloadArch::UNUSED) + if (GPU != OffloadArch::Unused) Features[OffloadArchToString(GPU)] = true; Features["ptx" + std::to_string(PTXVersion)] = true; return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec); @@ -143,7 +143,7 @@ class LLVM_LIBRARY_VISIBILITY NVPTXTargetInfo : public TargetInfo { } bool isValidCPUName(StringRef Name) const override { - return StringToOffloadArch(Name) != OffloadArch::UNKNOWN; + return StringToOffloadArch(Name) != OffloadArch::Unknown; } void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const override { @@ -154,7 +154,7 @@ class LLVM_LIBRARY_VISIBILITY NVPTXTargetInfo : public TargetInfo { bool setCPU(const std::string &Name) override { GPU = StringToOffloadArch(Name); - return GPU != OffloadArch::UNKNOWN; + return GPU != OffloadArch::Unknown; } void setSupportedOpenCLOpts() override { diff --git a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp index db0d56d6b18cc..f78047d4a1803 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp @@ -2266,15 +2266,15 @@ bool CGOpenMPRuntimeGPU::hasAllocateAttributeForGlobalVar(const VarDecl *VD, // Get current OffloadArch and ignore any unknown values static OffloadArch getOffloadArch(CodeGenModule &CGM) { if (!CGM.getTarget().hasFeature("ptx")) - return OffloadArch::UNKNOWN; + return OffloadArch::Unknown; for (const auto &Feature : CGM.getTarget().getTargetOpts().FeatureMap) { if (Feature.getValue()) { OffloadArch Arch = StringToOffloadArch(Feature.getKey()); - if (Arch != OffloadArch::UNKNOWN) + if (Arch != OffloadArch::Unknown) return Arch; } } - return OffloadArch::UNKNOWN; + return OffloadArch::Unknown; } /// Check to see if target architecture supports unified addressing which is @@ -2382,8 +2382,8 @@ void CGOpenMPRuntimeGPU::processRequiresDirective(const OMPRequiresDecl *D) { case OffloadArch::Generic: case OffloadArch::GRANITERAPIDS: case OffloadArch::BMG_G21: - case OffloadArch::UNUSED: - case OffloadArch::UNKNOWN: + case OffloadArch::Unused: + case OffloadArch::Unknown: break; case OffloadArch::LAST: llvm_unreachable("Unexpected GPU arch."); diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index eb3f9cbea2845..c8894a1977338 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -946,7 +946,7 @@ inferOffloadToolchains(Compilation &C, Action::OffloadKind Kind) { llvm::DenseSet<llvm::StringRef> Triples; for (llvm::StringRef Arch : Archs) { OffloadArch ID = StringToOffloadArch(Arch); - if (ID == OffloadArch::UNKNOWN) + if (ID == OffloadArch::Unknown) ID = StringToOffloadArch( getProcessorFromTargetID(llvm::Triple("amdgcn-amd-amdhsa"), Arch)); @@ -961,12 +961,12 @@ inferOffloadToolchains(Compilation &C, Action::OffloadKind Kind) { return llvm::DenseSet<llvm::StringRef>(); } if (Kind == Action::OFK_OpenMP && - (ID == OffloadArch::UNKNOWN || ID == OffloadArch::UNUSED)) { + (ID == OffloadArch::Unknown || ID == OffloadArch::Unused)) { C.getDriver().Diag(clang::diag::err_drv_failed_to_deduce_target_from_arch) << Arch; return llvm::DenseSet<llvm::StringRef>(); } - if (ID == OffloadArch::UNKNOWN || ID == OffloadArch::UNUSED) { + if (ID == OffloadArch::Unknown || ID == OffloadArch::Unused) { C.getDriver().Diag(clang::diag::err_drv_offload_bad_gpu_arch) << "offload" << Arch; return llvm::DenseSet<llvm::StringRef>(); @@ -3305,7 +3305,7 @@ class OffloadingActionBuilder final { bool Relocatable = false; /// Default GPU architecture if there's no one specified. - OffloadArch DefaultOffloadArch = OffloadArch::UNKNOWN; + OffloadArch DefaultOffloadArch = OffloadArch::Unknown; /// Compilation unit ID specified by option '-fuse-cuid=' or'-cuid='. const CUIDOptions &CUIDOpts; @@ -3407,7 +3407,7 @@ class OffloadingActionBuilder final { // If we have a fat binary, add it to the list. if (CudaFatBinary) { - AddTopLevel(CudaFatBinary, OffloadArch::UNUSED); + AddTopLevel(CudaFatBinary, OffloadArch::Unused); CudaDeviceActions.clear(); CudaFatBinary = nullptr; return; @@ -4669,12 +4669,12 @@ static StringRef getCanonicalArchString(Compilation &C, OffloadArch Arch = StringToOffloadArch(getProcessorFromTargetID(Triple, ArchStr)); if (Triple.isNVPTX() && - (Arch == OffloadArch::UNKNOWN || !IsNVIDIAOffloadArch(Arch))) { + (Arch == OffloadArch::Unknown || !IsNVIDIAOffloadArch(Arch))) { C.getDriver().Diag(clang::diag::err_drv_offload_bad_gpu_arch) << "CUDA" << ArchStr; return StringRef(); } else if (Triple.isAMDGPU() && - (Arch == OffloadArch::UNKNOWN || !IsAMDOffloadArch(Arch))) { + (Arch == OffloadArch::Unknown || !IsAMDOffloadArch(Arch))) { C.getDriver().Diag(clang::diag::err_drv_offload_bad_gpu_arch) << "HIP" << ArchStr; return StringRef(); diff --git a/clang/lib/Driver/OffloadBundler.cpp b/clang/lib/Driver/OffloadBundler.cpp index f69ac41dddb3e..6d446f2c73a28 100644 --- a/clang/lib/Driver/OffloadBundler.cpp +++ b/clang/lib/Driver/OffloadBundler.cpp @@ -95,7 +95,7 @@ OffloadTargetInfo::OffloadTargetInfo(const StringRef Target, Components.size() == 6 ? Components.back() : ""; StringRef TargetId = TargetIdWithFeature.split(':').first; if (!TargetId.empty() && - clang::StringToOffloadArch(TargetId) != clang::OffloadArch::UNKNOWN) + clang::StringToOffloadArch(TargetId) != clang::OffloadArch::Unknown) this->TargetID = TargetIdWithFeature; else this->TargetID = ""; diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index 6cc73ff5fc1f6..d97b926702d0a 100644 --- a/clang/lib/Driver/ToolChains/Cuda.cpp +++ b/clang/lib/Driver/ToolChains/Cuda.cpp @@ -319,7 +319,7 @@ void CudaInstallationDetector::AddCudaIncludeArgs( void CudaInstallationDetector::CheckCudaVersionSupportsArch( OffloadArch Arch) const { - if (Arch == OffloadArch::UNKNOWN || Version == CudaVersion::UNKNOWN || + if (Arch == OffloadArch::Unknown || Version == CudaVersion::UNKNOWN || ArchsWithBadVersion[(int)Arch]) return; @@ -408,7 +408,7 @@ void NVPTX::Assembler::ConstructJob(Compilation &C, const JobAction &JA, // Obtain architecture from the action. OffloadArch gpu_arch = StringToOffloadArch(GPUArchName); - assert(gpu_arch != OffloadArch::UNKNOWN && + assert(gpu_arch != OffloadArch::Unknown && "Device action expected to have an architecture."); // Check that our installation's ptxas supports gpu_arch. diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index d762bcd789bf5..0e624e3edcace 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -5732,7 +5732,7 @@ Sema::CreateLaunchBoundsAttr(const AttributeCommonInfo &CI, Expr *MaxThreads, if (MaxBlocks) { // '.maxclusterrank' ptx directive requires .target sm_90 or higher. auto SM = getOffloadArch(Context.getTargetInfo()); - if (SM == OffloadArch::UNKNOWN || SM < OffloadArch::SM_90) { + if (SM == OffloadArch::Unknown || SM < OffloadArch::SM_90) { Diag(MaxBlocks->getBeginLoc(), diag::warn_cuda_maxclusterrank_sm_90) << OffloadArchToString(SM) << CI << MaxBlocks->getSourceRange(); // Ignore it by setting MaxBlocks to null; _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
