mirror of git://gcc.gnu.org/git/gcc.git
Do not merge BBs with a different EH landing pads (PR
PR tree-optimization/77943 * g++.dg/tree-ssa/pr77943.C: New test. PR tree-optimization/77943 * tree-ssa-tail-merge.c (merge_stmts_p): Do not merge BBs with a different EH landing pads. From-SVN: r241090
This commit is contained in:
parent
3e0c9334e9
commit
2794767063
|
|
@ -1,3 +1,9 @@
|
|||
2016-10-13 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR tree-optimization/77943
|
||||
* tree-ssa-tail-merge.c (merge_stmts_p): Do not merge BBs with
|
||||
a different EH landing pads.
|
||||
|
||||
2016-10-13 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/77957
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
2016-10-13 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR tree-optimization/77943
|
||||
* g++.dg/tree-ssa/pr77943.C: New test.
|
||||
|
||||
2016-10-13 Andre Vehreschild <vehre@gcc.gnu.org>
|
||||
|
||||
PR fortran/72832
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-O2 -std=c++11" } */
|
||||
|
||||
void thrower[[gnu::noinline]]() {
|
||||
throw 1;
|
||||
}
|
||||
|
||||
inline void fatal() noexcept {thrower();}
|
||||
inline void notFatal() {thrower();}
|
||||
|
||||
void func(bool callFatal) {
|
||||
if (callFatal) {
|
||||
fatal();
|
||||
} else {
|
||||
notFatal();
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, const char* argv[]) {
|
||||
try {
|
||||
bool callFatal = argc > 1;
|
||||
func(callFatal);
|
||||
} catch (...) {
|
||||
}
|
||||
}
|
||||
|
|
@ -204,6 +204,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "params.h"
|
||||
#include "tree-ssa-sccvn.h"
|
||||
#include "cfgloop.h"
|
||||
#include "tree-eh.h"
|
||||
|
||||
/* Describes a group of bbs with the same successors. The successor bbs are
|
||||
cached in succs, and the successor edge flags are cached in succ_flags.
|
||||
|
|
@ -1222,6 +1223,10 @@ merge_stmts_p (gimple *stmt1, gimple *stmt2)
|
|||
if (is_tm_ending (stmt1))
|
||||
return false;
|
||||
|
||||
/* Verify EH landing pads. */
|
||||
if (lookup_stmt_eh_lp_fn (cfun, stmt1) != lookup_stmt_eh_lp_fn (cfun, stmt2))
|
||||
return false;
|
||||
|
||||
if (is_gimple_call (stmt1)
|
||||
&& gimple_call_internal_p (stmt1))
|
||||
switch (gimple_call_internal_fn (stmt1))
|
||||
|
|
|
|||
Loading…
Reference in New Issue