From 40bb7dba671139e912036f77c0606e3c8f16d2af Mon Sep 17 00:00:00 2001 From: xtqqczze <45661989+xtqqczze@users.noreply.github.com> Date: Sun, 22 Jan 2023 16:41:15 +0000 Subject: [PATCH 1/2] Remove `RangeIterator.ToArray` bounds check https://github.com/dotnet/runtime/pull/80633#discussion_r1082720454 --- src/libraries/System.Linq/src/System/Linq/Range.SpeedOpt.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Linq/src/System/Linq/Range.SpeedOpt.cs b/src/libraries/System.Linq/src/System/Linq/Range.SpeedOpt.cs index dba2dbb7ec39eb..6704eef5dedc29 100644 --- a/src/libraries/System.Linq/src/System/Linq/Range.SpeedOpt.cs +++ b/src/libraries/System.Linq/src/System/Linq/Range.SpeedOpt.cs @@ -18,7 +18,7 @@ public int[] ToArray() { int[] array = new int[_end - _start]; int cur = _start; - for (int i = 0; i != array.Length; ++i) + for (int i = 0; i < array.Length; ++i) { array[i] = cur; ++cur; From ba73b332d14dba7e9754399d008e45cc973a3fd4 Mon Sep 17 00:00:00 2001 From: xtqqczze <45661989+xtqqczze@users.noreply.github.com> Date: Sun, 22 Jan 2023 19:54:43 +0000 Subject: [PATCH 2/2] Eliminate additional `ToArray` bounds checks --- .../System.Linq/src/System/Linq/OrderedEnumerable.SpeedOpt.cs | 2 +- src/libraries/System.Linq/src/System/Linq/Partition.SpeedOpt.cs | 2 +- src/libraries/System.Linq/src/System/Linq/Select.SpeedOpt.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Linq/src/System/Linq/OrderedEnumerable.SpeedOpt.cs b/src/libraries/System.Linq/src/System/Linq/OrderedEnumerable.SpeedOpt.cs index 6ea4b069a1e9ae..c8861e176f03b0 100644 --- a/src/libraries/System.Linq/src/System/Linq/OrderedEnumerable.SpeedOpt.cs +++ b/src/libraries/System.Linq/src/System/Linq/OrderedEnumerable.SpeedOpt.cs @@ -21,7 +21,7 @@ public virtual TElement[] ToArray() TElement[] array = new TElement[count]; int[] map = SortedMap(buffer); - for (int i = 0; i != array.Length; i++) + for (int i = 0; i < array.Length; i++) { array[i] = buffer._items[map[i]]; } diff --git a/src/libraries/System.Linq/src/System/Linq/Partition.SpeedOpt.cs b/src/libraries/System.Linq/src/System/Linq/Partition.SpeedOpt.cs index c46465f82547b3..8555fa1582d298 100644 --- a/src/libraries/System.Linq/src/System/Linq/Partition.SpeedOpt.cs +++ b/src/libraries/System.Linq/src/System/Linq/Partition.SpeedOpt.cs @@ -254,7 +254,7 @@ public TSource[] ToArray() } TSource[] array = new TSource[count]; - for (int i = 0, curIdx = _minIndexInclusive; i != array.Length; ++i, ++curIdx) + for (int i = 0, curIdx = _minIndexInclusive; i < array.Length; ++i, ++curIdx) { array[i] = _source[curIdx]; } diff --git a/src/libraries/System.Linq/src/System/Linq/Select.SpeedOpt.cs b/src/libraries/System.Linq/src/System/Linq/Select.SpeedOpt.cs index 8ca02c76b08df2..76ee67b2dcbdb7 100644 --- a/src/libraries/System.Linq/src/System/Linq/Select.SpeedOpt.cs +++ b/src/libraries/System.Linq/src/System/Linq/Select.SpeedOpt.cs @@ -789,7 +789,7 @@ public TResult[] ToArray() } TResult[] array = new TResult[count]; - for (int i = 0, curIdx = _minIndexInclusive; i != array.Length; ++i, ++curIdx) + for (int i = 0, curIdx = _minIndexInclusive; i < array.Length; ++i, ++curIdx) { array[i] = _selector(_source[curIdx]); }