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 <tdevr...@suse.de> * 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" } } */ }