diff options
author | Richard Biener <rguenther@suse.de> | 2024-06-30 11:34:43 +0200 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2024-06-30 12:55:27 +0200 |
commit | b77f17c5feec9614568bf2dee7f7d811465ee4a5 (patch) | |
tree | 1c6dc28b31d6a003da7b0a75ff33cb0189572298 /gcc/tree-ssanames.cc | |
parent | b5c64b413fd5bc03a1a8ef86d005892071e42cbe (diff) | |
download | gcc-b77f17c5feec9614568bf2dee7f7d811465ee4a5.zip gcc-b77f17c5feec9614568bf2dee7f7d811465ee4a5.tar.gz gcc-b77f17c5feec9614568bf2dee7f7d811465ee4a5.tar.bz2 |
tree-optimization/115701 - fix maybe_duplicate_ssa_info_at_copy
The following restricts copying of points-to info from defs that
might be in regions invoking UB and are never executed.
PR tree-optimization/115701
* tree-ssanames.cc (maybe_duplicate_ssa_info_at_copy):
Only copy info from within the same BB.
* gcc.dg/torture/pr115701.c: New testcase.
Diffstat (limited to 'gcc/tree-ssanames.cc')
-rw-r--r-- | gcc/tree-ssanames.cc | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/gcc/tree-ssanames.cc b/gcc/tree-ssanames.cc index bb9ed37..4f83fcb 100644 --- a/gcc/tree-ssanames.cc +++ b/gcc/tree-ssanames.cc @@ -775,25 +775,19 @@ duplicate_ssa_name_range_info (tree name, tree src) void maybe_duplicate_ssa_info_at_copy (tree dest, tree src) { + /* While points-to info is flow-insensitive we have to avoid copying + info from not executed regions invoking UB to dominating defs. */ + if (gimple_bb (SSA_NAME_DEF_STMT (src)) + != gimple_bb (SSA_NAME_DEF_STMT (dest))) + return; + if (POINTER_TYPE_P (TREE_TYPE (dest)) && SSA_NAME_PTR_INFO (dest) && ! SSA_NAME_PTR_INFO (src)) - { - duplicate_ssa_name_ptr_info (src, SSA_NAME_PTR_INFO (dest)); - /* Points-to information is cfg insensitive, - but VRP might record context sensitive alignment - info, non-nullness, etc. So reset context sensitive - info if the two SSA_NAMEs aren't defined in the same - basic block. */ - if (gimple_bb (SSA_NAME_DEF_STMT (src)) - != gimple_bb (SSA_NAME_DEF_STMT (dest))) - reset_flow_sensitive_info (src); - } + duplicate_ssa_name_ptr_info (src, SSA_NAME_PTR_INFO (dest)); else if (INTEGRAL_TYPE_P (TREE_TYPE (dest)) && SSA_NAME_RANGE_INFO (dest) - && ! SSA_NAME_RANGE_INFO (src) - && (gimple_bb (SSA_NAME_DEF_STMT (src)) - == gimple_bb (SSA_NAME_DEF_STMT (dest)))) + && ! SSA_NAME_RANGE_INFO (src)) duplicate_ssa_name_range_info (src, dest); } |