[cfe-dev] Working on my first patch for the static analyzer, few questions.
Emily Bellows
emily.a.bellows at gmail.com
Fri Dec 5 13:25:05 PST 2014
You’re right, it doesn't. I hadn’t run into RecursiveASTVisitor yet, I will rewrite it to use that and to test for that in the test file.
Thanks for your help!
> On Dec 5, 2014, at 9:57 AM, Gabor Kozar <kozargabor at gmail.com> wrote:
>
> Hi,
>
> This probably belongs to cfe-commits instead.
>
> Regarding FindMethodCallAnywhere(): would this find method calls that are not direct children of the initializer Expr? For example:
>
> struct Moo {
> explicit Moo(int n) {}
> };
>
> int global_func(int x) { return x; }
>
> struct Foo : Moo {
> Foo() : Moo(global_func(member_func())) {}
>
> int member_func() { return 42; }
> };
>
> If not, consider using a RecursiveASTVisitor instead. Regardless of whether it currently works, you should test for this in your test file.
>
> Otherwise, it's looking good to me, good job!
>
> I also think that this would definitely qualify to become a compiler warning.
>
> ---
> Best regards,
>
> Gábor 'ShdNx' Kozár
> http://gaborkozar.me
>
>
>
> On Thu, Dec 4, 2014, at 01:30, Emily Bellows wrote:
>> Hi everyone,
>>
>> I’ve been writing one of the potential checkers from the clang-analyzer
>> website. It detects calls to member functions before all base classes are
>> initialized in a constructor initializer list, which the standard says is
>> undefined behavior (C++11 12.6.2.p13.)
>>
>> My checker finds these cases fine, it runs perfectly on the examples
>> given from the standard, and I ran it on the LLVM codebase and it even
>> found three instances of this (calls to allocHungoffUses in
>> lib/IR/Instructions.cpp if you’re curious, lines 89, 196, and 3579.)
>>
>> Questions,
>>
>> 1. Does this seem like it might be better as a compiler warning? Right
>> now the checker only uses checkASTDecl, and so is not path sensitive. It
>> could be made path sensitive in the future to detect code indirectly
>> using ’this’, however.
>>
>> 2. Does the ReportBug method look sensible? Given the check is not path
>> sensitive, I couldn’t quite figure out what the PathDiagnosticLocation
>> class is supposed to represent, or whether or not I’m using it correctly
>> because most of the constructors take an ExplodedNode. The error messages
>> my checker gives out looks reasonable to me, so it works, but I’m not
>> sure if it’s idiomatic usage of the reporting API.
>>
>> Example error:
>>
>> /Users/emilybellows/Workspace/llvm/lib/IR/Instructions.cpp:89:17:
>> warning:
>> Method called before all bases were initialized
>> allocHungoffUses(PN.getNumOperands()),
>> PN.getNumOperands()),
>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>> 3. Who is the code owner of this part of clang for when I end up
>> submitting the patch. Is the owner Chris Lattner by default? And does
>> this patch look ready to submit to cfe-commits?
>>
>> I welcome any other comments too, this is my first time working with
>> either LLVM or Clang, and my first time contributing code to an open
>> source project.
>>
>> Thanks,
>> Emily
>>
>>
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>> Email had 1 attachment:
>>
>> • newchecker.patch
>> 6k (application/octet-stream)
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
More information about the cfe-dev
mailing list