[PATCH] D102728: [clang][Sema] removes -Wfree-nonheap-object reference param false positive
Christopher Di Bella via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 28 11:43:01 PDT 2021
cjdb added a comment.
Oops, looks like I never submitted my replies!
================
Comment at: clang/lib/Sema/SemaChecking.cpp:10466
if (isa<VarDecl, FunctionDecl>(D))
- return CheckFreeArgumentsOnLvalue(S, CalleeName, UnaryExpr, D);
+ if (!isa<ParmVarDecl>(D) ||
+ !dyn_cast<ParmVarDecl>(D)->getType()->isReferenceType())
----------------
dblaikie wrote:
> It doesn't look like the parameter case is tested, is it? And is it necessary? I think it'd be reasonable to warn on `void f1(int i) { free(&i); }` - so I think it's only the "is it a reference type" that's the important property.
Right, but it's also reasonable to warn on this, which isn't a parameter.
```
int i = 0;
int& r = i;
std::free(&r);
```
However, I will take you up on making sure that parameters are tested.
================
Comment at: clang/test/Sema/warn-free-nonheap-object.cpp:38-40
+ char *ptr1 = (char *)std::malloc(10);
+ char *ptr2 = (char *)std::malloc(10);
+ char *ptr3 = (char *)std::malloc(10);
----------------
dblaikie wrote:
> Is it relevant that these are members? Or could they be globals just as well? Might be simpler/more obvious if they were globals, I think.
This tests that members aren't overlooked, which has a distinct code path to normal variables IIRC.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D102728/new/
https://reviews.llvm.org/D102728
More information about the cfe-commits
mailing list