From b2bb16b671f291a826da17cbec295cd5752444b4 Mon Sep 17 00:00:00 2001 From: Aaron Ballman Date: Fri, 21 Feb 2014 13:44:43 +0000 Subject: [PATCH] Moving the documentation for the sanitizer negation attributes into AttrDocs. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201850 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/AttributeReference.rst | 38 +++++++++++++++++++++++++++++++++ docs/LanguageExtensions.rst | 31 --------------------------- include/clang/Basic/Attr.td | 6 +++--- include/clang/Basic/AttrDocs.td | 32 +++++++++++++++++++++++++++ 4 files changed, 73 insertions(+), 34 deletions(-) diff --git a/docs/AttributeReference.rst b/docs/AttributeReference.rst index 6e5d215760..ef301f5dc5 100644 --- a/docs/AttributeReference.rst +++ b/docs/AttributeReference.rst @@ -291,6 +291,44 @@ not ODR-equivalent. Query for this feature with ``__has_attribute(enable_if)``. +no_sanitize_address (no_address_safety_analysis, gnu::no_address_safety_analysis, gnu::no_sanitize_address) +----------------------------------------------------------------------------------------------------------- +.. csv-table:: Supported Syntaxes + :header: "GNU", "C++11", "__declspec", "Keyword" + + "X","X","","" + +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. + + +no_sanitize_memory +------------------ +.. csv-table:: Supported Syntaxes + :header: "GNU", "C++11", "__declspec", "Keyword" + + "X","","","" + +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. + + +no_sanitize_thread +------------------ +.. csv-table:: Supported Syntaxes + :header: "GNU", "C++11", "__declspec", "Keyword" + + "X","","","" + +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. + + objc_method_family ------------------ .. csv-table:: Supported Syntaxes diff --git a/docs/LanguageExtensions.rst b/docs/LanguageExtensions.rst index 2c0c7d2b3d..9474bf2069 100644 --- a/docs/LanguageExtensions.rst +++ b/docs/LanguageExtensions.rst @@ -1639,46 +1639,15 @@ in the analyzer's `list of source-level annotations 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 ====================== diff --git a/include/clang/Basic/Attr.td b/include/clang/Basic/Attr.td index 922dfa53fe..5c597bf99c 100644 --- a/include/clang/Basic/Attr.td +++ b/include/clang/Basic/Attr.td @@ -1244,21 +1244,21 @@ def NoSanitizeAddress : InheritableAttr { 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) diff --git a/include/clang/Basic/AttrDocs.td b/include/clang/Basic/AttrDocs.td index e344946d9d..37ffee1c75 100644 --- a/include/clang/Basic/AttrDocs.td +++ b/include/clang/Basic/AttrDocs.td @@ -571,3 +571,35 @@ This attribute accepts a single parameter that must be one of the following: ``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. + }]; +} -- 2.40.0