"Godmar Back" <godmar@xxxxxxxxx> writes: > gback@top [324](~/tmp) > cat switch.c > enum four { A, B, C, D }; > extern void g(int); > > void f(enum four x) > { > switch (x) > { > case A: g(1); break; > case B: g(2); break; > case C: g(3); break; > case D: g(4); break; > default: gcc_unreachable(); > } > } You don't have enough cases. gcc will always uses a binary search if there are fewer than five cases. Try this one. Ian enum four { A, B, C, D, E, F, G, H, I, J, K, L, M, N }; extern void g(int); void f(enum four x) { switch (x) { case A: g(1); break; case B: g(2); break; case C: g(3); break; case D: g(4); break; case E: g(5); break; case F: g(6); break; case G: g(7); break; case H: g(8); break; case I: g(9); break; case J: g(10); break; case K: g(11); break; case L: g(12); break; case M: g(13); break; case N: g(14); break; default: gcc_unreachable(); } }