[cfe-dev] uncovered path (wrong constraint?)
Anton Yartsev
anton.yartsev at gmail.com
Thu Apr 18 11:56:50 PDT 2013
On 18.04.2013 10:51, YuvalShahar wrote:
> yes, sorry for this mistake.
> I was trying to build a small program to understand why not all paths are
> covered.
> How about this example:
>
> void use(int);
> void checkchecker(char *s) {
> int i=0;
> int j;
> while(*(s++)!=0) {
> i++;
> }
> if(i>4) {
> use(j); //no report - if predicate is changed to i<4 there is a report
> }
> }
>
> I see in the code that loops are covered 4 times,
Hi, Yuval.
There is an analyzer option -analyzer-max-loop <value> that establishes
how many times the analyzer iterates the loop.
In your example if the contents of 's' is unknown the loop will iterate
up to this value.
> but I'd like to add
> another path and remove all constraints on variables that are changed in the
> loop (in the style of a widening operation). Any ideas on how to do this?
> Thanks, Yuval
As I understand the analyzer tries to cover all possible paths. In your
example the first paths is when the while condition is considered false
at the very beginning and the loop iterates 0 times; the following code
illustrates this:
void use(int);
void checkchecker(char *s) {
int i=0;
int j;
int k;
while(*(s++)!=0) {
i++;
k = 0;
}
use(k);
}
z_zzz.cpp:11:9: warning: Function call argument is an uninitialized value
use(k);
^ ~
Here no constrains from the loop are applied.
Does it help?
>
>
> --
> View this message in context: http://clang-developers.42468.n3.nabble.com/uncovered-path-wrong-constraint-tp4031492p4031559.html
> Sent from the Clang Developers mailing list archive at Nabble.com.
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
--
Anton
More information about the cfe-dev
mailing list