sanitize
The tracking issue for this feature is: #39699
The sanitize
attribute can be used to selectively disable or enable sanitizer
instrumentation in an annotated function. This might be useful to: avoid
instrumentation overhead in a performance critical function, or avoid
instrumenting code that contains constructs unsupported by given sanitizer.
The precise effect of this annotation depends on particular sanitizer in use.
For example, with sanitize(thread = "off")
, the thread sanitizer will no
longer instrument non-atomic store / load operations, but it will instrument
atomic operations to avoid reporting false positives and provide meaning full
stack traces.
This attribute was previously named no_sanitize
.
Examples
#![allow(unused)] #![feature(sanitize)] fn main() { #[sanitize(address = "off")] fn foo() { // ... } }
It is also possible to disable sanitizers for entire modules and enable them for single items or functions.
#![allow(unused)] #![feature(sanitize)] fn main() { #[sanitize(address = "off")] mod foo { fn unsanitized() { // ... } #[sanitize(address = "on")] fn sanitized() { // ... } } }
It's also applicable to impl blocks.
#![allow(unused)] #![feature(sanitize)] fn main() { trait MyTrait { fn foo(&self); fn bar(&self); } #[sanitize(address = "off")] impl MyTrait for () { fn foo(&self) { // ... } #[sanitize(address = "on")] fn bar(&self) { // ... } } }