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 T *getTrailingObjects() { - verifyTrailingObjectsAssertions(); - // Forwards to an impl function with overloads, since member - // function templates can't be specialized. - return this->getTrailingObjectsImpl( - static_cast(this), TrailingObjectsBase::OverloadToken()); + return const_cast( + static_cast(this)->getTrailingObjects()); } // 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(); - return this->getTrailingObjectsImpl( - static_cast(this), - TrailingObjectsBase::OverloadToken()); + return const_cast( + static_cast(this)->getTrailingObjects()); } // Functions that return the trailing objects as ArrayRefs. @@ -342,9 +334,8 @@ class TrailingObjects } template T *getTrailingObjectsNonStrict() { - verifyTrailingObjectsAssertions(); - return this->getTrailingObjectsImpl( - static_cast(this), TrailingObjectsBase::OverloadToken()); + return const_cast(static_cast(this) + ->getTrailingObjectsNonStrict()); } template