[Bug tree-optimization/90906] diagnose returning pointers to freed memory

egallager at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Dec 23 04:03:00 GMT 2019


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90906

--- Comment #2 from Eric Gallager <egallager at gcc dot gnu.org> ---
(In reply to Martin Sebor from comment #0)
> GCC doesn't diagnose returning a freed pointer as in the function below:
> 
>   void* f (void *p)
>   {
>     __builtin_free (p);
>     // ...
>     return p;
>   }
> 
> It could, by performing an analysis similar to -Wreturn-local-addr.  The
> detection would make it possible to find among other things bugs in C++ code
> due to returning pointers into local containers, such as:
> 
>   #include <vector>
> 
>   int* f ()
>   {
>     std::vector<int> v (3, 5);
>     return v.data ();
>   }

I tested both of these with David Malcolm's static analyzer branch on Godbolt
and it was silent on the first one, but ICEd on the second one:
https://godbolt.org/z/L38Fa_
Output:
during IPA pass: analyzer

<source>:7:3: internal compiler error: Segmentation fault

    7 |   }

      |   ^

Please submit a full bug report,

with preprocessed source if appropriate.

See <https://gcc.gnu.org/bugs/> for instructions.

Compiler returned: 1


More information about the Gcc-bugs mailing list