111
|
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))
|
|
11 my_memcpy (char *d, char *s, unsigned l)
|
|
12 {
|
|
13 return __builtin_memcpy (d, s, l);
|
|
14 }
|
|
15
|
|
16 char *
|
|
17 __attribute__((noinline))
|
|
18 my_mempcpy (char *d, char *s, unsigned l)
|
|
19 {
|
|
20 return __builtin_mempcpy (d, s, l);
|
|
21 }
|
|
22
|
|
23 void
|
|
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
|
|
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
|
131
|
50 /* { dg-final { scan-assembler "mempcpy" } } */
|
111
|
51 /* { dg-final { scan-assembler "memcpy" } } */
|