[flang-commits] [flang] [llvm] [Flang] KIND De-templatization (PR #216960)

Michael Kruse via flang-commits flang-commits at lists.llvm.org
Fri Oct 23 13:49:58 PDT 2026


================
@@ -519,42 +511,41 @@ bool AreSameDerivedTypeIgnoringLengthParameters(
 bool AreSameDerivedTypeIgnoringSequence(
     const semantics::DerivedTypeSpec &, const semantics::DerivedTypeSpec &);
 
-// For generating "[extern] template class", &c. boilerplate
-#define EXPAND_FOR_EACH_INTEGER_KIND(M, P, S) \
-  M(P, S, 1) M(P, S, 2) M(P, S, 4) M(P, S, 8) M(P, S, 16)
-#define EXPAND_FOR_EACH_REAL_KIND(M, P, S) \
-  M(P, S, 2) M(P, S, 3) M(P, S, 4) M(P, S, 8) M(P, S, 10) M(P, S, 16)
-#define EXPAND_FOR_EACH_COMPLEX_KIND(M, P, S) EXPAND_FOR_EACH_REAL_KIND(M, P, S)
-#define EXPAND_FOR_EACH_CHARACTER_KIND(M, P, S) M(P, S, 1) M(P, S, 2) M(P, S, 4)
-#define EXPAND_FOR_EACH_LOGICAL_KIND(M, P, S) \
-  M(P, S, 1) M(P, S, 2) M(P, S, 4) M(P, S, 8)
-#define EXPAND_FOR_EACH_UNSIGNED_KIND EXPAND_FOR_EACH_INTEGER_KIND
-
-#define FOR_EACH_INTEGER_KIND_HELP(PREFIX, SUFFIX, K) \
-  PREFIX<Type<TypeCategory::Integer, K>> SUFFIX;
-#define FOR_EACH_REAL_KIND_HELP(PREFIX, SUFFIX, K) \
-  PREFIX<Type<TypeCategory::Real, K>> SUFFIX;
-#define FOR_EACH_COMPLEX_KIND_HELP(PREFIX, SUFFIX, K) \
-  PREFIX<Type<TypeCategory::Complex, K>> SUFFIX;
-#define FOR_EACH_CHARACTER_KIND_HELP(PREFIX, SUFFIX, K) \
-  PREFIX<Type<TypeCategory::Character, K>> SUFFIX;
-#define FOR_EACH_LOGICAL_KIND_HELP(PREFIX, SUFFIX, K) \
-  PREFIX<Type<TypeCategory::Logical, K>> SUFFIX;
-#define FOR_EACH_UNSIGNED_KIND_HELP(PREFIX, SUFFIX, K) \
-  PREFIX<Type<TypeCategory::Unsigned, K>> SUFFIX;
+/// Check that KIND is consistent with thew type. That is, for a type category
+/// that has a kind as part of its type, it must be non-zero, and otherwise
+/// zero.
+#define CHECK_KIND(KIND, TY) \
+  { \
+    if constexpr (std::is_same_v<TY, SomeDerived> || \
+        std::is_same_v<TY, SomeKind<TypeCategory::Derived>> || \
+        std::is_same_v<TY, SomeType>) { \
+      CHECK((KIND) == 0 && "Type does not have a kind"); \
+    } else if constexpr (std::is_same_v<TY, Type<TypeCategory::Integer>> || \
+        std::is_same_v<TY, Type<TypeCategory::Unsigned>> || \
+        std::is_same_v<TY, Type<TypeCategory::Real>> || \
+        std::is_same_v<TY, Type<TypeCategory::Complex>> || \
+        std::is_same_v<TY, Type<TypeCategory::Logical>> || \
+        std::is_same_v<TY, Type<TypeCategory::Character>>) { \
+      CHECK((KIND) != 0 && "Type must come with a kind"); \
+    } else { \
+      static_assert(false, "Don't know whether TY should have a kind"); \
----------------
Meinersbur wrote:

[`5586242` (this PR)](https://github.com/llvm/llvm-project/pull/216960/changes/55862427a9e5f2a01cfb7d69cdccbab32ede0016)

https://github.com/llvm/llvm-project/pull/216960


More information about the flang-commits mailing list