On Mon, Aug 17, 2026 at 6:19 PM <[email protected]> wrote:
>
> From: Kyrylo Tkachov <[email protected]>
>
> The parallel check targets merge the per-instance summaries with
>
>   dg-extract-results.sh $sums > $(TESTSUITEDIR)/$*/$*.sum
>
> which has two problems.  The redirection truncates the summary before the
> merge runs, so if the merge fails the tree is left with an empty one.  And
> the exit status is not looked at, so make check still succeeds.
>
> The merge fails exactly when a runtest instance did not write a summary,
> because the loop above names that file to the merge regardless.  An instance
> that died therefore does not just lose its own results, it discards the
> results of every other instance too, and reports success while doing it.
>
> Merge only from the instances that produced a summary, say plainly which ones
> did not, and build the merged files under a temporary name so that a failure
> leaves the previous ones alone.  A failed merge is now an error.
>
> The warning matters on its own: losing an instance silently loses a slice of
> the testsuite from the summary that comparisons are run against, and nothing
> in the output says so.
>
> Bootstrapped on aarch64-none-linux-gnu.  Ok for trunk?

OK.

Richard.

> gcc/ChangeLog:
>
>         * Makefile.in ($(lang_checks_parallelized)): Only merge summaries
>         from instances that produced one, and warn about the others.  Write
>         the merged files through a temporary and fail if the merge fails.
>
> Signed-off-by: Kyrylo Tkachov <[email protected]>
> ---
>  gcc/Makefile.in | 19 ++++++++++++++-----
>  1 file changed, 14 insertions(+), 5 deletions(-)
>
> diff --git a/gcc/Makefile.in b/gcc/Makefile.in
> index ce5894767fe..5c7cb98d22b 100644
> --- a/gcc/Makefile.in
> +++ b/gcc/Makefile.in
> @@ -4794,19 +4794,28 @@ $(lang_checks_parallelized): check-% : site.exp
>             EXPECT=$(EXPECT) \
>             check-parallel-$* \
>             $(patsubst %,check-parallel-$*_%, $(check_p_subdirs)); \
> -         sums= ; logs= ; \
> +         sums= ; logs= ; lost= ; \
>           for dir in $(TESTSUITEDIR)/$* \
>                      $(patsubst %,$(TESTSUITEDIR)/$*%,$(check_p_subdirs));\
>           do \
>             if [ -d $$dir ]; then \
> -             mv -f $$dir/$*.sum $$dir/$*.sum.sep; mv -f $$dir/$*.log 
> $$dir/$*.log.sep; \
> -             sums="$$sums $$dir/$*.sum.sep"; logs="$$logs $$dir/$*.log.sep"; 
> \
> +             if [ -f $$dir/$*.sum ]; then \
> +               mv -f $$dir/$*.sum $$dir/$*.sum.sep; mv -f $$dir/$*.log 
> $$dir/$*.log.sep; \
> +               sums="$$sums $$dir/$*.sum.sep"; logs="$$logs 
> $$dir/$*.log.sep"; \
> +             else \
> +               lost="$$lost $$dir"; \
> +             fi; \
>             fi; \
>           done; \
> +         if [ -n "$$lost" ]; then \
> +           echo "warning: $*: these runtest instances produced no 
> results:$$lost" >&2; \
> +         fi; \
>           $(SHELL) $(srcdir)/../contrib/dg-extract-results.sh $$sums \
> -           > $(TESTSUITEDIR)/$*/$*.sum; \
> +           > $(TESTSUITEDIR)/$*/$*.sum.tmp || exit 1; \
>           $(SHELL) $(srcdir)/../contrib/dg-extract-results.sh -L $$logs \
> -           > $(TESTSUITEDIR)/$*/$*.log; \
> +           > $(TESTSUITEDIR)/$*/$*.log.tmp || exit 1; \
> +         mv -f $(TESTSUITEDIR)/$*/$*.sum.tmp $(TESTSUITEDIR)/$*/$*.sum; \
> +         mv -f $(TESTSUITEDIR)/$*/$*.log.tmp $(TESTSUITEDIR)/$*/$*.log; \
>           rm -rf $(TESTSUITEDIR)/$*-parallel || true; \
>         else \
>           $(MAKE) TESTSUITEDIR="$(TESTSUITEDIR)" 
> RUNTESTFLAGS="$(RUNTESTFLAGS)" \
> --
> 2.50.1 (Apple Git-155)
>

Reply via email to