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

     1  /* Copyright (C) 2003  Free Software Foundation.
     2  
     3     Test sprintf optimizations don't break anything and return the
     4     correct results.
     5  
     6     Written by Roger Sayle, June 22, 2003.  */
     7  
     8  static char buffer[32];
     9  
    10  extern void abort ();
    11  typedef __SIZE_TYPE__ size_t;
    12  extern int sprintf(char*, const char*, ...);
    13  extern void *memset(void*, int, size_t);
    14  extern int memcmp(const void*, const void*, size_t);
    15  
    16  void test1()
    17  {
    18    sprintf(buffer,"foo");
    19  }
    20  
    21  int test2()
    22  {
    23    return sprintf(buffer,"foo");
    24  }
    25  
    26  void test3()
    27  {
    28    sprintf(buffer,"%s","bar");
    29  }
    30  
    31  int test4()
    32  {
    33    return sprintf(buffer,"%s","bar");
    34  }
    35  
    36  void test5(char *ptr)
    37  {
    38    sprintf(buffer,"%s",ptr);
    39  }
    40  
    41  
    42  void
    43  main_test (void)
    44  {
    45    memset (buffer, 'A', 32);
    46    test1 ();
    47    if (memcmp(buffer, "foo", 4) || buffer[4] != 'A')
    48      abort ();
    49  
    50    memset (buffer, 'A', 32);
    51    if (test2 () != 3)
    52      abort ();
    53    if (memcmp(buffer, "foo", 4) || buffer[4] != 'A')
    54      abort ();
    55  
    56    memset (buffer, 'A', 32);
    57    test3 ();
    58    if (memcmp(buffer, "bar", 4) || buffer[4] != 'A')
    59      abort ();
    60  
    61    memset (buffer, 'A', 32);
    62    if (test4 () != 3)
    63      abort ();
    64    if (memcmp(buffer, "bar", 4) || buffer[4] != 'A')
    65      abort ();
    66  
    67    memset (buffer, 'A', 32);
    68    test5 ("barf");
    69    if (memcmp(buffer, "barf", 5) || buffer[5] != 'A')
    70      abort ();
    71  }