| /* PR tree-optimization/94015 */ |
| /* { dg-do run } */ |
| /* { dg-options "-O2" } */ |
| |
| char buf[10] = "AAAAAAAAA"; |
| |
| __attribute__((noipa)) char * |
| alloc (void) |
| { |
| return buf; |
| } |
| |
| __attribute__((noipa)) void |
| f1 (void) |
| { |
| char *s = alloc (); |
| *(char **)s = "1234567"; |
| s[7] = '\0'; |
| } |
| |
| __attribute__((noipa)) void |
| f2 (void) |
| { |
| char *s = alloc (); |
| *(char **)s = "123456"; |
| s[6] = '\0'; |
| } |
| |
| __attribute__((noipa)) void |
| f3 (void) |
| { |
| char *s = alloc (); |
| *(char **)s = "12345"; |
| s[5] = '\0'; |
| } |
| |
| __attribute__((noipa)) void |
| f4 (void) |
| { |
| char *s = alloc (); |
| *(char **)s = "1234"; |
| s[4] = '\0'; |
| } |
| |
| __attribute__((noipa)) void |
| f5 (void) |
| { |
| char *s = alloc (); |
| *(char **)s = "123"; |
| s[3] = '\0'; |
| } |
| |
| __attribute__((noipa)) void |
| f6 (void) |
| { |
| char *s = alloc (); |
| *(char **)s = "12"; |
| s[2] = '\0'; |
| } |
| |
| __attribute__((noipa)) void |
| f7 (void) |
| { |
| char *s = alloc (); |
| *(char **)s = "1"; |
| s[1] = '\0'; |
| } |
| |
| __attribute__((noipa)) void |
| f8 (void) |
| { |
| char *s = alloc (); |
| *(char **)s = ""; |
| s[0] = '\0'; |
| } |
| |
| int |
| main () |
| { |
| if (sizeof (char *) > 8) |
| return 0; |
| f1 (); |
| if (buf[7] != 0) |
| __builtin_abort (); |
| f2 (); |
| if (buf[6] != 0) |
| __builtin_abort (); |
| f3 (); |
| if (buf[5] != 0) |
| __builtin_abort (); |
| f4 (); |
| if (buf[4] != 0) |
| __builtin_abort (); |
| f5 (); |
| if (buf[3] != 0) |
| __builtin_abort (); |
| f6 (); |
| if (buf[2] != 0) |
| __builtin_abort (); |
| f7 (); |
| if (buf[1] != 0) |
| __builtin_abort (); |
| f8 (); |
| if (buf[0] != 0) |
| __builtin_abort (); |
| return 0; |
| } |