[cfe-dev] [analyzer] How to analyzer the code after an indefinite loop?

Artem Dergachev via cfe-dev cfe-dev at lists.llvm.org
Tue Jul 28 12:34:11 PDT 2020


Here's how you can find this out with the help of ExprInspection:


$ cat test.c

int f(int x, int flag)
{
   int i = 0;
   while(i < x)
     i++;

   clang_analyzer_warnIfReached();
}


$ clang --analyze -Xclang -analyzer-checker=debug.ExprInspection test.c

test.c:7:3: warning: REACHABLE [debug.ExprInspection]
   clang_analyzer_warnIfReached();
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.


Here's a slightly more interesting experiment:


$ cat test.c

int f(int x, int flag)
{
   int i = 0;
   while(i < x)
     i++;

   if (flag) {
     clang_analyzer_warnIfReached();
     clang_analyzer_numTimesReached();
     return i;
   } else {
     clang_analyzer_warnIfReached();
     clang_analyzer_numTimesReached();
     return 0;
   }
}


$ clang --analyze -Xclang -analyzer-checker=debug.ExprInspection test.c

test.c:8:5: warning: REACHABLE [debug.ExprInspection]
     clang_analyzer_warnIfReached();
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
test.c:9:5: warning: 4 [debug.ExprInspection]
     clang_analyzer_numTimesReached();
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
test.c:12:5: warning: REACHABLE [debug.ExprInspection]
     clang_analyzer_warnIfReached();
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
test.c:13:5: warning: 1 [debug.ExprInspection]
     clang_analyzer_numTimesReached();
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 warnings generated.


Will you be able to figure out why is one branch reached 4 times while 
the other branch is reached only once? You can find all your answers on 
the exploded graph dump.


On 7/28/20 5:59 AM, Denis Petrov via cfe-dev wrote:
>
> Hi, community!
>
>
> A quick question.
>
>
> Is CSA Core able to analyze the code after some indefinite loop?
>
> E.g.
>
> void f(int x)
> {
>   int i = 0;
>   while(i < x)
>     i++;
>   // Interested in some code here!!
> }
>
>
> I found that Exploded graph grows going through the loop 4 times and 
> then stops to analyze the code further.
>
> P.S. I know about -analyzer-max-loop(4)​.
>
> ------------------------------------------------------------------------
> *Denys Petrov*
> Senior С++ Developer | Kharkiv, Ukraine
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20200728/a1714e2f/attachment.html>


More information about the cfe-dev mailing list