<br><br><div class="gmail_quote">On Sun, Oct 28, 2012 at 8:12 AM, Abramo Bagnara <span dir="ltr"><<a href="mailto:abramo.bagnara@bugseng.com" target="_blank">abramo.bagnara@bugseng.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
$ cat p.c<br>
#include <stdio.h><br>
<br>
enum e { a, b = 4 } x = 3;<br>
<br>
void g(int v) {<br>
  printf("%d\n", v);<br>
}<br>
<br>
int main(int argc, char **argv) {<br>
  switch (x) {<br>
  case a:<br>
    g(0);<br>
    break;<br>
  case b:<br>
    g(1);<br>
    break;<br>
  default:<br>
    g(2);<br>
    break;<br>
  }<br>
}<br>
$ _clang -Wunreachable-code -Wcovered-switch-default -O2 p.c<br>
p.c:17:3: warning: default label in switch which covers all enumeration<br>
values<br>
      [-Wcovered-switch-default]<br>
  default:<br>
  ^<br>
p.c:18:7: warning: will never be executed [-Wunreachable-code]<br>
    g(2);<br>
      ^<br>
$ ./a.out<br>
2<br>
<br>
Of course -Wcovered-switch-default warning is a perfectly true positive.<br>
<br>
My reading of the standard is that nothing prevent an enum to have a<br>
value different from listed enum constants if this value is compatible<br>
with enum range (and code generation seems to agree on that).<br>
<br>
Are there any objection to file a bug report?<br>
<span class="HOEnZb"></span></blockquote><div><br>Well, I would object on the basis that for all "regular" uses of the switch/enum combination: ie, the enum values are only the enumerators and the switch does cover all enumerators; then this warning is perfectly valid.<br>
<br>Therefore I would rather say that people who use enums for bit-masks and thus have variables of the enum type with values other than the enumerators (which is fine) should either not be using a switch on this enum OR simply disable this warning. Maybe casting `x` to `int` such as `switch(int(x))` would also work.<br>
<br>How do you propose to distinguish the two widely different usages of enum ?<br><br>I personally would be rather disappointed to see -Wcovered-switch-default disappear since at both the company I work on and in my pet programs we only ever use enum for its enumerators and thus this warning is very useful.<br>
<br>-- Matthieu<br></div></div>