From 49ce385c44f4c2882ef0aeac0312e6ae9bc85f8a Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Mon, 4 May 2026 17:43:44 +0200 Subject: [PATCH] test: move SPA_NORETURN attributes to header MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Otherwise, when building with fortify-headers, I get an error because the compiler doesn't know pwtest_ptr_notnull will not return if the passed pointer is null, so it doesn't know the pointer subsequently passed to memmove via pw_array_remove will be non-null. In file included from ../spa/include/spa/utils/defs.h:11, from ../spa/include/spa/utils/string.h:15, from ../test/pwtest.h:15, from ../test/test-array.c:7: In function ‘memmove’, inlined from ‘array_test’ at ../test/test-array.c:66:2: /nix/store/9031y56lsf4mq177s68ql1axsf241r7j-fortify-headers-3.0.1/include/string.h:77:16: error: argument 1 is null but the corresponding size argument 3 value is [8, 18446744073709551615] [-Werror=nonnull] 77 | return __orig_memmove(__d, __s, __n); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /nix/store/9031y56lsf4mq177s68ql1axsf241r7j-fortify-headers-3.0.1/include/string.h:77:16: warning: ‘__orig_memmove’ reading 8 or more bytes from a region of size 0 [-Wstringop-overread] In function ‘array_test’: cc1: note: source object is likely at address zero In file included from /nix/store/9031y56lsf4mq177s68ql1axsf241r7j-fortify-headers-3.0.1/include/stdlib.h:33, from ../spa/include/spa/utils/string.h:11: /nix/store/9031y56lsf4mq177s68ql1axsf241r7j-fortify-headers-3.0.1/include/string.h:69:1: note: in a call to function ‘__orig_memmove’ declared with attribute ‘access (read_only, 2, 3)’ 69 | _FORTIFY_FN(memmove) void *memmove(void * _FORTIFY_POS0 __d, | ^~~~~~~~~~~ --- test/pwtest-implementation.h | 7 +++++++ test/pwtest.c | 7 ------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/test/pwtest-implementation.h b/test/pwtest-implementation.h index 165784918..033d05dc4 100644 --- a/test/pwtest-implementation.h +++ b/test/pwtest-implementation.h @@ -10,30 +10,37 @@ /* This header should never be included on its own, it merely exists to make * the user-visible pwtest.h header more readable */ +SPA_NORETURN void _pwtest_fail_condition(int exitstatus, const char *file, int line, const char *func, const char *condition, const char *message, ...); +SPA_NORETURN void _pwtest_fail_comparison_int(const char *file, int line, const char *func, const char *operator, int a, int b, const char *astr, const char *bstr); +SPA_NORETURN void _pwtest_fail_comparison_double(const char *file, int line, const char *func, const char *operator, double a, double b, const char *astr, const char *bstr); +SPA_NORETURN void _pwtest_fail_comparison_ptr(const char *file, int line, const char *func, const char *comparison); +SPA_NORETURN void _pwtest_fail_comparison_str(const char *file, int line, const char *func, const char *comparison, const char *a, const char *b); +SPA_NORETURN void _pwtest_fail_comparison_bool(const char *file, int line, const char *func, const char *operator, bool a, bool b, const char *astr, const char *bstr); +SPA_NORETURN void _pwtest_fail_errno(const char *file, int line, const char *func, int expected, int err_no); diff --git a/test/pwtest.c b/test/pwtest.c index 89a385f53..3b67c5bcd 100644 --- a/test/pwtest.c +++ b/test/pwtest.c @@ -239,7 +239,6 @@ static void pwtest_backtrace(pid_t p) } SPA_PRINTF_FUNC(6, 7) -SPA_NORETURN void _pwtest_fail_condition(int exitstatus, const char *file, int line, const char *func, const char *condition, const char *message, ...) @@ -259,7 +258,6 @@ void _pwtest_fail_condition(int exitstatus, exit(exitstatus); } -SPA_NORETURN void _pwtest_fail_comparison_bool(const char *file, int line, const char *func, const char *operator, bool a, bool b, const char *astr, const char *bstr) @@ -271,7 +269,6 @@ void _pwtest_fail_comparison_bool(const char *file, int line, const char *func, exit(PWTEST_FAIL); } -SPA_NORETURN void _pwtest_fail_errno(const char *file, int line, const char *func, int expected, int err_no) { @@ -283,7 +280,6 @@ void _pwtest_fail_errno(const char *file, int line, const char *func, } -SPA_NORETURN void _pwtest_fail_comparison_int(const char *file, int line, const char *func, const char *operator, int a, int b, const char *astr, const char *bstr) @@ -295,7 +291,6 @@ void _pwtest_fail_comparison_int(const char *file, int line, const char *func, exit(PWTEST_FAIL); } -SPA_NORETURN void _pwtest_fail_comparison_double(const char *file, int line, const char *func, const char *operator, double a, double b, const char *astr, const char *bstr) @@ -307,7 +302,6 @@ void _pwtest_fail_comparison_double(const char *file, int line, const char *func exit(PWTEST_FAIL); } -SPA_NORETURN void _pwtest_fail_comparison_ptr(const char *file, int line, const char *func, const char *comparison) { @@ -317,7 +311,6 @@ void _pwtest_fail_comparison_ptr(const char *file, int line, const char *func, exit(PWTEST_FAIL); } -SPA_NORETURN void _pwtest_fail_comparison_str(const char *file, int line, const char *func, const char *comparison, const char *a, const char *b) {