diff gcc/testsuite/gcc.c-torture/execute/pr93908.c @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/gcc.c-torture/execute/pr93908.c	Mon May 25 07:50:57 2020 +0900
@@ -0,0 +1,54 @@
+/* PR rtl-optimization/93908 */
+
+struct T
+{
+  int b;
+  int c;
+  unsigned short d;
+  unsigned e:1, f:1, g:1, h:2, i:1, j:1;
+  signed int k:2;
+};
+
+struct S
+{
+  struct T s;
+  char c[64];
+} buf[2];
+
+__attribute__ ((noipa)) void *
+baz (void)
+{
+  static int cnt;
+  return (void *) &buf[cnt++];
+}
+
+static inline __attribute__ ((always_inline)) struct T *
+bar (const char *a)
+{
+  struct T *s;
+  s = baz ();
+  s->b = 1;
+  s->k = -1;
+  return s;
+}
+
+__attribute__ ((noipa)) void
+foo (const char *x, struct T **y)
+{
+  struct T *l = bar (x);
+  struct T *m = bar (x);
+  y[0] = l;
+  y[1] = m;
+}
+
+int
+main ()
+{
+  struct T *r[2];
+  foo ("foo", r);
+  if (r[0]->e || r[0]->f || r[0]->g || r[0]->h || r[0]->i || r[0]->j || r[0]->k != -1)
+    __builtin_abort ();
+  if (r[1]->e || r[1]->f || r[1]->g || r[1]->h || r[1]->i || r[1]->j || r[1]->k != -1)
+    __builtin_abort ();
+  return 0;
+}