]> 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 15:24:56 +0000 (15:24 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Mon, 31 Mar 2014 15:24:56 +0000 (08:24 -0700)
PR rtl-optimization/60700
* gcc.target/i386/pr60700.c: New test.

From-SVN: r208962

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

index 532bba6ea6abd86f9572feea3bf3308a056fdda9..ccffd4965a727c9ddda05ae3e51547b910f95724 100644 (file)
@@ -1,3 +1,8 @@
+2014-03-31  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR rtl-optimization/60700
+       * gcc.target/i386/pr60700.c: New test.
+
 2014-03-31  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
 
        PR target/60650
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;
+}