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

     1  /* Copyright (C) 2003  Free Software Foundation.
     2  
     3     Test strcpy optimizations don't evaluate side-effects twice.
     4        
     5     Written by Jakub Jelinek, June 23, 2003.  */
     6  
     7  typedef __SIZE_TYPE__ size_t;
     8  extern char *strcpy (char *, const char *);
     9  extern int memcmp (const void *, const void *, size_t);
    10  extern void abort (void);
    11  extern void exit (int);
    12  
    13  size_t
    14  test1 (char *s, size_t i)
    15  {
    16    strcpy (s, "foobarbaz" + i++);
    17    return i;
    18  }
    19  
    20  size_t
    21  check2 (void)
    22  {
    23    static size_t r = 5;
    24    if (r != 5)
    25      abort ();
    26    return ++r;
    27  }
    28  
    29  void
    30  test2 (char *s)
    31  {
    32    strcpy (s, "foobarbaz" + check2 ());
    33  }
    34  
    35  int
    36  main (void)
    37  {
    38    char buf[10];
    39    if (test1 (buf, 7) != 8 || memcmp (buf, "az", 3))
    40      abort ();
    41    test2 (buf);
    42    if (memcmp (buf, "baz", 4))
    43      abort ();
    44    exit (0);
    45  }