https://gcc.gnu.org/g:0f1e4dd1f9354ea962113e066152d0a77209f732

commit r15-9944-g0f1e4dd1f9354ea962113e066152d0a77209f732
Author: Richard Biener <rguent...@suse.de>
Date:   Mon Jul 7 15:13:38 2025 +0200

    tree-optimization/120358 - bogus PTA with structure access
    
    When we compute the constraint for something like
    MEM[(const struct QStringView &)&tok2 + 32] we go and compute
    what (const struct QStringView &)&tok2 + 32 points to and then
    add subvariables to its dereference that possibly fall in the
    range of the access according to the original refs size.  In
    doing that we disregarded that the subvariable the starting
    address points to might not be aligned to it and thus the
    access might start at any point within that variable.  The following
    conservatively adjusts the pruning of adjacent sub-variables to
    honor this.
    
            PR tree-optimization/120358
            * tree-ssa-structalias.cc (get_constraint_for_1): Adjust
            pruning of sub-variables according to the imprecise
            known start offset.
    
    (cherry picked from commit aa5ae523e84a97bf3a582ea0fa73d959afa9b9c7)

Diff:
---
 gcc/tree-ssa-structalias.cc | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/gcc/tree-ssa-structalias.cc b/gcc/tree-ssa-structalias.cc
index deca44ae0bf3..0215243d5be9 100644
--- a/gcc/tree-ssa-structalias.cc
+++ b/gcc/tree-ssa-structalias.cc
@@ -3690,7 +3690,10 @@ get_constraint_for_1 (tree t, vec<ce_s> *results, bool 
address_p,
                    size = -1;
                  for (; curr; curr = vi_next (curr))
                    {
-                     if (curr->offset - vi->offset < size)
+                     /* The start of the access might happen anywhere
+                        within vi, so conservatively assume it was
+                        at its end.  */
+                     if (curr->offset - (vi->offset + vi->size - 1) < size)
                        {
                          cs.var = curr->id;
                          results->safe_push (cs);

Reply via email to