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" } } */
 }

Reply via email to