blob: 7c5062d83d09a482e290cd6e6143120788c3a1d4 [file] [log] [blame]
/* PR c/64279 */
/* { dg-do compile } */
/* { dg-options "-Wduplicated-branches -O2" } */
extern void foo (int);
extern int g;
extern int a[10];
int
f (int i, int *p)
{
const int j = 0;
if (j == 0)
{
if (i > 10) /* { dg-warning "this condition has identical branches" } */
/* Optimizers can figure out that this is 1. */
*p = j * 2 + 1;
else
*p = 1;
}
if (i)
;
else
;
if (i == 0) /* { dg-warning "this condition has identical branches" } */
return 0;
else
return 0;
if (i == 1) /* { dg-warning "this condition has identical branches" } */
{
g = 10;
}
else
{
g = 10;
}
const char *s;
if (i == 2) /* { dg-warning "this condition has identical branches" } */
s = "foo";
else
s = "foo";
if (i == 3) /* { dg-warning "this condition has identical branches" } */
g = a[i];
else
g = a[i];
if (i == 4) /* { dg-warning "this condition has identical branches" } */
return i ? 1 : g;
else
return i ? 1 : g;
if (i == 5) /* { dg-warning "this condition has identical branches" } */
{
{
{
{
g++;
}
}
}
}
else
{
{
{
{
g++;
}
}
}
}
if (i == 6) /* { dg-warning "this condition has identical branches" } */
g = i * 6;
else
g = i * 6;
/* Don't warn. */
if (i == 7)
g = i / 6;
else
g = 6 / i;
if (i == 8) /* { dg-warning "this condition has identical branches" } */
return i * 8 * i * 8;
else
return i * 8 * i * 8;
if (i == 9) /* { dg-warning "this condition has identical branches" } */
{
p++;
return *p;
}
else
{
p++;
return *p;
}
/* Don't warn. */
if (i == 10)
return *++p;
else
return ++*p;
if (i == 11) /* { dg-warning "this condition has identical branches" } */
{
foo (6);
}
else
{
foo (6);
}
if (i == 12) /* { dg-warning "this condition has identical branches" } */
{
foo (6 + i), foo (2);
}
else
{
foo (6 + i), foo (2);
}
if (i == 13) /* { dg-warning "this condition has identical branches" } */
p += (g + 1);
else
p += (g + 1);
if (i == 14) /* { dg-warning "this condition has identical branches" } */
{
foo (7);
*p = 0;
foo (9);
}
else
{
foo (7);
*p = 0;
foo (9);
}
if (i == 15) /* { dg-warning "this condition has identical branches" } */
p += (g + (1 + 2));
else
p += (g + (1 + 1 + 1));
if (i == 16) /* { dg-warning "this condition has identical branches" } */
foo (10 + g);
else
foo (g + 10);
if (i == 17) /* { dg-warning "this condition has identical branches" } */
({ foo (i); });
else
({ foo (i); });
if (i == 18)
{
if (i == 19)
{
if (i == 20) /* { dg-warning "this condition has identical branches" } */
foo (++i);
else
foo (++i);
}
}
/* Don't warn. */
if (i == 21)
{
foo (1);
foo (2);
}
else
{
foo (2);
foo (1);
}
return 0;
}