MPX: fix PR middle-end/79753
2017-03-20 Martin Liska <mliska@suse.cz> PR middle-end/79753 * tree-chkp.c (chkp_build_returned_bound): Do not build returned bounds for a LHS that's not a BOUNDED_P type. 2017-03-20 Martin Liska <mliska@suse.cz> PR middle-end/79753 * gcc.target/i386/mpx/pr79753.c: New test. From-SVN: r246276
This commit is contained in:
parent
918112d378
commit
243e28bfb9
|
@ -1,3 +1,9 @@
|
|||
2017-03-20 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR middle-end/79753
|
||||
* tree-chkp.c (chkp_build_returned_bound): Do not build
|
||||
returned bounds for a LHS that's not a BOUNDED_P type.
|
||||
|
||||
2017-03-20 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR target/79769
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2017-03-20 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR middle-end/79753
|
||||
* gcc.target/i386/mpx/pr79753.c: New test.
|
||||
|
||||
2017-03-20 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR target/79769
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-fcheck-pointer-bounds -mmpx -O2" } */
|
||||
|
||||
int
|
||||
foo (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
bar (int **p)
|
||||
{
|
||||
*p = (int *) (__UINTPTR_TYPE__) foo ();
|
||||
}
|
|
@ -2218,6 +2218,7 @@ chkp_build_returned_bound (gcall *call)
|
|||
gimple *stmt;
|
||||
tree fndecl = gimple_call_fndecl (call);
|
||||
unsigned int retflags;
|
||||
tree lhs = gimple_call_lhs (call);
|
||||
|
||||
/* To avoid fixing alloca expands in targets we handle
|
||||
it separately. */
|
||||
|
@ -2227,9 +2228,8 @@ chkp_build_returned_bound (gcall *call)
|
|||
|| DECL_FUNCTION_CODE (fndecl) == BUILT_IN_ALLOCA_WITH_ALIGN))
|
||||
{
|
||||
tree size = gimple_call_arg (call, 0);
|
||||
tree lb = gimple_call_lhs (call);
|
||||
gimple_stmt_iterator iter = gsi_for_stmt (call);
|
||||
bounds = chkp_make_bounds (lb, size, &iter, true);
|
||||
bounds = chkp_make_bounds (lhs, size, &iter, true);
|
||||
}
|
||||
/* We know bounds returned by set_bounds builtin call. */
|
||||
else if (fndecl
|
||||
|
@ -2282,9 +2282,10 @@ chkp_build_returned_bound (gcall *call)
|
|||
|
||||
bounds = chkp_find_bounds (gimple_call_arg (call, argno), &iter);
|
||||
}
|
||||
else if (chkp_call_returns_bounds_p (call))
|
||||
else if (chkp_call_returns_bounds_p (call)
|
||||
&& BOUNDED_P (lhs))
|
||||
{
|
||||
gcc_assert (TREE_CODE (gimple_call_lhs (call)) == SSA_NAME);
|
||||
gcc_assert (TREE_CODE (lhs) == SSA_NAME);
|
||||
|
||||
/* In general case build checker builtin call to
|
||||
obtain returned bounds. */
|
||||
|
@ -2311,7 +2312,7 @@ chkp_build_returned_bound (gcall *call)
|
|||
print_gimple_stmt (dump_file, call, 0, TDF_VOPS|TDF_MEMSYMS);
|
||||
}
|
||||
|
||||
bounds = chkp_maybe_copy_and_register_bounds (gimple_call_lhs (call), bounds);
|
||||
bounds = chkp_maybe_copy_and_register_bounds (lhs, bounds);
|
||||
|
||||
return bounds;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue