r237608 - Detect uses of mismatching forms of 'new' and 'delete'
Nick Lewycky
nlewycky at google.com
Tue May 19 17:09:26 PDT 2015
On 19 May 2015 at 15:48, Richard Trieu <rtrieu at google.com> wrote:
> On Tue, May 19, 2015 at 2:19 PM, Nick Lewycky <nlewycky at google.com> wrote:
>
>> On 18 May 2015 at 12:59, Ismail Pazarbasi <ismail.pazarbasi at gmail.com>
>> wrote:
>>
>>> Author: ismailp
>>> Date: Mon May 18 14:59:11 2015
>>> New Revision: 237608
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=237608&view=rev
>>> Log:
>>> Detect uses of mismatching forms of 'new' and 'delete'
>>>
>>> Emit warning when operand to `delete` is allocated with `new[]` or
>>> operand to `delete[]` is allocated with `new`.
>>>
>>> rev 2 update:
>>> `getNewExprFromInitListOrExpr` should return `dyn_cast_or_null`
>>> instead of `dyn_cast`, since `E` might be null.
>>>
>>
>> FYI, I'm getting an assertion firing:
>>
>> clang: llvm/tools/clang/lib/Sema/SemaExprCXX.cpp:2447: const
>> clang::CXXNewExpr *(anonymous
>> namespace)::MismatchingNewDeleteDetector::getNewExprFromInitListOrExpr(const
>> clang::Expr *): Assertion `E != nullptr && "Expected a valid initializer
>> expression"' failed.
>>
>> on presumed to be valid code (code that builds with a previous version of
>> clang). I'm creduce'ing a testcase now.
>>
>>
> Try this reduced case:
>
> template <typename T>
> struct Base {
> struct S {
> const T *t = 0;
> };
> };
>
> void Foo(Base<double>::S s) { delete s.t; }
>
> I think what is happening is that the warning is looking for the
> initializer of Base<double>::S::t, which is never used and not
> instantiated. So, the FieldDecl reports that it has an initializer, but
> returns a null pointer when trying to retrieve it.
>
Creduce coughed up this awkward piece of code:
struct Task {
Task *task_ { delete task_ };
};
I have failed at turning it into valid code so far.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150519/5d4f9a02/attachment.html>
More information about the cfe-commits
mailing list