Fixed zerodiv FN for '1/std::erfc(42)'
This commit is contained in:
parent
87c1e6587a
commit
048d31ec56
|
@ -1291,7 +1291,7 @@
|
|||
<function name="erfc,std::erfc">
|
||||
<use-retval/>
|
||||
<pure/>
|
||||
<returnValue type="double"/>
|
||||
<returnValue type="double">erfc(arg1)</returnValue>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1" direction="in">
|
||||
|
@ -1302,7 +1302,7 @@
|
|||
<function name="erfcf,std::erfcf">
|
||||
<use-retval/>
|
||||
<pure/>
|
||||
<returnValue type="float"/>
|
||||
<returnValue type="float">erfc(arg1)</returnValue>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1" direction="in">
|
||||
|
@ -1313,7 +1313,7 @@
|
|||
<function name="erfcl,std::erfcl">
|
||||
<use-retval/>
|
||||
<pure/>
|
||||
<returnValue type="long double"/>
|
||||
<returnValue type="long double">erfc(arg1)</returnValue>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1" direction="in">
|
||||
|
|
|
@ -730,6 +730,17 @@ static std::unordered_map<std::string, BuiltinLibraryFunction> createBuiltinLibr
|
|||
v.valueType = ValueFlow::Value::ValueType::FLOAT;
|
||||
return v;
|
||||
};
|
||||
functions["erfc"] = [](const std::vector<ValueFlow::Value>& args) {
|
||||
if (args.size() != 1)
|
||||
return ValueFlow::Value::unknown();
|
||||
ValueFlow::Value v = args[0];
|
||||
if (!v.isFloatValue() && !v.isIntValue())
|
||||
return ValueFlow::Value::unknown();
|
||||
double value = args[0].isFloatValue() ? args[0].floatValue : args[0].intvalue;
|
||||
v.floatValue = std::erfc(value);
|
||||
v.valueType = ValueFlow::Value::ValueType::FLOAT;
|
||||
return v;
|
||||
};
|
||||
functions["sqrt"] = [](const std::vector<ValueFlow::Value>& args) {
|
||||
if (args.size() != 1)
|
||||
return ValueFlow::Value::unknown();
|
||||
|
|
|
@ -64,6 +64,13 @@ int zerodiv_erf()
|
|||
return 42 / i;
|
||||
}
|
||||
|
||||
int zerodiv_erfc()
|
||||
{
|
||||
int i = std::erfc(42);
|
||||
// cppcheck-suppress zerodiv
|
||||
return 42 / i;
|
||||
}
|
||||
|
||||
int zerodiv_asin()
|
||||
{
|
||||
int i = std::asin(0);
|
||||
|
|
Loading…
Reference in New Issue