aboutsummaryrefslogtreecommitdiff
path: root/gcc/except.c
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2009-10-08 16:03:11 +0000
committerMichael Matz <matz@gcc.gnu.org>2009-10-08 16:03:11 +0000
commit6728ee79872ffd3dbcf858dab076c96c71ec95e5 (patch)
treedfbfdde0ac425b160f559d82eab975a3ba3e115a /gcc/except.c
parent0d0bfe1795ba93c2af0fca2ca68a025c5cd4c82b (diff)
downloadgcc-6728ee79872ffd3dbcf858dab076c96c71ec95e5.zip
gcc-6728ee79872ffd3dbcf858dab076c96c71ec95e5.tar.gz
gcc-6728ee79872ffd3dbcf858dab076c96c71ec95e5.tar.bz2
re PR middle-end/41573 (segfault in trunk related to strings)
PR middle-end/41573 * builtins.c (fold_builtin_isascii): Use fold_build2. (fold_builtin_isdigit): Ditto. * except.c (duplicate_eh_regions_1): Tolerate NULL labels. * tree-cfg.c (struct rus_data, remove_useless_stmts_warn_notreached, remove_useless_stmts_cond, remove_useless_stmts_tf, remove_useless_stmts_tc, remove_useless_stmts_bind, remove_useless_stmts_goto, remove_useless_stmts_label, remove_useless_stmts_1, remove_useless_stmts, pass_remove_useless_stmts): Remove. * tree-pass.h (pass_remove_useless_stmts): Don't declare. * passes.c (init_optimization_passes): Don't add pass_remove_useless_stmts. * tree-eh.c (lower_eh_constructs_2): Handle empty cleanups. * tree.c (free_lang_data_in_decl): Don't clear DECL_INITIAL of static constants. * lto-symtab.c (lto_symtab_register_decl): Accepts DECL_INITIAL for static constants. * lto-streamer-out.c (output_gimple_stmt): Handle GIMPLE_NOP. * lto-streamer-in.c (input_gimple_stmt): Handle GIMPLE_NOP. testsuite/ * gcc.dg/tree-ssa/foldstring-1.c: Use fre dump. * gcc.dg/tree-ssa/useless-1.c: Use gimple dump. * gcc.dg/pr41573.c: New test. From-SVN: r152563
Diffstat (limited to 'gcc/except.c')
-rw-r--r--gcc/except.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/except.c b/gcc/except.c
index c00bcd3..b25e48b 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -552,8 +552,11 @@ duplicate_eh_regions_1 (struct duplicate_eh_regions_data *data,
case ERT_ALLOWED_EXCEPTIONS:
new_r->u.allowed.type_list = old_r->u.allowed.type_list;
- new_r->u.allowed.label
- = data->label_map (old_r->u.allowed.label, data->label_map_data);
+ if (old_r->u.allowed.label)
+ new_r->u.allowed.label
+ = data->label_map (old_r->u.allowed.label, data->label_map_data);
+ else
+ new_r->u.allowed.label = NULL_TREE;
break;
case ERT_MUST_NOT_THROW: