tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: KASSERT and clang static analyzer
> Date: Tue, 18 Apr 2017 19:38:06 +0800 (+08)
> From: Paul Goyette <paul%whooppee.com@localhost>
>
> I looked at the picture, and it seems to me it is doing the same thing
> that it does for any other "if ()" condition. Look just a little bit
> further down and you'll see the same "assumption" on an if that isn't
> buried inside a macro.
>
> In short, there's nothing wrong, nothing to investigate.
On seeing
KASSERT(mss != 0); // (a)
KASSERT(len % mss == 0); // (b)
Clang concludes by the conditional in (a) that mss == 0 is a
possibility, and under that premise that there is a possible division
by zero in (b). This possibility is exactly what the assertion is
supposed to assist Clang in ruling out.
Marking kern_assert as __dead should at least let the static analyzer
do the reasoning it needs, though if we want to preserve the behaviour
that kern_assert returns if we're in a panic, then we must be careful
not to compile the code with kern_assert marked as __dead, because
clang will yield completely different behaviour in that case.
Home |
Main Index |
Thread Index |
Old Index