aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/undefined-loop-2.c
blob: 7ab37f4e9e19d8de86b28b402f3fed9b4e6f2fe9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* Check that loops whose final iteration is undefined are detected.  */
/* { dg-do compile } */
/* { dg-options "-O2 -Waggressive-loop-optimizations" } */

void doSomething(char);

char array1[5];
char array2[5];

void
foo (int p)
{
  int i;
  for (i=0;
       (p
        ? array1[i]  /* { dg-message "note: possible undefined statement is here" } */
        : array2[i]) /* { dg-message "note: possible undefined statement is here" } */
       && i < 100;   /* { dg-warning "loop exit may only be reached after undefined behavior" } */
       i++)
    {
      if (i >= 5)    /* { dg-warning "loop exit may only be reached after undefined behavior" } */
	break;
      doSomething(array1[i]);
    }
}