[cfe-dev] Diagnostic won't emit

Billy O'Mahony via cfe-dev cfe-dev at lists.llvm.org
Fri Oct 9 12:43:16 PDT 2020


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/20201009/442438c4/attachment.html>


More information about the cfe-dev mailing list