From f51606c71ab31d906d499108b1a2b8d8e45d9e06 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Mon, 11 Jul 2016 13:32:51 +0000 Subject: [PATCH] re PR bootstrap/71816 (bootstrap broken on multiple targets) 2016-07-11 Richard Biener PR tree-optimization/71816 * tree-ssa-pre.c (compute_avail): Adjust alignment of ref rather than replacing all of its operands. * gcc.dg/torture/pr71816.c: New testcase. From-SVN: r238208 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/torture/pr71816.c | 21 +++++++++++++++++++++ gcc/tree-ssa-pre.c | 11 ++++------- 4 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr71816.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0453adaf9ac..d0dde932049 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-07-11 Richard Biener + + PR tree-optimization/71816 + * tree-ssa-pre.c (compute_avail): Adjust alignment of ref rather + than replacing all of its operands. + 2016-07-11 Alan Modra * config/rs6000/rs6000.md (UNSPEC_DOLOOP): New unspec. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 63333ba01aa..1d9dc5b9e44 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-07-11 Richard Biener + + PR tree-optimization/71816 + * gcc.dg/torture/pr71816.c: New testcase. + 2016-07-09 Thomas Koenig PR fortran/71783 diff --git a/gcc/testsuite/gcc.dg/torture/pr71816.c b/gcc/testsuite/gcc.dg/torture/pr71816.c new file mode 100644 index 00000000000..bdd5b1b127f --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr71816.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ + +void *ext2fs_resize_mem_p; +struct ext2_icount_el { + int ino; +} * insert_icount_el_icount_1; +int insert_icount_el_icount, insert_icount_el_new_size; +void *memcpy(); +void *realloc(); +int ext2fs_resize_mem(void *p1) { + int size = 0; + memcpy(&ext2fs_resize_mem_p, p1, sizeof(ext2fs_resize_mem_p)); + realloc(&ext2fs_resize_mem_p, size); + return 0; +} +struct ext2_icount_el *insert_icount_el() { + if (insert_icount_el_icount) + insert_icount_el_new_size = insert_icount_el_icount_1[0].ino; + ext2fs_resize_mem(&insert_icount_el_icount_1); + return 0; +} diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 0c97f4fbcce..9964c559b25 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -3791,13 +3791,9 @@ compute_avail (void) || ref1->opcode == MEM_REF) && (TYPE_ALIGN (ref1->type) > TYPE_ALIGN (ref2->type))) - { - ref->operands.release (); - ref->operands = operands; - ref1 = ref2; - } - else - operands.release (); + ref1->type + = build_aligned_type (ref1->type, + TYPE_ALIGN (ref2->type)); /* TBAA behavior is an obvious part so make sure that the hashtable one covers this as well by adjusting the ref alias set and its base. */ @@ -3824,6 +3820,7 @@ compute_avail (void) ref1->op2 = fold_convert (ptr_type_node, ref1->op2); } + operands.release (); result = pre_expr_pool.allocate (); result->kind = REFERENCE; -- 2.30.2