------- Comment #1 from jakub at gcc dot gnu dot org 2008-04-22 19:53 ------- 4.2 would recreate the call:
/* Wrap the computation of the argument in a SAVE_EXPR, as we may need to expand the argument again. This way, we will not perform side-effects more the once. */ narg = builtin_save_expr (arg); if (narg != arg) { arg = narg; arglist = build_tree_list (NULL_TREE, arg); exp = build_function_call_expr (fndecl, arglist); } and thus the CALL_EXPR_TAILCALL bit would be lost. Now if target = expand_unop (mode, builtin_optab, op0, target, 0); fails, then it is certainly better to preserve the CALL_EXPR_TAILCALL bit. But for the errno check we need to either clear it, or branch to (return). -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36017