aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2018-10-29 23:44:10 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2018-10-29 23:44:10 +0000
commitb2bf438c02e885ddcd89e3f372fe88d9c3a58fd9 (patch)
tree0dcee2d28ee9534b49dcdd465bd13dd78d31a832 /gcc/cp
parentebdb73c0b0950509eab6a5fa7f0f5b360c6e5cca (diff)
downloadgcc-b2bf438c02e885ddcd89e3f372fe88d9c3a58fd9.zip
gcc-b2bf438c02e885ddcd89e3f372fe88d9c3a58fd9.tar.gz
gcc-b2bf438c02e885ddcd89e3f372fe88d9c3a58fd9.tar.bz2
Folding and check_function_arguments
This patch eliminates the arglocs array I introduced to build_over_call in r264887, and eliminates the call to maybe_constant_value when building "fargs" (thus retaining location wrapper nodes). Instead, this patch requires that any checks within check_function_arguments that need folded arguments do their own folding. Of the various checks: (a) check_function_nonnull already calls fold_for_warn, (b) check_function_format doesn't need folding (c) check_function_sentinel needs fold_for_warn in one place, which the patch adds, and (d) check_function_restrict needs per-argument folding, which the patch adds. Given that it scans before and after resetting TREE_VISITED on each argument, it seemed best to make a copy of the array, folding each argument from the outset, rather than repeatedly calling fold_for_warn; gcc/c-family/ChangeLog: PR c++/56856 * c-common.c (check_function_sentinel): Call fold_for_warn on the argument. (check_function_restrict): Rename param "argarray" to "unfolded_argarray", and make a copy named "argarray", calling fold_for_warn on each argument. (check_function_arguments): Add note about responsibility for folding the arguments. gcc/cp/ChangeLog: PR c++/56856 * call.c (build_over_call): Eliminate the "arglocs" array, and the call to maybe_constant_value when building "fargs". From-SVN: r265609
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/call.c6
2 files changed, 8 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index b1e7f23..78d2b5b 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2018-10-29 David Malcolm <dmalcolm@redhat.com>
+
+ PR c++/56856
+ * call.c (build_over_call): Eliminate the "arglocs" array, and the
+ call to maybe_constant_value when building "fargs".
+
2018-10-29 Paolo Carlini <paolo.carlini@oracle.com>
* decl.c (create_array_type_for_decl): Add location_t parameter
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index cd0c0f6..a7dce2e 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -8198,7 +8198,6 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
{
tree *fargs = (!nargs ? argarray
: (tree *) alloca (nargs * sizeof (tree)));
- auto_vec<location_t> arglocs (nargs);
for (j = 0; j < nargs; j++)
{
/* For -Wformat undo the implicit passing by hidden reference
@@ -8207,12 +8206,11 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
&& TYPE_REF_P (TREE_TYPE (argarray[j])))
fargs[j] = TREE_OPERAND (argarray[j], 0);
else
- fargs[j] = maybe_constant_value (argarray[j]);
- arglocs.quick_push (EXPR_LOC_OR_LOC (argarray[j], input_location));
+ fargs[j] = argarray[j];
}
warned_p = check_function_arguments (input_location, fn, TREE_TYPE (fn),
- nargs, fargs, &arglocs);
+ nargs, fargs, NULL);
}
if (DECL_INHERITED_CTOR (fn))