summaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorienkovich <ienkovich@138bc75d-0d04-0410-961f-82ee72b054a4>2016-05-10 15:56:27 +0000
committerienkovich <ienkovich@138bc75d-0d04-0410-961f-82ee72b054a4>2016-05-10 15:56:27 +0000
commite66d763abf14100c6a2ffdfc7ddd6eba8faf0bc5 (patch)
treea6f710ff66873b64cfdb7f8b6456b6d11a8d699a /gcc/calls.c
parent2f45dbbd2c3f01a1dcdee4c265dc394561f42606 (diff)
downloadgcc-e66d763abf14100c6a2ffdfc7ddd6eba8faf0bc5.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@236086 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index 6415e08b28d..6cc1fc721e4 100644
--- a/gcc/calls.c
+++ b/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)