re PR tree-optimization/70876 (ICE in chkp_find_bounds: Unexpected tree code with_size_expr)
gcc/ PR tree-optimization/70786 * tree-chkp.c (chkp_find_bounds_1): Support WITH_SIZE_EXPR. * gcc/calls.c (initialize_argument_information): Bind bounds with corresponding args passed by reference. gcc/testsuite/ PR tree-optimization/70786 * gcc.target/i386/pr70876.c: New test. From-SVN: r236086
This commit is contained in:
parent
7f99d40a99
commit
afc610dba1
5 changed files with 36 additions and 0 deletions
|
@ -1,3 +1,10 @@
|
|||
2016-05-10 Ilya Enkovich <ilya.enkovich@intel.com>
|
||||
|
||||
PR tree-optimization/70786
|
||||
* tree-chkp.c (chkp_find_bounds_1): Support WITH_SIZE_EXPR.
|
||||
* gcc/calls.c (initialize_argument_information): Bind bounds
|
||||
with corresponding args passed by reference.
|
||||
|
||||
2016-05-10 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/70927
|
||||
|
|
10
gcc/calls.c
10
gcc/calls.c
|
@ -1188,6 +1188,7 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
|
|||
j--;
|
||||
}
|
||||
}
|
||||
argpos = 0;
|
||||
FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
|
||||
{
|
||||
tree argtype = TREE_TYPE (arg);
|
||||
|
@ -1206,6 +1207,14 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
|
|||
chkp_find_bound_slots (argtype, slots);
|
||||
}
|
||||
}
|
||||
else if (CALL_WITH_BOUNDS_P (exp)
|
||||
&& pass_by_reference (NULL, TYPE_MODE (argtype), argtype,
|
||||
argpos < n_named_args))
|
||||
{
|
||||
if (slots)
|
||||
BITMAP_FREE (slots);
|
||||
ptr_arg = j;
|
||||
}
|
||||
else if (POINTER_BOUNDS_TYPE_P (argtype))
|
||||
{
|
||||
/* We expect bounds in instrumented calls only.
|
||||
|
@ -1249,6 +1258,7 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
|
|||
else
|
||||
args[j].tree_value = arg;
|
||||
j--;
|
||||
argpos++;
|
||||
}
|
||||
|
||||
if (slots)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2016-05-10 Ilya Enkovich <ilya.enkovich@intel.com>
|
||||
|
||||
PR tree-optimization/70786
|
||||
* gcc.target/i386/pr70876.c: New test.
|
||||
|
||||
2016-05-10 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/70927
|
||||
|
|
13
gcc/testsuite/gcc.target/i386/pr70876.c
Normal file
13
gcc/testsuite/gcc.target/i386/pr70876.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* { dg-do compile { target { ! x32 } } } */
|
||||
/* { dg-options "-fcheck-pointer-bounds -mmpx -Wno-implicit-function-declaration" } */
|
||||
|
||||
void f (char *s1, char *s2)
|
||||
{
|
||||
int z = 5;
|
||||
|
||||
struct { char a[z]; } x;
|
||||
|
||||
s1[0] = s2[0];
|
||||
|
||||
foo (x, x);
|
||||
}
|
|
@ -3646,6 +3646,7 @@ chkp_find_bounds_1 (tree ptr, tree ptr_src, gimple_stmt_iterator *iter)
|
|||
break;
|
||||
|
||||
case ADDR_EXPR:
|
||||
case WITH_SIZE_EXPR:
|
||||
bounds = chkp_make_addressed_object_bounds (TREE_OPERAND (ptr_src, 0), iter);
|
||||
break;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue