<html>
    <head>
      <base href="http://llvm.org/bugs/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - False positive: Clang warns about unhanded switch values even if they are handled elsewhere"
   href="http://llvm.org/bugs/show_bug.cgi?id=18392">18392</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>False positive: Clang warns about unhanded switch values even if they are handled elsewhere
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>Macintosh
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>MacOS X
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Frontend
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>razielim@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvmbugs@cs.uiuc.edu
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Clang warns that a switch statement does not handle all enumeration values even
if the values not handled are actually handled elsewhere before the switch
statement.

e.g:

typedef NS_ENUM( NSUInteger, AnEnum ) {
    AnEnumA,
    AnEnumB,
    AnEnumC
};

- (void)doSomething: (AnEnum)value {

    if( AnEnumA == value )
    {
        // Do something special.
    }
    else
    {
        NSUInteger aParam;

        switch( value )
        {
            case AnEnumB: aParam = 1; break;
            case AnEnumC: aParam = 2; break;
        }

        [self doSomethingElse: aParam];
    }
}

Clang warns that the switch statement does not cover 'AnEnumA', even though it
is not possible that value could possibly be 'AnEnumA' at that point.

As you can see, I've stuck AnEnumB and AnEnumC inside a switch statement
because all of those cases are handled the same way (save for a single
parameter value). AnEnumA requires some special treatment, which is why I have
handled it before reaching the switch statement.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>