Use array_at_struct_end_p in tree-chkp.c (PR middle-end/68270).
2017-03-07 Martin Liska <mliska@suse.cz> PR middle-end/68270 * tree-chkp.c (chkp_may_narrow_to_field): Add new argument ref. Use array_at_struct_end_p instead of DECL_CHAIN (field). (chkp_narrow_bounds_for_field): Likewise. (chkp_parse_array_and_component_ref): Pass one more argument to call. 2017-03-07 Martin Liska <mliska@suse.cz> PR middle-end/68270 * g++.dg/pr68270.C: New test. From-SVN: r245951
This commit is contained in:
parent
5281a167ea
commit
a5e9e3e458
|
@ -1,3 +1,12 @@
|
|||
2017-03-07 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR middle-end/68270
|
||||
* tree-chkp.c (chkp_may_narrow_to_field): Add new argument ref.
|
||||
Use array_at_struct_end_p instead of DECL_CHAIN (field).
|
||||
(chkp_narrow_bounds_for_field): Likewise.
|
||||
(chkp_parse_array_and_component_ref): Pass one more argument to
|
||||
call.
|
||||
|
||||
2017-03-07 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* tree-vect-loop-manip.c (slpeel_add_loop_guard): Preserve
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2017-03-07 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR middle-end/68270
|
||||
* g++.dg/pr68270.C: New test.
|
||||
|
||||
2017-03-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/79901
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
/* PR71633 */
|
||||
/* { dg-do compile { target { { i?86-*-* x86_64-*-* } && { ! x32 } } } } */
|
||||
/* { dg-options "-Werror=chkp -mmpx -fcheck-pointer-bounds -O1 -fchkp-flexible-struct-trailing-arrays" } */
|
||||
|
||||
struct a
|
||||
{
|
||||
struct
|
||||
{
|
||||
int e[1];
|
||||
} f;
|
||||
};
|
||||
|
||||
int g(a *ptr)
|
||||
{
|
||||
return ptr->f.e[1];
|
||||
}
|
|
@ -3266,15 +3266,15 @@ chkp_intersect_bounds (tree bounds1, tree bounds2, gimple_stmt_iterator *iter)
|
|||
}
|
||||
|
||||
/* Return 1 if we are allowed to narrow bounds for addressed FIELD
|
||||
and 0 othersize. */
|
||||
and 0 othersize. REF is reference to the field. */
|
||||
|
||||
static bool
|
||||
chkp_may_narrow_to_field (tree field)
|
||||
chkp_may_narrow_to_field (tree ref, tree field)
|
||||
{
|
||||
return DECL_SIZE (field) && TREE_CODE (DECL_SIZE (field)) == INTEGER_CST
|
||||
&& tree_to_uhwi (DECL_SIZE (field)) != 0
|
||||
&& !(flag_chkp_flexible_struct_trailing_arrays
|
||||
&& TREE_CODE(TREE_TYPE(field)) == ARRAY_TYPE
|
||||
&& !DECL_CHAIN (field))
|
||||
&& array_at_struct_end_p (ref, true))
|
||||
&& (!DECL_FIELD_OFFSET (field)
|
||||
|| TREE_CODE (DECL_FIELD_OFFSET (field)) == INTEGER_CST)
|
||||
&& (!DECL_FIELD_BIT_OFFSET (field)
|
||||
|
@ -3284,14 +3284,15 @@ chkp_may_narrow_to_field (tree field)
|
|||
}
|
||||
|
||||
/* Return 1 if bounds for FIELD should be narrowed to
|
||||
field's own size. */
|
||||
field's own size. REF is reference to the field. */
|
||||
|
||||
static bool
|
||||
chkp_narrow_bounds_for_field (tree field)
|
||||
chkp_narrow_bounds_for_field (tree ref, tree field)
|
||||
{
|
||||
HOST_WIDE_INT offs;
|
||||
HOST_WIDE_INT bit_offs;
|
||||
|
||||
if (!chkp_may_narrow_to_field (field))
|
||||
if (!chkp_may_narrow_to_field (ref, field))
|
||||
return false;
|
||||
|
||||
/* Accesse to compiler generated fields should not cause
|
||||
|
@ -3428,7 +3429,8 @@ chkp_parse_array_and_component_ref (tree node, tree *ptr,
|
|||
if (flag_chkp_narrow_bounds
|
||||
&& !flag_chkp_narrow_to_innermost_arrray
|
||||
&& (!last_comp
|
||||
|| chkp_may_narrow_to_field (TREE_OPERAND (last_comp, 1))))
|
||||
|| chkp_may_narrow_to_field (var,
|
||||
TREE_OPERAND (last_comp, 1))))
|
||||
{
|
||||
comp_to_narrow = last_comp;
|
||||
break;
|
||||
|
@ -3440,7 +3442,7 @@ chkp_parse_array_and_component_ref (tree node, tree *ptr,
|
|||
|
||||
if (innermost_bounds
|
||||
&& !array_ref_found
|
||||
&& chkp_narrow_bounds_for_field (field))
|
||||
&& chkp_narrow_bounds_for_field (var, field))
|
||||
comp_to_narrow = var;
|
||||
last_comp = var;
|
||||
|
||||
|
|
Loading…
Reference in New Issue