Skip to content

Commit 583bc8b

Browse files
Fix #11780 FN uninitvar with clock_settime() / Partial fix for #11617 FP constParameter (#8425)
1 parent 1ade97c commit 583bc8b

5 files changed

Lines changed: 35 additions & 6 deletions

File tree

cfg/gtk.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8761,7 +8761,7 @@
87618761
<function name="g_variant_builder_init">
87628762
<noreturn>false</noreturn>
87638763
<returnValue type="void"/>
8764-
<arg nr="1" direction="in">
8764+
<arg nr="1" direction="out">
87658765
<not-null/>
87668766
</arg>
87678767
<arg nr="2" direction="in">

cfg/std.cfg

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8751,15 +8751,15 @@ initializer list (7) string& replace (const_iterator i1, const_iterator i2, init
87518751
<use-retval/>
87528752
<leak-ignore/>
87538753
<noreturn>false</noreturn>
8754-
<arg nr="1" direction="in"/>
8754+
<arg nr="1" direction="in" indirect="0"/>
87558755
<container yields="start-iterator"/>
87568756
<returnValue type="iterator" container="1"/>
87578757
</function>
87588758
<function name="std::end,std::cend,std::rend,std::crend">
87598759
<use-retval/>
87608760
<leak-ignore/>
87618761
<noreturn>false</noreturn>
8762-
<arg nr="1" direction="in"/>
8762+
<arg nr="1" direction="in" indirect="0"/>
87638763
<container yields="end-iterator"/>
87648764
<returnValue type="iterator" container="1"/>
87658765
</function>

lib/astutils.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3468,6 +3468,9 @@ static ExprUsage getFunctionUsage(const Token* tok, int indirect, const Settings
34683468
const bool isuninitbad = settings.library.isuninitargbad(ftok, argnr + 1, indirect, &hasIndirect);
34693469
if (isuninitbad && (!addressOf || isnullbad))
34703470
return ExprUsage::Used;
3471+
const Library::ArgumentChecks::Direction argDirection = settings.library.getArgDirection(ftok, argnr + 1, indirect);
3472+
if (argDirection == Library::ArgumentChecks::Direction::DIR_IN)
3473+
return ExprUsage::Used;
34713474
}
34723475
return ExprUsage::Inconclusive;
34733476
}

test/cfg/posix.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1312,7 +1312,7 @@ void uninitvar(int fd)
13121312
pthread_mutex_t mutex, mutex1, mutex2, mutex3;
13131313
// cppcheck-suppress uninitvar
13141314
write(x1,"ab",2);
1315-
// TODO cppcheck-suppress uninitvar
1315+
// cppcheck-suppress uninitvar
13161316
write(fd,buf,2); // #6325
13171317
// cppcheck-suppress uninitvar
13181318
write(fd,"ab",x2);
@@ -1408,7 +1408,7 @@ void timet_h(const struct timespec* ptp1)
14081408
clock_settime(clk_id2, ptp1);
14091409

14101410
struct timespec tp;
1411-
// FIXME cppcheck-suppress uninitvar
1411+
// cppcheck-suppress uninitvar
14121412
clock_settime(CLOCK_REALTIME, &tp); // #6577 - false negative
14131413
// cppcheck-suppress uninitvar
14141414
clock_settime(clk_id3, &tp);

test/cfg/std.cpp

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5003,7 +5003,7 @@ void beginEnd()
50035003
//cppcheck-suppress ignoredReturnValue
50045004
std::crend(v);
50055005

5006-
// cppcheck-suppress constVariable
5006+
// TODO cppcheck-suppress constVariable
50075007
int arr[4];
50085008

50095009
//cppcheck-suppress ignoredReturnValue
@@ -5025,6 +5025,32 @@ void beginEnd()
50255025
std::crend(arr);
50265026
}
50275027

5028+
struct S_constParameter_std_begin { // #11617
5029+
int a[2];
5030+
};
5031+
5032+
struct T_constParameter_std_begin {
5033+
std::vector<int> v;
5034+
};
5035+
5036+
void f(S_constParameter_std_begin& s) {
5037+
std::for_each(std::begin(s.a), std::end(s.a), [](int& i) { ++i; });
5038+
}
5039+
5040+
// cppcheck-suppress constParameterReference - FP
5041+
void f(T_constParameter_std_begin& t) {
5042+
std::for_each(std::begin(t.v), std::end(t.v), [](int& i) { ++i; });
5043+
}
5044+
5045+
void g_constVariable_std_begin(int* p) { *p = 0; }
5046+
5047+
int f_constVariable_std_begin() {
5048+
int arr[1];
5049+
g_constVariable_std_begin(std::begin(arr));
5050+
*std::begin(arr) = 1;
5051+
return arr[0];
5052+
}
5053+
50285054
void smartPtr_get()
50295055
{
50305056
std::unique_ptr<int> p;

0 commit comments

Comments
 (0)