summaryrefslogtreecommitdiff
path: root/gcc/testsuite/c-c++-common/pr60439.c
blob: 3368a0b944d3e52a66144dcef439bf99003f09cb (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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/* PR c/60439 */
/* { dg-do compile } */

#ifndef __cplusplus
# define bool _Bool
#endif

extern bool foo (void);

void
f1 (bool b)
{
  switch (b) /* { dg-warning "switch condition has" } */
    break;
}

void
f2 (int a, int b)
{
  switch (a && b) /* { dg-warning "switch condition has" } */
    break;
  switch ((bool) (a && b)) /* { dg-warning "switch condition has" } */
    break;
  switch ((a && b) || a) /* { dg-warning "switch condition has" } */
    break;
  /* No warnings on following.  */
  switch ((int) (a && b))
    break;
  switch ((unsigned int) (a && b))
    break;
  switch ((unsigned short int) (a && b))
    break;
  switch ((char) (a && b))
    break;
}

void
f3 (int a)
{
  switch (!!a) /* { dg-warning "switch condition has" } */
    break;
  switch (!a) /* { dg-warning "switch condition has" } */
    break;
}

void
f4 (void)
{
  switch (foo ()) /* { dg-warning "switch condition has" } */
    break;
}

void
f5 (int a)
{
  switch (a == 3) /* { dg-warning "switch condition has" } */
    break;
  switch (a != 3) /* { dg-warning "switch condition has" } */
    break;
  switch (a > 3) /* { dg-warning "switch condition has" } */
    break;
  switch (a < 3) /* { dg-warning "switch condition has" } */
    break;
  switch (a <= 3) /* { dg-warning "switch condition has" } */
    break;
  switch (a >= 3) /* { dg-warning "switch condition has" } */
    break;
  switch (foo (), foo (), a >= 42) /* { dg-warning "switch condition has" } */
    break;
  switch (a == 3, a & 4, a ^ 5, a)
    break;
  switch ((int) (a == 3))
    break;
  switch ((int) (a != 3))
    break;
}

void
f6 (bool b)
{
  switch (b) /* { dg-warning "switch condition has" } */
    break;
  switch (!b) /* { dg-warning "switch condition has" } */
    break;
  switch (b++) /* { dg-warning "switch condition has" } */
    break;
}

void
f7 (void)
{
  bool b;
  switch (b = 1) /* { dg-warning "switch condition has" } */
    break;
}

void
f8 (int i)
{
  switch (i)
    break;
  switch ((int) i)
    break;
  switch ((unsigned int) i)
    break;
  switch ((bool) i) /* { dg-warning "switch condition has" } */
    break;
}