From: J"orn Rennecke Date: Mon, 20 May 2002 10:57:31 +0000 (+0000) Subject: memcpy-2.c (SEQUENCE_LENGTH): Define. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=02116b3dec35222590050cb58a376872efeb66fb;p=platform%2Fupstream%2Fgcc.git memcpy-2.c (SEQUENCE_LENGTH): Define. * gcc.c-torture/execute/memcpy-2.c (SEQUENCE_LENGTH): Define. (MAX_COPY): Bump up to 10 times sizeof (long long). (main): Use a pattern of SEQUENCE_LENGTH different characters to copy. * gcc.c-torture/execute/memset-1.c (MAX_COPY): Bump up to 10 times sizeof (long long). * gcc.c-torture/execute/strcpy-1.c: New test. From-SVN: r53658 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 435c713..4f5290b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,14 @@ +Mon May 20 10:51:35 2002 J"orn Rennecke + + * gcc.c-torture/execute/memcpy-2.c (SEQUENCE_LENGTH): Define. + (MAX_COPY): Bump up to 10 times sizeof (long long). + (main): Use a pattern of SEQUENCE_LENGTH different characters to copy. + + * gcc.c-torture/execute/memset-1.c (MAX_COPY): Bump up to 10 times + sizeof (long long). + + * gcc.c-torture/execute/strcpy-1.c: New test. + 2002-05-19 Jason Merrill * g++.dg/ext/oper1.C: New test. diff --git a/gcc/testsuite/gcc.c-torture/execute/memcpy-2.c b/gcc/testsuite/gcc.c-torture/execute/memcpy-2.c index 7832bf8..f328b64 100644 --- a/gcc/testsuite/gcc.c-torture/execute/memcpy-2.c +++ b/gcc/testsuite/gcc.c-torture/execute/memcpy-2.c @@ -12,7 +12,7 @@ #endif #ifndef MAX_COPY -#define MAX_COPY (8 * sizeof (long long)) +#define MAX_COPY (10 * sizeof (long long)) #endif #ifndef MAX_EXTRA @@ -21,6 +21,11 @@ #define MAX_LENGTH (MAX_OFFSET + MAX_COPY + MAX_EXTRA) + +/* Use a sequence length that is not divisible by two, to make it more + likely to detect when words are mixed up. */ +#define SEQUENCE_LENGTH 31 + static union { char buf[MAX_LENGTH]; long long align_int; @@ -30,16 +35,18 @@ static union { main () { int off1, off2, len, i; - char *p, *q; + char *p, *q, c; for (off1 = 0; off1 < MAX_OFFSET; off1++) for (off2 = 0; off2 < MAX_OFFSET; off2++) for (len = 1; len < MAX_COPY; len++) { - for (i = 0; i < MAX_LENGTH; i++) + for (i = 0, c = 'A'; i < MAX_LENGTH; i++, c++) { u1.buf[i] = 'a'; - u2.buf[i] = 'A'; + if (c >= 'A' + SEQUENCE_LENGTH) + c = 'A'; + u2.buf[i] = c; } p = memcpy (u1.buf + off1, u2.buf + off2, len); @@ -51,9 +58,13 @@ main () if (*q != 'a') abort (); - for (i = 0; i < len; i++, q++) - if (*q != 'A') - abort (); + for (i = 0, c = 'A' + off2; i < len; i++, q++, c++) + { + if (c >= 'A' + SEQUENCE_LENGTH) + c = 'A'; + if (*q != c) + abort (); + } for (i = 0; i < MAX_EXTRA; i++, q++) if (*q != 'a') diff --git a/gcc/testsuite/gcc.c-torture/execute/memset-1.c b/gcc/testsuite/gcc.c-torture/execute/memset-1.c index dd5df10..b0b70f3 100644 --- a/gcc/testsuite/gcc.c-torture/execute/memset-1.c +++ b/gcc/testsuite/gcc.c-torture/execute/memset-1.c @@ -12,7 +12,7 @@ #endif #ifndef MAX_COPY -#define MAX_COPY (8 * sizeof (long long)) +#define MAX_COPY (10 * sizeof (long long)) #endif #ifndef MAX_EXTRA diff --git a/gcc/testsuite/gcc.c-torture/execute/strcpy-1.c b/gcc/testsuite/gcc.c-torture/execute/strcpy-1.c new file mode 100644 index 0000000..9484e95 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/strcpy-1.c @@ -0,0 +1,75 @@ +/* Copyright (C) 2002 Free Software Foundation. + + Test strcpy with various combinations of pointer alignments and lengths to + make sure any optimizations in the library are correct. */ + +#include + +#ifndef MAX_OFFSET +#define MAX_OFFSET (sizeof (long long)) +#endif + +#ifndef MAX_COPY +#define MAX_COPY (10 * sizeof (long long)) +#endif + +#ifndef MAX_EXTRA +#define MAX_EXTRA (sizeof (long long)) +#endif + +#define MAX_LENGTH (MAX_OFFSET + MAX_COPY + 1 + MAX_EXTRA) + +/* Use a sequence length that is not divisible by two, to make it more + likely to detect when words are mixed up. */ +#define SEQUENCE_LENGTH 31 + +static union { + char buf[MAX_LENGTH]; + long long align_int; + long double align_fp; +} u1, u2; + +main () +{ + int off1, off2, len, i; + char *p, *q, c; + + for (off1 = 0; off1 < MAX_OFFSET; off1++) + for (off2 = 0; off2 < MAX_OFFSET; off2++) + for (len = 1; len < MAX_COPY; len++) + { + for (i = 0, c = 'A'; i < MAX_LENGTH; i++, c++) + { + u1.buf[i] = 'a'; + if (c >= 'A' + SEQUENCE_LENGTH) + c = 'A'; + u2.buf[i] = c; + } + u2.buf[off2 + len] = '\0'; + + p = strcpy (u1.buf + off1, u2.buf + off2); + if (p != u1.buf + off1) + abort (); + + q = u1.buf; + for (i = 0; i < off1; i++, q++) + if (*q != 'a') + abort (); + + for (i = 0, c = 'A' + off2; i < len; i++, q++, c++) + { + if (c >= 'A' + SEQUENCE_LENGTH) + c = 'A'; + if (*q != c) + abort (); + } + + if (*q++ != '\0') + abort (); + for (i = 0; i < MAX_EXTRA; i++, q++) + if (*q != 'a') + abort (); + } + + exit (0); +}