diff options
author | Tom de Vries <tom@codesourcery.com> | 2018-05-01 19:16:43 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2018-05-01 19:16:43 +0000 |
commit | b94c2dc138c60636e3898b04c1026cbb1b868b26 (patch) | |
tree | e99c38252e340bc2e91a93e586b47cdf8ba5aaf3 /gcc/vec.c | |
parent | 2cc7d3a7da20bcfd854302b1f265c6551b8a3741 (diff) | |
download | gcc-b94c2dc138c60636e3898b04c1026cbb1b868b26.zip gcc-b94c2dc138c60636e3898b04c1026cbb1b868b26.tar.gz gcc-b94c2dc138c60636e3898b04c1026cbb1b868b26.tar.bz2 |
Add VEC_ORDERED_REMOVE_IF
2018-05-01 Tom de Vries <tom@codesourcery.com>
PR other/83786
* vec.h (VEC_ORDERED_REMOVE_IF, VEC_ORDERED_REMOVE_IF_FROM_TO): Define.
* vec.c (test_ordered_remove_if): New function.
(vec_c_tests): Call test_ordered_remove_if.
* dwarf2cfi.c (connect_traces): Use VEC_ORDERED_REMOVE_IF_FROM_TO.
* lto-streamer-out.c (prune_offload_funcs): Use VEC_ORDERED_REMOVE_IF.
* tree-vect-patterns.c (vect_pattern_recog_1): Use
VEC_ORDERED_REMOVE_IF.
From-SVN: r259808
Diffstat (limited to 'gcc/vec.c')
-rw-r--r-- | gcc/vec.c | 46 |
1 files changed, 46 insertions, 0 deletions
@@ -382,6 +382,51 @@ test_ordered_remove () ASSERT_EQ (9, v.length ()); } +/* Verify that vec::ordered_remove_if works correctly. */ + +static void +test_ordered_remove_if (void) +{ + auto_vec <int> v; + safe_push_range (v, 0, 10); + unsigned ix, ix2; + int *elem_ptr; + VEC_ORDERED_REMOVE_IF (v, ix, ix2, elem_ptr, + *elem_ptr == 5 || *elem_ptr == 7); + ASSERT_EQ (4, v[4]); + ASSERT_EQ (6, v[5]); + ASSERT_EQ (8, v[6]); + ASSERT_EQ (8, v.length ()); + + v.truncate (0); + safe_push_range (v, 0, 10); + VEC_ORDERED_REMOVE_IF_FROM_TO (v, ix, ix2, elem_ptr, 0, 6, + *elem_ptr == 5 || *elem_ptr == 7); + ASSERT_EQ (4, v[4]); + ASSERT_EQ (6, v[5]); + ASSERT_EQ (7, v[6]); + ASSERT_EQ (9, v.length ()); + + v.truncate (0); + safe_push_range (v, 0, 10); + VEC_ORDERED_REMOVE_IF_FROM_TO (v, ix, ix2, elem_ptr, 0, 5, + *elem_ptr == 5 || *elem_ptr == 7); + VEC_ORDERED_REMOVE_IF_FROM_TO (v, ix, ix2, elem_ptr, 8, 10, + *elem_ptr == 5 || *elem_ptr == 7); + ASSERT_EQ (4, v[4]); + ASSERT_EQ (5, v[5]); + ASSERT_EQ (6, v[6]); + ASSERT_EQ (10, v.length ()); + + v.truncate (0); + safe_push_range (v, 0, 10); + VEC_ORDERED_REMOVE_IF (v, ix, ix2, elem_ptr, *elem_ptr == 5); + ASSERT_EQ (4, v[4]); + ASSERT_EQ (6, v[5]); + ASSERT_EQ (7, v[6]); + ASSERT_EQ (9, v.length ()); +} + /* Verify that vec::unordered_remove works correctly. */ static void @@ -443,6 +488,7 @@ vec_c_tests () test_pop (); test_safe_insert (); test_ordered_remove (); + test_ordered_remove_if (); test_unordered_remove (); test_block_remove (); test_qsort (); |