From 526e0929a5f8ba293fa200f7c5b78682136dcf84 Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Mon, 2 Feb 2015 16:44:11 +0000 Subject: [PATCH] Reorder a couple of operations in inplace_merge so that we can meet the complexity guidelines mandated by the standard. References PR22427 llvm-svn: 227808 --- libcxx/include/algorithm | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/libcxx/include/algorithm b/libcxx/include/algorithm index 02cbc816f61f..a179acf63f2f 100644 --- a/libcxx/include/algorithm +++ b/libcxx/include/algorithm @@ -4407,6 +4407,9 @@ __inplace_merge(_BidirectionalIterator __first, _BidirectionalIterator __middle, // if __middle == __last, we're done if (__len2 == 0) return; + if (__len1 <= __buff_size || __len2 <= __buff_size) + return __buffered_inplace_merge<_Compare> + (__first, __middle, __last, __comp, __len1, __len2, __buff); // shrink [__first, __middle) as much as possible (with no moves), returning if it shrinks to 0 for (; true; ++__first, (void) --__len1) { @@ -4415,11 +4418,6 @@ __inplace_merge(_BidirectionalIterator __first, _BidirectionalIterator __middle, if (__comp(*__middle, *__first)) break; } - if (__len1 <= __buff_size || __len2 <= __buff_size) - { - __buffered_inplace_merge<_Compare>(__first, __middle, __last, __comp, __len1, __len2, __buff); - return; - } // __first < __middle < __last // *__first > *__middle // partition [__first, __m1) [__m1, __middle) [__middle, __m2) [__m2, __last) such that