diff options
author | Richard Henderson <rth@redhat.com> | 2006-03-22 04:50:45 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2006-03-22 04:50:45 -0800 |
commit | fad41cd7d43ffce40a20f11cfbe68da548ef6b79 (patch) | |
tree | 600f6369cacf022589c2e874590e5a90eb2f99e5 /gcc/tree-inline.c | |
parent | ee51e035d90930ba62d16122a40ffd3188f44c2c (diff) | |
download | gcc-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/tree-inline.c')
-rw-r--r-- | gcc/tree-inline.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 8d258ff..3e35842 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -924,7 +924,8 @@ copy_cfg_body (copy_body_data * id, gcov_type count, int frequency, if (id->transform_new_cfg) init_eh_for_function (); id->eh_region_offset - = duplicate_eh_regions (cfun_to_copy, remap_decl_1, id, id->eh_region); + = duplicate_eh_regions (cfun_to_copy, remap_decl_1, id, + 0, id->eh_region); } /* Use aux pointers to map the original blocks to copy. */ FOR_EACH_BB_FN (bb, cfun_to_copy) |