1 /* PR middle-end/30286 */
2 /* { dg-do run } */
3 /* { dg-options "-O2 -ftrapv" } */
4 /* { dg-require-effective-target trapping } */
5 
6 extern void abort (void);
7 struct S { struct S *s; };
8 struct T { struct S *t[25]; };
9 
10 void
11 __attribute__((noinline))
foo(int i,struct T * x,struct S * y)12 foo (int i, struct T *x, struct S *y)
13 {
14   int j;
15   for (j = 14; j > i; j--)
16     x->t[j] = y->s;
17 }
18 
19 int
main(void)20 main (void)
21 {
22   struct S s;
23   struct T t;
24   int i;
25 
26   s.s = &s;
27   __builtin_memset (&t, 0, sizeof (t));
28   foo (6, &t, &s);
29   for (i = 0; i < 25; i++)
30     if (t.t[i] != ((i > 6 && i <= 14) ? &s : (struct S *) 0))
31       abort ();
32   __builtin_memset (&t, 0, sizeof (t));
33   foo (-1, &t, &s);
34   for (i = 0; i < 25; i++)
35     if (t.t[i] != ((i >= 0 && i <= 14) ? &s : (struct S *) 0))
36       abort ();
37   return 0;
38 }
39