(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
Wduplicated-cond-1.c
       1  /* PR c/64249 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-Wduplicated-cond" } */
       4  
       5  #ifndef __cplusplus
       6  # define bool _Bool
       7  # define true 1
       8  # define false 0
       9  #endif
      10  
      11  extern int foo (void);
      12  
      13  int
      14  fn1 (int n)
      15  {
      16    if (n == 1) /* { dg-message "previously used here" } */
      17      return -1;
      18    else if (n == 2)
      19      return 0;
      20    else if (n == 1) /* { dg-warning "duplicated .if. condition" } */
      21      return 1;
      22    return 0;
      23  }
      24  
      25  int
      26  fn2 (void)
      27  {
      28    if (4)
      29      return 1;
      30    else if (4)
      31      return 2;
      32  
      33  #define N 10
      34    if (N)
      35      return 3;
      36    else if (N)
      37      return 4;
      38  }
      39  
      40  int
      41  fn3 (int n)
      42  {
      43    if (n == 42)
      44      return 1;
      45    if (n == 42)
      46      return 2;
      47  
      48    if (n)
      49      if (n)
      50        if (n)
      51  	if (n)
      52  	  return 42;
      53  
      54    if (!n)
      55      return 10;
      56    else
      57      return 11;
      58  }
      59  
      60  int
      61  fn4 (int n)
      62  {
      63    if (n > 0)
      64      {
      65        if (n == 1) /* { dg-message "previously used here" } */
      66  	return 1;
      67        else if (n == 1) /* { dg-warning "duplicated .if. condition" } */
      68  	return 2;
      69      }
      70    else if (n < 0)
      71      {
      72        if (n < -1)
      73  	return 6;
      74        else if (n < -2)
      75  	{
      76  	  if (n == -10) /* { dg-message "previously used here" } */
      77  	    return 3;
      78  	  else if (n == -10) /* { dg-warning "duplicated .if. condition" } */
      79  	    return 4;
      80  	}
      81      }
      82    else
      83      return 7;
      84    return 0;
      85  }
      86  
      87  struct S { long p, q; };
      88  
      89  int
      90  fn5 (struct S *s)
      91  {
      92    if (!s->p) /* { dg-message "previously used here" } */
      93      return 12345;
      94    else if (!s->p) /* { dg-warning "duplicated .if. condition" } */
      95      return 1234;
      96    return 0;
      97  }
      98  
      99  int
     100  fn6 (int n)
     101  {
     102    if (n) /* { dg-message "previously used here" } */
     103      return n;
     104    else if (n) /* { dg-warning "duplicated .if. condition" } */
     105      return n;
     106    else if (n) /* { dg-warning "duplicated .if. condition" } */
     107      return n;
     108    else if (n) /* { dg-warning "duplicated .if. condition" } */
     109      return n;
     110    else if (n) /* { dg-warning "duplicated .if. condition" } */
     111      return n;
     112    else if (n) /* { dg-warning "duplicated .if. condition" } */
     113      return n;
     114    else if (n) /* { dg-warning "duplicated .if. condition" } */
     115      return n;
     116    else if (n) /* { dg-warning "duplicated .if. condition" } */
     117      return n;
     118    return 0;
     119  }
     120  
     121  int
     122  fn7 (int n)
     123  {
     124    if (n == 0) /* { dg-message "previously used here" } */
     125      return 10;
     126    else if (n == 1) /* { dg-message "previously used here" } */
     127      return 11;
     128    else if (n == 2) /* { dg-message "previously used here" } */
     129      return 12;
     130    else if (n == 3) /* { dg-message "previously used here" } */
     131      return 13;
     132    else if (n == 4) /* { dg-message "previously used here" } */
     133      return 14;
     134    else if (n == 5) /* { dg-message "previously used here" } */
     135      return 15;
     136    else if (n == 6) /* { dg-message "previously used here" } */
     137      return 16;
     138    else if (n == 7) /* { dg-message "previously used here" } */
     139      return 17;
     140    else if (n == 0) /* { dg-warning "duplicated .if. condition" } */
     141      return 100;
     142    else if (n == 1) /* { dg-warning "duplicated .if. condition" } */
     143      return 101;
     144    else if (n == 2) /* { dg-warning "duplicated .if. condition" } */
     145      return 102;
     146    else if (n == 3) /* { dg-warning "duplicated .if. condition" } */
     147      return 103;
     148    else if (n == 4) /* { dg-warning "duplicated .if. condition" } */
     149      return 104;
     150    else if (n == 5) /* { dg-warning "duplicated .if. condition" } */
     151      return 105;
     152    else if (n == 6) /* { dg-warning "duplicated .if. condition" } */
     153      return 106;
     154    else if (n == 7) /* { dg-warning "duplicated .if. condition" } */
     155      return 107;
     156    return 0;
     157  }
     158  
     159  int
     160  fn8 (bool b)
     161  {
     162    if (!b) /* { dg-message "previously used here" } */
     163      return 16;
     164    else if (!b) /* { dg-warning "duplicated .if. condition" } */
     165      return 27;
     166    else
     167      return 64;
     168  }
     169  
     170  int
     171  fn9 (int i, int j, int k)
     172  {
     173    if (i > 0 && j > 0 && k > 0) /* { dg-message "previously used here" } */
     174      return -999;
     175    else
     176    if (i > 0 && j > 0 && k > 0) /* { dg-warning "duplicated .if. condition" } */
     177      return 999;
     178    else
     179      return 0;
     180  }
     181  
     182  int
     183  fn10 (void)
     184  {
     185    if (foo ())
     186      return 17329;
     187    else if (foo ())
     188      return 18409;
     189    return 0;
     190  }
     191  
     192  int
     193  fn11 (int n)
     194  {
     195    if (++n == 10)
     196      return 666;
     197    else if (++n == 10)
     198      return 9;
     199    return 0;
     200  }