Hi Ævar, On Thu, 13 Jan 2022, Ævar Arnfjörð Bjarmason wrote: > On Wed, Jan 12 2022, Taylor Blau wrote: > > > On Wed, Jan 12, 2022 at 01:47:40PM +0100, Ævar Arnfjörð Bjarmason wrote: > >> >> Signed-off-by: Ævar Arnfjörð Bjarmason > >> >> --- > >> >> reftable/refname.c | 1 - > >> >> reftable/writer.c | 1 - > >> >> 2 files changed, 2 deletions(-) > >> >> > >> >> diff --git a/reftable/refname.c b/reftable/refname.c > >> >> index 95734969324..136001bc2c7 100644 > >> >> --- a/reftable/refname.c > >> >> +++ b/reftable/refname.c > >> >> @@ -132,7 +132,6 @@ static int validate_refname(const char *name) > >> >> return REFTABLE_REFNAME_ERROR; > >> >> name = next + 1; > >> >> } > >> >> - return 0; > >> >> } > >> > > >> > In this case the loop inside of validate_refname() should always > >> > terminate the function within the loop body. But removing this return > >> > statement here relies on the compiler to determine that fact. > >> > > >> > I could well imagine on the other end of the spectrum there exists a > >> > compiler which _doesn't_ make this inference pass, and would complain > >> > about the opposite thing as you're reporting from SunCC (i.e., that this > >> > function which returns something other than void does not have a return > >> > statement outside of the loop). > >> > > >> > So in that sense, I disagree with the guidance of SunCC's warning. In > >> > other words: by quelching this warning under one compiler, are we > >> > introducing a new warning under a different/less advanced compiler? > >> > >> I'd think that any compiler who'd warn about this sort of thing at all > >> would be able to spot constructs like this one, which are basically: > >> > >> while (1) { > >> ... > >> if (x) > >> return; > >> ... > >> } > >> return; /* unreachable */ > >> > >> Where the elided code contains no "break", "goto" or other mechanism for > >> exiting the for-loop. > >> > >> I.e. GCC and Clang don't bother to note the unreachable code, but I > >> don't think the reverse will be true, that a compiler will say that a > >> "return" is missing there. Having a function be just a loop body that > >> returns an some point is a common pattern. > > > > Right, but I'm more concerned about a less advanced compiler that would > > complain about the absence of a `return` statement as the last > > instruction in a non-void function. > > > > This is probably all academic, anyway, since less advanced compilers > > probably have other issues compiling Git as it stands today, but > > fundamentally I think that SunCC's warnings here are at the very least > > inconsiderate of less advanced compilers. > > > > To me, the safest thing to do would be to leave the code as-is and drop > > this patch. > > I really don't see that, sorry. We have an actual example of a compliler > that does emit a warning new in this rc on this code, but AFAICT your > concern is purely hypothetical. It's just a warning. So I concur with Taylor. This patch does not need to go into v2.35.0. Ciao, Johannes