-fsanitize=undefined behavior
Segher Boessenkool
segher@kernel.crashing.org
Fri May 1 13:38:23 GMT 2020
Hi!
On Thu, Apr 30, 2020 at 10:57:49PM +0100, Jonathan Wakely via Gcc-help wrote:
> On Thu, 30 Apr 2020 at 22:27, Tom N <nospam@codesniffer.com> wrote:
> >
> > The man page for -fsanitize=undefined lists a bunch of sub-options (eg. -fsanitize=shift, -fsanitize=shift-exponent, etc). If I include -fsanitize=undefined does it enable all of the sub-options, or none, or something in between? If it doesn't enable all sub-options, is there an easy way to do that short of specifying all of them?
>
> The man page says:
>
> "Unlike other similar options, -fsanitize=float-divide-by-zero is not
> enabled by -fsanitize=undefined" and "Unlike other similar options,
> -fsanitize=float-cast-overflow is not enabled by -fsanitize=undefined"
>
> So it seems reasonable to assume that all the other suboptions are
> enabled by -fsanitize=undefined, and if you want *all* of them then
> use -fsanitize=undefined -fsanitize=float-divide-by-zero
> -fsanitize=float-cast-overflow
The code (flag-types.h) says
SANITIZE_UNDEFINED_NONDEFAULT = SANITIZE_FLOAT_DIVIDE | SANITIZE_FLOAT_CAST
| SANITIZE_BOUNDS_STRICT
(and there are no surprises with how it is used). The
-fsanitize-bounds-strict option is unusual: it *weakens* what
-fsanitize-bounds does!
So yes, only -fsanitize=float-divide-by-zero and
-fsanitize=float-cast-overflow are not enabled by default.
Segher
More information about the Gcc-help
mailing list