diff options
author | Mark Mitchell <mmitchel@gcc.gnu.org> | 1998-07-18 15:25:20 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1998-07-18 15:25:20 +0000 |
commit | 4bf6f6a25584a9cd9513c19eaf932e9db684975e (patch) | |
tree | 88403d8a7944ee653d26340a49737c0943d2e69c | |
parent | 0c64a9cab4d4e776f2e0ba05ead2837ebc55f902 (diff) | |
download | gcc-4bf6f6a25584a9cd9513c19eaf932e9db684975e.zip gcc-4bf6f6a25584a9cd9513c19eaf932e9db684975e.tar.gz gcc-4bf6f6a25584a9cd9513c19eaf932e9db684975e.tar.bz2 |
*** empty log message ***
From-SVN: r21274
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/loop-2g.c | 63 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/loop-2g.x | 9 |
2 files changed, 72 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-2g.c b/gcc/testsuite/gcc.c-torture/execute/loop-2g.c new file mode 100644 index 0000000..8792dbf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/loop-2g.c @@ -0,0 +1,63 @@ +#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 (char)); + +f (int s, char *p) +{ + int i; + for (i = s; &p[i] < &p[40] && i >= 0; i++) + { + p[i] = -2; + } +} + +main () +{ +#ifdef MAP_ANON + char *p; + int dev_zero; + + 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 != (char *)-1) + { + p += OFFSET; + p[39] = 0; + f (0, p); + if (p[39] != (char)-2) + abort (); + p[39] = 0; + f (-1, p); + if (p[39] != 0) + abort (); + } +#endif + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-2g.x b/gcc/testsuite/gcc.c-torture/execute/loop-2g.x new file mode 100644 index 0000000..e68b8fb --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/loop-2g.x @@ -0,0 +1,9 @@ +# This doesn't work on m68k-motorola-sysv +# It also doesn't work on m88k-motorola-sysv3 + +global target_triplet +if { [istarget "m68k-motorola-sysv"] || [istarget "m88k-motorola-sysv3"] } { + set torture_compile_xfail "$target_triplet" +} + +return 0 |