modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/builtins/memmove.c (about)

     1  /* Copyright (C) 2003, 2004  Free Software Foundation.
     2  
     3     Ensure builtin memmove and bcopy perform correctly.
     4  
     5     Written by Jakub Jelinek, 4/26/2003.  */
     6  
     7  extern void abort (void);
     8  typedef __SIZE_TYPE__ size_t;
     9  extern void *memmove (void *, const void *, size_t);
    10  extern void bcopy (const void *, void *, size_t);
    11  extern int memcmp (const void *, const void *, size_t);
    12  
    13  const char s1[] = "123";
    14  char p[32] = "";
    15  
    16  static const struct foo
    17  {
    18    char *s;
    19    double d;
    20    long l;
    21  } foo[] =
    22  {
    23    { "hello world1", 3.14159, 101L },
    24    { "hello world2", 3.14159, 102L },
    25    { "hello world3", 3.14159, 103L },
    26    { "hello world4", 3.14159, 104L },
    27    { "hello world5", 3.14159, 105L },
    28    { "hello world6", 3.14159, 106L }
    29  };
    30  
    31  static const struct bar
    32  {
    33    char *s;
    34    const struct foo f[3];
    35  } bar[] =
    36  {
    37    {
    38      "hello world10",
    39      {
    40        { "hello1", 3.14159, 201L },
    41        { "hello2", 3.14159, 202L },
    42        { "hello3", 3.14159, 203L },
    43      }
    44    },
    45    {
    46      "hello world11",
    47      {
    48        { "hello4", 3.14159, 204L },
    49        { "hello5", 3.14159, 205L },
    50        { "hello6", 3.14159, 206L },
    51      }
    52    }
    53  };
    54  
    55  static const int baz[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
    56  
    57  void
    58  main_test (void)
    59  {
    60    const char *s;
    61    struct foo f1[sizeof foo/sizeof*foo];
    62    struct bar b1[sizeof bar/sizeof*bar];
    63    int bz[sizeof baz/sizeof*baz];
    64  
    65    if (memmove (f1, foo, sizeof (foo)) != f1 || memcmp (f1, foo, sizeof (foo)))
    66      abort ();
    67    if (memmove (b1, bar, sizeof (bar)) != b1 || memcmp (b1, bar, sizeof (bar)))
    68      abort ();
    69    bcopy (baz, bz, sizeof (baz));
    70    if (memcmp (bz, baz, sizeof (baz)))
    71      abort ();
    72  
    73    if (memmove (p, "abcde", 6) != p || memcmp (p, "abcde", 6))
    74      abort ();
    75    s = s1;
    76    if (memmove (p + 2, ++s, 0) != p + 2 || memcmp (p, "abcde", 6) || s != s1 + 1)
    77      abort ();
    78    if (__builtin_memmove (p + 3, "", 1) != p + 3 || memcmp (p, "abc\0e", 6))
    79      abort ();
    80    bcopy ("fghijk", p + 2, 4);
    81    if (memcmp (p, "abfghi", 7))
    82      abort ();
    83    s = s1 + 1;
    84    bcopy (s++, p + 1, 0);
    85    if (memcmp (p, "abfghi", 7) || s != s1 + 2)
    86      abort ();
    87    __builtin_bcopy ("ABCDE", p + 4, 1);
    88    if (memcmp (p, "abfgAi", 7))
    89      abort ();
    90  }