From 49fe0dc74a07ea4c5077867e44127eb68466eded Mon Sep 17 00:00:00 2001 From: Paul Floyd Date: Tue, 23 Nov 2021 23:37:02 +0100 Subject: [PATCH] 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. --- memcheck/tests/wrap3.c | 6 ++++-- none/tests/faultstatus.c | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/memcheck/tests/wrap3.c b/memcheck/tests/wrap3.c index 1510d1311..c6c552d5d 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 1b583d9d4..458ea8264 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; }