[cfe-dev] Diagnostic won't emit
Billy O'Mahony via cfe-dev
cfe-dev at lists.llvm.org
Sat Oct 10 04:05:33 PDT 2020
The code in those the CodeSytleChecker example looks more or less
identical to my code above, so it must be something to do with setting up a
DiagnosticConsumer or overriding a method somewhere in a derived class.
Thanks for maintaining those examples - they look really useful - I
wish I'd seen them sooner :)
I'll download them and see if I can get them to run. Where is main() for
the CodeCheckerApp by the way - it's not in CodeChecker.cpp?
On Fri, 9 Oct 2020 at 20:43, Billy O'Mahony <billy.omahony at gmail.com> wrote:
> Hi Andrzej,
>
> thanks for the reply. My code is basically identical to the mccabe example:
>
> 454 const clang::BinaryOperator *binOp =
> parents[0].get<clang::BinaryOperator>();
> 455 if (!binOp || binOp->getOpcodeStr() != std::string("="))
> // TODO check for isAssignmentOp
> 456 {
> 457 auto& Diagnostics = mContext->getDiagnostics();
> 458 const auto ID =
> Diagnostics.getCustomDiagID(clang::DiagnosticsEngine::Error,
> 459 "Return
> value from '%0' is not assigned");
> 460 auto Builder =
> Diagnostics.Report(fnDecl->getLocation(), ID);
> 461 Builder.AddString(fnDecl->getNameAsString());
> 462
> 463 cout << "ERROR: Return val from API call not assigned
> '" << Diagnostics.getClient() << " " << fnDecl->getNameAsString()
> 464 return true;
> 465 }
>
> I know that my DiagnosticsEngine does have a DiagnosticConsumer as
> Diagnostics.getClient() returns non-null.
>
> My understanding is that when the Build object is destroyed after the
> return that the diagnostic should be emitted.
>
> I will have a look at those samples.
>
> Thanks,
> Billy.
>
> On Fri, 9 Oct 2020 at 20:18, Andrzej Warzynski <andrzej.warzynski at arm.com>
> wrote:
>
>> Hi Billy,
>>
>> It's a bit tricky to help without seeing the code :) Are you using any
>> specific/custom diagnostic consumer? Is your properly DiagnosticBuilder
>> destroyed? AFAIK, that's when the message is printed.
>>
>> Here's a bit more up-to-date example:
>> *
>>
>> https://github.com/banach-space/clang-tutor/blob/master/lib/CodeStyleChecker.cpp#L97-L102
>> And a test that verifies that the diagnostic is indeed printed:
>> *
>>
>> https://github.com/banach-space/clang-tutor/blob/master/test/CodeStyleCheckerMacro.cpp
>>
>> Happy to help if that example doesn't work for you! Hopefully it will
>> help debugging your own code :)
>>
>> -Andrzej
>>
>> On 09/10/2020 16:26, Billy O'Mahony via cfe-dev wrote:
>> > Hi,
>> >
>> > hopefully a straightforward issue.
>> >
>> > I have written a standalone cfe tool to catch some project-specific
>> bugs
>> > in a code base.
>> >
>> > I am now replacing my cout << "ERROR..." messages with
>> > clang::Diagnostics by following this example:
>> >
>> >
>> https://github.com/peter-can-talk/cppnow-2017/blob/master/code/mccabe/mccabe.cpp#L46-L54
>> >
>> > However I don't see anything being printed when I run it (except my own
>> > cout << "error.." messages)..
>> >
>> > I've seen the mcabbe example generate diagnostics on a
>> > youtube presentation and both it and my app use
>> > clang::Tool. mccabbe uses ast_matcher::MatchFinder whereas I use
>> > several classes derived from RecursiveASTVisitor. Presumably
>> MatchFinder
>> > sets up a DiagnosticsConsumer that finally emits the diagnostics??
>> >
>> > But I couldn't really find out how to set up a DiagnosticsConsumer - if
>> > that is indeed what I need to do.
>> >
>> > Thanks,
>> > Billy.
>> >
>> > _______________________________________________
>> > cfe-dev mailing list
>> > cfe-dev at lists.llvm.org
>> > https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>> >
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20201010/d0619eb3/attachment.html>
More information about the cfe-dev
mailing list