modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/builtins/strcpy-2.c (about) 1 /* Copyright (C) 2004 Free Software Foundation. 2 3 Ensure builtin strcpy is optimized into memcpy 4 even when there is more than one possible string literal 5 passed to it, but all string literals passed to it 6 have equal length. 7 8 Written by Jakub Jelinek, 9/15/2004. */ 9 10 extern void abort (void); 11 extern char *strcpy (char *, const char *); 12 typedef __SIZE_TYPE__ size_t; 13 extern void *memcpy (void *, const void *, size_t); 14 extern int memcmp (const void *, const void *, size_t); 15 16 char buf[32], *p; 17 int i; 18 19 char * 20 __attribute__((noinline)) 21 test (void) 22 { 23 int j; 24 const char *q = "abcdefg"; 25 for (j = 0; j < 3; ++j) 26 { 27 if (j == i) 28 q = "bcdefgh"; 29 else if (j == i + 1) 30 q = "cdefghi"; 31 else if (j == i + 2) 32 q = "defghij"; 33 } 34 p = strcpy (buf, q); 35 return strcpy (buf + 16, q); 36 } 37 38 void 39 main_test (void) 40 { 41 #ifndef __OPTIMIZE_SIZE__ 42 /* For -Os, strcpy above is not replaced with 43 memcpy (buf, q, 8);, as that is larger. */ 44 if (test () != buf + 16 || p != buf) 45 abort (); 46 #endif 47 }