From: Phillip Wood Date: Thu, 10 Jun 2021 13:16:37 GMT Subject: Re: [PATCH] builtins + test helpers: use return instead of exit() in cmd_* Message-ID: <71775f7d-eb60-7fdc-731e-d370f620735e@gmail.com> In-Reply-To: On 08/06/2021 07:49, Jeff King wrote: > On Mon, Jun 07, 2021 at 01:12:48PM +0200, Ævar Arnfjörð Bjarmason wrote: > >> Change various cmd_* functions to use "return" instead of exit() to >> indicate an exit code. On Solaris with SunCC the compiler legitimately >> complains about these, since we'll e.g. skip the cleanup (e.g. closing >> fd's, erroring if we can't) in git.c's run_builtin() when we exit() >> directly like this. > > Each of these cases looks like a simple and obvious conversion, and I > certainly don't mind us doing it. > > But I do wonder what SunCC is complaining about exactly. Calling exit() > means you don't have to worry about cleanup anymore. Does the compiler > not have any notion of NORETURN or equivalent? If so, I'd expect many > more complaints in general that we probably _won't_ want to silence, > because it will be awkward to do so. It is curious that is only complaining abut exit() calls and not die(), maybe that is just a coincidence though if it is not complaining about all calls to exit() Best Wishes Phillip >> diff --git a/builtin/difftool.c b/builtin/difftool.c >> index 89334b77fb..6a9242a803 100644 >> --- a/builtin/difftool.c >> +++ b/builtin/difftool.c >> @@ -675,7 +675,7 @@ static int run_file_diff(int prompt, const char *prefix, >> "GIT_PAGER=", "GIT_EXTERNAL_DIFF=git-difftool--helper", NULL, >> NULL >> }; >> - int ret = 0, i; >> + int i; >> >> if (prompt > 0) >> env[2] = "GIT_DIFFTOOL_PROMPT=true"; >> @@ -686,8 +686,7 @@ static int run_file_diff(int prompt, const char *prefix, >> strvec_push(&args, "diff"); >> for (i = 0; i < argc; i++) >> strvec_push(&args, argv[i]); >> - ret = run_command_v_opt_cd_env(args.v, RUN_GIT_CMD, prefix, env); >> - exit(ret); >> + return run_command_v_opt_cd_env(args.v, RUN_GIT_CMD, prefix, env); >> } > > This one I'm not surprised that a compiler would complain about. The > function returns an int, but there are no return paths from the > function (and hence the caller doing "return run_diff_files()" likewise > could not ever return there. Which is not quite what you said it > complained about above, hence my curiosity. :) > > -Peff >