[cfe-commits] r85462 - /cfe/trunk/test/Analysis/misc-ps-eager-assume.m
Fariborz Jahanian
fjahanian at apple.com
Wed Oct 28 17:53:31 PDT 2009
Why is this an objective-c test case? Problem seems to be a c issue.
- Fariborz
On Oct 28, 2009, at 5:49 PM, Ted Kremenek wrote:
> Author: kremenek
> Date: Wed Oct 28 19:49:46 2009
> New Revision: 85462
>
> URL: http://llvm.org/viewvc/llvm-project?rev=85462&view=rev
> Log:
> Add test case for <rdar://problem/7342806>.
>
> Modified:
> cfe/trunk/test/Analysis/misc-ps-eager-assume.m
>
> Modified: cfe/trunk/test/Analysis/misc-ps-eager-assume.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/misc-ps-eager-assume.m?rev=85462&r1=85461&r2=85462&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- cfe/trunk/test/Analysis/misc-ps-eager-assume.m (original)
> +++ cfe/trunk/test/Analysis/misc-ps-eager-assume.m Wed Oct 28
> 19:49:46 2009
> @@ -77,3 +77,46 @@
> *a = 1; // no-warning
> *b = 1; // no-warning
> }
> +
> +
> +//
> =
> =
> =
> ---------------------------------------------------------------------
> ===//
> +// <rdar://problem/7342806>
> +// This false positive occured because the symbolic constraint on a
> short was
> +// not maintained via sign extension. The analyzer doesn't
> properly handle
> +// the sign extension, but now tracks the constraint. This
> particular
> +// case relies on -analyzer-eagerly-assume because of the expression
> +// 'Flag1 != Count > 0'.
> +//
> =
> =
> =
> ---------------------------------------------------------------------
> ===//
> +
> +void rdar7342806_aux(short x);
> +
> +void rdar7342806() {
> + extern short Count;
> + extern short Flag1;
> +
> + short *Pointer = 0;
> + short Flag2 = !!Pointer; // Flag2 is false (0).
> + short Ok = 1;
> + short Which;
> +
> + if( Flag1 != Count > 0 )
> + // Static analyzer skips this so either
> + // Flag1 is true and Count > 0
> + // or
> + // Flag1 is false and Count <= 0
> + Ok = 0;
> +
> + if( Flag1 != Flag2 )
> + // Analyzer skips this so Flag1 and Flag2 have the
> + // same value, both are false because Flag2 is false. And
> + // from that we know Count must be <= 0.
> + Ok = 0;
> +
> + for( Which = 0;
> + Which < Count && Ok;
> + Which++ )
> + // This statement can only execute if Count > 0 which can only
> + // happen when Flag1 and Flag2 are both true and Flag2 will only
> + // be true when Pointer is not NULL.
> + rdar7342806_aux(*Pointer); // no-warning
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list