dcoughlin added inline comments.
================
Comment at: lib/StaticAnalyzer/Core/PathDiagnostic.cpp:694
+ } else if (Optional<BlockEntrance> BE = P.getAs<BlockEntrance>()) {
+ CFGElement BlockFront = BE->getBlock()->front();
+ if (BlockFront.getKind() == CFGElement::Statement) {
----------------
MTC wrote:
> dcoughlin wrote:
> > MTC wrote:
> > > szepet wrote:
> > > > I think it would be more correct to use the location what is used in
> > > > case of the BlockEdge. (So on the entranced block terminator
> > > > condition.) The reason is because the BlockEntrance display message
> > > > will be displayed before the message of the BlockEdge (since it is an
> > > > "earlier" node in the ExplodedGraph). So it would result that if check
> > > > these notes in a viewer then the earlier note would belong to the later
> > > > location which could be confusing.
> > > Yes, it would be better to use the location of the TerminatorCondition :D.
> > Thanks for looking into fixing this.
> >
> > I don't think using the terminator condition of the entered block is the
> > right thing to do. The terminator is at the *end* of a basic block and this
> > program point represents the entrance to the block. I think it is better to
> > use the location corresponding to the first element in in the entered block.
> Thank you, dcoughlin!
>
> I have updated the diff. The first element kind I can think of is only
> `Stmt` and `NewAllocator`. I don't know if it's enough?
>
It would be good to add an llvm_unreachable() assertion expressing this
expectation so that we'll get an assertion failure if this turns out not to be
enough. (Or if we add a new CFGElement kind in the future).
================
Comment at: lib/StaticAnalyzer/Core/PathDiagnostic.cpp:695
+ CFGElement BlockFront = BE->getBlock()->front();
+ if (BlockFront.getKind() == CFGElement::Kind::Statement) {
+ return PathDiagnosticLocation(
----------------
You can use `getAs<>` in the `if` guard condition to make this more concise:
```
if (auto StmtElt = BlockFront.getAs<CFGStmt>()) {
return PathDiagnosticLocation(StmtElt->getStmt()->getLocStart(), SMng);
}
```
https://reviews.llvm.org/D37187
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits