aboutsummaryrefslogtreecommitdiff
path: root/gcc/except.h
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2006-03-22 04:50:45 -0800
committerRichard Henderson <rth@gcc.gnu.org>2006-03-22 04:50:45 -0800
commitfad41cd7d43ffce40a20f11cfbe68da548ef6b79 (patch)
tree600f6369cacf022589c2e874590e5a90eb2f99e5 /gcc/except.h
parentee51e035d90930ba62d16122a40ffd3188f44c2c (diff)
downloadgcc-fad41cd7d43ffce40a20f11cfbe68da548ef6b79.zip
gcc-fad41cd7d43ffce40a20f11cfbe68da548ef6b79.tar.gz
gcc-fad41cd7d43ffce40a20f11cfbe68da548ef6b79.tar.bz2
re PR middle-end/26084 (ICE (segfault) on C++ OpenMP code)
PR middle-end/26084 * except.c (duplicate_eh_regions_0): New. (duplicate_eh_region_1): Duplicate the children of the node as well as the node itself. Link them up properly. (duplicate_eh_region_2): Merge into ... (duplicate_eh_regions): ... here. Take copy_region argument, and copy only a sub-tree if asked. Simplify copying and fixup. (eh_region_outer_p): New. * except.h (duplicate_eh_regions): Update decl. (eh_region_outer_p): Declare. * omp-low.c (lower_omp_single): Fix eh region placement wrt OMP_RETURN. (lower_omp_master): Likewise. (lower_omp_ordered): Likewise. * tree-cfg.c (struct move_stmt_d): Add new_label_map. (move_stmt_r): Use it to remap labels. Handle recursion vs remap_decls_p properly. (move_block_to_fn): Pass in new_label_map. Remap RESX_EXPR. (find_outermost_region_in_block): New. (new_label_mapper): New. (move_sese_region_to_fn): Copy eh information to the new function properly. * tree-inline.c (copy_cfg_body): Update for new duplicate_eh_regions argument. * tree-pretty-print.c (dump_generic_node): Dump RESX_EXPR region number. From-SVN: r112283
Diffstat (limited to 'gcc/except.h')
-rw-r--r--gcc/except.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/except.h b/gcc/except.h
index 46914d4..5b28296 100644
--- a/gcc/except.h
+++ b/gcc/except.h
@@ -82,7 +82,8 @@ extern rtx expand_builtin_extend_pointer (tree);
extern rtx get_exception_pointer (struct function *);
extern rtx get_exception_filter (struct function *);
typedef tree (*duplicate_eh_regions_map) (tree, void *);
-extern int duplicate_eh_regions (struct function *, duplicate_eh_regions_map, void *, int);
+extern int duplicate_eh_regions (struct function *, duplicate_eh_regions_map,
+ void *, int, int);
extern void sjlj_emit_function_exit_after (rtx);
extern void default_init_unwind_resume_libfunc (void);
@@ -106,6 +107,7 @@ extern void collect_eh_region_array (void);
extern void expand_resx_expr (tree);
extern void verify_eh_tree (struct function *);
extern void dump_eh_tree (FILE *, struct function *);
+extern bool eh_region_outer_p (struct function *, int, int);
/* tree-eh.c */
extern void add_stmt_to_eh_region_fn (struct function *, tree, int);