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

            Bug ID: 71249
           Summary: -Wswitch-unreachable false positive for a compound
                    statement containing a used label
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

While reading the changes that implement the new -Wswitch-unreachable option
(bug 49859) I noticed that the hunk in gimplify_switch_exp assumes that only
GIMPLE_LABEL and LABEL_TRY statements are reachable.  The following test case
shows that this is an overly broad assumption, and that compound statements
containing labels used labels as their second or subsequent statements can also
be reachable.  As a result, GCC issues a false positive warning for the
following test case:

$ cat xxx.c && /build/gcc-trunk-svn/gcc/xgcc -B /build/gcc-trunk-svn/gcc -S
-Wall xxx.c
int g (int i)
{
  switch (i) {
  { i = 0; foo: return i; }
  case 3: goto foo;
  }
  return i;
}

xxx.c: In function ā€˜g’:
xxx.c:4:7: warning: statement will never be executed [-Wswitch-unreachable]
   { i = 0; foo: return i; }
     ~~^~~

Reply via email to