erichkeane wrote:

> > Hi @AaronBallman Can you pls explain me your previous response _"It would 
> > be better for us to associate the data with catch statements specifically 
> > because there's a lot fewer of those than there are variable declarations 
> > in general."_
> > I mean storing the ellipsis's location in catch stmt is not going to work, 
> > we need to add certain flags/function in VarDecl. Can you please review 
> > which I have raised currently one more time?
> 
> `CXXCatchStmt` currently stores three things: the location of the `catch` 
> keyword, the `Stmt` for the handler, and the `VarDecl` for the exception 
> declaration. We currently represent a catch-all by setting `VarDecl` to null. 
> What @Endilll was pointing out in the original issue is that walking the AST 
> for a `CXXCatchStmt` causes us to walk both of those child nodes, including 
> the null `VarDecl` in the case of a catch-all.
> 
> I was suggesting that we should not walk a null node in that case (so modify 
> the various AST walkers to check for a null pointer in that case and not walk 
> down it), and instead we should have `CXXCatchStmt` retain a `SourceLocation` 
> for the ellipsis in the case where the `VarDecl` is null. This way, people 
> who need to know "is this catch statement a catch-all" can still find where 
> to print diagnostics related to the `...`, but we don't end up walking over a 
> null node.
> 
> You're approaching this from a different angle, where we have a non-null 
> `VarDecl` that we use to represent the `...`. We could go this route and 
> there's some appeal to doing so, but I think in that case, we'd want a 
> concrete AST node to represent it. e.g., we'd want to add `class EllipsisDecl 
> : public VarDecl {};` that could then be used by `CXXCatchStmt` and 
> `FunctionDecl`, etc. However, this is a more involved approach and requires 
> additional thought as to whether it's worth the extra effort.
> 
> CC @erichkeane for additional opinions.

I VERY much don't think the extra decl is worth the effort.  The Ellipsis 
Location should just be stored on the `CXXCatchStmt`, and we can leave the the 
empty `VarDecl` alone.  Avoiding traversal is a possibility, though not 
necessary to this approach.

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

Reply via email to