https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91915

            Bug ID: 91915
           Summary: New warning for duplicate if condition in
                    if-elseif-elseif chain
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marxin at gcc dot gnu.org
            Blocks: 87403
  Target Milestone: ---

As seen here:

 cat /tmp/warn.c
int global;
void bar();

int foo(int argc)
{
  if (argc == 1)
    bar ();
  else if (argc == 2) {
    global += 1;
  }
  else if (argc == 1)
  {
    bar ();
    bar ();
  }
  return 0;
}


int main222(int argc)
{
  switch (argc)
  {
    case 1:
      bar ();
      break;
    case 2:
      global += 1;
      return 0;
    case 1:
      bar ();
      bar ();
      break;
    default:
      break;
  }
  return 0;
}

We want about duplicate switch cases:
gcc /tmp/warn.c
/tmp/warn.c: In function ‘main222’:
/tmp/warn.c:30:5: error: duplicate case value
   30 |     case 1:
      |     ^~~~
/tmp/warn.c:24:5: note: previously used here
   24 |     case 1:
      |     ^~~~

and I think it can be handy to the same for the if-elseif chains that are
semantically equal to the switch statement.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87403
[Bug 87403] [Meta-bug] Issues that suggest a new warning

Reply via email to