]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Add a testcase for PR rtl-optimization/60700
authorH.J. Lu <hongjiu.lu@intel.com>
Mon, 31 Mar 2014 16:24:28 +0000 (16:24 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Mon, 31 Mar 2014 16:24:28 +0000 (09:24 -0700)
PR rtl-optimization/60700
* gcc.target/i386/pr60700.c: New test.

From-SVN: r208964

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr60700.c [new file with mode: 0644]

index 50a33ee520249de112b92fad4fb5fca6a3f7ccad..0f0fb23b4fc6312162810c765e3786f5dadce374 100644 (file)
@@ -1,3 +1,11 @@
+2014-03-31  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from mainline
+       2014-03-31  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR rtl-optimization/60700
+       * gcc.target/i386/pr60700.c: New test.
+
 2014-03-28  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR rtl-optimization/60700
diff --git a/gcc/testsuite/gcc.target/i386/pr60700.c b/gcc/testsuite/gcc.target/i386/pr60700.c
new file mode 100644 (file)
index 0000000..5428f36
--- /dev/null
@@ -0,0 +1,59 @@
+/* PR rtl-optimization/60700 */
+/* { dg-do run { target ia32 } } */
+/* { dg-options "-O3 -march=i686" } */
+
+int
+__attribute__((noinline))
+foo (void)
+{
+  return 0;
+}
+
+void *g = (void *)1;
+
+struct st {
+  char data[36]; /* must be greater than 32.  */
+};
+
+int
+__attribute__((noinline))
+repro(struct st **out)
+{
+  int status = 0;
+
+  *out = 0;
+
+  status = foo();
+  if (status != 0) {
+    return status;
+  }
+
+  if (0 == g) {
+    status = 999;
+    return status;
+  }
+
+  *out = (struct st *)__builtin_malloc(sizeof(struct st));
+  if (0 == *out) {
+    status = 42;
+    return status;
+  }
+
+  __builtin_memset(*out, 0, sizeof(struct st));
+
+  return status;
+}
+
+int
+main ()
+{
+  struct st *p;
+  int ret = repro (&p);
+  unsigned int i;
+
+  for (i = 0; i < sizeof (p->data)/sizeof (p->data[0]); i++)
+    if (p->data[i] != 0)
+      __builtin_abort ();
+
+  return ret;
+}