Query for this feature with ``__has_attribute(enable_if)``.\r
\r
\r
+no_sanitize_address (no_address_safety_analysis, gnu::no_address_safety_analysis, gnu::no_sanitize_address)\r
+-----------------------------------------------------------------------------------------------------------\r
+.. csv-table:: Supported Syntaxes\r
+ :header: "GNU", "C++11", "__declspec", "Keyword"\r
+\r
+ "X","X","",""\r
+\r
+Use ``__attribute__((no_sanitize_address))`` on a function declaration to\r
+specify that address safety instrumentation (e.g. AddressSanitizer) should\r
+not be applied to that function.\r
+\r
+\r
+no_sanitize_memory\r
+------------------\r
+.. csv-table:: Supported Syntaxes\r
+ :header: "GNU", "C++11", "__declspec", "Keyword"\r
+\r
+ "X","","",""\r
+\r
+Use ``__attribute__((no_sanitize_memory))`` on a function declaration to\r
+specify that checks for uninitialized memory should not be inserted \r
+(e.g. by MemorySanitizer). The function may still be instrumented by the tool\r
+to avoid false positives in other places.\r
+\r
+\r
+no_sanitize_thread\r
+------------------\r
+.. csv-table:: Supported Syntaxes\r
+ :header: "GNU", "C++11", "__declspec", "Keyword"\r
+\r
+ "X","","",""\r
+\r
+Use ``__attribute__((no_sanitize_thread))`` on a function declaration to\r
+specify that checks for data races on plain (non-atomic) memory accesses should\r
+not be inserted by ThreadSanitizer. The function is still instrumented by the\r
+tool to avoid false positives and provide meaningful stack traces.\r
+\r
+\r
objc_method_family\r
------------------\r
.. csv-table:: Supported Syntaxes\r
Extensions for Dynamic Analysis
===============================
-.. _langext-address_sanitizer:
-
-AddressSanitizer
-----------------
-
Use ``__has_feature(address_sanitizer)`` to check if the code is being built
with :doc:`AddressSanitizer`.
-Use ``__attribute__((no_sanitize_address))``
-on a function declaration
-to specify that address safety instrumentation (e.g. AddressSanitizer) should
-not be applied to that function.
-
-.. _langext-thread_sanitizer:
-
-ThreadSanitizer
-----------------
-
Use ``__has_feature(thread_sanitizer)`` to check if the code is being built
with :doc:`ThreadSanitizer`.
-Use ``__attribute__((no_sanitize_thread))`` on a function declaration
-to specify that checks for data races on plain (non-atomic) memory accesses
-should not be inserted by ThreadSanitizer.
-The function is still instrumented by the tool to avoid false positives and
-provide meaningful stack traces.
-
-.. _langext-memory_sanitizer:
-
-MemorySanitizer
-----------------
Use ``__has_feature(memory_sanitizer)`` to check if the code is being built
with :doc:`MemorySanitizer`.
-Use ``__attribute__((no_sanitize_memory))`` on a function declaration
-to specify that checks for uninitialized memory should not be inserted
-(e.g. by MemorySanitizer). The function may still be instrumented by the tool
-to avoid false positives in other places.
-
-
Thread Safety Analysis
======================
let Spellings = [GCC<"no_address_safety_analysis">,
GCC<"no_sanitize_address">];
let Subjects = SubjectList<[Function, FunctionTemplate], ErrorDiag>;
- let Documentation = [Undocumented];
+ let Documentation = [NoSanitizeAddressDocs];
}
// Attribute to disable ThreadSanitizer checks.
def NoSanitizeThread : InheritableAttr {
let Spellings = [GNU<"no_sanitize_thread">];
let Subjects = SubjectList<[Function, FunctionTemplate], ErrorDiag>;
- let Documentation = [Undocumented];
+ let Documentation = [NoSanitizeThreadDocs];
}
// Attribute to disable MemorySanitizer checks.
def NoSanitizeMemory : InheritableAttr {
let Spellings = [GNU<"no_sanitize_memory">];
let Subjects = SubjectList<[Function, FunctionTemplate], ErrorDiag>;
- let Documentation = [Undocumented];
+ let Documentation = [NoSanitizeMemoryDocs];
}
// C/C++ Thread safety attributes (e.g. for deadlock, data race checking)
``unknown``, ``consumed``, or ``unconsumed``.
}];
}
+
+def NoSanitizeAddressDocs : Documentation {
+ let Category = DocCatFunction;
+ // This function has multiple distinct spellings, and so it requires a custom
+ // heading to be specified. The most common spelling is sufficient.
+ let Heading = "no_sanitize_address";
+ let Content = [{
+Use ``__attribute__((no_sanitize_address))`` on a function declaration to
+specify that address safety instrumentation (e.g. AddressSanitizer) should
+not be applied to that function.
+ }];
+}
+
+def NoSanitizeThreadDocs : Documentation {
+ let Category = DocCatFunction;
+ let Content = [{
+Use ``__attribute__((no_sanitize_thread))`` on a function declaration to
+specify that checks for data races on plain (non-atomic) memory accesses should
+not be inserted by ThreadSanitizer. The function is still instrumented by the
+tool to avoid false positives and provide meaningful stack traces.
+ }];
+}
+
+def NoSanitizeMemoryDocs : Documentation {
+ let Category = DocCatFunction;
+ let Content = [{
+Use ``__attribute__((no_sanitize_memory))`` on a function declaration to
+specify that checks for uninitialized memory should not be inserted
+(e.g. by MemorySanitizer). The function may still be instrumented by the tool
+to avoid false positives in other places.
+ }];
+}