[llvm] e13b79c - [IR] Use llvm::is_detected (NFC) (#137562)

via llvm-commits llvm-commits at lists.llvm.org
Sun Apr 27 17:52:26 PDT 2025


Author: Kazu Hirata
Date: 2025-04-27T17:52:23-07:00
New Revision: e13b79cc14237a8a1c4533d435d6ccd519e5a364

URL: https://github.com/llvm/llvm-project/commit/e13b79cc14237a8a1c4533d435d6ccd519e5a364
DIFF: https://github.com/llvm/llvm-project/commit/e13b79cc14237a8a1c4533d435d6ccd519e5a364.diff

LOG: [IR] Use llvm::is_detected (NFC) (#137562)

Added: 
    

Modified: 
    llvm/include/llvm/IR/Metadata.h

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/IR/Metadata.h b/llvm/include/llvm/IR/Metadata.h
index ec7d030a20de8..22ab59be55eb2 100644
--- a/llvm/include/llvm/IR/Metadata.h
+++ b/llvm/include/llvm/IR/Metadata.h
@@ -619,23 +619,16 @@ class LocalAsMetadata : public ValueAsMetadata {
 namespace mdconst {
 
 namespace detail {
+template <typename U, typename V>
+using check_has_dereference = decltype(static_cast<V>(*std::declval<U &>()));
 
-template <class T> T &make();
-template <class T, class Result> struct HasDereference {
-  using Yes = char[1];
-  using No = char[2];
-  template <size_t N> struct SFINAE {};
+template <typename U, typename V>
+static constexpr bool HasDereference =
+    is_detected<check_has_dereference, U, V>::value;
 
-  template <class U, class V>
-  static Yes &hasDereference(SFINAE<sizeof(static_cast<V>(*make<U>()))> * = 0);
-  template <class U, class V> static No &hasDereference(...);
-
-  static const bool value =
-      sizeof(hasDereference<T, Result>(nullptr)) == sizeof(Yes);
-};
 template <class V, class M> struct IsValidPointer {
   static const bool value = std::is_base_of<Constant, V>::value &&
-                            HasDereference<M, const Metadata &>::value;
+                            HasDereference<M, const Metadata &>;
 };
 template <class V, class M> struct IsValidReference {
   static const bool value = std::is_base_of<Constant, V>::value &&


        


More information about the llvm-commits mailing list