builtins.c (get_memory_rtx): Always put into alias set 0.
authorJakub Jelinek <jakub@redhat.com>
Mon, 3 Jul 2000 18:28:34 +0000 (20:28 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 3 Jul 2000 18:28:34 +0000 (20:28 +0200)
* builtins.c (get_memory_rtx): Always put into alias set 0.

* gcc.c-torture/execute/20000703-1.c: New test.

From-SVN: r34849

gcc/ChangeLog
gcc/builtins.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/20000703-1.c [new file with mode: 0644]

index 900ca82fede0abddc11df28d1789e82ee0f94c71..9dbde733a0a878a0075071006882bae428228835 100644 (file)
@@ -1,3 +1,7 @@
+2000-07-03  Jakub Jelinek  <jakub@redhat.com>
+
+       * builtins.c (get_memory_rtx): Always put into alias set 0.
+
 2000-07-03  Nick Clifton  <nickc@cygnus.com>
 
        * config/arm/arm.md: Fix post increment and pre increment
index 0e89481a12b923df37b5ac5e48bd960a86ecf5fb..56e6c265caff85ed1f30620638dd0298751c7ca0 100644 (file)
@@ -558,6 +558,9 @@ get_memory_rtx (exp)
     return mem;
 
   set_mem_attributes (mem, exp, 0);
+
+  /* memcpy, memset and other builtin stringops can alias with anything. */
+  MEM_ALIAS_SET (mem) = 0;
   return mem;
 }
 \f
index 5de979c89a0cb2317eaeeee679f7a6035cb68eb0..283c2b52f07d3848d01bc7fe83025d376db39582 100644 (file)
@@ -1,3 +1,7 @@
+2000-07-03  Jakub Jelinek  <jakub@redhat.com>
+
+       * gcc.c-torture/execute/20000703-1.c: New test.
+
 2000-07-03  Nathan Sidwell  <nathan@codesourcery.com>
 
        * g++.old-deja/g++.pt (lookup10.C): New test.
diff --git a/gcc/testsuite/gcc.c-torture/execute/20000703-1.c b/gcc/testsuite/gcc.c-torture/execute/20000703-1.c
new file mode 100644 (file)
index 0000000..55bdf74
--- /dev/null
@@ -0,0 +1,39 @@
+void abort(void);
+void exit(int);
+struct baz 
+{
+  char a[17];
+  char b[3];
+  unsigned int c;
+  unsigned int d;
+};
+
+void foo(struct baz *p, unsigned int c, unsigned int d)
+{
+  __builtin_memcpy (p->b, "abc", 3);
+  p->c = c;
+  p->d = d;
+}
+
+void bar(struct baz *p, unsigned int c, unsigned int d)
+{
+  ({ void *s = (p);
+     __builtin_memset (s, '\0', sizeof (struct baz));
+     s; });
+  __builtin_memcpy (p->a, "01234567890123456", 17);
+  __builtin_memcpy (p->b, "abc", 3);
+  p->c = c;
+  p->d = d;
+}
+
+int main()
+{
+  struct baz p;
+  foo(&p, 71, 18);
+  if (p.c != 71 || p.d != 18)
+    abort();
+  bar(&p, 59, 26);
+  if (p.c != 59 || p.d != 26)
+    abort();
+  exit(0);
+}