<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Tms Rmn";
        panose-1:2 2 6 3 4 5 5 2 3 4;}
@font-face
        {font-family:Helv;
        panose-1:2 11 6 4 2 2 2 3 2 4;}
@font-face
        {font-family:"MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:JA;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hi All – <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I$B!G(Bve created a first draft of a standalone Sphynx documentation page for the UndefinedBehaviorSanitizer (modelled after the ASan page [http://clang.llvm.org/docs/AddressSanitizer.html]).  I envision that the information below would largely
 replace the many links to the <a href="http://clang.llvm.org/docs/UsersManual.html#controlling-code-generation">
http://clang.llvm.org/docs/UsersManual.html#controlling-code-generation</a> section of the Clang User$B!G(Bs Manual.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Please review the page below; you can send comments to me directly.  In particular, I$B!G(Bm not sure if the information in the $B!H(BSupported Platforms$B!I(B, $B!H(BLimitations$B!I(B, and $B!H(BCurrent Status$B!I(B sections is correct.  Thanks in advance for your review.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">==========================<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">UndefinedBehaviorSanitizer<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">==========================<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">.. contents::<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   :local:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Introduction<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">============<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">"Undefined behavior" is a concept known especially in the C and C++ languages.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Undefined behavior means that the semantics of a certain operation is undefined<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">by the language. For example, using a non-static variable before it has been
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">initialized leads to undefined behavior.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">A program that can execute undefined behavior is not well-formed; thus, a
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">compiler assumes that undefined behavior cannot happen. It uses this assumption
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">to drive certain kinds of optimizations. When it encounters undefined behavior,
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">a compiler is free to act in any manner it chooses, either as an explicit
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">choice or as natural fallout from some algorithm.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Note that undefined behavior is different from $B!H(Bimplementation-defined behavior.$B!I(B
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">For implementation-defined behavior, the program is well-formed and the compiler
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">must select a specific behavior and document the choices that it makes.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">UndefinedBehaviorSanitizer (UBSan) is a fast undefined-behavior detector
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">implemented in Clang and Compiler-rt. It consists of a compiler
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">instrumentation module and a run-time library. The tool can detect a<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">number of types of bugs, for example:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">* Use of a misaligned pointer or a null pointer.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">* Load of a ``bool`` value which is neither ``true`` nor ``false``.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">* Conversion to, from, or between floating-point types which would
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">  overflow the destination.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">* Floating point or integer division by zero.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">* Signed or unsigned integer overflow.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">The UndefinedBehaviorSanitizer has a small runtime cost and no impact on
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">address-space layout or ABI.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">How to build<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">============<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Follow the `clang build instructions <../get_started.html>`_. CMake build is<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">supported.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Usage<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">=====<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Compile and link your program with the ``-f[no-]sanitize=check1,check2,...``
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">flag. To link to the appropriate runtime library, you must also provide the
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">``-fsanitize=`` argument. When using ``-fsanitize=vptr`` (or a group that
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">includes it, such as ``-fsanitize=undefined``) with a C++ program, the link
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">must be performed by ``clang++``, not ``clang``, in order to link against
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">the C++-specific parts of the runtime library.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">You cannot combine more than one of the ``-fsanitize=address``,
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">``-fsanitize=thread``, and ``-fsanitize=memory`` checkers in the same program.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">The ``-fsanitize=undefined`` checks can be combined with other sanitizers.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">.. code-block:: console<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    % cat example_UnsafeDivision.cc<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    int32_t unsafe_div_int32_t (int32_t a, int32_t b) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">        return a / b;     // undefined if b==0<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    # Compile and link<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    % clang -O1 -g -fsanitize=undefined example_UnsafeDivision.cc<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">or:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">.. code-block:: console<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    # Compile<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    % clang -O1 -g -fsanitize=undefined -c example_UnsafeDivision.cc<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    # Link<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    % clang++ -g -fsanitize=undefined example_UnsafeDivision.o<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">By default, after a sanitizer diagnoses an issue, it will attempt to continue
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">executing the program if there is a reasonable behavior it can give to the
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">faulting operation. You can include the ``-fno-sanitize-recover'' flag to cause
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">the program to abort instead.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">You can also provide the ``-fsanitize-undefined-trap-on-error`` flag to cause
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">traps to be emitted rather than calls to runtime libraries when a problem is
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">detected. This option is intended for use in cases where the sanitizer runtime
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">cannot be used (for example, when building libc or a kernel module). This option
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">is only compatible with the sanitizers in the ``undefined-trap`` group.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Undefined Behavior Checks<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">-------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Clang provides several ways to check for undefined behavior.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">**-f[no-]sanitize=check1,check2,...**<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   Turn on runtime checks for various forms of undefined or suspicious<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   behavior.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   This option controls whether Clang adds runtime checks for various<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   forms of undefined or suspicious behavior, and is disabled by<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   default. If a check fails, a diagnostic message is produced at<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   runtime explaining the problem. The main checks are:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  .. _opt_fsanitize_undefined:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      ``-fsanitize=undefined``: Fast and compatible undefined behavior<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      checker. Enables the undefined behavior checks that have small<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      runtime cost and no impact on address space layout or ABI. This<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      includes all of the checks listed below other than<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      ``unsigned-integer-overflow``.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=undefined-trap``: This includes all sanitizers<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      included by ``-fsanitize=undefined``, except those that require<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      runtime support. This group of sanitizers is intended to be<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      used in conjunction with the ``-fsanitize-undefined-trap-on-error``<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      flag. This includes all of the checks listed below other than<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      ``unsigned-integer-overflow`` and ``vptr``.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   The following more fine-grained checks are also available:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=alignment``: Use of a misaligned pointer or creation<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      of a misaligned reference.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=bool``: Load of a ``bool`` value which is neither<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      ``true`` nor ``false``.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=bounds``: Out of bounds array indexing, in cases<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      where the array bound can be statically determined.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=enum``: Load of a value of an enumerated type which<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      is not in the range of representable values for that enumerated<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      type.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=float-cast-overflow``: Conversion to, from, or<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      between floating-point types which would overflow the<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      destination.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=float-divide-by-zero``: Floating point division by<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      zero.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=function``: Indirect call of a function through a<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      function pointer of the wrong type (Linux, C++ and x86/x86_64 only).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=integer-divide-by-zero``: Integer division by zero.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=nonnull-attribute``: Passing null pointer as a function
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      parameter which is declared to never be null.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=null``: Use of a null pointer or creation of a null<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      reference.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=object-size``: An attempt to use bytes which the<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      optimizer can determine are not part of the object being<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      accessed. The sizes of objects are determined using<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      ``__builtin_object_size``, and consequently may be able to detect<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      more problems at higher optimization levels.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=return``: In C++, reaching the end of a<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      value-returning function without returning a value.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=returns-nonnull-attribute``: Returning null pointer
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      from a function which is declared to never return null.  
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=shift``: Shift operators where the amount shifted is<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      greater or equal to the promoted bit-width of the left-hand side<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      or less than zero, or where the left-hand side is negative. For a<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      signed left shift, also checks for signed overflow in C, and for<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      unsigned overflow in C++.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=signed-integer-overflow``: Signed integer overflow,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      including all the checks added by ``-ftrapv``, and checking for<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      overflow in signed division (``INT_MIN / -1``).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=unreachable``: If control flow reaches<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      ``__builtin_unreachable``.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=unsigned-integer-overflow``: Unsigned integer<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      overflows.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=vla-bound``: A variable-length array whose bound<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      does not evaluate to a positive value.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">   -  ``-fsanitize=vptr``: Use of an object whose vptr indicates that<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      it is of the wrong dynamic type, or that its lifetime has not<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">      begun or has ended. Incompatible with ``-fno-rtti``.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Blacklist<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">---------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">UndefinedBehaviorSanitizer supports entity types defined in
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">:doc:`SanitizerSpecialCaseList` that can be used to suppress error reports in the
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">specified source files or functions. Use ``-fsanitize-blacklist=/path/to/blacklist/file``
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">to disable or modify sanitizer checks for objects listed in the file. You can also use<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">``-fno-sanitize-blacklist`` to not use a blacklist file if it was specified earlier
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">in the command line.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Supported Platforms<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">===================<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">UndefinedBehaviorSanitizer is supported on<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">* Linux i386/x86\_64 (tested on Ubuntu 12.04);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">* MacOS 10.6 - 10.9 (i386/x86\_64).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">* Android ARM<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Ports to various other platforms are in progress.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Limitations<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">===========<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">* Static linking is not supported.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Current Status<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">==============<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">UndefinedBehaviorSanitizer is fully functional on supported platforms starting from LLVM<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">3.3. The test suite is integrated into CMake build and can be run with ``make<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">check-ubsan`` command.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">More Information<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">================<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">See `What Every C Programmer Should Know About Undefined Behavior
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><<a href="http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html">http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html</a>>`_  from
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">the LLVM Project Blog and `A Guide to Undefined Behavior in C and C++ 
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><<a href="http://blog.regehr.org/archives/213">http://blog.regehr.org/archives/213</a>>`_ from John Regehr's *Embedded in
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">Academia* blog for an introduction to Undefined Behavior in C and C++.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">`http://www.chromium.org/developers/testing/undefinedbehaviorsanitizer <<a href="http://www.chromium.org/developers/testing/undefinedbehaviorsanitizer">http://www.chromium.org/developers/testing/undefinedbehaviorsanitizer</a>>`_<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Helv","sans-serif";color:purple">Cheers,<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:"Helv","sans-serif";color:purple">Michael<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:14.0pt;font-family:"Cambria Math","serif";color:black">$B"$(B</span><span style="font-size:14.0pt;font-family:"Arial","sans-serif";color:black">$B!{(B</span><span style="font-size:14.0pt;font-family:"Helv","sans-serif";color:black">$B!_(B</span><span style="font-size:14.0pt;font-family:"Arial","sans-serif";color:black">$B""(B</span><span style="font-size:14.0pt;font-family:"Tms Rmn","serif";color:black">
</span><span style="font-size:12.0pt;font-family:"Tms Rmn","serif";color:black">   </span><span lang="JA" style="font-size:12.0pt;font-family:"MS Mincho";color:black">$B$*Hh$lMM$G$9(B</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>