qcompare.h: standardize on Coverity-friendly ctors
Coverity complained that the Qt::strong_ordering(std::strong_ordering) ctor may leave m_order uninitialized, which is true if you assume that 'stdorder' could be anything else but {less, greater, equal}, which, however, should not happen™. Standardize on the pattern that QPartialOrdering(Qt::partial_ordering) was using: init m_order to equivalent, and then check for the other possible states. I would have preferred adding 'else Q_UNREACHABLE()', but these are constexpr functions, so we'd need the GCC 8 protection, and then the else would have a body longer than one line, and I don't know whether violating the coding style and adding {} only on the else would fly with reviewers, so that's done in a follow-up. Amends several changes (this code has seen a lot of churn over time). Coverity-Id: 475148 Change-Id: I3d88cdaaffbdfb8720161470b5f89046a3a15088 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit f6d878d5ce4d6e41c088698bd337cf7f4438433e) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> (cherry picked from commit da619f9e0b855d1c4b72820ed304ae8229f76829)
This commit is contained in:
parent
dd934d675a
commit
a99b78bf51
@ -143,11 +143,10 @@ public:
|
||||
|
||||
#ifdef __cpp_lib_three_way_comparison
|
||||
constexpr Q_IMPLICIT partial_ordering(std::partial_ordering stdorder) noexcept
|
||||
: m_order{} // == equivalent
|
||||
{
|
||||
if (stdorder == std::partial_ordering::less)
|
||||
m_order = static_cast<QtPrivate::CompareUnderlyingType>(QtPrivate::Ordering::Less);
|
||||
else if (stdorder == std::partial_ordering::equivalent)
|
||||
m_order = static_cast<QtPrivate::CompareUnderlyingType>(QtPrivate::Ordering::Equivalent);
|
||||
else if (stdorder == std::partial_ordering::greater)
|
||||
m_order = static_cast<QtPrivate::CompareUnderlyingType>(QtPrivate::Ordering::Greater);
|
||||
else if (stdorder == std::partial_ordering::unordered)
|
||||
@ -337,11 +336,10 @@ public:
|
||||
|
||||
#ifdef __cpp_lib_three_way_comparison
|
||||
constexpr Q_IMPLICIT weak_ordering(std::weak_ordering stdorder) noexcept
|
||||
: m_order{} // == equivalent
|
||||
{
|
||||
if (stdorder == std::weak_ordering::less)
|
||||
m_order = static_cast<QtPrivate::CompareUnderlyingType>(QtPrivate::Ordering::Less);
|
||||
else if (stdorder == std::weak_ordering::equivalent)
|
||||
m_order = static_cast<QtPrivate::CompareUnderlyingType>(QtPrivate::Ordering::Equivalent);
|
||||
else if (stdorder == std::weak_ordering::greater)
|
||||
m_order = static_cast<QtPrivate::CompareUnderlyingType>(QtPrivate::Ordering::Greater);
|
||||
}
|
||||
@ -533,13 +531,10 @@ public:
|
||||
|
||||
#ifdef __cpp_lib_three_way_comparison
|
||||
constexpr Q_IMPLICIT strong_ordering(std::strong_ordering stdorder) noexcept
|
||||
: m_order{} // == equivalent
|
||||
{
|
||||
if (stdorder == std::strong_ordering::less)
|
||||
m_order = static_cast<QtPrivate::CompareUnderlyingType>(QtPrivate::Ordering::Less);
|
||||
else if (stdorder == std::strong_ordering::equivalent)
|
||||
m_order = static_cast<QtPrivate::CompareUnderlyingType>(QtPrivate::Ordering::Equivalent);
|
||||
else if (stdorder == std::strong_ordering::equal)
|
||||
m_order = static_cast<QtPrivate::CompareUnderlyingType>(QtPrivate::Ordering::Equal);
|
||||
else if (stdorder == std::strong_ordering::greater)
|
||||
m_order = static_cast<QtPrivate::CompareUnderlyingType>(QtPrivate::Ordering::Greater);
|
||||
}
|
||||
@ -802,11 +797,10 @@ public:
|
||||
|
||||
#ifdef __cpp_lib_three_way_comparison
|
||||
constexpr Q_IMPLICIT QPartialOrdering(std::partial_ordering stdorder) noexcept
|
||||
: m_order{} // == equivalent
|
||||
{
|
||||
if (stdorder == std::partial_ordering::less)
|
||||
m_order = static_cast<QtPrivate::CompareUnderlyingType>(QtPrivate::Ordering::Less);
|
||||
else if (stdorder == std::partial_ordering::equivalent)
|
||||
m_order = static_cast<QtPrivate::CompareUnderlyingType>(QtPrivate::Ordering::Equivalent);
|
||||
else if (stdorder == std::partial_ordering::greater)
|
||||
m_order = static_cast<QtPrivate::CompareUnderlyingType>(QtPrivate::Ordering::Greater);
|
||||
else if (stdorder == std::partial_ordering::unordered)
|
||||
|
Loading…
x
Reference in New Issue
Block a user