diff options
Diffstat (limited to 'clang/docs/AllocToken.rst')
| -rw-r--r-- | clang/docs/AllocToken.rst | 43 | 
1 files changed, 33 insertions, 10 deletions
| diff --git a/clang/docs/AllocToken.rst b/clang/docs/AllocToken.rst index b65e18c..1a740e5 100644 --- a/clang/docs/AllocToken.rst +++ b/clang/docs/AllocToken.rst @@ -49,6 +49,39 @@ change or removal. These may (experimentally) be selected with ``-Xclang  * ``increment``: This mode assigns a simple, incrementally increasing token ID    to each allocation site. +The following command-line options affect generated token IDs: + +* ``-falloc-token-max=<N>`` +    Configures the maximum number of tokens. No max by default (tokens bounded +    by ``SIZE_MAX``). + +Querying Token IDs with ``__builtin_infer_alloc_token`` +======================================================= + +For use cases where the token ID must be known at compile time, Clang provides +a builtin function: + +.. code-block:: c + +    size_t __builtin_infer_alloc_token(<args>, ...); + +This builtin returns the token ID inferred from its argument expressions, which +mirror arguments normally passed to any allocation function. The argument +expressions are **unevaluated**, so it can be used with expressions that would +have side effects without any runtime impact. + +For example, it can be used as follows: + +.. code-block:: c + +    struct MyType { ... }; +    void *__partition_alloc(size_t size, size_t partition); +    #define partition_alloc(...) __partition_alloc(__VA_ARGS__, __builtin_infer_alloc_token(__VA_ARGS__)) + +    void foo(void) { +        MyType *x = partition_alloc(sizeof(*x)); +    } +  Allocation Token Instrumentation  ================================ @@ -70,16 +103,6 @@ example:      // Instrumented:      ptr = __alloc_token_malloc(size, <token id>); -The following command-line options affect generated token IDs: - -* ``-falloc-token-max=<N>`` -    Configures the maximum number of tokens. No max by default (tokens bounded -    by ``SIZE_MAX``). - -    .. code-block:: console - -        % clang++ -fsanitize=alloc-token -falloc-token-max=512 example.cc -  Runtime Interface  ----------------- | 
