sammccall added inline comments.

================
Comment at: clang/include/clang/ASTMatchers/ASTMatchers.h:2713-2714
+/// \endcode
+extern const internal::VariadicDynCastAllOfMatcher<Stmt, AttributedStmt>
+    attributedStmt;
+
----------------
aaron.ballman wrote:
> sammccall wrote:
> > jdoerfert wrote:
> > > aaron.ballman wrote:
> > > > Design-wise, I'm on the fence here. AST matchers match the AST nodes 
> > > > that Clang produces, and from that perspective, this makes a lot of 
> > > > sense. But `AttributedStmt` is a bit of a hack in some ways, and do we 
> > > > want to expose that hack to AST matcher users? e.g., is there a reason 
> > > > we shouldn't make `returnStmt(hasAttr(attr::Likely))` work directly 
> > > > rather than making the user pick their way through the 
> > > > `AttributedStmt`? This is more in line with how you check for a 
> > > > declaration with a particular attribute and seems like the more natural 
> > > > way to surface this.
> > > > 
> > > > For the moment, since this is following the current AST structure in 
> > > > Clang, I think this is fine. But I'm curious if @klimek or perhaps 
> > > > @sammccall has an opinion here.
> > > I think a way to find any kind of statement (or expression) that has a 
> > > specific attribute is very useful. How that should look, idk.
> > TL;DR: I think this matcher fits the current design best. 
> > `returnStmt(hasAttr())` sounds awesome, but I think it's a significant new 
> > concept, and a cross-cutting project like traversal modes.
> > 
> > ---
> > 
> > returnStmt(hasAttr()) is definitely nicer in isolation (and in combination 
> > with how decls work).
> > It's definitely potentially confusing to not match the AST. The AST is 
> > unlikely to be fixed because (IIUC) we don't want to burden each stmt with 
> > tracking if it has attrs.
> > So I think the easy answer is this patch gets it right.
> > 
> > The inconsistency with decls is annoying, and maybe worse it doesn't yield 
> > a simple way to express "a return statement, maybe with an attribute, I 
> > don't care" unless you're searching recursively anyway, and this should 
> > almost be the default.
> > `returnStmt(hasAttr())` suggests that it would enable this, maybe by 
> > skipping over the AttributedStmt with some fancy traversal mode, and then 
> > looking it up again in the hasAttr matcher from the parent map.
> > 
> > I think this would be a less brittle way to handle mostly-transparent nodes 
> > that you nevertheless want to be able to match the contents of sometimes. 
> > The current options (explicitly unwrap, rely on recursive search, and 
> > traversal modes) all seem to have significant limitations.
> > However this is a pretty general idea (and I guess a pretty large project), 
> > and I don't think it's worth introducing just for AttributedStmt.
> Thanks for the feedback Sam!
> 
> > The AST is unlikely to be fixed because (IIUC) we don't want to burden each 
> > stmt with tracking if it has attrs.
> 
> I'm less convinced of this. We didn't want to do it originally because there 
> were so very few statement attributes. These days, there's quite a few more 
> more statement attributes, so we may very well revisit this. `AttributedStmt` 
> is a pain that has caused us problems in the past with things like 
> `isa<FooStmt>()` failing because it didn't expect an attributed `FooStmt`.
> 
> That said, the rest of your points are compelling, so this matcher is fine 
> for me.
> We didn't want to do it originally because there were so very few statement 
> attributes.

Ah, i assumed it was some kind of issue with size or the logistics of 
allocation. Fixing the AST sounds good then! (But I wouldn't block this patch 
on it unless someone's ready to work on it).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D120949/new/

https://reviews.llvm.org/D120949

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to