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