Hi,
Atm vla-1.c has the following failures:
...
FAIL: gcc.dg/guality/vla-1.c -O1 -DPREVENT_OPTIMIZATION line 17 sizeof (a)
== 6
FAIL: gcc.dg/guality/vla-1.c -O2 -DPREVENT_OPTIMIZATION line 17 sizeof (a)
== 6
FAIL: gcc.dg/guality/vla-1.c -O3 -g -DPREVENT_OPTIMIZATION line 17 sizeof
(a) == 6
FAIL: gcc.dg/guality/vla-1.c -Os -DPREVENT_OPTIMIZATION line 17 sizeof (a)
== 6
FAIL: gcc.dg/guality/vla-1.c -O2 -flto -fno-use-linker-plugin
-flto-partition=none -DPREVENT_OPTIMIZATION line 17 sizeof (a) == 6
FAIL: gcc.dg/guality/vla-1.c -O2 -flto -fno-use-linker-plugin
-flto-partition=none -DPREVENT_OPTIMIZATION line 24 sizeof (a) == 17 * sizeof
(short)
FAIL: gcc.dg/guality/vla-1.c -O2 -flto -fuse-linker-plugin
-fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 17 sizeof (a) == 6
FAIL: gcc.dg/guality/vla-1.c -O2 -flto -fuse-linker-plugin
-fno-fat-lto-objects -DPREVENT_OPTIMIZATION line 24 sizeof (a) == 17 * sizeof
(short)
...
For the non-lto failures, the relevant bit is:
...
int __attribute__((noinline))
f1 (int i)
{
char a[i + 1];
a[0] = 5; /* { dg-final { gdb-test .+1 "i" "5" } } */
return a[0]; /* { dg-final { gdb-test . "sizeof (a)" "6" } } */
}
...
which at -O1 already ends up as:
...
# vla-1.c:14:1
.loc 1 14 1 is_stmt 1
.cfi_startproc
# DEBUG i => di
# vla-1.c:15:3
.loc 1 15 3
# DEBUG => sxn(di+0x1)-0x1
# vla-1.c:16:3
.loc 1 16 3
# vla-1.c:17:3
.loc 1 17 3
# vla-1.c:18:1
.loc 1 18 1 is_stmt 0
movl $5, %eax
ret
...
So, the local vla a is optimized away.
This patch adds VOLATILE to 'a', which prevents it from being optimized away,
and fixes the non-lto failures.
Committed as obvious.
Thanks,
- Tom
[testsuite/guality] Prevent optimization of local in vla-1.c
2018-07-01 Tom de Vries <[email protected]>
* gcc.dg/guality/prevent-optimization.h (VOLATILE): Define.
* gcc.dg/guality/vla-1.c (f1): Mark local vla a as VOLATILE.
---
gcc/testsuite/gcc.dg/guality/prevent-optimization.h | 2 ++
gcc/testsuite/gcc.dg/guality/vla-1.c | 4 +++-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/gcc/testsuite/gcc.dg/guality/prevent-optimization.h
b/gcc/testsuite/gcc.dg/guality/prevent-optimization.h
index 0ef84a3d9c8..57e945cafb4 100644
--- a/gcc/testsuite/gcc.dg/guality/prevent-optimization.h
+++ b/gcc/testsuite/gcc.dg/guality/prevent-optimization.h
@@ -21,8 +21,10 @@ along with GCC; see the file COPYING3. If not see
#ifdef PREVENT_OPTIMIZATION
#define ATTRIBUTE_USED __attribute__((used))
+#define VOLATILE volatile
#else
#define ATTRIBUTE_USED
+#define VOLATILE
#endif
#endif
diff --git a/gcc/testsuite/gcc.dg/guality/vla-1.c
b/gcc/testsuite/gcc.dg/guality/vla-1.c
index 264b9f3f92b..d281185c18c 100644
--- a/gcc/testsuite/gcc.dg/guality/vla-1.c
+++ b/gcc/testsuite/gcc.dg/guality/vla-1.c
@@ -2,6 +2,8 @@
/* { dg-do run } */
/* { dg-options "-g" } */
+#include "prevent-optimization.h"
+
void __attribute__((noinline))
bar (short *p)
{
@@ -12,7 +14,7 @@ bar (short *p)
int __attribute__((noinline))
f1 (int i)
{
- char a[i + 1];
+ VOLATILE char a[i + 1];
a[0] = 5; /* { dg-final { gdb-test .+1 "i" "5" } } */
return a[0]; /* { dg-final { gdb-test . "sizeof (a)" "6" } } */
}