aaron.ballman accepted this revision.
aaron.ballman added a comment.
This revision is now accepted and ready to land.

LGTM, thank you for this effort!



================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:11087
+// TCB warnings
+def err_tcb_conflicting_attributes : Error<
+  "attributes '%0(\"%2\")' and '%1(\"%2\")' are mutually exclusive">;
----------------
NoQ wrote:
> aaron.ballman wrote:
> > NoQ wrote:
> > > aaron.ballman wrote:
> > > > NoQ wrote:
> > > > > Do i understand correctly that while "unknown attribute" is a warning 
> > > > > ("must be an attribute for some other compiler, let's ignore"), 
> > > > > misuse of a known attribute is typically an error ("ok, whatever you 
> > > > > meant here, i have an opinion about what this really means and i 
> > > > > don't like it")?
> > > > It depends strongly on the attribute and the problem at hand. My usual 
> > > > rule of thumb is: if the attribute is being ignored because the code 
> > > > makes no sense, it's an error, but if the attribute can still be useful 
> > > > (perhaps after some adjustment), then warn. e.g., putting a calling 
> > > > convention attribute on a variable of type `int` makes no sense -- that 
> > > > should probably err rather than warn and ignore because the user did 
> > > > something baffling.
> > > > 
> > > > I could go either way on this one. Giving an error and forcing the user 
> > > > to say what they mean is appealing, but it would also be defensible to 
> > > > warn about the conflicting attribute and ignore just that one 
> > > > (retaining the original attribute). I would say leave it as an error 
> > > > and we can downgrade to a warning later if there's feedback from 
> > > > compelling real world use cases.
> > > > retaining the original attribute
> > > 
> > > There's an interesting aspect of error recovery here (which i didn't 
> > > address yet but added FIXMEs). We probably shouldn't emit additional 
> > > warnings based on the attributes about which we've already reported a 
> > > conflict error; that's just unnecessary clutter. That'd mean that we 
> > > should always discard the non-leaf attribute and keep the leaf attribute 
> > > (if we can at all discard attributes). Or keep both and repeat the 
> > > conflict check during checking in order to suppress the warning.
> > > That'd mean that we should always discard the non-leaf attribute and keep 
> > > the leaf attribute (if we can at all discard attributes). Or keep both 
> > > and repeat the conflict check during checking in order to suppress the 
> > > warning.
> > 
> > You can do `TheDecl->dropAttr<EnforceTCB>();` to drop the non-leaf 
> > attributes (or, if easy, it's better to not add the problematic attribute 
> > in the first place). Would you like to do that work in this patch or as a 
> > follow-up? (I'm fine either way.)
> Hmm, that's indeed an easy and reasonable solution. Ideally i should only 
> drop attributes with the same argument but that's too far into the area of 
> diminishing returns for me :)
Yeah, I don't think we need to go that far unless there's some real world use 
cases demonstrating the need.


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

https://reviews.llvm.org/D91898

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

Reply via email to