(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
Wparentheses-11.c
       1  /* PR 7543. Test operation of -Wparentheses.  Precedence warnings.  
       2     !a | b and !a & b. */
       3  /* { dg-do compile } */
       4  /* { dg-options "-Wparentheses" } */
       5  
       6  int foo (int);
       7  
       8  int
       9  bar (int a, int b, int c)
      10  {
      11    foo (!a & b); /* { dg-warning "parentheses" "correct warning" } */
      12    foo (!a & (b < c));
      13    foo (!a & (b > c));
      14    foo (!a & (b == c));
      15    foo (!a & (b != c));
      16    foo (!a & (b <= c));
      17    foo (!a & (b >= c));
      18    foo (!a & (b && c));
      19    foo (!a & (b || c));
      20    foo (!a & !b);
      21    foo (!(a & b));
      22    foo ((!a) & b);
      23    foo (!a & 2); /* { dg-warning "parentheses" "correct warning" } */
      24    foo (!a & (2 < c));
      25    foo (!a & (2 > c));
      26    foo (!a & (2 == c));
      27    foo (!a & (2 != c));
      28    foo (!a & (2 <= c));
      29    foo (!a & (2 >= c));
      30    foo (!a & (2 && c));
      31    foo (!a & (2 || c));
      32    foo (!a & !2);
      33    foo (!(a & 2));
      34    foo ((!a) & 2);
      35    foo (!1 & 2); /* { dg-warning "parentheses" "correct warning" } */
      36    foo (!1 & (2 < c));
      37    foo (!1 & (2 > c));
      38    foo (!1 & (2 == c));
      39    foo (!1 & (2 != c));
      40    foo (!1 & (2 <= c));
      41    foo (!1 & (2 >= c));
      42    foo (!1 & (2 && c));
      43    foo (!1 & (2 || c));
      44    foo (!1 & !2);
      45    foo (!(1 & 2));
      46  
      47    foo (!a | b); /* { dg-warning "parentheses" "correct warning" } */
      48    foo (!a | (b < c));
      49    foo (!a | (b > c));
      50    foo (!a | (b == c));
      51    foo (!a | (b != c));
      52    foo (!a | (b <= c));
      53    foo (!a | (b >= c));
      54    foo (!a | (b && c));
      55    foo (!a | (b || c));
      56    foo (!a | !b);
      57    foo (!(a | b));
      58    foo ((!a) | b);
      59    foo (!a | 2); /* { dg-warning "parentheses" "correct warning" } */
      60    foo (!a | (2 < c));
      61    foo (!a | (2 > c));
      62    foo (!a | (2 == c));
      63    foo (!a | (2 != c));
      64    foo (!a | (2 <= c));
      65    foo (!a | (2 >= c));
      66    foo (!a | (2 && c));
      67    foo (!a | (2 || c));
      68    foo (!a | !2);
      69    foo (!(a | 2));
      70    foo ((!a) | 2);
      71    foo (!1 | 2); /* { dg-warning "parentheses" "correct warning" } */
      72    foo (!1 | (2 < c));
      73    foo (!1 | (2 > c));
      74    foo (!1 | (2 == c));
      75    foo (!1 | (2 != c));
      76    foo (!1 | (2 <= c));
      77    foo (!1 | (2 >= c));
      78    foo (!1 | (2 && c));
      79    foo (!1 | (2 || c));
      80    foo (!1 | !2);
      81    foo (!(1 | 2));
      82    foo ((!1) | 2);
      83  
      84    foo (b & !a); /* { dg-bogus "parentheses" "bogus warning" } */
      85    foo ((b < c) & !a);
      86    foo ((b > c) & !a);
      87    foo ((b == c) & !a);
      88    foo ((b != c) & !a);
      89    foo ((b <= c) & !a);
      90    foo ((b >= c) & !a);
      91    foo ((b && c) & !a);
      92    foo ((b || c) & !a);
      93    foo (!b & !a);
      94    foo (!(b & a));
      95    foo (b & (!a));
      96    foo (2 & !a); /* { dg-bogus "parentheses" "correct warning" } */
      97    foo ((2 < c) & !a);
      98    foo ((2 > c) & !a);
      99    foo ((2 == c) & !a);
     100    foo ((2 != c) & !a);
     101    foo ((2 <= c) & !a);
     102    foo ((2 >= c) & !a);
     103    foo ((2 && c) & !a);
     104    foo ((2 || c) & !a);
     105    foo (!2 & !a);
     106    foo (!(2 & a));
     107    foo (2 & (!a));
     108    foo (2 & !1); /* { dg-bogus "parentheses" "correct warning" } */
     109    foo ((2 < c) & !1);
     110    foo ((2 > c) & !1);
     111    foo ((2 == c) & !1);
     112    foo ((2 != c) & !1);
     113    foo ((2 <= c) & !1);
     114    foo ((2 >= c) & !1);
     115    foo ((2 && c) & !1);
     116    foo ((2 || c) & !1);
     117    foo (!2 & !1);
     118    foo (!(2 & 1));
     119  
     120    foo (b | !a); /* { dg-bogus "parentheses" "correct warning" } */
     121    foo ((b < c) | !a);
     122    foo ((b > c) | !a);
     123    foo ((b == c) | !a);
     124    foo ((b != c) | !a);
     125    foo ((b <= c) | !a);
     126    foo ((b >= c) | !a);
     127    foo ((b && c) | !a);
     128    foo ((b || c) | !a);
     129    foo (!b | !a);
     130    foo (!(b | a));
     131    foo (b | (!a));
     132    foo (2 | !a); /* { dg-bogus "parentheses" "correct warning" } */
     133    foo ((2 < c) | !a);
     134    foo ((2 > c) | !a);
     135    foo ((2 == c) | !a);
     136    foo ((2 != c) | !a);
     137    foo ((2 <= c) | !a);
     138    foo ((2 >= c) | !a);
     139    foo ((2 && c) | !a);
     140    foo ((2 || c) | !a);
     141    foo (!2 | !a);
     142    foo (!(2 | a));
     143    foo (2 | (!a));
     144    foo (2 | !1); /* { dg-bogus "parentheses" "correct warning" } */
     145    foo ((2 < c) | !1);
     146    foo ((2 > c) | !1);
     147    foo ((2 == c) | !1);
     148    foo ((2 != c) | !1);
     149    foo ((2 <= c) | !1);
     150    foo ((2 >= c) | !1);
     151    foo ((2 && c) | !1);
     152    foo ((2 || c) | !1);
     153    foo (!2 | !1);
     154    foo (!(2 | 1));
     155    foo (2 | (!1));
     156  }
     157  
     158  int
     159  baz (int a, int b, int c)
     160  {
     161    foo (!a & (b << c));/* { dg-warning "parentheses" "correct warning" } */
     162    foo (!a & (b >> c));/* { dg-warning "parentheses" "correct warning" } */
     163    foo (!a & (b + c)); /* { dg-warning "parentheses" "correct warning" } */
     164    foo (!a & (b - c)); /* { dg-warning "parentheses" "correct warning" } */
     165    foo (!a & (b = c)); /* { dg-warning "parentheses" "correct warning" } */
     166    foo (!a & ~b);      /* { dg-warning "parentheses" "correct warning" } */
     167    foo (!a & (b & c)); /* { dg-warning "parentheses" "correct warning" } */
     168    foo (!a & (b | c)); /* { dg-warning "parentheses" "correct warning" } */
     169    foo (!a & 2);       /* { dg-warning "parentheses" "correct warning" } */
     170    foo (!a & (2 << c));/* { dg-warning "parentheses" "correct warning" } */
     171    foo (!a & (2 >> c));/* { dg-warning "parentheses" "correct warning" } */
     172    foo (!a & (2 + c)); /* { dg-warning "parentheses" "correct warning" } */
     173    foo (!a & (2 - c)); /* { dg-warning "parentheses" "correct warning" } */
     174    foo (!a & (c = 2)); /* { dg-warning "parentheses" "correct warning" } */
     175    foo (!a & ~2);      /* { dg-warning "parentheses" "correct warning" } */
     176    foo (!a & (2 & c)); /* { dg-warning "parentheses" "correct warning" } */
     177    foo (!a & (2 | c)); /* { dg-warning "parentheses" "correct warning" } */
     178    foo (!1 & (2 << c));/* { dg-warning "parentheses" "correct warning" } */
     179    foo (!1 & (2 >> c));/* { dg-warning "parentheses" "correct warning" } */
     180    foo (!1 & (2 + c)); /* { dg-warning "parentheses" "correct warning" } */
     181    foo (!1 & (2 - c)); /* { dg-warning "parentheses" "correct warning" } */
     182    foo (!1 & (c = 2)); /* { dg-warning "parentheses" "correct warning" } */
     183    foo (!1 & ~2);      /* { dg-warning "parentheses" "correct warning" } */
     184    foo (!1 & (2 & c)); /* { dg-warning "parentheses" "correct warning" } */
     185    foo (!1 & (2 | c)); /* { dg-warning "parentheses" "correct warning" } */
     186    foo (!a | (b << c));/* { dg-warning "parentheses" "correct warning" } */
     187    foo (!a | (b >> c));/* { dg-warning "parentheses" "correct warning" } */
     188    foo (!a | (b + c)); /* { dg-warning "parentheses" "correct warning" } */
     189    foo (!a | (b - c)); /* { dg-warning "parentheses" "correct warning" } */
     190    foo (!a | (b = c)); /* { dg-warning "parentheses" "correct warning" } */
     191    foo (!a | ~b);      /* { dg-warning "parentheses" "correct warning" } */
     192    foo (!a | (b & c)); /* { dg-warning "parentheses" "correct warning" } */
     193    foo (!a | (b | c)); /* { dg-warning "parentheses" "correct warning" } */
     194    foo (!a | (2 << c));/* { dg-warning "parentheses" "correct warning" } */
     195    foo (!a | (2 >> c));/* { dg-warning "parentheses" "correct warning" } */
     196    foo (!a | (2 + c)); /* { dg-warning "parentheses" "correct warning" } */
     197    foo (!a | (2 - c)); /* { dg-warning "parentheses" "correct warning" } */
     198    foo (!a | (c = 2)); /* { dg-warning "parentheses" "correct warning" } */
     199    foo (!a | ~2);      /* { dg-warning "parentheses" "correct warning" } */
     200    foo (!a | (2 & c)); /* { dg-warning "parentheses" "correct warning" } */
     201    foo (!a | (2 | c)); /* { dg-warning "parentheses" "correct warning" } */
     202    foo (!1 | (2 << c));/* { dg-warning "parentheses" "correct warning" } */
     203    foo (!1 | (2 >> c));/* { dg-warning "parentheses" "correct warning" } */
     204    foo (!1 | (2 + c)); /* { dg-warning "parentheses" "correct warning" } */
     205    foo (!1 | (2 - c)); /* { dg-warning "parentheses" "correct warning" } */
     206    foo (!1 | (c = 2)); /* { dg-warning "parentheses" "correct warning" } */
     207    foo (!1 | ~2);      /* { dg-warning "parentheses" "correct warning" } */
     208    foo (!1 | (2 & c)); /* { dg-warning "parentheses" "correct warning" } */
     209    foo (!1 | (2 | c)); /* { dg-warning "parentheses" "correct warning" } */
     210    foo ((b << c) & !a);
     211    foo ((b >> c) & !a);
     212    foo ((b + c) & !a);
     213    foo ((b - c) & !a);
     214    foo ((b = c) & !a);
     215    foo (~b & !a);
     216    foo ((b & c) & !a);
     217    foo ((b | c) & !a);
     218    foo ((2 << c) & !a);
     219    foo ((2 >> c) & !a);
     220    foo ((2 + c) & !a);
     221    foo ((2 - c) & !a);
     222    foo ((c = 2) & !a);
     223    foo (~2 & !a);
     224    foo ((2 & c) & !a);
     225    foo ((2 | c) & !a);
     226    foo ((2 << c) & !1);
     227    foo ((2 >> c) & !1);
     228    foo ((2 + c) & !1);
     229    foo ((2 - c) & !1);
     230    foo ((c = 2) & !1);
     231    foo (~2 & !1);
     232    foo ((2 & c) & !1);
     233    foo ((2 | c) & !1);
     234    foo ((b << c) | !a);
     235    foo ((b >> c) | !a);
     236    foo ((b + c) | !a);
     237    foo ((b - c) | !a);
     238    foo ((b = c) | !a);
     239    foo (~b | !a);
     240    foo ((b & c) | !a);
     241    foo ((b | c) | !a);
     242    foo ((2 << c) | !a);
     243    foo ((2 >> c) | !a);
     244    foo ((2 + c) | !a);
     245    foo ((2 - c) | !a);
     246    foo ((c = 2) | !a);
     247    foo (~2 | !a);
     248    foo ((2 & c) | !a);
     249    foo ((2 | c) | !a);
     250    foo ((2 << c) | !1);
     251    foo ((2 >> c) | !1);
     252    foo ((2 + c) | !1);
     253    foo ((2 - c) | !1);
     254    foo ((c = 2) | !1);
     255    foo (~2 | !1);
     256    foo ((2 & c) | !1);
     257    foo ((2 | c) | !1);
     258  }