title: lint warning with unsigned long in switch statement
body: <p>I have the following C code:</p>
  
  <pre><code>unsigned long val = &lt;my_size&gt;;
  
  switch(val)
  {
   case (1L&lt;&lt;10): // 1KB
    // Do something
    break;
   case 1L&lt;&lt;20:  // 1MB
    // Do somnething
    break;
   case (1L&lt;&lt;30): // 1GB
    // Do something 
    break;
   case (1L&lt;&lt;40): // 1TB
    // Do something
    break;
   // Other cases
   default:
    // Do something
    break;
  }
  </code></pre>
  
  <p>Now lint is giving me a warning saying<br>
  "Warning:44 Illegal Argument to Switch: Size Exceeds UB4"</p>
  
  <p>So is it valid to use switch on a <code>unsigned long</code>?</p>
  
  <p>I don't get any compilation errors but want to make sure my code works properly and there are no funny rollover type stuff going on.</p>
  
  <p>There won't be too many case labels in the switch. </p>
  
  <p>I was reading on this and came across - <a href="https://stackoverflow.com/questions/2676210/why-cant-your-switch-statement-data-type-be-long-java">Why can&#39;t your switch statement data type be long, Java?</a></p>
  
  <p>It looks like switch statement type shouldn't be long in case of Java. Is it true for C as well?</p>
  
  <p>If needed:
  1. I am using linux lint
  2. gcc for compiler
  3. platform is linux 64 bit</p>