aaron.ballman added inline comments.

================
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:
> > > 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.)


================
Comment at: clang/lib/Sema/SemaChecking.cpp:16088
+  // is in a TCB that the Callee is not.
+  for (const auto *Attr : Caller->specific_attrs<EnforceTCBAttr>()) {
+    StringRef CallerTCB = Attr->getTCBName();
----------------
Can you rename this to be something other than a type name?


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