[llvm] [ADT] Make non-const functions forward to const versions (NFC) (PR #161323)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 29 23:30:36 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-support
Author: Kazu Hirata (kazutakahirata)
<details>
<summary>Changes</summary>
These functions all correspond to their respective const versions.
This patch uses the "const_cast" trick to forward to the const
versions.
---
Full diff: https://github.com/llvm/llvm-project/pull/161323.diff
1 Files Affected:
- (modified) llvm/include/llvm/Support/TrailingObjects.h (+6-15)
``````````diff
diff --git a/llvm/include/llvm/Support/TrailingObjects.h b/llvm/include/llvm/Support/TrailingObjects.h
index 3eb7c0bd1f379..dc03285c4994b 100644
--- a/llvm/include/llvm/Support/TrailingObjects.h
+++ b/llvm/include/llvm/Support/TrailingObjects.h
@@ -284,11 +284,8 @@ class TrailingObjects
/// (which must be one of those specified in the class template). The
/// array may have zero or more elements in it.
template <typename T> T *getTrailingObjects() {
- verifyTrailingObjectsAssertions<true>();
- // Forwards to an impl function with overloads, since member
- // function templates can't be specialized.
- return this->getTrailingObjectsImpl(
- static_cast<BaseTy *>(this), TrailingObjectsBase::OverloadToken<T>());
+ return const_cast<T *>(
+ static_cast<const TrailingObjects *>(this)->getTrailingObjects<T>());
}
// getTrailingObjects() specialization for a single trailing type.
@@ -306,13 +303,8 @@ class TrailingObjects
}
FirstTrailingType *getTrailingObjects() {
- static_assert(sizeof...(TrailingTys) == 1,
- "Can use non-templated getTrailingObjects() only when there "
- "is a single trailing type");
- verifyTrailingObjectsAssertions<false>();
- return this->getTrailingObjectsImpl(
- static_cast<BaseTy *>(this),
- TrailingObjectsBase::OverloadToken<FirstTrailingType>());
+ return const_cast<FirstTrailingType *>(
+ static_cast<const TrailingObjects *>(this)->getTrailingObjects());
}
// Functions that return the trailing objects as ArrayRefs.
@@ -342,9 +334,8 @@ class TrailingObjects
}
template <typename T> T *getTrailingObjectsNonStrict() {
- verifyTrailingObjectsAssertions<false>();
- return this->getTrailingObjectsImpl(
- static_cast<BaseTy *>(this), TrailingObjectsBase::OverloadToken<T>());
+ return const_cast<T *>(static_cast<const TrailingObjects *>(this)
+ ->getTrailingObjectsNonStrict<T>());
}
template <typename T>
``````````
</details>
https://github.com/llvm/llvm-project/pull/161323
More information about the llvm-commits
mailing list