New check: Check for unused return values (#653)
This commit is contained in:
parent
b0c34390cd
commit
210294443e
142
cfg/std.cfg
142
cfg/std.cfg
|
@ -1,40 +1,42 @@
|
|||
<?xml version="1.0"?>
|
||||
<def>
|
||||
<function name="abort"><noreturn>true</noreturn></function>
|
||||
<function name="abs"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/><not-bool/></arg></function>
|
||||
<function name="acos"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="abs"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/><not-bool/></arg></function>
|
||||
<function name="acos"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="asctime">
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-uninit/></arg>
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="assert">
|
||||
<leak-ignore/>
|
||||
</function>
|
||||
<function name="asin"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="atan"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="atan2"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg><arg nr="2"><not-uninit/></arg></function>
|
||||
<function name="asin"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="atan"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="atan2"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg><arg nr="2"><not-uninit/></arg></function>
|
||||
<function name="atexit"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-null/></arg></function>
|
||||
<function name="atof"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="atoi"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="atol"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="atoll"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="calloc"><noreturn>false</noreturn><arg nr="1"><not-uninit/></arg><arg nr="2"><not-uninit/></arg></function>
|
||||
<function name="ceil"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="atof"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="atoi"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="atol"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="atoll"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="calloc"><use-retval/><noreturn>false</noreturn><arg nr="1"><not-uninit/></arg><arg nr="2"><not-uninit/></arg></function>
|
||||
<function name="ceil"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="clearerr">
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="clock"><noreturn>false</noreturn><leak-ignore/></function>
|
||||
<function name="cos"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="cosh"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="cos"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="cosh"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="ctime">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="difftime"><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg><arg nr="2"><not-uninit/></arg></function>
|
||||
<function name="difftime"><use-retval/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg><arg nr="2"><not-uninit/></arg></function>
|
||||
<function name="div">
|
||||
<pure/>
|
||||
<noreturn>false</noreturn>
|
||||
|
@ -43,18 +45,20 @@
|
|||
<arg nr="2"><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="exit"><noreturn>true</noreturn><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="exp"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="fabs"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="exp"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="fabs"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="fclose">
|
||||
<noreturn>false</noreturn>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="feof">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="ferror">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
|
@ -79,9 +83,10 @@
|
|||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="2"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="floor"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="fmod"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg><arg nr="2"><not-uninit/></arg></function>
|
||||
<function name="floor"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="fmod"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg><arg nr="2"><not-uninit/></arg></function>
|
||||
<function name="fopen">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="2"><not-null/><not-uninit/></arg>
|
||||
|
@ -201,6 +206,7 @@
|
|||
<arg nr="4"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="mblen">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-uninit/></arg>
|
||||
|
@ -251,32 +257,34 @@
|
|||
<arg nr="1"><not-uninit/></arg>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="getenv"><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-null/><not-uninit/></arg></function>
|
||||
<function name="getenv"><use-retval/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-null/><not-uninit/></arg></function>
|
||||
<function name="gets">
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/></arg>
|
||||
</function>
|
||||
<function name="gmtime">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="isalnum"> <pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isalpha"> <pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isblank"> <pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="iscntrl"> <pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isdigit"> <pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isgraph"> <pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="islower"> <pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isprint"> <pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="ispunct"> <pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isspace"> <pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isupper"> <pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isxdigit"><pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="labs"> <pure/><noreturn>false</noreturn><leak-ignore/> <arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="llabs"> <pure/><noreturn>false</noreturn><leak-ignore/> <arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="isalnum"> <use-retval/><pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isalpha"> <use-retval/><pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isblank"> <use-retval/><pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="iscntrl"> <use-retval/><pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isdigit"> <use-retval/><pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isgraph"> <use-retval/><pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="islower"> <use-retval/><pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isprint"> <use-retval/><pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="ispunct"> <use-retval/><pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isspace"> <use-retval/><pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isupper"> <use-retval/><pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="isxdigit"><use-retval/><pure/><noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="labs"> <use-retval/><pure/><noreturn>false</noreturn><leak-ignore/> <arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="llabs"> <use-retval/><pure/><noreturn>false</noreturn><leak-ignore/> <arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="ldexp">
|
||||
<use-retval/>
|
||||
<pure/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
|
@ -284,6 +292,7 @@
|
|||
<arg nr="2"><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="rand">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
</function>
|
||||
|
@ -311,17 +320,18 @@
|
|||
<leak-ignore/>
|
||||
<arg nr="1"><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="log"><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="log10"><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="log"><use-retval/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="log10"><use-retval/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="longjmp">
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-uninit/></arg>
|
||||
<arg nr="2"><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="malloc"><noreturn>false</noreturn><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="alloca"><noreturn>false</noreturn><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="malloc"><use-retval/><noreturn>false</noreturn><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="alloca"><use-retval/><noreturn>false</noreturn><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="memchr">
|
||||
<use-retval/>
|
||||
<pure/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
|
@ -330,6 +340,7 @@
|
|||
<arg nr="3"><not-bool/><valid>0:</valid></arg>
|
||||
</function>
|
||||
<function name="memcmp">
|
||||
<use-retval/>
|
||||
<pure/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
|
@ -364,6 +375,7 @@
|
|||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="modf">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-uninit/></arg>
|
||||
|
@ -375,6 +387,7 @@
|
|||
<arg nr="1"><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="pow">
|
||||
<use-retval/>
|
||||
<pure/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
|
@ -400,6 +413,7 @@
|
|||
<arg nr="any"><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="bsearch">
|
||||
<use-retval/>
|
||||
<pure/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
|
@ -459,7 +473,7 @@
|
|||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="round"><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="round"><use-retval/><pure/><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg></function>
|
||||
<function name="scanf">
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
|
@ -513,18 +527,21 @@
|
|||
<arg nr="2"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="strchr">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="2"><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="wcschr">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="2"><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="strcmp">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<pure/>
|
||||
<leak-ignore/>
|
||||
|
@ -532,6 +549,7 @@
|
|||
<arg nr="2"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="wcscmp">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<pure/>
|
||||
<leak-ignore/>
|
||||
|
@ -559,11 +577,13 @@
|
|||
<arg nr="4"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="strlen">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="wcslen">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
|
@ -590,6 +610,7 @@
|
|||
<arg nr="3"><not-bool/><valid>0:</valid></arg>
|
||||
</function>
|
||||
<function name="strncmp">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
|
@ -597,6 +618,7 @@
|
|||
<arg nr="3"><not-bool/><valid>0:</valid></arg>
|
||||
</function>
|
||||
<function name="wcsncmp">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
|
@ -604,18 +626,21 @@
|
|||
<arg nr="3"><not-bool/><valid>0:</valid></arg>
|
||||
</function>
|
||||
<function name="strstr">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="2"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="wcsstr">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="2"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="strspn">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
|
@ -636,28 +661,33 @@
|
|||
<arg nr="3"><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="wcsspn">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="2"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="strerror">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
</function>
|
||||
<function name="strcspn">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="2"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="wcscspn">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="2"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="wcspbrk">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
|
@ -671,24 +701,28 @@
|
|||
<arg nr="3"><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="strcoll">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="2"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="wcscoll">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="2"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="strrchr">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="2"><valid>0:255</valid></arg>
|
||||
</function>
|
||||
<function name="strbprk">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<pure/>
|
||||
|
@ -696,11 +730,13 @@
|
|||
<arg nr="2"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="wcsrchr">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="strtok">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<pure/>
|
||||
<leak-ignore/>
|
||||
|
@ -713,87 +749,101 @@
|
|||
</arg>
|
||||
</function>
|
||||
<function name="strtol">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="3"><valid>0,2:36</valid></arg>
|
||||
</function>
|
||||
<function name="strtof">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="strtod">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="strtold">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="strtoul">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="3"><valid>0,2:36</valid></arg>
|
||||
</function>
|
||||
<function name="strtoll">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="3"><valid>0,2:36</valid></arg>
|
||||
</function>
|
||||
<function name="strtoull">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/>
|
||||
</arg> <arg nr="3"><valid>0,2:36</valid></arg>
|
||||
</function>
|
||||
<function name="time"> <noreturn>false</noreturn> <leak-ignore/> </function>
|
||||
<function name="time"> <use-retval/> <noreturn>false</noreturn> <leak-ignore/> </function>
|
||||
<function name="tmpnam"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"></arg></function>
|
||||
<function name="tmpfile"> <noreturn>false</noreturn> </function>
|
||||
<function name="tolower"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="toupper"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="tmpfile"> <use-retval/> <noreturn>false</noreturn> </function>
|
||||
<function name="tolower"> <use-retval/> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="toupper"> <use-retval/> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><valid>0:255</valid></arg> </function>
|
||||
<function name="va_arg"> <noreturn>false</noreturn> <leak-ignore/> </function>
|
||||
<function name="va_copy"> <noreturn>false</noreturn> <leak-ignore/> </function>
|
||||
<function name="va_end"> <noreturn>false</noreturn> <leak-ignore/> </function>
|
||||
<function name="va_start"> <noreturn>false</noreturn> <leak-ignore/> </function>
|
||||
<function name="wcstof">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="wcstod">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="wcstold">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
</function>
|
||||
<function name="wcstol">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="3"><valid>0,2:36</valid></arg>
|
||||
</function>
|
||||
<function name="wcstoll">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="3"><valid>0,2:36</valid></arg>
|
||||
</function>
|
||||
<function name="wcstoul">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
<arg nr="3"><valid>0,2:36</valid></arg>
|
||||
</function>
|
||||
<function name="wcstoull">
|
||||
<use-retval/>
|
||||
<noreturn>false</noreturn>
|
||||
<leak-ignore/>
|
||||
<arg nr="1"><not-null/><not-uninit/></arg>
|
||||
|
|
|
@ -2740,3 +2740,31 @@ void CheckOther::varFuncNullUBError(const Token *tok)
|
|||
" return 0;\n"
|
||||
"}");
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Check for ignored return values.
|
||||
//---------------------------------------------------------------------------
|
||||
void CheckOther::checkReturnIgnoredReturnValue()
|
||||
{
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
const std::size_t functions = symbolDatabase->functionScopes.size();
|
||||
for (std::size_t i = 0; i < functions; ++i) {
|
||||
const Scope * scope = symbolDatabase->functionScopes[i];
|
||||
for (const Token* tok = scope->classStart; tok != scope->classEnd; tok = tok->next()) {
|
||||
if (!Token::Match(tok, "%var% ("))
|
||||
continue;
|
||||
|
||||
if (!tok->next()->astParent() && _settings->library.useretval.find(tok->str()) != _settings->library.useretval.end())
|
||||
ignoredReturnValueError(tok, tok->str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CheckOther::ignoredReturnValueError(const Token* tok, const std::string& function)
|
||||
{
|
||||
reportError(tok, Severity::warning, "ignoredReturnValue",
|
||||
"Return value of function " + function + "() is not used.", false);
|
||||
}
|
||||
|
|
|
@ -73,6 +73,7 @@ public:
|
|||
checkOther.checkVarFuncNullUB();
|
||||
checkOther.checkNanInArithmeticExpression();
|
||||
checkOther.checkCommaSeparatedReturn();
|
||||
checkOther.checkReturnIgnoredReturnValue();
|
||||
}
|
||||
|
||||
/** @brief Run checks against the simplified token list */
|
||||
|
@ -229,6 +230,9 @@ public:
|
|||
/** @brief %Check for using of comparison functions evaluating always to true or false. */
|
||||
void checkComparisonFunctionIsAlwaysTrueOrFalse();
|
||||
|
||||
/** @brief %Check for ignored return values. */
|
||||
void checkReturnIgnoredReturnValue();
|
||||
|
||||
private:
|
||||
// Error messages..
|
||||
void checkComparisonFunctionIsAlwaysTrueOrFalseError(const Token* tok, const std::string &strFunctionName, const std::string &varName, const bool result);
|
||||
|
@ -282,6 +286,7 @@ private:
|
|||
void incompleteArrayFillError(const Token* tok, const std::string& buffer, const std::string& function, bool boolean);
|
||||
void varFuncNullUBError(const Token *tok);
|
||||
void commaSeparatedReturnError(const Token *tok);
|
||||
void ignoredReturnValueError(const Token* tok, const std::string& function);
|
||||
|
||||
void getErrorMessages(ErrorLogger *errorLogger, const Settings *settings) const {
|
||||
CheckOther c(0, settings, errorLogger);
|
||||
|
@ -337,6 +342,7 @@ private:
|
|||
c.varFuncNullUBError(0);
|
||||
c.nanInArithmeticExpressionError(0);
|
||||
c.commaSeparatedReturnError(0);
|
||||
c.ignoredReturnValueError(0, "malloc");
|
||||
}
|
||||
|
||||
static std::string myName() {
|
||||
|
@ -361,6 +367,7 @@ private:
|
|||
// warning
|
||||
"* either division by zero or useless condition\n"
|
||||
"* memset() with a value out of range as the 2nd parameter\n"
|
||||
"* return value of certain functions not used\n"
|
||||
|
||||
// performance
|
||||
"* redundant data copying for const variable\n"
|
||||
|
|
|
@ -163,6 +163,8 @@ Library::Error Library::load(const tinyxml2::XMLDocument &doc)
|
|||
functionpure.insert(name); // a constant function is pure
|
||||
} else if (functionnodename == "leak-ignore")
|
||||
leakignore.insert(name);
|
||||
else if (functionnodename == "use-retval")
|
||||
useretval.insert(name);
|
||||
else if (functionnodename == "arg" && functionnode->Attribute("nr") != nullptr) {
|
||||
const bool bAnyArg = strcmp(functionnode->Attribute("nr"),"any")==0;
|
||||
const int nr = (bAnyArg) ? -1 : atoi(functionnode->Attribute("nr"));
|
||||
|
|
|
@ -123,6 +123,7 @@ public:
|
|||
std::set<std::string> leakignore;
|
||||
std::set<std::string> functionconst;
|
||||
std::set<std::string> functionpure;
|
||||
std::set<std::string> useretval;
|
||||
|
||||
bool isnoreturn(const std::string &name) const {
|
||||
std::map<std::string, bool>::const_iterator it = _noreturn.find(name);
|
||||
|
|
|
@ -33,9 +33,11 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
|
||||
Settings settings_std;
|
||||
|
||||
void run() {
|
||||
LOAD_LIB_2(settings_std.library, "std.cfg");
|
||||
|
||||
TEST_CASE(emptyBrackets);
|
||||
|
||||
TEST_CASE(zeroDiv1);
|
||||
|
@ -167,7 +169,9 @@ private:
|
|||
|
||||
TEST_CASE(checkComparisonFunctionIsAlwaysTrueOrFalse);
|
||||
|
||||
TEST_CASE(integerOverflow) // #5895
|
||||
TEST_CASE(integerOverflow); // #5895
|
||||
|
||||
TEST_CASE(testReturnIgnoredReturnValue);
|
||||
}
|
||||
|
||||
void check(const char code[], const char *filename = nullptr, bool experimental = false, bool inconclusive = true, bool posix = false, bool runSimpleChecks=true, Settings* settings = 0) {
|
||||
|
@ -4174,14 +4178,10 @@ private:
|
|||
"}");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
{
|
||||
Settings settings;
|
||||
LOAD_LIB_2(settings.library, "std.cfg");
|
||||
check("void foo() {\n"
|
||||
" if ((strcmp(a, b) == 0) || (strcmp(a, b) == 0)) {}\n"
|
||||
"}", "test.cpp", false, false, false, true, &settings);
|
||||
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:2]: (style) Same expression on both sides of '||'.\n", errout.str());
|
||||
}
|
||||
check("void foo() {\n"
|
||||
" if ((strcmp(a, b) == 0) || (strcmp(a, b) == 0)) {}\n"
|
||||
"}", "test.cpp", false, false, false, true, &settings_std);
|
||||
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:2]: (style) Same expression on both sides of '||'.\n", errout.str());
|
||||
|
||||
check("void GetValue() { return rand(); }\n"
|
||||
"void foo() {\n"
|
||||
|
@ -4785,14 +4785,12 @@ private:
|
|||
"}");
|
||||
ASSERT_EQUALS("[test.cpp:4]: (error) Memory pointed to by 'p' is freed twice.\n", errout.str());
|
||||
|
||||
Settings settings;
|
||||
LOAD_LIB_2(settings.library, "std.cfg");
|
||||
check(
|
||||
"void foo(char *p) {\n"
|
||||
" free(p);\n"
|
||||
" printf(\"Freed memory at location %x\", p);\n"
|
||||
" free(p);\n"
|
||||
"}", nullptr, false, false, false, true, &settings);
|
||||
"}", nullptr, false, false, false, true, &settings_std);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (error) Memory pointed to by 'p' is freed twice.\n", errout.str());
|
||||
|
||||
check(
|
||||
|
@ -6260,6 +6258,28 @@ private:
|
|||
"}\n");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
void testReturnIgnoredReturnValue() {
|
||||
check("void foo() {\n"
|
||||
" strcmp(a, b);\n"
|
||||
"}", "test.cpp", false, false, false, true, &settings_std);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (warning) Return value of function strcmp() is not used.\n", errout.str());
|
||||
|
||||
check("void foo() {\n"
|
||||
" return strcmp(a, b);\n"
|
||||
"}", "test.cpp", false, false, false, true, &settings_std);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo() {\n"
|
||||
" if(strcmp(a, b));\n"
|
||||
"}", "test.cpp", false, false, false, true, &settings_std);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo() {\n"
|
||||
" bool b = strcmp(a, b);\n"
|
||||
"}", "test.cpp", false, false, false, true, &settings_std);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
};
|
||||
|
||||
REGISTER_TEST(TestOther)
|
||||
|
|
Loading…
Reference in New Issue