On Wed, Jan 12, 2022 at 01:47:40PM +0100, Ævar Arnfjörð Bjarmason wrote: > >> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> > >> --- > >> 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. Thanks, Taylor