Some questions about the undefined behavior checking in clang
I am a new comer for clang, and am getting a question about the
undefined-behavior checking in clang compiler
*-fcatch-undefined-behavior*: Turn on runtime code generation to check
for undefined behavior.
This option, which defaults to off, controls whether or not Clang
adds runtime checks for undefined runtime behavior. If the check
fails, __builtin_trap() is used to indicate failure. The checks are:
# Subscripting where the static type of one operand is variable which
is decayed from an array type and the other operand is greater than
the size of the array or less than zero.
# Shift operators where the amount shifted is greater or equal to the
promoted bit-width of the left-hand-side or less than zero.
# If control flow reaches __builtin_unreachable.
# When llvm implements more __builtin_object_size support, reads and
writes for objects that __builtin_object_size indicates we aren't
accessing valid memory. Bit-fields and vectors are not yet checked.
The information listed above is the verbose explanation about undefined
behavior checking flag, seems that the undefined behavior checking is
realized via the dynamic checkers instrumented into the C source code,
what I am wondering is whether those checkers should be added
automatically by clang or added by users manually.
Moreover, what is the status of the integrations of undefined behavior
checking into clang?