[cfe-commits] r125640 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td include/clang/Sema/Sema.h lib/Sema/SemaChecking.cpp lib/Sema/SemaExpr.cpp test/Analysis/out-of-bounds.c test/Sema/array-bounds.c

Ted Kremenek kremenek at apple.com
Thu Feb 17 09:13:29 PST 2011


On Feb 17, 2011, at 3:59 AM, Frits van Bommel wrote:

> Actually, all the examples Hans gave use compile-time constants as
> conditions. If you know the array bounds, you should also be able to
> figure out the values of those conditions. So it might be interesting
> to just look 'up' the AST for conditions that are statically known to
> be false, and suppress the warning in that case.
> 
> Of course, there are also more interesting cases like
> 
>  int A[10 + SomethingConstant];
>  if (SomethingConstant && someFunction())
>    A[10] = 0;
> 
> where the condition isn't necessarily a constant, but it being true
> (or false, if we're in an 'else') does imply something about a
> constant (in this case, that it's non-zero).

This is the purview of the static analyzer, which already can flag these kinds of buffer overflows.  The analysis it employs is path-sensitive, handles aliasing, etc.  The compiler warning we are talking about here is mainly to cover the dirt simple cases that should never appear in code.



More information about the cfe-commits mailing list