http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59039
--- Comment #9 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- > What restrictions do they have? Can they be used within the > same function? Can they be used within functions with parameters? The only restriction I know of is that they cannot be in the same function, it's even enforced by the inliner: case BUILT_IN_LONGJMP: /* We can't inline functions that call __builtin_longjmp at all. The non-local goto machinery really requires the destination be in a different function. If we allow the function calling __builtin_longjmp to be inlined into the function calling __builtin_setjmp, Things will Go Awry. */ inline_forbidden_reason = G_("function %q+F can never be inlined because " "it uses setjmp-longjmp exception handling");