[PATCH] D139534: [analyzer] Don't escape local static memregions on bind
Artem Dergachev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 15 13:32:40 PST 2022
NoQ added inline comments.
================
Comment at: clang/test/Analysis/malloc-static-storage.cpp:33-38
+void malloc_escape() {
+ static int *p;
+ p = (int *)malloc(sizeof(int));
+ escape(p); // no-leak
+ p = 0; // no-leak
+}
----------------
NoQ wrote:
> NoQ wrote:
> > The main problem with static locals is that this can happen the other way round:
> >
> > ```lang=c
> > void malloc_escape() {
> > static int *p;
> > escape(p);
> > p = (int *)malloc(sizeof(int));
> > p = 0; // no-leak
> > }
> > ```
> Wait, I misread. I'm thinking of a situation like this:
> ```
> void malloc_escape() {
> static int *p;
> escape(&p); // added '&'
> p = (int *)malloc(sizeof(int));
> p = 0; // no-leak
> }
> ```
Technically this is also a problem with non-static locals if we complicate the situation a little bit:
```lang=c
void malloc_escape() {
int *p;
escape(&p);
p = (int *)malloc(sizeof(int));
free_whatever_escaped();
p = 0; // currently false leak warning
}
```
We've had a lovely conversation about this with @xazax.hun in D71041 and D71224 but we've failed to produce a good solution back then.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D139534/new/
https://reviews.llvm.org/D139534
More information about the cfe-commits
mailing list