This logically-equivalent function appears to compile correctly. static void proper_function(unsigned short param) { unsigned int data = __builtin_inl(0); switch (data) { case 0: param = 12; break; case 4: param = 42; break; default: die(); break; } __builtin_outl(param, 0); }