Skip to content

Conversation

kazutakahirata
Copy link
Contributor

"class HasMember##member" detects a specific member with a complex
SFINAE logic involving multiple inheritance. This patch simplifies
that by switching to llvm::is_detected.

"class HasMember##member" detects a specific member with a complex
SFINAE logic involving multiple inheritance.  This patch simplifies
that by switching to llvm::is_detected.
@llvmbot
Copy link
Member

llvmbot commented Sep 22, 2025

@llvm/pr-subscribers-backend-amdgpu

Author: Kazu Hirata (kazutakahirata)

Changes

"class HasMember##member" detects a specific member with a complex
SFINAE logic involving multiple inheritance. This patch simplifies
that by switching to llvm::is_detected.


Full diff: https://github.com/llvm/llvm-project/pull/160037.diff

1 Files Affected:

  • (modified) llvm/lib/Target/AMDGPU/Utils/AMDKernelCodeTUtils.cpp (+2-10)
diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDKernelCodeTUtils.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDKernelCodeTUtils.cpp
index b0ed1e5e5c52b..24251e12d57dc 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDKernelCodeTUtils.cpp
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDKernelCodeTUtils.cpp
@@ -40,20 +40,12 @@ using namespace llvm::AMDGPU;
 //     returns.
 #define GEN_HAS_MEMBER(member)                                                 \
   class HasMember##member {                                                    \
-  private:                                                                     \
-    struct KnownWithMember {                                                   \
-      int member;                                                              \
-    };                                                                         \
-    class AmbiguousDerived : public AMDGPUMCKernelCodeT,                       \
-                             public KnownWithMember {};                        \
     template <typename U>                                                      \
-    static constexpr std::false_type Test(decltype(U::member) *);              \
-    template <typename U> static constexpr std::true_type Test(...);           \
+    using check_member = decltype(std::declval<U>().member);                   \
                                                                                \
   public:                                                                      \
     static constexpr bool RESULT =                                             \
-        std::is_same_v<decltype(Test<AmbiguousDerived>(nullptr)),              \
-                       std::true_type>;                                        \
+        llvm::is_detected<check_member, AMDGPUMCKernelCodeT>::value;           \
   };                                                                           \
   class IsMCExpr##member {                                                     \
     template <typename U>                                                      \

@kazutakahirata kazutakahirata merged commit c0b6ddf into llvm:main Sep 22, 2025
11 checks passed
@kazutakahirata kazutakahirata deleted the cleanup_20250921_10TMP_AMDGPU_HasMember branch September 22, 2025 14:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants