> Currently, I believe, GCC combines various calls to abort in a single > function, because it knows that none of them returns.
afaics it is more generic. It merges them because it knows that it doesn't make any difference. Sometimes it is useful to make special exceptions to general features. This is one such case. Cross-jumping is a general feature, that is true, but in the specific case of `abort', it tends to be particularly annoying. In my oppinion that would be pretty ugly. From the compilers point of view the abort function is just a normal function with the __noreturn__ attribute. The __noreturn__ attribute indicates that I long ago made one kind of special exception for `abort'. We can make another special exception for it which means that calls to this function can't be cross-jumped. Certainly, this exception should be implemented following the usual practices for implementing exceptions in GCC. It could be done with an attribute such as __no_cross_jump__, That's what the user is telling gcc when he is calling the compiler with -Os. One great thing of free software is it doesn't try to `patronize' its users. Please do not let us start with that now.. If you offer the user a limited set of choices, and the user chooses the one which is overall preferable to the others, that doesn't mean the user is completely satisfied. And when a user is not completely satisfied, we as developers must be ready to consider changing one or another alternative so that users overall will be more satisfied. Listening to user complaints is not patronizing the user. On the contrary, refusing to listen, telling the user, "When you selected that alternative, you asked for it 100%, therefore we won't listen to complaints that sometimes it causes trouble"--that's patronizing.