Commit 27947670 by Martin Liska Committed by Martin Liska

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
parent 3e0c9334
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> 2016-10-13 Jakub Jelinek <jakub@redhat.com>
PR target/77957 PR target/77957
......
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> 2016-10-13 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/72832 PR fortran/72832
......
/* { 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 ...@@ -204,6 +204,7 @@ along with GCC; see the file COPYING3. If not see
#include "params.h" #include "params.h"
#include "tree-ssa-sccvn.h" #include "tree-ssa-sccvn.h"
#include "cfgloop.h" #include "cfgloop.h"
#include "tree-eh.h"
/* Describes a group of bbs with the same successors. The successor bbs are /* 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. cached in succs, and the successor edge flags are cached in succ_flags.
...@@ -1222,6 +1223,10 @@ merge_stmts_p (gimple *stmt1, gimple *stmt2) ...@@ -1222,6 +1223,10 @@ merge_stmts_p (gimple *stmt1, gimple *stmt2)
if (is_tm_ending (stmt1)) if (is_tm_ending (stmt1))
return false; 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) if (is_gimple_call (stmt1)
&& gimple_call_internal_p (stmt1)) && gimple_call_internal_p (stmt1))
switch (gimple_call_internal_fn (stmt1)) switch (gimple_call_internal_fn (stmt1))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment