[cfe-dev] [StaticAnalyzer] I think ExplodedGraph is wrong

Aleksei Sidorin via cfe-dev cfe-dev at lists.llvm.org
Fri Sep 9 04:25:44 PDT 2016

Hm, seems like there is no difference between versions.

There is my understanding of the problem.
We don't handle sym-sym comparisons well. The result of comparison 
between two symbols is an UnknownVal.
First, analyzer renders "b >= Min" branch and assumes it false. Then, it 
renders operator '&&', then makes a cleanup which results in a new node 
with an empty state (1). It proceeds with false branch to operator! and 
then - to ReturnStmt.

Then, it renders branch where (b >= Min) is true. It assigns another 
UnknownVal to b < Max, cleanups ... and tries to create another 
empty-stated node before entering operator!. But there is already a node 
with an empty state and in the ProgramPoint. So, two execution paths are 
merged unexpectedly. And the analysis finishes since 'operator!' was 
rendered already for this merged branch.

I tried a quick solution which is the conjuring a symbolic value for 
comparisons instead of leaving it Unknown. It seems to work but I'm not 
sure if it is exactly what we need here. Anna, Artem, what is your 
opinion? Should we proceed with review or it is a bad idea in general?

09.09.2016 12:05, Aleksei Sidorin via cfe-dev пишет:
> Hello Daniel,
> Thank you for report! Yes, I can confirm this bug. However, I cannot 
> see this behaviour with an old version of clang: with clang-3.4.1 
> 'b++' is still reachable. Will investigate.
> 08.09.2016 18:06, Daniel Marjamäki via cfe-dev пишет:
>> Hello!
>> When I analyze this code:
>>      extern int Min,Max;
>>           void dfsd(int b) {
>>          if (!(b >= Min && b < Max))
>>            return;
>>          b++;
>>      }
>> It says that "b++;" is unreachable. When I look at the ExplodedGraph 
>> it seems to me that there is no node below the return. I would like 
>> to debug this. But I don't know where I should look. Do you have some 
>> idea?
>> Best regards,
>> Daniel Marjamäki
>> .................................................................................................................. 
>> Daniel Marjamäki Senior Engineer
>> Evidente ES East AB  Warfvinges väg 34  SE-112 51 Stockholm Sweden
>> Mobile:                 +46 (0)709 12 42 62
>> E-mail:                 Daniel.Marjamaki at evidente.se
>> www.evidente.se
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev

Best regards,
Aleksei Sidorin
Software Engineer,
IMSWL-IMCG, SRR, Samsung Electronics

More information about the cfe-dev mailing list