melver added inline comments.

================
Comment at: clang/include/clang/Basic/AttrDocs.td:2601-2602
+
+This is not the same as ``__attribute__((no_sanitize(...)))``, which depending
+on the tool may still insert instrumentation to prevent false positive reports.
+  }];
----------------
aaron.ballman wrote:
> glider wrote:
> > aaron.ballman wrote:
> > > Has there been agreement that this isn't actually a bug? My understanding 
> > > of `no_sanitize` is that it disables sanitizer support for a function or 
> > > global. The documentation for that attribute says:
> > > ```
> > > Use the ``no_sanitize`` attribute on a function or a global variable
> > > declaration to specify that a particular instrumentation or set of
> > > instrumentations should not be applied.
> > > ```
> > > That sure reads like "do not instrument this at all" to me, and makes me 
> > > think we don't need a second attribute that says "no, really, I mean it 
> > > this time."
> > No, this isn't a bug, but might need to be better clarified in the docs.
> > ThreadSanitizer and MemorySanitizer do insert some instrumentation into 
> > ignore functions to prevent false positives:
> > 
> > > ThreadSanitizer still instruments such functions to avoid false positives 
> > > and provide meaningful stack traces.
> > 
> > (https://clang.llvm.org/docs/ThreadSanitizer.html#attribute-no-sanitize-thread)
> > 
> > and 
> > 
> > > MemorySanitizer may still instrument such functions to avoid false 
> > > positives.
> > 
> > (https://clang.llvm.org/docs/MemorySanitizer.html#attribute-no-sanitize-memory)
> > 
> > This is the behavior people rely onto, although at this point I don't think 
> > `no_sanitize(...)` is the best name for attribute not disabling 
> > instrumentation completely.
> Thank you for the information!
> 
> Having two attributes with basically the same name to perform this 
> functionality is confusing because users (understandably) will reach for the 
> succinctly named one and make assumptions about what it does from the name.
> 
> One possibility would be to change `no_sanitize` to take an additional 
> argument, as in: `__attribute__((no_sanitize(fully_disable, "thread")))`. 
> Perhaps another solution would be to give the proposed attribute a more 
> distinct name, like `disable_sanitizer_instrumentation`, 
> `sanitizer_instrumentation_disabled`, or something else.
Last I looked at `no_sanitize`, it's quite awkward that it is an attribute that 
accepts arguments, because it makes it very hard to query for existence of 
attribute additions/changes with `__has_attribute()`. Given this new attribute 
is meant to be semantically quite different, the cleaner and less intrusive way 
with that in mind is to create a new attribute. Unless of course there's a nice 
way to make `__has_attribute()` work.

Here's another suggestion for name, which actually makes the difference between 
`no_sanitize` and the new one obvious: `no_sanitize_any_permit_false_positives`

At least it would semantically tell a user what might happen, which in turn 
would hopefully make them avoid this attribute (also because it's hard enough 
to type) unless they are absolutely sure.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D108029

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

Reply via email to