From 35b4d3a644222b7bd69b3a1e9c00e78f3dbf3eba Mon Sep 17 00:00:00 2001 From: Martin Sebor Date: Mon, 9 Jul 2018 20:33:48 +0000 Subject: PR middle-end/77357 - strlen of constant strings not folded gcc/ChangeLog: PR middle-end/77357 PR middle-end/86428 * builtins.c (c_strlen): Avoid out-of-bounds warnings when accessing implicitly initialized array elements. * expr.c (string_constant): Handle string initializers of character arrays within aggregates. * gimple-fold.c (fold_array_ctor_reference): Add argument. Store element offset. As a special case, handle zero size. (fold_nonarray_ctor_reference): Same. (fold_ctor_reference): Add argument. Store subobject offset. * gimple-fold.h (fold_ctor_reference): Add argument. gcc/testsuite/ChangeLog: PR middle-end/77357 * gcc.dg/strlenopt-49.c: New test. * gcc.dg/strlenopt-50.c: New test. * gcc.dg/strlenopt-51.c: New test. * gcc.dg/strlenopt-52.c: New test. From-SVN: r262522 --- gcc/gimple-fold.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'gcc/gimple-fold.h') diff --git a/gcc/gimple-fold.h b/gcc/gimple-fold.h index 0a28ec7..04e9bfa 100644 --- a/gcc/gimple-fold.h +++ b/gcc/gimple-fold.h @@ -45,7 +45,9 @@ extern tree follow_all_ssa_edges (tree); extern tree gimple_fold_stmt_to_constant_1 (gimple *, tree (*) (tree), tree (*) (tree) = no_follow_ssa_edges); extern tree gimple_fold_stmt_to_constant (gimple *, tree (*) (tree)); -extern tree fold_ctor_reference (tree, tree, poly_uint64, poly_uint64, tree); +extern tree fold_ctor_reference (tree, tree, const poly_uint64&, + const poly_uint64&, tree, + unsigned HOST_WIDE_INT * = NULL); extern tree fold_const_aggregate_ref_1 (tree, tree (*) (tree)); extern tree fold_const_aggregate_ref (tree); extern tree gimple_get_virt_method_for_binfo (HOST_WIDE_INT, tree, -- cgit v1.1