re PR middle-end/83215 (C++: struct with char-array assumed to alias with everything)
authorRichard Biener <rguenther@suse.de>
Tue, 20 Nov 2018 09:31:06 +0000 (09:31 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 20 Nov 2018 09:31:06 +0000 (09:31 +0000)
2018-11-20  Richard Biener  <rguenther@suse.de>

PR middle-end/83215
* alias.c (component_uses_parent_alias_set_from): Remove
alias-set zero and TYPE_TYPELESS_STORAGE case both already
handled in other ways.

* g++.dg/tree-ssa/pr83215.C: New testcase.

From-SVN: r266305

gcc/ChangeLog
gcc/alias.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/tree-ssa/pr83215.C [new file with mode: 0644]

index affdfd6cdefbf41508efb4ee3dfe2354a50e783e..ee2d87d0313f6a97dcbe77b1084c7b96f9ae3a31 100644 (file)
@@ -1,3 +1,10 @@
+2018-11-20  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/83215
+       * alias.c (component_uses_parent_alias_set_from): Remove
+       alias-set zero and TYPE_TYPELESS_STORAGE case both already
+       handled in other ways.
+
 2018-11-20  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/88087
index 7963ece291a75c551e74e0cbdceb486c0a3a37c9..835ac82ae8222eaa33f699a3480a4a4409eb0be3 100644 (file)
@@ -601,8 +601,7 @@ objects_must_conflict_p (tree t1, tree t2)
 /* Return the outermost parent of component present in the chain of
    component references handled by get_inner_reference in T with the
    following property:
-     - the component is non-addressable, or
-     - the parent has alias set zero,
+     - the component is non-addressable
    or NULL_TREE if no such parent exists.  In the former cases, the alias
    set of this parent is the alias set that must be used for T itself.  */
 
@@ -611,10 +610,6 @@ component_uses_parent_alias_set_from (const_tree t)
 {
   const_tree found = NULL_TREE;
 
-  if (AGGREGATE_TYPE_P (TREE_TYPE (t))
-      && TYPE_TYPELESS_STORAGE (TREE_TYPE (t)))
-    return const_cast <tree> (t);
-
   while (handled_component_p (t))
     {
       switch (TREE_CODE (t))
@@ -652,9 +647,6 @@ component_uses_parent_alias_set_from (const_tree t)
          gcc_unreachable ();
        }
 
-      if (get_alias_set (TREE_TYPE (TREE_OPERAND (t, 0))) == 0)
-       found = t;
-
       t = TREE_OPERAND (t, 0);
     }
  
index e3780472a3d93301ad5d2993f307e62539e75ffa..31540b582663b3aa0329b58f6f84cb3dd9f66c39 100644 (file)
@@ -1,3 +1,8 @@
+2018-11-20  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/83215
+       * g++.dg/tree-ssa/pr83215.C: New testcase.
+
 2018-11-20  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc.c-torture/execute/20181120-1.c: New test.
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr83215.C b/gcc/testsuite/g++.dg/tree-ssa/pr83215.C
new file mode 100644 (file)
index 0000000..d21ac46
--- /dev/null
@@ -0,0 +1,19 @@
+// { dg-do compile }
+// { dg-options "-O2 -fdump-tree-fre1" }
+
+struct mytest
+{
+  float a;
+  char buf[256];
+};
+
+int foo(mytest *m, int *i)
+{
+  int tmp = *i;
+  m->a = 10.0f;
+  return tmp + *i;
+}
+
+// we should be able to CSE *i despite mytest having a cbar[] buffer
+// and thus being subject to TYPE_TYPELESS_STORAGE
+// { dg-final { scan-tree-dump-times "\\*i" 1 "fre1" } }