From: Paul Floyd Date: Tue, 23 Nov 2021 22:37:02 +0000 (+0100) Subject: Anticipate testcase problems with GCC 12 X-Git-Tag: VALGRIND_3_19_0~68 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=49fe0dc74a07ea4c5077867e44127eb68466eded;p=thirdparty%2Fvalgrind.git Anticipate testcase problems with GCC 12 There will be a lot more to come. On amd64 Linux In faultstatus was seeing the division by zero and emitting a ud2 opcode. In wrap3 a pair of mutually recursive functions were being inlined. When forced not to be inlined GCC merged them into a single function. It cannot see that the client requests have diffeent behaviour. --- diff --git a/memcheck/tests/wrap3.c b/memcheck/tests/wrap3.c index 1510d1311f..c6c552d5df 100644 --- a/memcheck/tests/wrap3.c +++ b/memcheck/tests/wrap3.c @@ -5,17 +5,19 @@ /* Check that function wrapping works for a mutually recursive pair. */ -static int fact1 ( int n ); -static int fact2 ( int n ); +int fact1 ( int n ); +int fact2 ( int n ); /* This is needed to stop gcc4 turning 'fact' into a loop */ __attribute__((noinline)) int mul ( int x, int y ) { return x * y; } +__attribute((noinline)) int fact1 ( int n ) { if (n == 0) return 1; else return mul(n, fact2(n-1)); } +__attribute((noinline)) int fact2 ( int n ) { if (n == 0) return 1; else return mul(n, fact1(n-1)); diff --git a/none/tests/faultstatus.c b/none/tests/faultstatus.c index 1b583d9d42..458ea82645 100644 --- a/none/tests/faultstatus.c +++ b/none/tests/faultstatus.c @@ -190,7 +190,9 @@ int main() return 0; } +static volatile s_zero; + static int zero() { - return 0; + return s_zero; }