From 42b7c4ea5673430eb1599a666b3b5c610638fbaf Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Fri, 18 Aug 2017 07:59:21 -0400 Subject: [PATCH] Clear Coverity finding CONSTANT_EXPRESSION_RESULT (CID 182772) This may create a MSC warning about a conditional expression being constant --- secblock.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/secblock.h b/secblock.h index d38833b8..790748a3 100644 --- a/secblock.h +++ b/secblock.h @@ -99,11 +99,15 @@ protected: //! because the latter is not a constexpr. Some compilers, like Clang, do not //! optimize it well under all circumstances. Compilers like GCC, ICC and MSVC appear //! to optimize it well in either form. + //! \details The sizeof(T) != 1 in the condition attempts to help the + //! compiler optimize the check for byte types. Coverity findings for + //! CONSTANT_EXPRESSION_RESULT were generated without it. For byte types, + //! size never exceeded ELEMS_MAX but the code was not removed. //! \note size is the count of elements, and not the number of bytes static void CheckSize(size_t size) { // C++ throws std::bad_alloc (C++03) or std::bad_array_new_length (C++11) here. - if (size > ELEMS_MAX) + if (sizeof(T) != 1 && size > ELEMS_MAX) throw InvalidArgument("AllocatorBase: requested size would cause integer overflow"); } };