https://gcc.gnu.org/g:8a13eef88742c09d91be090fa8cb9bc3040290e7

commit r14-11001-g8a13eef88742c09d91be090fa8cb9bc3040290e7
Author: Richard Biener <rguent...@suse.de>
Date:   Tue Oct 29 09:42:12 2024 +0100

    tree-optimization/117333 - ICE with NULL access size DR
    
    dr_may_alias_p ICEs when TYPE_SIZE of DR->ref is NULL but this is
    valid IL when the access size of an aggregate copy can be infered
    from the RHS.
    
            PR tree-optimization/117333
            * tree-data-ref.cc (dr_may_alias_p): Guard against NULL
            access size.
    
            * gcc.dg/torture/pr117333.c: New testcase.
    
    (cherry picked from commit 0e99b22aa666f107c4035d32bfb5ab11534a9d2f)

Diff:
---
 gcc/testsuite/gcc.dg/torture/pr117333.c | 29 +++++++++++++++++++++++++++++
 gcc/tree-data-ref.cc                    |  2 ++
 2 files changed, 31 insertions(+)

diff --git a/gcc/testsuite/gcc.dg/torture/pr117333.c 
b/gcc/testsuite/gcc.dg/torture/pr117333.c
new file mode 100644
index 000000000000..38c1b5493a51
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr117333.c
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+
+struct s
+{
+  unsigned long ul;
+  int i;
+  char ac[];
+};
+
+const struct s gs = { 3, -4, "abcdef" };
+
+void copy_s(struct s*d, const struct s*s)
+{
+  *d = *s;
+}
+
+unsigned test(struct s*ps, _Bool direct)
+{
+  if(direct)
+    *ps = gs;
+  else
+    copy_s(ps, &gs);
+  return sizeof(*ps);
+}
+
+unsigned size(void)
+{
+  return sizeof(gs);
+}
diff --git a/gcc/tree-data-ref.cc b/gcc/tree-data-ref.cc
index c9982e2b43d7..501a4593727e 100644
--- a/gcc/tree-data-ref.cc
+++ b/gcc/tree-data-ref.cc
@@ -3003,6 +3003,8 @@ dr_may_alias_p (const struct data_reference *a, const 
struct data_reference *b,
          && DR_BASE_ADDRESS (b)
          && operand_equal_p (DR_BASE_ADDRESS (a), DR_BASE_ADDRESS (b))
          && operand_equal_p (DR_OFFSET (a), DR_OFFSET (b))
+         && tree_size_a
+         && tree_size_b
          && poly_int_tree_p (tree_size_a)
          && poly_int_tree_p (tree_size_b)
          && !ranges_maybe_overlap_p (wi::to_poly_widest (DR_INIT (a)),

Reply via email to