> On Fri, Nov 01, 2024 at 11:39:13AM +0100, Jan Hubicka wrote: > > The testcase does: > > /* { dg-additional-options "-O3 -fsanitize=undefined" } */ > > > > void memory_exhausted(); > > void memcheck(void *ptr) { > > if (ptr) /* { dg-warning "leak" } */ > > memory_exhausted(); > > } > > > > int emalloc(int size) { memcheck(__builtin_malloc(size)); } /* { dg-message > > "allocated here" } */ > > int main() { int max_envvar_len = emalloc(max_envvar_len + 1); } /* { > > dg-message "use of uninitialized value 'max_envvar_len'" } */ > > The PR was an ICE fix, so I think it is ok to say add -fno-allocation-dce > or somehow arrange in the source for the call not to be optimized away, > as long as it still ICEs in r12-3094 and succeeds with r12-3095 after > that change. > > Generally regarding warnings, if the compiler optimizes away the allocation > altogether, there will be no leak from it, so I think the optimization is > fine.
I also thin it is OK to optimize here. Currently there is -fno option to disable optimization of malloc/free pairs. -fno-allocation-dce handles only new/delete. I am not sure why it was added for C++ only. So in the other testcase compensation I simply used -fno-tree-dce which would work here too. Perhaps I can add -fno-malloc-dce to handle the C library variants (malloc/calloc/strdup/strndup). I also think I can quite easilly handle realloc by combining free and malloc logic together. Honza > > Jakub >