The recently-installed patch for interprocedural value-range propagation enabled some folding that was not expected by the strub-const testcases, causing them to fail.
I'm making the following adjustments to them to restore the behavior they tested for, and to make them more future-proof to future improvements of ivrp. I intend to install this as part of the monster patch upthread. --- a/gcc/testsuite/c-c++-common/torture/strub-const1.c +++ b/gcc/testsuite/c-c++-common/torture/strub-const1.c @@ -1,18 +1,22 @@ /* { dg-do compile } */ /* { dg-options "-fstrub=strict -fdump-ipa-strub" } */ -/* Check that, along with a strub const function call, we issue an asm statement - to make sure the watermark passed to it is held in memory before the call, - and another to make sure it is not assumed to be unchanged. */ +/* Check that, along with a strub const function call, we issue an asm + statement to make sure the watermark passed to it is held in memory before + the call, and another to make sure it is not assumed to be unchanged. f + should not be inlined into g, but if it were too simple it might be folded + by interprocedural value-range propagation. */ + +extern int __attribute__ ((__strub__ ("callable"), __const__)) c (); int __attribute__ ((__strub__, __const__)) -f() { - return 0; +f () { + return c (); } int -g() { - return f(); +g () { + return f (); } /* { dg-final { scan-ipa-dump-times "__asm__" 2 "strub" } } */ --- a/gcc/testsuite/c-c++-common/torture/strub-const2.c +++ b/gcc/testsuite/c-c++-common/torture/strub-const2.c @@ -6,17 +6,19 @@ before the call, and another to make sure it is not assumed to be unchanged. */ +extern int __attribute__ ((__strub__ ("callable"), __const__)) c (); + int __attribute__ ((__strub__)) #if ! __OPTIMIZE__ __attribute__ ((__const__)) #endif -f() { - return 0; +f () { + return c (); } int -g() { - return f(); +g () { + return f (); } /* { dg-final { scan-ipa-dump-times "__asm__" 2 "strub" } } */ -- Alexandre Oliva, happy hacker https://FSFLA.org/blogs/lxo/ Free Software Activist GNU Toolchain Engineer More tolerance and less prejudice are key for inclusion and diversity Excluding neuro-others for not behaving ""normal"" is *not* inclusive