From 23ab77f7e44e104595adb0b5cabd9caf93141ffd Mon Sep 17 00:00:00 2001
From: Jozef Lawrynowicz <jozef.l@mittosystems.com>
Date: Thu, 8 Nov 2018 22:39:12 +0000
Subject: [PATCH 3/7] [TESTSUITE] Dynamically check if size_t is large enough
for tests containing large structs/arrays
2018-11-14 Jozef Lawrynowicz <jozef.l@mittosystems.com>
gcc/testsuite/ChangeLog:
* gcc.c-torture/compile/20151204.c: Add dg-require-effective-target
size20plus.
* gcc.dg/pr34225.c: Likewise.
* gcc.dg/pr40971.c: Likewise.
* gcc.dg/pr69071.c: Likewise.
* gcc.dg/tree-ssa/loop-interchange-10.c: Likewise.
* gcc.dg/tree-ssa/loop-interchange-2.c: Likewise.
* gcc.dg/tree-ssa/loop-interchange-3.c: Likewise.
* gcc.dg/tree-ssa/loop-interchange-5.c: Likewise.
* gcc.dg/tree-ssa/loop-interchange-6.c: Likewise.
* gcc.dg/tree-ssa/loop-interchange-7.c: Likewise.
* gcc.dg/tree-ssa/loop-interchange-8.c: Likewise.
* gcc.dg/tree-ssa/loop-interchange-9.c: Likewise.
* gcc.dg/tree-ssa/loop-interchange-11.c: Add dg-require-effective-target
size32plus.
* gcc.dg/Walloc-size-larger-than-4.c: Likewise.
* gcc.dg/Walloc-size-larger-than-5.c: Likewise.
* gcc.dg/Walloc-size-larger-than-6.c: Likewise.
* gcc.dg/Walloc-size-larger-than-7.c: Likewise.
* gcc.dg/tree-ssa/loop-interchange-1.c: Likewise.
* gcc.dg/tree-ssa/loop-interchange-1b.c: Likewise.
* lib/target-supports.exp (check_effective_target_size20plus): New.
(check_effective_target_size32plus): Update comment.
---
gcc/testsuite/gcc.c-torture/compile/20151204.c | 2 +-
gcc/testsuite/gcc.dg/Walloc-size-larger-than-4.c | 2 +-
gcc/testsuite/gcc.dg/Walloc-size-larger-than-5.c | 2 +-
gcc/testsuite/gcc.dg/Walloc-size-larger-than-6.c | 2 +-
gcc/testsuite/gcc.dg/Walloc-size-larger-than-7.c | 2 +-
gcc/testsuite/gcc.dg/pr34225.c | 1 +
gcc/testsuite/gcc.dg/pr40971.c | 1 +
gcc/testsuite/gcc.dg/pr69071.c | 2 +-
gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-1.c | 3 ++-
gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-10.c | 3 ++-
gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-11.c | 3 ++-
gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-1b.c | 3 ++-
gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-2.c | 3 ++-
gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-3.c | 3 ++-
gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-5.c | 3 ++-
gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-6.c | 3 ++-
gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-7.c | 3 ++-
gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-8.c | 3 ++-
gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-9.c | 3 ++-
gcc/testsuite/lib/target-supports.exp | 18 +++++++++++++++---
20 files changed, 45 insertions(+), 20 deletions(-)
@@ -1,4 +1,4 @@
-/* { dg-skip-if "Array too big" { "avr-*-*" "pdp11-*-*" } } */
+/* { dg-require-effective-target size20plus } */
typedef __SIZE_TYPE__ size_t;
@@ -1,6 +1,6 @@
/* PR middle-end/82063 - issues with arguments enabled by -Wall
{ dg-do compile }
- { dg-skip-if "small address space" { "pdp11-*-*" } }
+ { dg-require-effective-target size32plus }
{ dg-options "-O -Walloc-size-larger-than=1MiB -ftrack-macro-expansion=0" } */
void sink (void*);
@@ -1,6 +1,6 @@
/* PR middle-end/82063 - issues with arguments enabled by -Wall
{ dg-do compile }
- { dg-skip-if "small address space" { "pdp11-*-*" } }
+ { dg-require-effective-target size32plus }
{ dg-options "-O -Walloc-size-larger-than=1MB -ftrack-macro-expansion=0" } */
void sink (void*);
@@ -1,6 +1,6 @@
/* PR middle-end/82063 - issues with arguments enabled by -Wall
{ dg-do compile }
- { dg-skip-if "small address space" { "pdp11-*-*" } }
+ { dg-require-effective-target size32plus }
{ dg-options "-O -Walloc-size-larger-than=1GiB -ftrack-macro-expansion=0" } */
void sink (void*);
@@ -1,6 +1,6 @@
/* PR middle-end/82063 - issues with arguments enabled by -Wall
{ dg-do compile }
- { dg-skip-if "small address space" { "pdp11-*-*" } }
+ { dg-require-effective-target size32plus }
{ dg-options "-O -Walloc-size-larger-than=1GB -ftrack-macro-expansion=0" } */
void sink (void*);
@@ -2,6 +2,7 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fno-strict-aliasing -fstack-protector" } */
/* { dg-require-effective-target fstack_protector } */
+/* { dg-require-effective-target size20plus } */
typedef __SIZE_TYPE__ size_t;
extern int sscanf (const char *, const char *, ...);
@@ -2,6 +2,7 @@
/* { dg-do compile } */
/* { dg-options "-O -fstack-protector -fno-strict-aliasing" } */
/* { dg-require-effective-target fstack_protector } */
+/* { dg-require-effective-target size20plus } */
extern void bar (char *);
@@ -1,7 +1,7 @@
/* PR target/69071 */
/* { dg-do compile } */
/* { dg-options "-O2 -g" } */
-/* { dg-skip-if "Array too big" { "avr-*-*" } } */
+/* { dg-require-effective-target size20plus } */
void *bar (void *);
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -floop-interchange -fassociative-math -fno-signed-zeros -fno-trapping-math -fdump-tree-linterchange-details" } */
-/* { dg-skip-if "too big data segment" { avr-*-* visium-*-* } } */
+/* { dg-require-effective-target size32plus } */
+/* { dg-skip-if "too big data segment" { visium-*-* } } */
/* Copied from graphite/interchange-4.c */
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -floop-interchange -fdump-tree-linterchange-details" } */
-/* { dg-skip-if "too big data segment" { avr-*-* visium-*-* } } */
+/* { dg-require-effective-target size20plus } */
+/* { dg-skip-if "too big data segment" { visium-*-* } } */
#define M 256
int a[M][M], b[M][M];
@@ -1,6 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-O2 -floop-interchange -fdump-tree-linterchange-details" } */
-/* { dg-skip-if "too big data segment" { avr-*-* visium-*-* } } */
+/* { dg-require-effective-target size20plus } */
+/* { dg-skip-if "too big data segment" { visium-*-* } } */
#define M 256
int a[M][M], b[M][M];
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -floop-interchange -fdump-tree-linterchange-details" } */
-/* { dg-skip-if "too big data segment" { avr-*-* visium-*-* } } */
+/* { dg-require-effective-target size32plus } */
+/* { dg-skip-if "too big data segment" { visium-*-* } } */
/* Copied from graphite/interchange-4.c */
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -floop-interchange -fdump-tree-linterchange-details" } */
-/* { dg-skip-if "too big data segment" { avr-*-* visium-*-* } } */
+/* { dg-require-effective-target size20plus } */
+/* { dg-skip-if "too big data segment" { visium-*-* } } */
/* Copied from graphite/interchange-5.c */
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -floop-interchange -fdump-tree-linterchange-details" } */
-/* { dg-skip-if "too big stack" { avr-*-* visium-*-* } } */
+/* { dg-require-effective-target size20plus } */
+/* { dg-skip-if "too big stack" { visium-*-* } } */
/* Copied from graphite/interchange-6.c */
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -floop-interchange -fdump-tree-linterchange-details" } */
-/* { dg-skip-if "too big data segment" { avr-*-* visium-*-* } } */
+/* { dg-require-effective-target size20plus } */
+/* { dg-skip-if "too big data segment" { visium-*-* } } */
#define M 256
int a[M][M], b[M][M], c[M][M], d[M][M];
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -floop-interchange -fdump-tree-linterchange-details" } */
-/* { dg-skip-if "too big data segment" { avr-*-* visium-*-* } } */
+/* { dg-require-effective-target size20plus } */
+/* { dg-skip-if "too big data segment" { visium-*-* } } */
#define M 256
int a[M][M], b[M][M], c[M][M], d[M][M];
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -floop-interchange -fdump-tree-linterchange-details" } */
-/* { dg-skip-if "too big data segment" { avr-*-* visium-*-* } } */
+/* { dg-require-effective-target size20plus } */
+/* { dg-skip-if "too big data segment" { visium-*-* } } */
#define M 256
int a[M][M], b[M][M], c[M][M], d[M][M];
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -floop-interchange -fdump-tree-linterchange-details" } */
-/* { dg-skip-if "too big data segment" { avr-*-* visium-*-* } } */
+/* { dg-require-effective-target size20plus } */
+/* { dg-skip-if "too big data segment" { visium-*-* } } */
#define M 256
int a[M][M], b[M][M], c[M][M], d[M][M];
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -floop-interchange -fdump-tree-linterchange-details" } */
-/* { dg-skip-if "too big data segment" { avr-*-* visium-*-* } } */
+/* { dg-require-effective-target size20plus } */
+/* { dg-skip-if "too big data segment" { visium-*-* } } */
#define M 256
int a[M][M], b[M][M], c[M], d[M];
@@ -2600,9 +2600,21 @@ proc check_effective_target_ptr32plus { } {
}]
}
-# Return 1 if we support 32-bit or larger array and structure sizes
-# using default options, 0 otherwise. Avoid false positive on
-# targets with 20 or 24 bit address spaces.
+# Return 1 if we support 16-bit or larger array and structure sizes
+# using default options, 0 otherwise.
+# This implies at least a 20-bit address space, as no targets have an address
+# space between 16 and 20 bits.
+
+proc check_effective_target_size20plus { } {
+ return [check_no_compiler_messages size32plus object {
+ char dummy[65537L];
+ }]
+}
+
+# Return 1 if we support 24-bit or larger array and structure sizes
+# using default options, 0 otherwise.
+# This implies at least a 32-bit address space, as no targets have an address
+# space between 24 and 32 bits.
proc check_effective_target_size32plus { } {
return [check_no_compiler_messages size32plus object {
--
2.7.4