[cfe-dev] Potentially expensive analysis for missing `[]` in delete expression
Ismail Pazarbasi
ismail.pazarbasi at gmail.com
Thu Jul 17 15:43:31 PDT 2014
On Tue, Jul 8, 2014 at 11:34 PM, Jordan Rose <jordan_rose at apple.com> wrote:
> The static analyzer does have this check:
>
> <stdin>:3:5: warning: Memory allocated by 'new[]' should be deallocated by
> 'delete[]', not 'delete'
> delete a;
> ^~~~~~~~
>
> ...but only if it can see both the allocation and deallocation sites in the
> same path.
>
> Jordan
>
Jordan,
I am trying to make my patch submission-ready. If I try to diagnose
this case in frontend and issue a warning on the problematic line,
analyzer doesn't issue anything, as far as I can see. I ran tests, and
it failed in test/Analysis/MismatchedDeallocator-path-notes.cpp:
% clang -cc1 -analyze
-analyzer-checker=core,unix.MismatchedDeallocator
-analyzer-output=text MismatchedDeallocator-path-notes.cpp
MismatchedDeallocator-path-notes.cpp:10:3: warning: 'delete' applied
to a pointer that was allocated with 'new[]' treated as 'delete[]'
delete p; // expected-warning {{Memory allocated by 'new[]' should
be deallocated by 'delete[]', not 'delete'}}
^ ~
[]
MismatchedDeallocator-path-notes.cpp:7:12: note: allocated with 'new[]' here
int *p = new int[1]; // expected-note {{allocated with 'new[]' here}}
^
1 warning generated.
With my patch, frontend issues a new warning at line 10, and this
prevents analyzer to issue its own. Presumably, this is a known
behavior of the analyzer. What can I do in this case? Does disabling
my warning in analyzer tests make sense?
Ismail
More information about the cfe-dev
mailing list