From: Martin Liska Date: Wed, 22 Mar 2017 12:32:17 +0000 (+0100) Subject: Backport r246276 X-Git-Tag: releases/gcc-5.5.0~444 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=21f4c507e293caf51066ce0c6ff8e4f31d00011c;p=thirdparty%2Fgcc.git Backport r246276 2017-03-22 Martin Liska Backport from mainline 2017-03-20 Martin Liska 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-22 Martin Liska Backport from mainline 2017-03-20 Martin Liska PR middle-end/79753 * gcc.target/i386/mpx/pr79753.c: New test. From-SVN: r246377 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f47095e9bfa1..fbfe18f9947f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-20 Martin Liska + + 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-22 Martin Liska Backport from mainline diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 416cddc5a575..e9ef670f87b2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2017-03-22 Martin Liska + + Backport from mainline + 2017-03-20 Martin Liska + + PR middle-end/79753 + * gcc.target/i386/mpx/pr79753.c: New test. + 2017-03-22 Martin Liska Backport from mainline diff --git a/gcc/testsuite/gcc.target/i386/mpx/pr79753.c b/gcc/testsuite/gcc.target/i386/mpx/pr79753.c new file mode 100644 index 000000000000..9b7bc52e1ede --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/mpx/pr79753.c @@ -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 (); +} diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c index 39a9f62df536..824827768f48 100644 --- a/gcc/tree-chkp.c +++ b/gcc/tree-chkp.c @@ -2236,6 +2236,7 @@ chkp_build_returned_bound (gcall *call) tree bounds; gimple stmt; tree fndecl = gimple_call_fndecl (call); + tree lhs = gimple_call_lhs (call); unsigned int retflags; /* To avoid fixing alloca expands in targets we handle @@ -2246,9 +2247,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 @@ -2301,9 +2301,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. */ @@ -2330,7 +2331,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; }