diff options
author | Richard Biener <rguenther@suse.de> | 2022-01-03 12:55:45 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-01-03 13:51:24 +0100 |
commit | 4911609fbe47d3e4d2765cd67031a7e0ee9f5af0 (patch) | |
tree | f772d893b829545a79f0c2e7165e88946839878d /gcc | |
parent | 91031bffa42fdea3c985727d042cd1882a64be9c (diff) | |
download | gcc-4911609fbe47d3e4d2765cd67031a7e0ee9f5af0.zip gcc-4911609fbe47d3e4d2765cd67031a7e0ee9f5af0.tar.gz gcc-4911609fbe47d3e4d2765cd67031a7e0ee9f5af0.tar.bz2 |
middle-end/103851 - ensure SSA names are released during OMP lowering
This makes sure to release moved & remapped SSA names during OMP
outlining which happens before going into SSA but with SSA names
created by gimplification around.
2022-01-03 Richard Biener <rguenther@suse.de>
PR middle-end/103851
* tree-cfg.c (move_sese_region_to_fn): Always release SSA names.
* g++.dg/gomp/pr103851.C: New testcase.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/g++.dg/gomp/pr103851.C | 15 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 20 |
2 files changed, 23 insertions, 12 deletions
diff --git a/gcc/testsuite/g++.dg/gomp/pr103851.C b/gcc/testsuite/g++.dg/gomp/pr103851.C new file mode 100644 index 0000000..257e405 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr103851.C @@ -0,0 +1,15 @@ +// { dg-do compile } +// { dg-options "-fopenmp -ftrivial-auto-var-init=pattern" } + +struct _Deque_base { + long _M_map_size; + int *_M_start; + int *_M_finish; +}; +void morphologicalFilter1D() +{ +#pragma omp parallel + { + struct _Deque_base vals[4]; + } +} diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index c436e59..bb37793 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -7947,18 +7947,14 @@ move_sese_region_to_fn (struct function *dest_cfun, basic_block entry_bb, if (eh_map) delete eh_map; - if (gimple_in_ssa_p (cfun)) - { - /* We need to release ssa-names in a defined order, so first find them, - and then iterate in ascending version order. */ - bitmap release_names = BITMAP_ALLOC (NULL); - vars_map.traverse<void *, gather_ssa_name_hash_map_from> (release_names); - bitmap_iterator bi; - unsigned i; - EXECUTE_IF_SET_IN_BITMAP (release_names, 0, i, bi) - release_ssa_name (ssa_name (i)); - BITMAP_FREE (release_names); - } + /* We need to release ssa-names in a defined order, so first find them, + and then iterate in ascending version order. */ + bitmap release_names = BITMAP_ALLOC (NULL); + vars_map.traverse<void *, gather_ssa_name_hash_map_from> (release_names); + bitmap_iterator bi; + EXECUTE_IF_SET_IN_BITMAP (release_names, 0, i, bi) + release_ssa_name (ssa_name (i)); + BITMAP_FREE (release_names); /* Rewire the entry and exit blocks. The successor to the entry block turns into the successor of DEST_FN's ENTRY_BLOCK_PTR in |