On Thu, Apr 13, 2017 at 12:28:40PM +0300, Denis Khalikov wrote: > --- /dev/null > +++ b/gcc/testsuite/c-c++-common/ubsan/bounds-15.c > @@ -0,0 +1,11 @@ > +/* { dg-do run } */ > +/* { dg-options "-fsanitize=bounds" } */ > +/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */ > + > +int main() > +{ > + long long offset = 10; > + char array[10]; > + char c = array[offset]; > + return 0; > +}
I would expect you want to dg-output here the runtime diagnostics, at least some part of it, to make it clear the testcase is UB and to test whether the UB is detected. > diff --git a/gcc/ubsan.c b/gcc/ubsan.c > index c01d633..9333336 100644 > --- a/gcc/ubsan.c > +++ b/gcc/ubsan.c > @@ -672,7 +672,8 @@ ubsan_expand_bounds_ifn (gimple_stmt_iterator *gsi) > > /* Pick up the arguments of the UBSAN_BOUNDS call. */ > tree type = TREE_TYPE (TREE_TYPE (gimple_call_arg (stmt, 0))); > - tree index = gimple_call_arg (stmt, 1); > + tree index, orig_index; > + index = orig_index = gimple_call_arg (stmt, 1); > tree orig_index_type = TREE_TYPE (index); Instead of this I'd suggest: tree index = gimple_call_arg (stmt, 1); - tree orig_index_type = TREE_TYPE (index); + tree orig_index = index; > tree bound = gimple_call_arg (stmt, 2); > > @@ -708,9 +709,9 @@ ubsan_expand_bounds_ifn (gimple_stmt_iterator *gsi) > ? BUILT_IN_UBSAN_HANDLE_OUT_OF_BOUNDS > : BUILT_IN_UBSAN_HANDLE_OUT_OF_BOUNDS_ABORT; > tree fn = builtin_decl_explicit (bcode); > - tree val = force_gimple_operand_gsi (gsi, ubsan_encode_value (index), > - true, NULL_TREE, true, > - GSI_SAME_STMT); > + tree val > + = force_gimple_operand_gsi (gsi, ubsan_encode_value (orig_index), true, > + NULL_TREE, true, GSI_SAME_STMT); > g = gimple_build_call (fn, 2, data, val); > } > gimple_set_location (g, loc); and replace orig_index_type use with TREE_TYPE (orig_index) Jakub