On Fri, May 16, 2025 at 06:26:23PM +0200, Stefano Brivio wrote: > On Fri, 16 May 2025 17:25:21 +1000 > David Gibson wrote: > > > On Thu, May 15, 2025 at 06:05:01PM +0200, Stefano Brivio wrote: > > > Cppcheck 2.14.2 on Alpine Linux (musl) says that: > > > > > > tap.c:111:19: error: Found an exit path from function with non-void return type that has missing return statement [missingReturn] > > > switch (c->mode) { > > > ^ > > > > > > This exit path is not reachable because we ASSERT(0) after the switch, > > > but for some reason cppcheck doesn't see this with musl headers. Hide > > > the warning with a redundant return statement. > > > > > > Signed-off-by: Stefano Brivio > > > > Hm. Alternatively you could change this to call abort_with_msg() > > directly. That's marked as ((noreturn)) so with any luck cppcheck > > will then be able to figure out what's going on. Although, I'm > > slightly surprised it can't do so already: I thought I put the > > ((noreturn)) in there to avoid warnings exactly like this. > > So, I checked, and abort_with_msg(""); works. ASSERT() ultimately > expands to abort_with_msg(), but for some reason cppcheck together with > Clang can't "follow" that, I suppose it's something related to the > pre-processor. > > But in any case, abort_with_msg("") doesn't look as descriptive and > as obviously redundant as a return statement with a comment, so I don't > quite see the benefit changing it (also considering that I need to test > other versions, which takes time). Well, kind of the whole point of abort_with_msg() is that you can give it a meaningful message, which might change the picture. It would also be trivial to write an unreachable() wrapper around that. -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson