| /* { dg-do compile } */ |
| /* { dg-options "-O2" } */ |
| |
| char *buffer; |
| char *test; |
| |
| #define SIZE 100 |
| |
| char * |
| __attribute__((noinline)) |
| my_memcpy (char *d, char *s, unsigned l) |
| { |
| return __builtin_memcpy (d, s, l); |
| } |
| |
| char * |
| __attribute__((noinline)) |
| my_mempcpy (char *d, char *s, unsigned l) |
| { |
| return __builtin_mempcpy (d, s, l); |
| } |
| |
| void |
| run_test (char *d, char *s, unsigned l) |
| { |
| char *r = my_mempcpy (d, s, l); |
| if (r != d + l) |
| __builtin_abort (); |
| |
| r = my_memcpy (d, s, l); |
| if (r != d) |
| __builtin_abort (); |
| } |
| |
| int |
| main (void) |
| { |
| const char* const foo = "hello world"; |
| unsigned l = __builtin_strlen (foo) + 1; |
| |
| buffer = __builtin_malloc (SIZE); |
| __builtin_memcpy (buffer, foo, l); |
| test = __builtin_malloc (SIZE); |
| |
| run_test (test, buffer, l); |
| |
| return 0; |
| } |
| |
| /* { dg-final { scan-assembler "mempcpy" } } */ |
| /* { dg-final { scan-assembler "memcpy" } } */ |