1 /* { dg-do compile } */
2 /* { dg-options "-O2" } */
3
4 char *buffer;
5 char *test;
6
7 #define SIZE 100
8
9 char *
10 __attribute__((noinline))
my_memcpy(char * d,char * s,unsigned l)11 my_memcpy (char *d, char *s, unsigned l)
12 {
13 return __builtin_memcpy (d, s, l);
14 }
15
16 char *
17 __attribute__((noinline))
my_mempcpy(char * d,char * s,unsigned l)18 my_mempcpy (char *d, char *s, unsigned l)
19 {
20 return __builtin_mempcpy (d, s, l);
21 }
22
23 void
run_test(char * d,char * s,unsigned l)24 run_test (char *d, char *s, unsigned l)
25 {
26 char *r = my_mempcpy (d, s, l);
27 if (r != d + l)
28 __builtin_abort ();
29
30 r = my_memcpy (d, s, l);
31 if (r != d)
32 __builtin_abort ();
33 }
34
35 int
main(void)36 main (void)
37 {
38 const char* const foo = "hello world";
39 unsigned l = __builtin_strlen (foo) + 1;
40
41 buffer = __builtin_malloc (SIZE);
42 __builtin_memcpy (buffer, foo, l);
43 test = __builtin_malloc (SIZE);
44
45 run_test (test, buffer, l);
46
47 return 0;
48 }
49
50 /* { dg-final { scan-assembler "mempcpy" } } */
51 /* { dg-final { scan-assembler "memcpy" } } */
52