https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57111
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch Assignee|unassigned at gcc dot gnu.org |msebor at gcc dot gnu.org CC| |msebor at gcc dot gnu.org See Also| |https://gcc.gnu.org/bugzill | |a/show_bug.cgi?id=90629 --- Comment #11 from Martin Sebor <msebor at gcc dot gnu.org> --- The patch I submitted for pr90629 implements this enhancement: https://gcc.gnu.org/pipermail/gcc-patches/2020-November/557987.html It detects the bug in the test case in comment #0 but only with optimization (to see through inlined calls) and with -Wsystem-headers. Just like all late warnings to date, -Wfree-nonheap-object isn't without false positives. pr54202 is one that even the exceedingly simplistic -Wfree-nonheap-object is susceptible to. The patch above doesn't change things. In file included from /build/gcc-trunk/x86_64-pc-linux-gnu/libstdc++-v3/include/memory:76, from t.C:2: In member function ‘typename std::enable_if<std::is_convertible<_Up (*)[], _Tp (*)[]>::value>::type std::default_delete<_Tp []>::operator()(_Up*) const [with _Up = int; _Tp = int]’, inlined from ‘std::unique_ptr<_Tp [], _Dp>::~unique_ptr() [with _Tp = int; _Dp = std::default_delete<int []>]’ at /build/gcc-trunk/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/unique_ptr.h:612:17, inlined from ‘int main()’ at t.C:6:32: /build/gcc-trunk/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/unique_ptr.h:120:11: warning: ‘void operator delete [](void*)’ called on unallocated object ‘arr’ [-Wfree-nonheap-object] 120 | delete [] __ptr; | ^~~~~~~~~~~~~~~ t.C: In function ‘int main()’: t.C:5:7: note: declared here 5 | int arr[]={1,2}; | ^~~