aaron.ballman added inline comments.
================ Comment at: clang/include/clang/Basic/Attr.td:3593 +def EnforceTCBLeaf : InheritableAttr { + let Spellings = [Clang<"enforce_tcb_leaf">]; + let Subjects = SubjectList<[Function]>; ---------------- Are these two attributes mutually exclusive, or would it make sense for a function to use both of these at the same time? ================ Comment at: clang/lib/Sema/SemaChecking.cpp:16079-16084 + for (const auto *Attr : Callee->specific_attrs<EnforceTCBAttr>()) { + CalleeTCBs.insert(Attr->getTCBName()); + } + for (const auto *Attr : Callee->specific_attrs<EnforceTCBLeafAttr>()) { + CalleeTCBs.insert(Attr->getTCBName()); + } ---------------- NoQ wrote: > aaron.ballman wrote: > > Pretty sure you can remove the manual loops here with something like this. > `std::inserter` doesn't seem to work with `llvm::StringSet` but > `llvm::for_each` works and seems to be more compact(?) Weird about `std::inserter` but this is a good improvement as-is. ================ Comment at: clang/lib/Sema/SemaChecking.cpp:16090-16092 + if (CalleeTCBs.count(CallerTCB) == 0) { + Diag(TheCall->getExprLoc(), diag::warn_tcb_enforcement_violation) << CallerTCB << Callee->getName(); + } ---------------- NoQ wrote: > aaron.ballman wrote: > > > TIL that `<< Callee` adds quotes automatically. I should use clang diagnostic > builders more often :) Yeah -- the diagnostic engine knows how to format named things and will automatically insert quotes for you when given a named thing. Super handy, but not always super obvious. 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