e5691.c

caseの値は入りきりません(ビットフィールド)

/* 警告:   A:e5691: switch(5bitの符号有ビットフィールド)に対し、caseの値 27(6bit必要) は範囲外です */

struct X { int i : 5; }; int a(struct X* x) { switch(x->i) { case 1: return 10; case 2: return 25; case -6: return 31; case -13: return 78; case 27: /* NG */ return 51; case 116:/* NG */ return 54; case -26:/* NG */ return 11; } }
解説 switchのcaseに条件式で指定されたビットフィールドに入らない値を使っています。 例えば、27はsigned型のビットフィールドの場合符号5ビット+1ビットで6bit必要です。