| /* PR tree-optimization/43904. */ |
| /* { dg-do run } */ |
| /* { dg-options "-O1 -foptimize-sibling-calls" } */ |
| |
| typedef __SIZE_TYPE__ size_t; |
| extern void abort(void); |
| |
| void *memcpy(void *dest, const void *src, size_t n); |
| |
| void |
| buggy_init(void *ptr, size_t size) |
| { |
| const char *str = "Hello world!"; |
| memcpy(ptr, &str, size); |
| } |
| |
| void |
| expose_bug(void *ptr, size_t size) |
| { |
| const char *str; |
| memcpy(&str, ptr, size); |
| if (*str != 'H') |
| abort (); |
| } |
| |
| int |
| main() |
| { |
| const char *ptr; |
| buggy_init(&ptr, sizeof(ptr)); |
| expose_bug(&ptr, sizeof(ptr)); |
| return 0; |
| } |