From 5911330f8b64b2e1cccd4dd390e9cb9d1fa19a3c Mon Sep 17 00:00:00 2001 From: kd-11 Date: Sun, 27 Jul 2025 03:06:46 +0300 Subject: [PATCH] rsx: Fix bug in reverse_iterator for simple_array --- rpcs3/Emu/RSX/Common/simple_array.hpp | 12 ++++++------ rpcs3/tests/test_simple_array.cpp | 10 ++++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/rpcs3/Emu/RSX/Common/simple_array.hpp b/rpcs3/Emu/RSX/Common/simple_array.hpp index 00bc7602a6..5656eb30df 100644 --- a/rpcs3/Emu/RSX/Common/simple_array.hpp +++ b/rpcs3/Emu/RSX/Common/simple_array.hpp @@ -398,32 +398,32 @@ namespace rsx reverse_iterator rbegin() { - return reverse_iterator(end()); + return reverse_iterator(end() - 1); } reverse_iterator rend() { - return reverse_iterator(begin()); + return reverse_iterator(begin() - 1); } const_reverse_iterator rbegin() const { - return const_reverse_iterator(cend()); + return crbegin(); } const_reverse_iterator rend() const { - return const_reverse_iterator(cbegin()); + return crend(); } const_reverse_iterator crbegin() const { - return const_reverse_iterator(cend()); + return const_reverse_iterator(cend() - 1); } const_reverse_iterator crend() const { - return const_reverse_iterator(cbegin()); + return const_reverse_iterator(cbegin() - 1); } bool any(std::predicate auto predicate) const diff --git a/rpcs3/tests/test_simple_array.cpp b/rpcs3/tests/test_simple_array.cpp index d101dd0a0b..6fc9107e48 100644 --- a/rpcs3/tests/test_simple_array.cpp +++ b/rpcs3/tests/test_simple_array.cpp @@ -229,5 +229,15 @@ namespace rsx } EXPECT_EQ(sum, 15); + + rindex = 0; + sum = 0; + for (auto it = arr.crbegin(); it != arr.crend(); ++it, ++rindex) + { + EXPECT_EQ(*it, arr2[rindex]); + sum += *it; + } + + EXPECT_EQ(sum, 15); } }