• Dmitry V. Levin's avatar
    selftests: do not macro-expand failed assertion expressions · b708a3cc
    Dmitry V. Levin authored
    I've stumbled over the current macro-expand behaviour of the test
    harness:
    
    $ gcc -Wall -xc - <<'__EOF__'
    TEST(macro) {
    	int status = 0;
    	ASSERT_TRUE(WIFSIGNALED(status));
    }
    TEST_HARNESS_MAIN
    __EOF__
    $ ./a.out
    [==========] Running 1 tests from 1 test cases.
    [ RUN      ] global.macro
    <stdin>:4:global.macro:Expected 0 (0) != (((signed char) (((status) & 0x7f) + 1) >> 1) > 0) (0)
    global.macro: Test terminated by assertion
    [     FAIL ] global.macro
    [==========] 0 / 1 tests passed.
    [  FAILED  ]
    
    With this change the output of the same test looks much more
    comprehensible:
    
    [==========] Running 1 tests from 1 test cases.
    [ RUN      ] global.macro
    <stdin>:4:global.macro:Expected 0 (0) != WIFSIGNALED(status) (0)
    global.macro: Test terminated by assertion
    [     FAIL ] global.macro
    [==========] 0 / 1 tests passed.
    [  FAILED  ]
    
    The issue is very similar to the bug fixed in glibc assert(3)
    three years ago:
    https://sourceware.org/bugzilla/show_bug.cgi?id=18604
    
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Will Drewry <wad@chromium.org>
    Cc: linux-kselftest@vger.kernel.org
    Signed-off-by: default avatarDmitry V. Levin <ldv@altlinux.org>
    Acked-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarShuah Khan <shuah@kernel.org>
    b708a3cc
kselftest_harness.h 20.1 KB