On Apr 19, 2013, at 9:52 AM, Anna Zaks <[email protected]> wrote:
>
> On Apr 19, 2013, at 2:45 AM, Anton Yartsev <[email protected]> wrote:
>
>> On 29.03.2013 4:00, Anna Zaks wrote:
>>> I've committed the new callback. Looks like no email was sent out.. So just
>>> look at r178310.
>> +static bool retTrue(const RefState *RS) {
>> + return true;
>> +}
>> +
>> +static bool checkIfNewOrNewArrayFamily(const RefState *RS) {
>> + return (RS->getAllocationFamily() == AF_CXXNewArray ||
>> + RS->getAllocationFamily() == AF_CXXNew);
>> +}
>> ...........
>> + if (RS->isAllocated() && CheckRefState(RS))
>> State = State->remove<RegionState>(sym);
>> }
>> }
>>
>> Anna, could you, please, clarify why we only process C++ families on const
>> escape here?
>>
>
> Because we assume that the user can call 'delete' on a const pointer, but
> cannot call 'free' on it.
As described in the commit message:
[analyzer] Add support for escape of const pointers and use it to allow
“newed” pointers to escape
Add a new callback that notifies checkers when a const pointer escapes.
Currently, this only works
for const pointers passed as a top level parameter into a function. We need
to differentiate the const
pointers escape from regular escape since the content pointed by const
pointer will not change;
if it’s a file handle, a file cannot be closed; but delete is allowed on
const pointers.
This should suppress several false positives reported by the NewDelete
checker on llvm codebase.
I think in your case, a content of const pointer escaping, we are expecting the
other callback to get triggered. Since if a const pointer points to another
pointer, which is non-const, the other pointer escapes, not const-escapes.
>
>> --
>> Anton
>
> _______________________________________________
> cfe-commits mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits