================ @@ -48,6 +49,63 @@ Example $ clang -fsanitize=address -fsanitize-ignorelist=ignorelist.txt foo.c ; ./a.out # No error report here. +Usage with UndefinedBehaviorSanitizer +===================================== + +The arithmetic overflow sanitizers ``unsigned-integer-overflow`` and +``signed-integer-overflow`` as well as the implicit integer truncation +sanitizers ``implicit-signed-integer-truncation`` and +``implicit-unsigned-integer-truncation`` support the ability to adjust +instrumentation based on type. + +.. code-block:: bash + + $ cat foo.c + void foo() { + int a = 2147483647; // INT_MAX + ++a; // Normally, an overflow with -fsanitize=signed-integer-overflow + } + $ cat ignorelist.txt + [signed-integer-overflow] + type:int + $ clang -fsanitize=signed-integer-overflow -fsanitize-ignorelist=ignorelist.txt foo.c ; ./a.out + # no signed-integer-overflow error + +Supplying ``ignorelist.txt`` with ``-fsanitize-ignorelist=ignorelist.txt`` +disables overflow sanitizer instrumentation for arithmetic operations +containing values of type ``int``, for example. Custom types may be used. + +The following SCL categories are supported: ``=allow``, ``=skip`` and +``=forbid``. The ``allow`` category is the default for any entry and specifies +that the query, if matched, will have its sanitizer instrumentation ignored. +Conversely, both ``skip`` and ``forbid`` cause their queries, if matched, to be +left out of the ignorelist -- essentially ensuring sanitizer instrumentation +remains for those types. This is useful for whitelisting specific types. + +With this, one may disable instrumentation for all types and specifically allow +instrumentation for one or many types. + +.. code-block:: bash + + $ cat ignorelist.txt + [implicit-signed-integer-truncation] + type:*=allow + type:T=skip + $ cat foo.c + typedef char T; + typedef char U; + void foo(int toobig) { + T a = toobig; // instrumented + U b = toobig; // not instrumented + char c = toobig; // also not instrumented + } + +Note that ``skip`` and ``forbid`` operate exactly the same in this context and ---------------- vitalybuka wrote:
maybe `allow` -> `no_sanitize` https://github.com/llvm/llvm-project/pull/107332 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits