]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Anticipate testcase problems with GCC 12
authorPaul Floyd <pjfloyd@wanadoo.fr>
Tue, 23 Nov 2021 22:37:02 +0000 (23:37 +0100)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Tue, 23 Nov 2021 22:37:02 +0000 (23:37 +0100)
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
none/tests/faultstatus.c

index 1510d1311ff1650d46c4efceea4d246c16147c71..c6c552d5dfdba4af99a2273d6032a7b6c9ee1bd7 100644 (file)
@@ -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));
index 1b583d9d4217fa0b5e2d93489dad3eb2815c6250..458ea8264593af4e35f4d5f72b2f03343f3492b5 100644 (file)
@@ -190,7 +190,9 @@ int main()
        return 0;
 }
 
+static volatile s_zero;
+
 static int zero()
 {
-       return 0;
+       return s_zero;
 }