+2003-06-24 Jakub Jelinek <jakub@redhat.com>
+
+ * builtins.c (expand_builtin_strcpy): Don't evaluate side-effects in
+ src twice.
+
2003-06-24 J"orn Rennecke <joern.rennecke@superh.com>
Back out these patches:
src = TREE_VALUE (TREE_CHAIN (arglist));
len = c_strlen (src);
- if (len == 0)
+ if (len == 0 || TREE_SIDE_EFFECTS (len))
return 0;
dst = TREE_VALUE (arglist);
--- /dev/null
+/* Copyright (C) 2003 Free Software Foundation.
+
+ Test strcpy optimizations don't evaluate side-effects twice.
+
+ Written by Jakub Jelinek, June 23, 2003. */
+
+typedef __SIZE_TYPE__ size_t;
+extern char *strcpy (char *, const char *);
+extern int memcmp (const void *, const void *, size_t);
+extern void abort (void);
+extern void exit (int);
+
+size_t
+test1 (char *s, size_t i)
+{
+ strcpy (s, "foobarbaz" + i++);
+ return i;
+}
+
+size_t
+check2 (void)
+{
+ static size_t r = 5;
+ if (r != 5)
+ abort ();
+ return ++r;
+}
+
+void
+test2 (char *s)
+{
+ strcpy (s, "foobarbaz" + check2 ());
+}
+
+int
+main (void)
+{
+ char buf[10];
+ if (test1 (buf, 7) != 8 || memcmp (buf, "az", 3))
+ abort ();
+ test2 (buf);
+ if (memcmp (buf, "baz", 4))
+ abort ();
+ exit (0);
+}