diff options
author | Jakub Jelinek <jakub@redhat.com> | 2020-02-18 09:07:15 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2020-02-18 09:07:15 +0100 |
commit | be7c145ad52e76a1a0fd201dd96bc92e8d3a275d (patch) | |
tree | edec944e8cb9d15dd407c013024f9b288054e1a7 /gcc/tree-ssa.c | |
parent | 8def1d525c52f0f7fccd90f3c4624a8fe6c42882 (diff) |
tree-ssa: Fix ICE in build_vector_type [PR93780]
The following testcase ICEs, because execute_update_addresses_taken attempts
to create a VECTOR_TYPE with non-power of 2 number of elts.
Fixed by guarding it with the corresponding predicate.
2020-02-18 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/93780
* tree-ssa.c (non_rewritable_lvalue_p): Check valid_vector_subparts_p
before calling build_vector_type.
(execute_update_addresses_taken): Likewise.
* gcc.dg/pr93780.c: New test.
Diffstat (limited to 'gcc/tree-ssa.c')
-rw-r--r-- | gcc/tree-ssa.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index dbff6045145..344f32d69cf 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1550,7 +1550,8 @@ non_rewritable_lvalue_p (tree lhs) && multiple_p (lhs_bits, tree_to_uhwi (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl)))), - &nelts)) + &nelts) + && valid_vector_subparts_p (nelts)) { if (known_eq (nelts, 1u)) return false; @@ -1925,7 +1926,8 @@ execute_update_addresses_taken (void) (TYPE_SIZE (TREE_TYPE (TREE_TYPE (sym)))), &nelts) - && maybe_ne (nelts, 1u)) + && maybe_ne (nelts, 1u) + && valid_vector_subparts_p (nelts)) temtype = build_vector_type (temtype, nelts); tree tem = make_ssa_name (temtype); gimple *pun |