/* PR middle-end/104069 - -Werror=use-after-free false positive on elfutils-0.186 { dg-do compile } { dg-options "-Wall" } */ typedef __SIZE_TYPE__ size_t; extern void* realloc (void *, size_t); void* __libdw_unzstd (size_t todo) { void *sb = 0; for ( ; ; ) { // Ran only once. if (!sb) { char *b = realloc (sb, todo); if (!b) break; sb = b; } todo -= 1; if (todo == 0) break; } // Shrink buffer: leave only one byte for simplicity. char *b = realloc (sb, 1); if (b) sb = b; else { // Realloc failed mysteriously, leave 'sb' untouched. } return sb; // { dg-bogus "-Wuse-after-free" } }