From 5741aab90b7adc70797f04201f06c601e7b708bf Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Tue, 17 Mar 2026 23:20:51 +0100 Subject: [PATCH 1/2] Avoid resolving wild pointers in automatic search for tests --- utest/ctest.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/utest/ctest.h b/utest/ctest.h index b158b45382..8b4e607de1 100644 --- a/utest/ctest.h +++ b/utest/ctest.h @@ -373,12 +373,14 @@ static void __ctest_linkTests(void) struct ctest ** ctest_end = (struct ctest **)__PNAME(suite, test); // find begin and end of section by comparing magics - while (1) { +#if 0 + while (1) { struct ctest** t = __CTEST_POINTER_PREV(ctest_begin); if (t[0] == NULL) break; if (t[1] != (struct ctest*)__CTEST_MAGIC) break; ctest_begin = t; } +#endif while (1) { struct ctest** t = __CTEST_POINTER_NEXT(ctest_end); if (t[0] == NULL) break; From 2bdfe3198602df252340cf9c2fea7e5af71502d7 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Tue, 17 Mar 2026 23:22:20 +0100 Subject: [PATCH 2/2] Free arrays after test --- utest/test_fork.c | 5 +++++ utest/test_post_fork.c | 2 ++ utest/test_post_fork_async.c | 2 ++ 3 files changed, 9 insertions(+) diff --git a/utest/test_fork.c b/utest/test_fork.c index 44a619349a..aea0a90401 100644 --- a/utest/test_fork.c +++ b/utest/test_fork.c @@ -106,6 +106,7 @@ exit(0); if (fork_pid == -1) { perror("fork"); CTEST_ERR("Failed to fork process."); + free(a);free(b);free(c);free(d); } else if (fork_pid == 0) { // Compute a DGEMM product in the child process to check that the // thread pool as been properly been reinitialized after the fork. @@ -117,14 +118,17 @@ exit(0); if (fork_pid_nested == -1) { perror("fork"); CTEST_ERR("Failed to fork nested process."); + free(a);free(b);free(c);free(d); exit(1); } else if (fork_pid_nested == 0) { check_dgemm(a, b, d, c, n); + free(a);free(b);free(c);free(d); exit(0); } else { check_dgemm(a, b, d, c, n); int child_status = 0; pid_t wait_pid = wait(&child_status); + free(a);free(b);free(c);free(d); ASSERT_EQUAL(wait_pid, fork_pid_nested); ASSERT_EQUAL(0, WEXITSTATUS (child_status)); exit(0); @@ -134,6 +138,7 @@ exit(0); // Wait for the child to finish and check the exit code. int child_status = 0; pid_t wait_pid = wait(&child_status); + free(a);free(b);free(c);free(d); ASSERT_EQUAL(wait_pid, fork_pid); ASSERT_EQUAL(0, WEXITSTATUS (child_status)); } diff --git a/utest/test_post_fork.c b/utest/test_post_fork.c index d6e87f2ba2..c7d643b391 100644 --- a/utest/test_post_fork.c +++ b/utest/test_post_fork.c @@ -120,6 +120,7 @@ exit(0); #ifdef USE_OPENMP CTEST_ERR("Number of OpenMP threads was %d in this attempt.",i); #endif + free(a);free(b);free(c);free(d); } else if (fork_pid == 0) { // Just pretend to do something, e.g. call `uname`, then exit exit(0); @@ -137,5 +138,6 @@ exit(0); } #endif + free(a);free(b);free(c);free(d); #endif } diff --git a/utest/test_post_fork_async.c b/utest/test_post_fork_async.c index c283a6455f..26eb0c65bf 100644 --- a/utest/test_post_fork_async.c +++ b/utest/test_post_fork_async.c @@ -80,6 +80,7 @@ exit(0); if (fork_pid == -1) { perror("fork"); CTEST_ERR("Failed to fork process."); + free(arr);free(ipiv); } else if (fork_pid == 0) { exit(0); } else { @@ -90,5 +91,6 @@ exit(0); ASSERT_EQUAL(0, WEXITSTATUS (child_status)); } BLASFUNC(dgetrf)(&n, &n, arr, &n, ipiv, &info); + free(arr);free(ipiv); #endif }