Re: [PATCH 1/2] testsuite: do not leave a truncated summary behind

Richard Biener <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <CAFiYyc1YsypSbJ5BkxCeuYtivupM+P-4hHZhnmwASuWVjC=56w@mail.gmail.com>
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)
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.