/* PR c/83989 */ /* { dg-do compile } */ /* { dg-options "-O2 -Wrestrict" } */ __attribute__((__malloc__)) extern void *my_malloc (__SIZE_TYPE__); void baz (void *); #define SIZE 32 void foo (void) { void *recmem = __builtin_malloc (SIZE); baz (recmem); while (1) { void *oldrecmem = recmem; recmem = __builtin_malloc (SIZE); if (!recmem) { __builtin_free (oldrecmem); return; } __builtin_memcpy (recmem, oldrecmem, SIZE); /* { dg-bogus "accessing" } */ baz (recmem); __builtin_free (oldrecmem); } } void bar (void) { void *recmem = my_malloc (SIZE); baz (recmem); while (1) { void *oldrecmem = recmem; recmem = my_malloc (SIZE); if (!recmem) { __builtin_free (oldrecmem); return; } __builtin_memcpy (recmem, oldrecmem, SIZE); /* { dg-bogus "accessing" } */ baz (recmem); __builtin_free (oldrecmem); } }