aboutsummaryrefslogtreecommitdiff
path: root/gcc/hsa-gen.c
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2016-05-23 13:45:13 +0200
committerMartin Jambor <jamborm@gcc.gnu.org>2016-05-23 13:45:13 +0200
commita50575432b41b3bc3b0a14cb2e6e53881941a99f (patch)
treef960a48373fb98e3c858fff7a8c978dc5d1c6c7e /gcc/hsa-gen.c
parente569db5fb5fece9f9a3ee09e3dc7c58f0db36e40 (diff)
downloadgcc-a50575432b41b3bc3b0a14cb2e6e53881941a99f.zip
gcc-a50575432b41b3bc3b0a14cb2e6e53881941a99f.tar.gz
gcc-a50575432b41b3bc3b0a14cb2e6e53881941a99f.tar.bz2
[hsa] Avoid segfault in hsa switch expansion
2016-05-23 Martin Jambor <mjambor@suse.cz> * hsa-gen.c (gen_hsa_insns_for_switch_stmt): Create an empty default block if a PHI node in the original one would be resized. libgomp/ * testsuite/libgomp.hsa.c/switch-sbr-2.c: New test. From-SVN: r236585
Diffstat (limited to 'gcc/hsa-gen.c')
-rw-r--r--gcc/hsa-gen.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/hsa-gen.c b/gcc/hsa-gen.c
index 697d599..cf7d434 100644
--- a/gcc/hsa-gen.c
+++ b/gcc/hsa-gen.c
@@ -3482,6 +3482,12 @@ gen_hsa_insns_for_switch_stmt (gswitch *s, hsa_bb *hbb)
basic_block default_label_bb = label_to_block_fn (func,
CASE_LABEL (default_label));
+ if (!gimple_seq_empty_p (phi_nodes (default_label_bb)))
+ {
+ default_label_bb = split_edge (find_edge (e->dest, default_label_bb));
+ hsa_init_new_bb (default_label_bb);
+ }
+
make_edge (e->src, default_label_bb, EDGE_FALSE_VALUE);
hsa_cfun->m_modified_cfg = true;