martinboehme wrote:

First of all, a followup: I should of course have noticed the failling CI 
tests, but a contributing factor was that I was locally running tests in 
`Release` mode, i.e. with `assert()` compiled out.

I've now looked at why tests fail, and it is because when using 
`E->getStmtClass()`, we need to enumerate all possible sub-classes that we're 
interested in, whereas when using `isa` / `dyn_cast`, it's enough to switch on 
the base class.

In practical terms, this means that to get complete coverage for what used to 
be covered by `isa<CXXConstructExpr>(E)`, we need to check not only for 
`CXXConstructExprClass` but also `CXXTemporaryObjectExprClass`. To get coverage 
for what used to be covered by `isa<CallExpr>(E)`, we need to check not only 
for `CallExprClass` but also for `CXXMemberCallExprClass` and 
`CXXOperatorCallExprClass`.

In my mind, this shifts the tradeoff: Having to enumerate all possible 
sub-classes adds verbosity and carries the risk of forgetting a subclass, 
particularly if subclasses are added in the future.

I would therefore propose to stay with the existing implementation as I'm no 
longer convinced that the switch statement is the better option.

https://github.com/llvm/llvm-project/pull/88865
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to