r180638 - [analyzer] Model casts to bool differently from other numbers.
John McCall
rjmccall at apple.com
Mon Apr 29 10:33:14 PDT 2013
On Apr 26, 2013, at 2:42 PM, Jordan Rose <jordan_rose at apple.com> wrote:
> Author: jrose
> Date: Fri Apr 26 16:42:55 2013
> New Revision: 180638
>
> URL: http://llvm.org/viewvc/llvm-project?rev=180638&view=rev
> Log:
> [analyzer] Model casts to bool differently from other numbers.
>
> Casts to bool (and _Bool) are equivalent to checks against zero,
> not truncations to 1 bit or 8 bits.
>
> This improved reasoning does cause a change in the behavior of the alpha
> BoolAssignment checker. Previously, this checker complained about statements
> like "bool x = y" if 'y' was known not to be 0 or 1. Now it does not, since
> that conversion is well-defined. It's hard to say what the "best" behavior
> here is: this conversion is safe, but might be better written as an explicit
> comparison against zero.
>
> More usefully, besides improving our model of booleans, this fixes spurious
> warnings when returning the address of a local variable cast to bool.
>
> <rdar://problem/13296133>
>
> Modified:
> cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp
> cfe/trunk/test/Analysis/bool-assignment.c
> cfe/trunk/test/Analysis/casts.c
> cfe/trunk/test/Analysis/stack-addr-ps.cpp
> cfe/trunk/test/Analysis/stackaddrleak.c
>
> Modified: cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp?rev=180638&r1=180637&r2=180638&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Core/SValBuilder.cpp Fri Apr 26 16:42:55 2013
> @@ -327,6 +327,22 @@ SVal SValBuilder::evalCast(SVal val, Qua
> if (val.isUnknownOrUndef() || castTy == originalTy)
> return val;
>
> + if (castTy->isBooleanType()) {
For what it's worth, the fact that this has conversion-to-bool semantics should be
fully encoded in the CastKind; is there a reason you don't always have that here?
John.
More information about the cfe-commits
mailing list