File: Wlogical-op-1.c

package info (click to toggle)
gcc-arm-none-eabi 15%3A12.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 959,712 kB
  • sloc: cpp: 3,275,382; ansic: 2,061,766; ada: 840,956; f90: 208,513; makefile: 76,132; asm: 73,433; xml: 50,448; exp: 34,146; sh: 32,436; objc: 15,637; fortran: 14,012; python: 11,991; pascal: 6,787; awk: 4,779; perl: 3,054; yacc: 338; ml: 285; lex: 201; haskell: 122
file content (119 lines) | stat: -rw-r--r-- 4,522 bytes parent folder | download | duplicates (6)
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
109
110
111
112
113
114
115
116
117
118
119
/* PR c/63357 */
/* { dg-do compile } */
/* { dg-options "-Wlogical-op" } */

#ifndef __cplusplus
# define bool _Bool
# define true 1
# define false 0
#endif

#if __SIZEOF_INT__ < 4
  __extension__ typedef __INT32_TYPE__ int32_t;
  __extension__ typedef __UINT32_TYPE__ uint32_t;
  __extension__ typedef __INT16_TYPE__ int16_t;
#else
  typedef int int32_t;
  typedef unsigned int uint32_t;
  typedef short int16_t;
#endif

extern int32_t bar (void);
extern int32_t *p;
struct R { int32_t a, b; } S;

void
andfn (int32_t a, int32_t b)
{
  if (a && a) {}		/* { dg-warning "logical .and. of equal expressions" } */
  if (!a && !a) {}		/* { dg-warning "logical .and. of equal expressions" } */
  if (!!a && !!a) {}		/* { dg-warning "logical .and. of equal expressions" } */
  if (a > 0 && a > 0) {}	/* { dg-warning "logical .and. of equal expressions" } */
  if (a < 0 && a < 0) {}	/* { dg-warning "logical .and. of equal expressions" } */
  if (a == 0 && a == 0) {}	/* { dg-warning "logical .and. of equal expressions" } */
  if (a <= 0 && a <= 0) {}	/* { dg-warning "logical .and. of equal expressions" } */
  if (a >= 0 && a >= 0) {}	/* { dg-warning "logical .and. of equal expressions" } */
  if (a == 0 && !(a != 0)) {}	/* { dg-warning "logical .and. of equal expressions" } */

  if (a && a && a) {}		/* { dg-warning "logical .and. of equal expressions" } */
  if ((a + 1) && (a + 1)) {}	/* { dg-warning "logical .and. of equal expressions" } */
  if ((10 * a) && (a * 10)) {}	/* { dg-warning "logical .and. of equal expressions" } */
  if (!!a && a) {}		/* { dg-warning "logical .and. of equal expressions" } */

  if (*p && *p) {}		/* { dg-warning "logical .and. of equal expressions" } */
  if (p[0] && p[0]) {}		/* { dg-warning "logical .and. of equal expressions" } */
  if (S.a && S.a) {}		/* { dg-warning "logical .and. of equal expressions" } */
  if ((bool) a && (bool) a) {}	/* { dg-warning "logical .and. of equal expressions" } */
  if ((uint32_t) a && a) {}	/* { dg-warning "logical .and. of equal expressions" } */

  /* Stay quiet here.  */
  if (a && b) {}
  if (!a && !b) {}
  if (!!a && !!b) {}
  if (a > 0 && b > 0) {}
  if (a < 0 && b < 0) {}
  if (a == 0 && b == 0) {}
  if (a <= 0 && b <= 0) {}
  if (a >= 0 && b >= 0) {}

  if (a > 0 && a > 1) {}
  if (a > -2 && a > 1) {}
  if (a && (int16_t) a) {}
  if ((char) a && a) {}
  if (++a && a) {}
  if (++a && ++a) {}
  if (a && --a) {}
  if (a && a / 2) {}
  if (bar () && bar ()) {}
  if (p && *p) {}
  if (p[0] && p[1]) {}
  if (S.a && S.b) {}
}

void
orfn (int32_t a, int32_t b)
{
  if (a || a) {}		/* { dg-warning "logical .or. of equal expressions" } */
  if (!a || !a) {}		/* { dg-warning "logical .or. of equal expressions" } */
  if (!!a || !!a) {}		/* { dg-warning "logical .or. of equal expressions" } */
  if (a > 0 || a > 0) {}	/* { dg-warning "logical .or. of equal expressions" } */
  if (a < 0 || a < 0) {}	/* { dg-warning "logical .or. of equal expressions" } */
  if (a == 0 || a == 0) {}	/* { dg-warning "logical .or. of equal expressions" } */
  if (a <= 0 || a <= 0) {}	/* { dg-warning "logical .or. of equal expressions" } */
  if (a >= 0 || a >= 0) {}	/* { dg-warning "logical .or. of equal expressions" } */
  if (a == 0 || !(a != 0)) {}	/* { dg-warning "logical .or. of equal expressions" } */

  if (a || a || a) {}		/* { dg-warning "logical .or. of equal expressions" } */
  if ((a + 1) || (a + 1)) {}	/* { dg-warning "logical .or. of equal expressions" } */
  if ((10 * a) || (a * 10)) {}	/* { dg-warning "logical .or. of equal expressions" } */
  if (!!a || a) {}		/* { dg-warning "logical .or. of equal expressions" } */

  if (*p || *p) {}		/* { dg-warning "logical .or. of equal expressions" } */
  if (p[0] || p[0]) {}		/* { dg-warning "logical .or. of equal expressions" } */
  if (S.a || S.a) {}		/* { dg-warning "logical .or. of equal expressions" } */
  if ((bool) a || (bool) a) {}	/* { dg-warning "logical .or. of equal expressions" } */
  if ((uint32_t) a || a) {}	/* { dg-warning "logical .or. of equal expressions" } */

  /* Stay quiet here.  */
  if (a || b) {}
  if (!a || !b) {}
  if (!!a || !!b) {}
  if (a > 0 || b > 0) {}
  if (a < 0 || b < 0) {}
  if (a == 0 || b == 0) {}
  if (a <= 0 || b <= 0) {}
  if (a >= 0 || b >= 0) {}

  if (a > 0 || a > 1) {}
  if (a > -2 || a > 1) {}
  if (a || (int16_t) a) {}
  if ((char) a || a) {}
  if (++a || a) {}
  if (++a || ++a) {}
  if (a || --a) {}
  if (a || a / 2) {}
  if (bar () || bar ()) {}
  if (p || *p) {}
  if (p[0] || p[1]) {}
  if (S.a || S.b) {}
}