aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssanames.cc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2024-06-30 11:34:43 +0200
committerRichard Biener <rguenth@gcc.gnu.org>2024-06-30 12:55:27 +0200
commitb77f17c5feec9614568bf2dee7f7d811465ee4a5 (patch)
tree1c6dc28b31d6a003da7b0a75ff33cb0189572298 /gcc/tree-ssanames.cc
parentb5c64b413fd5bc03a1a8ef86d005892071e42cbe (diff)
downloadgcc-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.cc22
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);
}