<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/101635>101635</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] False positive clang-analyzer-core.NonNullParamChecker with guard variable and two containers
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
chrchr-github
</td>
</tr>
</table>
<pre>
~~~c++
#include <vector>
int f(const std::vector<int>& v) {
const int* p = nullptr;
bool b = false;
std::vector<int> w;
for (const auto& i : v) {
if (!b) {
p = &i;
b = true;
}
else
w.emplace_back(i);
}
int x = 0;
for (auto j : w) {
x = std::max(*p, j);
}
return x;
}
~~~
`p` is assigned before any element is placed into `w`.
https://godbolt.org/z/WxPv13qz9
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8U8GO6jgQ_JrOpQVy2hCSQw482Byf3m2PK9txiGdMnLUdYObAt68cmIHZnX2SBZKrqruq4xYhmMOgdQ3rH7DeZ2KKvfO16r3q_eJgYj_JTLr2rb5erwroRzpsD2wLxM2g7NRqBL47aRWdB_7HHZx_zRCxAyqVG0LEEFvgW-DbD-7ODDEpqMATUIWw-SjNqpskEWiLIwLf4zBZO0YP_MGSzlmUM9oJG_Qz9n_t8PzM6pzHT4diii65MQh8-19PwCrTJTZQLr8BgVU3p0CFeW5yOzef0U8Pmwib_TNLpwxfVeelPo5WKP2XFOoVqDRA1ZfiTyXSwC9zG_ZNyBQPX-Zs52_s34SfYzuKyxx1OwLt8OU3Xb2Okx_w8sA_wOv1er8p2AgFQxPw_uJalLpzXqMY3lBbfdRDTPCctU1f3iEU7AwFW95q9DGOIXmjBqg5uFY6G5fOH4Cad6Dmz8uvU87_fq-ytuZtxSuR6TrfEK3LTcl51tdtXsiW-JqtOimFViV1PNfrVZkzVmlWZqYmRitWMmIl3-R8WXAlyraTK8a02PACVkwfhbFLa0_H1DszIUy6zlle8HVmhdQ2zLtEpKwYDkCU1srXSbCQ0yHAilkTYniUiCbaeQFvivUem_SYcXTBRHPSON8vxCDs27v2C-W8Xv50w8_J2l_Ci-Ou1-pVezyb2ONhEr7Fk_BGSJvG22I8O1RuiMIM2ods8rb-1zDnPV8qdwRqkq_732L07kWrCNTMOQNQc496qumfAAAA__9-vTeI">