(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
memset-1.c
       1  /* Copyright (C) 2002  Free Software Foundation.
       2  
       3     Test memset with various combinations of pointer alignments and lengths to
       4     make sure any optimizations in the library are correct.
       5  
       6     Written by Michael Meissner, March 9, 2002.  */
       7  
       8  #include <string.h>
       9  
      10  #ifndef MAX_OFFSET
      11  #define MAX_OFFSET (sizeof (long long))
      12  #endif
      13  
      14  #ifndef MAX_COPY
      15  #define MAX_COPY (10 * sizeof (long long))
      16  #endif
      17  
      18  #ifndef MAX_EXTRA
      19  #define MAX_EXTRA (sizeof (long long))
      20  #endif
      21  
      22  #define MAX_LENGTH (MAX_OFFSET + MAX_COPY + MAX_EXTRA)
      23  
      24  static union {
      25    char buf[MAX_LENGTH];
      26    long long align_int;
      27    long double align_fp;
      28  } u;
      29  
      30  char A = 'A';
      31  
      32  main ()
      33  {
      34    int off, len, i;
      35    char *p, *q;
      36  
      37    for (off = 0; off < MAX_OFFSET; off++)
      38      for (len = 1; len < MAX_COPY; len++)
      39        {
      40  	for (i = 0; i < MAX_LENGTH; i++)
      41  	  u.buf[i] = 'a';
      42  
      43  	p = memset (u.buf + off, '\0', len);
      44  	if (p != u.buf + off)
      45  	  abort ();
      46  
      47  	q = u.buf;
      48  	for (i = 0; i < off; i++, q++)
      49  	  if (*q != 'a')
      50  	    abort ();
      51  
      52  	for (i = 0; i < len; i++, q++)
      53  	  if (*q != '\0')
      54  	    abort ();
      55  
      56  	for (i = 0; i < MAX_EXTRA; i++, q++)
      57  	  if (*q != 'a')
      58  	    abort ();
      59  
      60  	p = memset (u.buf + off, A, len);
      61  	if (p != u.buf + off)
      62  	  abort ();
      63  
      64  	q = u.buf;
      65  	for (i = 0; i < off; i++, q++)
      66  	  if (*q != 'a')
      67  	    abort ();
      68  
      69  	for (i = 0; i < len; i++, q++)
      70  	  if (*q != 'A')
      71  	    abort ();
      72  
      73  	for (i = 0; i < MAX_EXTRA; i++, q++)
      74  	  if (*q != 'a')
      75  	    abort ();
      76  
      77  	p = memset (u.buf + off, 'B', len);
      78  	if (p != u.buf + off)
      79  	  abort ();
      80  
      81  	q = u.buf;
      82  	for (i = 0; i < off; i++, q++)
      83  	  if (*q != 'a')
      84  	    abort ();
      85  
      86  	for (i = 0; i < len; i++, q++)
      87  	  if (*q != 'B')
      88  	    abort ();
      89  
      90  	for (i = 0; i < MAX_EXTRA; i++, q++)
      91  	  if (*q != 'a')
      92  	    abort ();
      93        }
      94  
      95    exit (0);
      96  }