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

            Bug ID: 61405
           Summary: Not emitting "enumeration value not handled in switch"
                    warning for bit-field enums
           Product: gcc
           Version: 4.10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jamborm at gcc dot gnu.org

This a followup to PR 61340.  In both C and C++ we do not emit a
warning about unhandled enumeration values in a switch if the enum is
also a bit-field (and clang does, that is how it was noticed).

Testcase:

$ cat test.c
enum ipa_ref_use
{
  IPA_REF_LOAD,
  IPA_REF_STORE,
  IPA_REF_ADDR,
  IPA_REF_ALIAS
};

/* Record of reference in callgraph or varpool.  */
struct ipa_ref
{
  unsigned int lto_stmt_uid;
  unsigned int referred_index;
#ifndef PRODUCE_WARNING
  enum ipa_ref_use use:2;
#else
  enum ipa_ref_use use;
#endif
  unsigned int speculative:1;
};

int blah1 (unsigned int);
int blah2 (unsigned int);
int blah3 (unsigned int);

int
foo (struct ipa_ref *ref)
{
  int r;
  switch (ref->use)
    {
    case IPA_REF_LOAD:
      r = blah1 (ref->lto_stmt_uid) + 8;
      break;
    case IPA_REF_STORE:
      r = blah2 (ref->referred_index +5) * 3;
      break;
    case IPA_REF_ADDR:
      r = blah3 (ref->lto_stmt_uid + ref->speculative);
      break;
    }
  return r;
}

$ ~/gcc/mine/inst/bin/gcc test.c -O -S -Wswitch
$ ~/gcc/mine/inst/bin/gcc test.c -O -S -Wswitch -DPRODUCE_WARNING
test.c: In function ‘foo’:
test.c:30:3: warning: enumeration value ‘IPA_REF_ALIAS’ not handled in switch
[-Wswitch]
   switch (ref->use)
   ^
$ clang test.c -O -S -Wswitch -DPRODUCE_WARNING    
test.c:30:11: warning: enumeration value 'IPA_REF_ALIAS' not handled in switch
[-Wswitch]
  switch (ref->use)
          ^
1 warning generated.

Reply via email to