sammccall added inline comments.

================
Comment at: clang/include/clang/Sema/ParsedAttr.h:96
+  /// Check if this attribute is allowed by the language we are compiling.
+  virtual bool acceptsLangOpts(const LangOptions &LO) const { return true; }
+
----------------
aaron.ballman wrote:
> sammccall wrote:
> > aaron.ballman wrote:
> > > Plugin attributes inherit from `ParsedAttrInfo`, not `ParsedAttr`, so one 
> > > downside to this change is that plugin authors no longer have a way to 
> > > diagnose language options with a custom diagnostic; all they can get is 
> > > "attribute ignored".
> > > 
> > > Perhaps another approach is to add an output parameter so the overrider 
> > > can signify whether the language options are valid or not (because it's 
> > > plausible that the plugin wants to diagnose the language options but 
> > > they're still valid enough that the attribute should be accepted)?
> > > 
> > > Plugin attributes inherit from ParsedAttrInfo, not ParsedAttr, so one 
> > > downside to this change is that plugin authors no longer have a way to 
> > > diagnose language options with a custom diagnostic; all they can get is 
> > > "attribute ignored".
> > 
> > This is less flexible, indeed. What's not clear to me is:
> >  - do we know of any real plugins where the ability to use a custom 
> > diagnostic here is important? Hypothetical flexibility may not be worth 
> > keeping.
> >  - if custom diagnostics are needed, can they be emitted when the attribute 
> > is handled instead?
> >  - why we'd need this flexibility for LangOpts but not Target 
> > (existsInTarget)
> > 
> > > Perhaps another approach is to add an output parameter so the overrider 
> > > can signify whether the language options are valid or not (because it's 
> > > plausible that the plugin wants to diagnose the language options but 
> > > they're still valid enough that the attribute should be accepted)?
> > 
> > diagLangOpts already returns bool.
> > 
> > The blocking issue with the diagLangOpts signature for code-completion 
> > purposes isn't actually the diagnostics (completion suppresses them), it's 
> > rather that you have to construct a ParsedAttr  in order to emit them, 
> > which isn't easy to do "out of thin air".
> > do we know of any real plugins where the ability to use a custom diagnostic 
> > here is important? Hypothetical flexibility may not be worth keeping.
> 
> We don't know how plugins are being used and we have to assume Hryum's Law 
> bites us just as much as anyone else. I'm fine potentially breaking plugins 
> so long as we're still leaving them with the ability to do what they were 
> previously doing. However, @john.brawn (the attribute plugin author) might 
> know more here on the usage front.
> 
> > if custom diagnostics are needed, can they be emitted when the attribute is 
> > handled instead?
> 
> Good question! I think that might work -- they get access to `Sema` and so 
> they can check the language options and produce diagnostics from there. It 
> might mean slight behavioral changes (if we used to bail early on a lang opt 
> mismatch, it means we might get different diagnostics by the delay until the 
> attribute is handled), but I think those are reasonable.
> 
> > why we'd need this flexibility for LangOpts but not Target (existsInTarget)
> 
> Targets are a bit different -- you're in one target and that's it (so you 
> either support the attribute for that target or not), but language options 
> can have interactions between them (attribute may require something like CUDA 
> to be enabled and it may also require some other CUDA-specific option to be 
> enabled, and it wants to produce a nice diagnostic about that rather than 
> just saying the attribute is ignored).
> 
> > The blocking issue with the diagLangOpts signature for code-completion 
> > purposes isn't actually the diagnostics (completion suppresses them), it's 
> > rather that you have to construct a ParsedAttr in order to emit them, which 
> > isn't easy to do "out of thin air".
> 
> Ahh, I had missed that.
> 
> Given that the user can still do custom diagnostics when handling the 
> attribute itself, I think this change is reasonable as-is. However, I think 
> you should add a mention to the release notes that 1) the interface changed 
> for plugin authors, and 2) the new approach to custom diagnostics for 
> language options is to diagnose them when handling the attribute.
> We don't know how plugins are being used and we have to assume Hryum's Law 
> bites us just as much as anyone else. I'm fine potentially breaking plugins 
> so long as we're still leaving them with the ability to do what they were 
> previously doing. However, @john.brawn (the attribute plugin author) might 
> know more here on the usage front.

Thanks! John, please let me know if you see this causing a problem - I'm sure 
we can find a solution but it's easier to find a good one if we know the 
requirements :-)

(This makes me curious: officially, APIs are unstable and Hyrum's law is 
Hyrum's problem. In practice, we certainly have the idea that if people 
actually use something out-of-tree, it shouldn't be dropped without a high 
level replacement. I haven't seen this written down, maybe it's just common 
sense).

> It might mean slight behavioral changes (if we used to bail early on a lang 
> opt mismatch, it means we might get different diagnostics by the delay until 
> the attribute is handled), but I think those are reasonable.

Yeah, it's not as nice and declarative but it's not common as far as we know.

> I think you should add a mention to the release notes that 1) the interface 
> changed for plugin authors, and 2) the new approach to custom diagnostics for 
> language options is to diagnose them when handling the attribute.
Sounds good, I'll add that to this patch.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D107836

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

Reply via email to