[cfe-dev] Non Deterministic floats in clang static analyzer.
Julian Löffler via cfe-dev
cfe-dev at lists.llvm.org
Wed Oct 4 07:29:41 PDT 2017
Hi George,
How is the z3 mode enabled tho?
If I download the latest release binaries:
http://releases.llvm.org/download.html#5.0.0
and run e.g :
clang-5.0 -cc1 -w -analyze -DANALYZER_CM_Z3 -analyzer-constraints=z3
-analyzer-checker=core,debug.ExprInspection
I'll get an error:
fatal error: error in backend: Clang was not compiled with Z3 support!
Kind regards,
Julian
On 03/10/2017 00:21, George Karpenkov wrote:
> (re-adding cfe-dev)
>
> Hi Julian,
>
> Artem’s reply above in this thread indicates that currently float
> modeling is not performed:
>
> > Finally, the analyzer isn't conducting symbolic floating-point
> arithmetic at all yet, only integers. A step in the direction of
> improving it can be found in https://reviews.llvm.org/D28954 .
>
> You might have more luck using Z3-mode and the mentioned patch.
>
> George
>
>> On Sep 25, 2017, at 8:50 AM, Julian Löffler
>> <loefflju at informatik.uni-freiburg.de
>> <mailto:loefflju at informatik.uni-freiburg.de>> wrote:
>>
>> Hey there,
>>
>> What is strange to me, that Clang/scanbuild does not recognize the
>> following:
>>
>> Program:
>>
>> #include <math.h>
>>
>> extern void clang_analyzer_warnIfReached();
>>
>> int main(){
>> float x = NAN;
>> // NAN == NAN --> False.
>> if(x == x){
>> clang_analyzer_warnIfReached();
>> }
>> }
>>
>> The clang_analyzer_warnIfReached() should not be reachable, but is
>> reachable.
>>
>>
>> On 19/09/2017 19:03, George Karpenkov wrote:
>>> Hi Julian,
>>>
>>>> On Sep 19, 2017, at 3:43 AM, Julian Löffler
>>>> <loefflju at informatik.uni-freiburg.de
>>>> <mailto:loefflju at informatik.uni-freiburg.de>> wrote:
>>>>
>>>> Hey George,
>>>>
>>>> Thanks a lot for the additional information.
>>>>
>>>> Using prototypes works as expected I think.
>>>>
>>>> However, do you think clang is a good tool to analyze reachability
>>>> of certain program-points?
>>>>
>>>> Currently we model requirements of a math-lib in the form of small
>>>> programs for each function, where we analyze if we can reach
>>>> error-states. (i.e. states where the requirement can be injured).
>>>> The question is if we should rather use Clang on the source code.
>>> Clang static analyzer is neither sound, nor complete, so you will
>>> not be able to verify
>>> that a certain program point is definitely not reachable.
>>> There are many sources of imprecision: functions are inlined only if
>>> they are smaller than a certain size,
>>> program is analyzed one translation unit at a time, and many others.
>>>
>>> However, unlike more academic tools clang static analyzer
>>> gives you a push-button technology: you can just run it on an
>>> *arbitrary* codebase, and in a very timely manner
>>> get a list of found bugs.
>>> As far as I am aware that would be very difficult to achieve with
>>> e.g. Ultimate Atomizer and similar tools.
>>>
>>>> Usually we do that using trace abstraction and abstract
>>>> interpretation, anyway I did not find a hint what clang static
>>>> analyzer is doing exactly.
>>>> So if you have a clue which analysis-methods Clang static analyzer
>>>> uses, I'd be glad to hear it^^
>>> I believe it would be closest to symbolic execution.
>>>
>>> George
>>>
>>>>
>>>> Thanks a lot and kind regards,
>>>>
>>>> Julian
>>>>
>>>>
>>>> On 19.09.2017 03:02, George Karpenkov wrote:
>>>>> Hi Julian,
>>>>>
>>>>> Artem has mentioned a few good points, to that I would like to add
>>>>> that:
>>>>>
>>>>> a) Using uninitialized values as non-det inputs from the user like
>>>>> CBMC
>>>>> does is usually not a good thing to do, as uninitialized values
>>>>> are not simply
>>>>> non-deterministic, and can cause undefined behavior.
>>>>>
>>>>> b) In order to get Clang static analyzer to model
>>>>> non-deterministic input from user
>>>>> it is enough to define a function prototype without implementation
>>>>> which would return
>>>>> desired type.
>>>>>
>>>>> Regards,
>>>>> George
>>>>>
>>>>>> On Sep 16, 2017, at 7:07 AM, Julian Löffler via cfe-dev
>>>>>> <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>>>>>>
>>>>>> Greetings,
>>>>>>
>>>>>> I wonder how one can obtain that Clang Static Analyzer recognizes
>>>>>> non-deterministic-floats.
>>>>>>
>>>>>> Usually you can simulate them in c as follows:
>>>>>>
>>>>>> float nondet_float(){
>>>>>> float x;
>>>>>> return x;
>>>>>> }
>>>>>>
>>>>>> float myFloat = nondet_float();
>>>>>>
>>>>>> Such that tools like CBMC will handle such variables as non-det
>>>>>> floats, which are assumed to be every possible value.
>>>>>>
>>>>>> Is that behavior somehow possible in Clang Static Analyzer?
>>>>>> Or is it generally impossible for Static code analyzers to do
>>>>>> such things?
>>>>>>
>>>>>> Regards,
>>>>>> Julian
>>>>>> _______________________________________________
>>>>>> cfe-dev mailing list
>>>>>> cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
>>>>>> http://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/20171004/155c3295/attachment.html>
More information about the cfe-dev
mailing list