aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-07-24 15:20:34 -0700
committerRichard Henderson <rth@gcc.gnu.org>2002-07-24 15:20:34 -0700
commiteb5da24bed4710f5c1fa9be221d22ddbeb44f583 (patch)
treeeeb8468322e3c5daca7dd94e7ca8d8081c4f03f0
parent8ad8135aa470596753f2c8ea82468418dc349cad (diff)
downloadgcc-eb5da24bed4710f5c1fa9be221d22ddbeb44f583.zip
gcc-eb5da24bed4710f5c1fa9be221d22ddbeb44f583.tar.gz
gcc-eb5da24bed4710f5c1fa9be221d22ddbeb44f583.tar.bz2
* gcc.c-torture/execute/loop-2e.c: Rewrite for 64 bit and no mmap.
From-SVN: r55724
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/loop-2e.c73
2 files changed, 30 insertions, 47 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 554b416..2ee83e8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2002-07-24 Richard Henderson <rth@redhat.com>
+
+ * gcc.c-torture/execute/loop-2e.c: Rewrite for 64 bit and no mmap.
+
2002-07-24 Gabriel Dos Reis <gdr@nerim.net>
* g++.dg/ext/alignof1.C (main): Return 0 for success.
diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-2e.c b/gcc/testsuite/gcc.c-torture/execute/loop-2e.c
index b6ee650..71c7a4d 100644
--- a/gcc/testsuite/gcc.c-torture/execute/loop-2e.c
+++ b/gcc/testsuite/gcc.c-torture/execute/loop-2e.c
@@ -1,31 +1,4 @@
-#include <limits.h>
-
-#ifdef __unix__ /* ??? Is that good enough? */
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#ifndef MAP_ANON
-#ifdef MAP_ANONYMOUS
-#define MAP_ANON MAP_ANONYMOUS
-#else
-#define MAP_ANON MAP_FILE
-#endif
-#endif
-#ifndef MAP_FILE
-#define MAP_FILE 0
-#endif
-#ifndef MAP_FIXED
-#define MAP_FIXED 0
-#endif
-#endif
-
-#define MAP_START (void *)0x7fff8000
-#define MAP_LEN 0x10000
-
-#define OFFSET (MAP_LEN/2 - 2 * sizeof (int));
-
-f (int *p, int **q)
+void f (int *p, int **q)
{
int i;
for (i = 0; i < 40; i++)
@@ -34,27 +7,33 @@ f (int *p, int **q)
}
}
-main ()
+int main ()
{
-#ifdef MAP_ANON
void *p;
int *q[40];
- int dev_zero;
+ __SIZE_TYPE__ start;
- dev_zero = open ("/dev/zero", O_RDONLY);
- /* -1 is OK when we have MAP_ANON; else mmap will flag an error. */
- if (INT_MAX != 0x7fffffffL || sizeof (char *) != sizeof (int))
- exit (0);
- p = mmap (MAP_START, MAP_LEN, PROT_READ|PROT_WRITE,
- MAP_ANON|MAP_FIXED|MAP_PRIVATE, dev_zero, 0);
- if (p != (void *)-1)
- {
- p = (char *)p + OFFSET;
- q[39] = 0;
- f (p, q);
- if (q[39] != (int *)p + 39)
- abort ();
- }
-#endif
- exit (0);
+ /* Find the signed middle of the address space. */
+ if (sizeof(start) == sizeof(int))
+ start = (__SIZE_TYPE__) __INT_MAX__;
+ else if (sizeof(start) == sizeof(long))
+ start = (__SIZE_TYPE__) __LONG_MAX__;
+ else if (sizeof(start) == sizeof(long long))
+ start = (__SIZE_TYPE__) __LONG_LONG_MAX__;
+ else
+ return 0;
+
+ /* Arbitrarily align the pointer. */
+ start &= -32;
+
+ /* Pretend that's good enough to start address arithmetic. */
+ p = (void *)start;
+
+ /* Verify that GIV replacement computes the correct results. */
+ q[39] = 0;
+ f (p, q);
+ if (q[39] != (int *)p + 39)
+ abort ();
+
+ return 0;
}