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

Aleksei Sidorin via cfe-dev cfe-dev at lists.llvm.org
Fri Sep 9 05:41:13 PDT 2016


A very initial version of patch for this issue is here: 
https://reviews.llvm.org/D24384


09.09.2016 14:25, Aleksei Sidorin via cfe-dev пишет:
> 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