On Mon, Mar 06, 2017 at 02:07:37PM +0100, marxin wrote:
>       PR target/65705
>       PR target/69804
>       * toplev.c (process_options): Disable -fcheck-pointer-bounds with
>       sanitizers.

I can understand why it is disabled for -fsanitize=address or
-fsanitize=bounds, perhaps -fsanitize=threads too,
but don't understand why e.g. -fsanitize=shift or -fsanitize=unreachable
or -fsanitize=signed-integer-overflow or -fsanitize=leak (which is purely
a linking option) should affect it.

> +      const char *sanitizer_names[] = { "Address", "Undefined Behavior",
> +     "Leak", "Thread" };
> +      const int sanitizer_flags[] = { SANITIZE_ADDRESS, SANITIZE_UNDEFINED,
> +     SANITIZE_LEAK, SANITIZE_THREAD };

Even if there is a reason for that, there is also
SANITIZE_NONDEFAULT that is part of UB sanitizer, so if you can't
-fcheck-pointer-bounds with any parts of -fsanitize=undefined, then
likely it applies to others too.
For -fsanitize=bounds-stricts it surely applies though, if -fsanitize=bounds
can't be MPX instrumented.

> +      for (unsigned i = 0; i < sizeof (sanitizer_flags) / sizeof (int); i++)
> +     if (flag_sanitize & sanitizer_flags[i])
> +       {
> +         error_at (UNKNOWN_LOCATION,
> +                   "-fcheck-pointer-bounds is not supported with "
> +                   "%s Sanitizer", sanitizer_names[i]);

This is not i18n friendly, I think you just want to unroll the loop
by hand and use 4 (or just 3?) different error_at calls.

        Jakub

Reply via email to