Fix segfault with -O2 -fnon-call-exceptions -ftracer
The GIMPLE SSA store merging pass blows up when it is rewriting the stores because it didn't realize that they don't belong to the same EH region. Fixed by refusing to merge them. PR tree-optimization/94717 * gimple-ssa-store-merging.c (try_coalesce_bswap): Return false if one of the stores doesn't have the same landing pad number as the first. (coalesce_immediate_stores): Do not try to coalesce the store using bswap if it doesn't have the same landing pad number as the first.
This commit is contained in:
parent
431ee35815
commit
cb76fcd7fb
|
@ -1,3 +1,11 @@
|
|||
2019-04-23 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
PR tree-optimization/94717
|
||||
* gimple-ssa-store-merging.c (try_coalesce_bswap): Return false if one
|
||||
of the stores doesn't have the same landing pad number as the first.
|
||||
(coalesce_immediate_stores): Do not try to coalesce the store using
|
||||
bswap if it doesn't have the same landing pad number as the first.
|
||||
|
||||
2020-04-23 Bill Schmidt <wschmidt@linux.ibm.com>
|
||||
|
||||
* gcc/doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions):
|
||||
|
|
|
@ -2435,6 +2435,7 @@ imm_store_chain_info::try_coalesce_bswap (merged_store_group *merged_store,
|
|||
for (unsigned int i = first + 1; i < len; ++i)
|
||||
{
|
||||
if (m_store_info[i]->bitpos != m_store_info[first]->bitpos + width
|
||||
|| m_store_info[i]->lp_nr != merged_store->lp_nr
|
||||
|| m_store_info[i]->ins_stmt == NULL)
|
||||
return false;
|
||||
width += m_store_info[i]->bitsize;
|
||||
|
@ -2682,6 +2683,7 @@ imm_store_chain_info::coalesce_immediate_stores ()
|
|||
if (info->bitpos == merged_store->start + merged_store->width
|
||||
&& merged_store->stores.length () == 1
|
||||
&& merged_store->stores[0]->ins_stmt != NULL
|
||||
&& info->lp_nr == merged_store->lp_nr
|
||||
&& info->ins_stmt != NULL)
|
||||
{
|
||||
unsigned int try_size;
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2019-04-23 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* g++.dg/opt/store-merging-4.C: New test.
|
||||
|
||||
2020-04-23 Iain Sandoe <iain@sandoe.co.uk>
|
||||
|
||||
PR c++/94288
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
// PR tree-optimization/94717
|
||||
// Reported by Zdenek Sojka <zsojka@seznam.cz>
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2 -fnon-call-exceptions -ftracer" }
|
||||
|
||||
int abs (int);
|
||||
|
||||
static inline void
|
||||
bar (int d)
|
||||
{
|
||||
d && abs (d);
|
||||
}
|
||||
|
||||
struct S
|
||||
{
|
||||
int a;
|
||||
int b;
|
||||
int c;
|
||||
S (unsigned a, unsigned b) : a (a), b (b) { }
|
||||
};
|
||||
|
||||
void
|
||||
foo (S *x)
|
||||
{
|
||||
bar (x->c);
|
||||
new S (x->a, x->b);
|
||||
bar (0);
|
||||
}
|
Loading…
Reference in New Issue