patch 9.1.0816: tests: not clear what tests cause asan failures

Commit: 
https://github.com/vim/vim/commit/ce35ee89864784930d16392d5fd5dea1fab17f9c
Author: Christian Brabandt <c...@256bit.org>
Date:   Sun Oct 27 21:15:50 2024 +0100

    patch 9.1.0816: tests: not clear what tests cause asan failures
    
    Problem:  tests: not clear what tests cause asan failures
    Solution: append testname to $ASAN_OPTIONS
    
    Mention what test causes ASAN failures by appending the testname
    to log_path in $ASAN_OPTIONS/$UBSAN_OPTIONS. This assumes 'log_path' is
    always the last sub-option in $ASAN_OPTIONS.
    
    While at it, also make the CI run with `-O0` instead of `-O1` when ASAN
    is enable since this causes line numbers to disappear.
    
    closes: #15927
    
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 0496bcdb6..c1cca4056 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -194,9 +194,9 @@ jobs:
             echo "TEST=unittests"
           fi
           if ${{ contains(matrix.extra, 'asan') }}; then
-            echo "SANITIZER_CFLAGS=-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE 
-fsanitize-recover=all -fsanitize=address -fsanitize=undefined 
-fno-omit-frame-pointer"
-            echo "ASAN_OPTIONS=print_stacktrace=1 log_path=${LOG_DIR}/asan"
-            echo "UBSAN_OPTIONS=print_stacktrace=1 log_path=${LOG_DIR}/ubsan"
+            echo "SANITIZER_CFLAGS=-g -O0 -DABORT_ON_INTERNAL_ERROR -DEXITFREE 
-fsanitize-recover=all -fsanitize=address -fsanitize=undefined 
-fno-omit-frame-pointer"
+            echo "ASAN_OPTIONS=print_stacktrace=1:log_path=${LOG_DIR}/asan"
+            echo "UBSAN_OPTIONS=print_stacktrace=1:log_path=${LOG_DIR}/ubsan"
             echo 
"LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/src/testdir/lsan-suppress.txt"
           fi
           if ${{ contains(matrix.extra, 'vimtags') }}; then
@@ -304,6 +304,7 @@ jobs:
         if: contains(matrix.extra, 'asan') && !cancelled()
         run: |
           for f in $(grep -lR '#[[:digit:]]* *0x[[:xdigit:]]*' "${LOG_DIR}"); 
do
+            echo "$f"
             asan_symbolize -l "$f"
             false # in order to fail a job
           done
diff --git a/src/testdir/Makefile b/src/testdir/Makefile
index 3b665e707..4c7a27303 100644
--- a/src/testdir/Makefile
+++ b/src/testdir/Makefile
@@ -60,6 +60,9 @@ report:
 
 $(SCRIPTS_TINY_OUT) $(NEW_TESTS_RES): $(VIMPROG)
 
+# For $ASAN_OPTIONS and $UBSAN_OPTIONS append the testname to it.
+# This assumes $ASAN_OPTIONS contains log_path as last part of the environment 
variable
+# For Github CI, those variables are set in .github/workflows/ci.yml
 
 # Execute an individual new style test, e.g.:
 #      make test_largefile
@@ -114,7 +117,11 @@ tinytests: $(SCRIPTS_TINY_OUT)
        @# 200 msec is sufficient, but only modern sleep supports a fraction of
        @# a second, fall back to a second if it fails.
        @-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
-       $(RUN_VIMPROG) $*.in $(REDIR_TEST_TO_NULL)
+       if test -n "$${ASAN_OPTIONS}"; then \
+               ASAN_OPTIONS="$${ASAN_OPTIONS}_$*" 
UBSAN_OPTIONS="$${UBSAN_OPTIONS}_$*" $(RUN_VIMPROG) $*.in $(REDIR_TEST_TO_NULL) 
; \
+       else \
+               $(RUN_VIMPROG) $*.in $(REDIR_TEST_TO_NULL) ; \
+       fi
 
        @# Check if the test.out file matches test.ok.
        @/bin/sh -c "if test -f test.out; then \
@@ -145,32 +152,53 @@ newtestssilent: $(NEW_TESTS_RES)
 .vim.res:
        @echo "$(VIMPROG)" > vimcmd
        @echo "$(RUN_VIMTEST)" >> vimcmd
-       $(RUN_VIMTEST) $(NO_INITS) -S runtest.vim $*.vim $(REDIR_TEST_TO_NULL)
+       if test -n "$${ASAN_OPTIONS}"; then \
+               ASAN_OPTIONS="$${ASAN_OPTIONS}_$*" 
UBSAN_OPTIONS="$${UBSAN_OPTIONS}_$*" $(RUN_VIMTEST) $(NO_INITS) -S runtest.vim 
$*.vim $(REDIR_TEST_TO_NULL) ; \
+       else \
+               $(RUN_VIMTEST) $(NO_INITS) -S runtest.vim $*.vim 
$(REDIR_TEST_TO_NULL) ; \
+       fi
        @rm vimcmd
 
 test_gui.res: test_gui.vim
        @echo "$(VIMPROG)" > vimcmd
        @echo "$(RUN_GVIMTEST)" >> vimcmd
-       $(RUN_VIMTEST) -u NONE $(NO_INITS) -S runtest.vim $<
+       if test -n "$${ASAN_OPTIONS}"; then \
+               ASAN_OPTIONS="$${ASAN_OPTIONS}_$*" 
UBSAN_OPTIONS="$${UBSAN_OPTIONS}_$*" $(RUN_VIMTEST) -u NONE $(NO_INITS) -S 
runtest.vim $< ; \
+       else \
+               $(RUN_VIMTEST) -u NONE $(NO_INITS) -S runtest.vim $< ; \
+       fi
+
        @rm vimcmd
 
 test_gui_init.res: test_gui_init.vim
        @echo "$(VIMPROG)" > vimcmd
        @echo "$(RUN_GVIMTEST_WITH_GVIMRC)" >> vimcmd
-       $(RUN_VIMTEST) -u gui_preinit.vim -U gui_init.vim $(NO_PLUGINS) -S 
runtest.vim $<
+       if test -n "$${ASAN_OPTIONS}"; then \
+               ASAN_OPTIONS="$${ASAN_OPTIONS}_$*" 
UBSAN_OPTIONS="$${UBSAN_OPTIONS}_$*" $(RUN_VIMTEST) -u gui_preinit.vim -U 
gui_init.vim $(NO_PLUGINS) -S runtest.vim $< ; \
+       else \
+               $(RUN_VIMTEST) -u gui_preinit.vim -U gui_init.vim $(NO_PLUGINS) 
-S runtest.vim $< ; \
+       fi
        @rm vimcmd
 
 GEN_OPT_DEPS = gen_opt_test.vim ../optiondefs.h ../../runtime/doc/options.txt
 
 opt_test.vim: $(GEN_OPT_DEPS)
-       $(VIMPROG) -e -s -u NONE $(NO_INITS) --nofork --gui-dialog-file 
guidialog -S $(GEN_OPT_DEPS)
+       if test -n "$${ASAN_OPTIONS}"; then \
+               ASAN_OPTIONS="$${ASAN_OPTIONS}_$*" 
UBSAN_OPTIONS="$${UBSAN_OPTIONS}_$*" $(VIMPROG) -e -s -u NONE $(NO_INITS) 
--nofork --gui-dialog-file guidialog -S $(GEN_OPT_DEPS) ; \
+       else \
+               $(VIMPROG) -e -s -u NONE $(NO_INITS) --nofork --gui-dialog-file 
guidialog -S $(GEN_OPT_DEPS) ; \
+       fi
        @if test -f test.log; then \
                cat test.log; \
                exit 1; \
        fi
 
 test_xxd.res:
-       XXD=$(XXDPROG); export XXD; $(RUN_VIMTEST) $(NO_INITS) -S runtest.vim 
test_xxd.vim
+       if test -n "$${ASAN_OPTIONS}"; then \
+               XXD=$(XXDPROG); export XXD; ASAN_OPTIONS="$${ASAN_OPTIONS}_$*" 
UBSAN_OPTIONS="$${UBSAN_OPTIONS}_$*" $(RUN_VIMTEST) $(NO_INITS) -S runtest.vim 
test_xxd.vim ; \
+       else \
+               XXD=$(XXDPROG); export XXD; $(RUN_VIMTEST) $(NO_INITS) -S 
runtest.vim test_xxd.vim ; \
+       fi
 
 test_bench_regexp.res: test_bench_regexp.vim
        -rm -rf benchmark.out $(RM_ON_RUN)
@@ -178,5 +206,9 @@ test_bench_regexp.res: test_bench_regexp.vim
        @# 200 msec is sufficient, but only modern sleep supports a fraction of
        @# a second, fall back to a second if it fails.
        @-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
-       $(RUN_VIMTEST) $(NO_INITS) -S runtest.vim $*.vim $(REDIR_TEST_TO_NULL)
+       if test -n "$${ASAN_OPTIONS}"; then \
+               ASAN_OPTIONS="$${ASAN_OPTIONS}_$*" 
UBSAN_OPTIONS="$${UBSAN_OPTIONS}_$*" $(RUN_VIMTEST) $(NO_INITS) -S runtest.vim 
$*.vim $(REDIR_TEST_TO_NULL) ; \
+       else \
+               $(RUN_VIMTEST) $(NO_INITS) -S runtest.vim $*.vim 
$(REDIR_TEST_TO_NULL) ; \
+       fi
        @/bin/sh -c "if test -f benchmark.out; then cat benchmark.out; fi"
diff --git a/src/version.c b/src/version.c
index 393106715..48312818b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    816,
 /**/
     815,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1t59tj-00BqVW-Mx%40256bit.org.

Raspunde prin e-mail lui