<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/67834>67834</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Built-in analysis fails to converge on simple loops
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:dataflow
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ymand
</td>
</tr>
</table>
<pre>
A number of (likely-related) simple loops cause the analysis to fail to converge. Below are a series of examples reduced from real code. I suspect they are all the same problem:
```
TEST(PointerNullabilityTest, NonConvergeBools1) {
EXPECT_TRUE(checkDiagnostics(R"cc(
bool cond();
void target() {
bool a = false;
bool b = cond();
while (!a || !b) {
if (!cond()) return;
if (cond()) {
if (a) return;
a = cond();
} else {
if (b) return;
b = true;
}
}
}
)cc"));
}
TEST(PointerNullabilityTest, NonConvergeBools2) {
EXPECT_TRUE(checkDiagnostics(R"cc(
bool cond();
void target() {
bool c = false;
while (cond() || cond()) {
c = (3 == 4);
}
}
)cc"));
}
TEST(PointerNullabilityTest, NonConvergeBools3) {
EXPECT_TRUE(checkDiagnostics(R"cc(
bool cond();
void target() {
if (cond())
;
while (cond() || cond())
;
}
)cc"));
}
TEST(PointerNullabilityTest, NonConvergeBools4) {
EXPECT_TRUE(checkDiagnostics(R"cc(
bool cond();
void target(int m, int n, bool b) {
bool g = m == 0 ;
while (cond() || cond() || g) {
bool c = m == 0 ;
g = false;
}
}
)cc"));
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVluPszYQ_TXmZZSIDJfAAw-bm9SXT5-2qdS3ysBA3DU4ss1u8-8rQ8hlN7RSpK0aRWAYzznjwzEMN0bULVHGohWLNh7v7EHp7NTwtvRyVZ6yF2i7JicNqgKGiRRvJE8zTZJbKhmmYERzlARSqaOBgneGwB4IeMvlyQgDVkHFhXTnQrXvpGuaw4qk-gCuCTgY0oKMw6e_uMMyoKnsCiqh0qoBTVxCoUqawy9gOnOkwjqK05AvZc9neENw1CqX1LDghfkb5o_H2D__-8v99tc9w-SnEq0l_aOTkudCCnvak7EM1_BDtetzpSulpFm4ZbLlakgH2P7-c7ve_7F__W3LMCkOVLxtBK9bZawoDMPklSEWBcNkzADIlXKLaEt3F1MWrK6xdyVKsFzXZIfoLdklmQMLNlBxaegu-xzO-_AEA8DHQUiCPrTgwJZrtlwDw0X-gA5AVOepN3iYgibb6faKPEy7n_MFa0TjjxAuPz5ZPltugKShaeT8H5EHYazuPssGDvpKcg3dXDBM3YPEYXEXgMuMJx2F_wtHFZOOurjlij965l-e9oDJMAncwI3Dr2acUPubxA7uC_3PtX6wSz7Z8DnxR9Vus7_fuuE3WndKVNFaaFwxbtC6wfDKmzJ23ZuwGR3oP6XweKd-6PObDfSQp57cW0-_asavmFdmQZkGKfcoW8Rp7PtxEPneIYuqRVRWCwzKaBlHechjitMwrYIiisIqQE9k6GPgp5gu4ggxnYdVmhMGFS3jMPHLkIU-NVzIuZTvzVzp2hPGdJTFyyQIPclzkqZvFRALyduaBS8lt7yS6sNVHm08nbnUWd7VhoW-FMaaK5gVVlK26oS0M9FeWwTXH5jbBgFUe9dXeJ2W2cHao3Gfdtwx3NXCHrp8XqiG4c4xnE-zo1Z_UmEZ7vraDcNdX_7fAQAA__-gkGpD">