On 11/15/2016 07:03 AM, Jakub Jelinek wrote:
Hi!
On Mon, Nov 14, 2016 at 10:58:51AM +0100, Jakub Jelinek wrote:
Working virtually out of Samoa.
The following patch is an attempt to handle -fsanitize=undefined
for vectors. We already diagnose out of bounds accesses for vector
subscripts, this patch adds expansion for vector UBSAN_CHECK_* and generates
those in ubsan. Haven't finished up the many vect elements handling (want
to emit a loop for code size). Is this something we want for GCC 7?
Here is the full patch (just for -fsanitize=signed-integer-overflow, not
for -fsanitize=shift or -fsanitize={integer,float}-divide-by-zero for now).
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
2016-11-15 Jakub Jelinek <ja...@redhat.com>
PR sanitizer/77823
* ubsan.c (ubsan_build_overflow_builtin): Add DATAP argument, if
it points to non-NULL tree, use it instead of ubsan_create_data.
(instrument_si_overflow): Handle vector signed integer overflow
checking.
* ubsan.h (ubsan_build_overflow_builtin): Add DATAP argument.
* tree-vrp.c (simplify_internal_call_using_ranges): Punt for
vector IFN_UBSAN_CHECK_*.
* internal-fn.c (expand_addsub_overflow): Add DATAP argument,
pass it through to ubsan_build_overflow_builtin.
(expand_neg_overflow, expand_mul_overflow): Likewise.
(expand_vector_ubsan_overflow): New function.
(expand_UBSAN_CHECK_ADD, expand_UBSAN_CHECK_SUB,
expand_UBSAN_CHECK_MUL): Use tit for vector arithmetics.
(expand_arith_overflow): Adjust expand_*_overflow callers.
* c-c++-common/ubsan/overflow-vec-1.c: New test.
* c-c++-common/ubsan/overflow-vec-2.c: New test.
I certainly don't see any reason why we wouldn't want additional
sanitizers, so ISTM it's really a matter of are you happy with the
implementation.
While there's a fair amount of changes in internal-fn.c, they're all
sanitizer specific routines AFAICT.
Jeff