re PR rtl-optimization/62078 (ICE: verify_flow_info failed: missing REG_EH_REGION note at the end of bb 2 with -fdelete-dead-exceptions)
PR rtl-optimization/62078 * dse.c: Include cfgcleanup.h. (rest_of_handle_dse): For -fnon-call-exceptions, if DSE removed anything call purge_all_dead_edges and cleanup_cfg at the end of the pass. * g++.dg/opt/pr62078.C: New test. From-SVN: r219970
This commit is contained in:
parent
31be63ab8c
commit
6c5ed3f18c
4 changed files with 56 additions and 0 deletions
|
@ -1,3 +1,11 @@
|
|||
2015-01-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/62078
|
||||
* dse.c: Include cfgcleanup.h.
|
||||
(rest_of_handle_dse): For -fnon-call-exceptions, if DSE removed
|
||||
anything call purge_all_dead_edges and cleanup_cfg at the end
|
||||
of the pass.
|
||||
|
||||
2015-01-21 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
* ipa-utils.c (ipa_merge_profiles): Avoid ICE on mismatch in indirect
|
||||
|
|
|
@ -81,6 +81,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "gimple.h"
|
||||
#include "gimple-ssa.h"
|
||||
#include "rtl-iter.h"
|
||||
#include "cfgcleanup.h"
|
||||
|
||||
/* This file contains three techniques for performing Dead Store
|
||||
Elimination (dse).
|
||||
|
@ -3746,6 +3747,14 @@ rest_of_handle_dse (void)
|
|||
if (dump_file)
|
||||
fprintf (dump_file, "dse: local deletions = %d, global deletions = %d, spill deletions = %d\n",
|
||||
locally_deleted, globally_deleted, spill_deleted);
|
||||
|
||||
/* DSE can eliminate potentially-trapping MEMs.
|
||||
Remove any EH edges associated with them. */
|
||||
if ((locally_deleted || globally_deleted)
|
||||
&& cfun->can_throw_non_call_exceptions
|
||||
&& purge_all_dead_edges ())
|
||||
cleanup_cfg (0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
2015-01-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/62078
|
||||
* g++.dg/opt/pr62078.C: New test.
|
||||
|
||||
PR c/63307
|
||||
* c-c++-common/cilk-plus/CK/pr63307.c: New test.
|
||||
|
||||
|
|
36
gcc/testsuite/g++.dg/opt/pr62078.C
Normal file
36
gcc/testsuite/g++.dg/opt/pr62078.C
Normal file
|
@ -0,0 +1,36 @@
|
|||
/* PR rtl-optimization/62078 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Og -fdelete-dead-exceptions -fnon-call-exceptions" } */
|
||||
|
||||
struct A { virtual ~A (); };
|
||||
struct B : A {};
|
||||
struct C : B {};
|
||||
struct D : C {};
|
||||
struct E : D {};
|
||||
struct F : E {};
|
||||
struct G : F {};
|
||||
struct H : G {};
|
||||
struct I : H {};
|
||||
struct J : I {};
|
||||
struct K : J {};
|
||||
struct L : K {};
|
||||
struct M : L {};
|
||||
struct N : M {};
|
||||
struct O : N {};
|
||||
struct P : O {};
|
||||
struct Q : P {};
|
||||
struct R : Q {};
|
||||
struct S : R {};
|
||||
struct T : S {};
|
||||
struct U : T {};
|
||||
struct V : U {};
|
||||
struct W : V {};
|
||||
struct X : W {};
|
||||
struct Y : X {};
|
||||
struct Z : Y {};
|
||||
|
||||
void
|
||||
foo ()
|
||||
{
|
||||
Z z;
|
||||
}
|
Loading…
Add table
Reference in a new issue