Successfully identified regression in *gdb* in CI configuration tcwg_gnu_native_build/master-arm. So far, this commit has regressed CI configurations: - tcwg_gnu_native_build/master-arm
Culprit: <cut> commit 282aa4f7d292eb4bc213d028465a3b96f5af2f22 Author: Tom Tromey <t...@tromey.com> Date: Sat Aug 28 13:16:50 2021 -0600 Add some parallel_for_each tests Tom de Vries noticed that a patch in the DWARF scanner rewrite series caused a regression in parallel_for_each -- it started crashing in the case where the number of threads is 0 (there was an unchecked use of "n-1" that was used to size an array). He also pointed out that there were no tests of parallel_for_each. This adds a few tests of parallel_for_each, primarily testing that different settings for the number of threads will work. This test catches the bug that he found in that series. </cut> Results regressed to (for first_bad == 282aa4f7d292eb4bc213d028465a3b96f5af2f22) # reset_artifacts: -10 # true: 0 # build_abe binutils: 1 # build_abe gcc: 2 # build_abe linux: 4 # build_abe glibc: 5 # First few build errors in logs: # 00:03:45 ../../../../../../gdb/gdb/unittests/parallel-for-selftests.c:53:30: error: use of deleted function ‘std::atomic<int>::atomic(const std::atomic<int>&)’ # 00:03:45 make[1]: *** [unittests/parallel-for-selftests.o] Error 1 # 00:03:46 make: *** [all-gdb] Error 2 from (for last_good == ee8b88452c1cb1be97199942aee7a76bbca210ee) # reset_artifacts: -10 # true: 0 # build_abe binutils: 1 # build_abe gcc: 2 # build_abe linux: 4 # build_abe glibc: 5 # build_abe gdb: 6 Artifacts of last_good build: https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/1/artifact/artifacts/build-ee8b88452c1cb1be97199942aee7a76bbca210ee/ Artifacts of first_bad build: https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/1/artifact/artifacts/build-282aa4f7d292eb4bc213d028465a3b96f5af2f22/ Build top page/logs: https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/1/ Configuration details: Reproduce builds: <cut> mkdir investigate-gdb-282aa4f7d292eb4bc213d028465a3b96f5af2f22 cd investigate-gdb-282aa4f7d292eb4bc213d028465a3b96f5af2f22 git clone https://git.linaro.org/toolchain/jenkins-scripts mkdir -p artifacts/manifests curl -o artifacts/manifests/build-baseline.sh https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/1/artifact/artifacts/manifests/build-baseline.sh --fail curl -o artifacts/manifests/build-parameters.sh https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/1/artifact/artifacts/manifests/build-parameters.sh --fail curl -o artifacts/test.sh https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/1/artifact/artifacts/test.sh --fail chmod +x artifacts/test.sh # Reproduce the baseline build (build all pre-requisites) ./jenkins-scripts/tcwg_gnu-build.sh @@ artifacts/manifests/build-baseline.sh # Save baseline build state (which is then restored in artifacts/test.sh) mkdir -p ./bisect rsync -a --del --delete-excluded --exclude /bisect/ --exclude /artifacts/ --exclude /gdb/ ./ ./bisect/baseline/ cd gdb # Reproduce first_bad build git checkout --detach 282aa4f7d292eb4bc213d028465a3b96f5af2f22 ../artifacts/test.sh # Reproduce last_good build git checkout --detach ee8b88452c1cb1be97199942aee7a76bbca210ee ../artifacts/test.sh cd .. </cut> History of pending regressions and results: https://git.linaro.org/toolchain/ci/base-artifacts.git/log/?h=linaro-local/ci/tcwg_gnu_native_build/master-arm Artifacts: https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/1/artifact/artifacts/ Build log: https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/1/consoleText Full commit (up to 1000 lines): <cut> commit 282aa4f7d292eb4bc213d028465a3b96f5af2f22 Author: Tom Tromey <t...@tromey.com> Date: Sat Aug 28 13:16:50 2021 -0600 Add some parallel_for_each tests Tom de Vries noticed that a patch in the DWARF scanner rewrite series caused a regression in parallel_for_each -- it started crashing in the case where the number of threads is 0 (there was an unchecked use of "n-1" that was used to size an array). He also pointed out that there were no tests of parallel_for_each. This adds a few tests of parallel_for_each, primarily testing that different settings for the number of threads will work. This test catches the bug that he found in that series. --- gdb/Makefile.in | 1 + gdb/unittests/parallel-for-selftests.c | 86 ++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 73a1bf83c85..320d3326a81 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -456,6 +456,7 @@ SELFTESTS_SRCS = \ unittests/offset-type-selftests.c \ unittests/observable-selftests.c \ unittests/optional-selftests.c \ + unittests/parallel-for-selftests.c \ unittests/parse-connection-spec-selftests.c \ unittests/ptid-selftests.c \ unittests/main-thread-selftests.c \ diff --git a/gdb/unittests/parallel-for-selftests.c b/gdb/unittests/parallel-for-selftests.c new file mode 100644 index 00000000000..7f61b709fa7 --- /dev/null +++ b/gdb/unittests/parallel-for-selftests.c @@ -0,0 +1,86 @@ +/* Self tests for parallel_for_each + + Copyright (C) 2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "gdbsupport/selftest.h" +#include "gdbsupport/parallel-for.h" +#include "gdbsupport/thread-pool.h" + +#if CXX_STD_THREAD + +namespace selftests { +namespace parallel_for { + +struct save_restore_n_threads +{ + save_restore_n_threads () + : n_threads (gdb::thread_pool::g_thread_pool->thread_count ()) + { + } + + ~save_restore_n_threads () + { + gdb::thread_pool::g_thread_pool->set_thread_count (n_threads); + } + + int n_threads; +}; + +static void +test (int n_threads) +{ + save_restore_n_threads saver; + gdb::thread_pool::g_thread_pool->set_thread_count (n_threads); + +#define NUMBER 10000 + + std::atomic<int> counter = 0; + gdb::parallel_for_each (0, NUMBER, + [&] (int start, int end) + { + counter += end - start; + }); + + SELF_CHECK (counter == NUMBER); + +#undef NUMBER +} + +static void +test_n_threads () +{ + test (0); + test (1); + test (3); +} + +} +} + +#endif /* CXX_STD_THREAD */ + +void _initialize_parallel_for_selftests (); +void +_initialize_parallel_for_selftests () +{ +#ifdef CXX_STD_THREAD + selftests::register_test ("parallel_for", + selftests::parallel_for::test_n_threads); +#endif /* CXX_STD_THREAD */ +} </cut> _______________________________________________ linaro-toolchain mailing list linaro-toolchain@lists.linaro.org https://lists.linaro.org/mailman/listinfo/linaro-toolchain