summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/compile/20080124-1.c
blob: a20937c294e7f4426d88295b381e62e0c4abfd05 (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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/* PR middle-end/34934 */

#include <stdarg.h>

typedef struct
{
  int e[1024];
  int f;
} S;

void foo (long *, va_list);

void
bar (long *x, S *y, int z, ...)
{
  int i, j;
  va_list ap;
  va_start (ap, z);
  for (j = y->e[i = 1]; i <= y->f; j = y->e[++i])
    {
      switch (z)
	{
	case 1:
	  if (!(*x & 0x00000020))
	    continue;
	case 3:
	  if (!(*x & 0x00000080))
	    continue;
	case 9:
	  if (!(*x & 0x04000000))
	    continue;
	case 4:
	  if (!(*x & 0x00000200))
	    continue;
	case 8:
	  if (!(*x & 0x00100000))
	    continue;
	case 6:
	  if (!(*x & 0x00000100))
	    continue;
	case 7:
	  if (!(*x & 0x00040000))
	    continue;
	case 10:
	  if (!(*x & 0x00000020)
	      && ((*x & 0x00008000) || (*x & 0x08000000)))
	    continue;
	}
      foo (x, ap);
    }
  va_end (ap);
}