<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/98803>98803</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
CSA (Clang Static Analyzer) incorrectly treat as a return for calling of noreturn functions.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
farta1986
</td>
</tr>
</table>
<pre>
When we're calling a noreturn function (both C++11 [[noreturn]] attribute and GNU C extension __attribute__((__noreturn__)) repro this issue), we mean this is an exit point of the entire program, not just this function call. However, it looks like CSA treat it as an end of current function call.
Consider the following C++ code:
`
[[noreturn]]void crash();
void set_value(int* a, bool flag)
{
if (!flag)
crash();
*a = 10;
}
int foo(bool flag)
{
int a;
set_value(&a, flag);
return a;
}
`
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8U81u2zwQfBrqsohBUbIsHXTwD_x9p16CokeDopYSE5o0yJWd9OkLynbitkF9sARyZ3ZnNCtjNINDbNlyw5a7TE40-tBqGUjmTV1lne_f2x8jOrggE6uAoKS1xg0gwfmANAUHenKKjHfARN15GmHLxIaJTZ7DzLu5V7Llji13IImC6SZCkK6H_759hy3gG6GLieRw-Lg_HJiomagPhztDOmmYaCDgKXig0UQwMU44H2_hgnBE6e4XIB3gmyE4eeMIvAYaEdCRCQin4IcgjwnmPMHLFOmK-9CTtC7gf3_BM4ZUZwis968RrHlF2D6vgQJKSufy2sz1qYuaQkBHfzAxvmN8ff3fehdNj2EeSHtr_SW5enMOlO-RFetHBKv47eULT8_e9KCCjOPsWMOKzSN2vo5Ih7O0yavaOGJiDTKJ6ry3oK0cEu4KWt3QAABGw8yZ_1YCt99XPYGJtQRW7CDnn4Osdo8Tpc-hvZ8T8-_2jkB-Uj-KYKKaBdzBxQPsFk35Rf-KZ31b9E3RyAzbfCV4U9YV59nYCp1XRVNVja76nudC42pV5UrkfdU1uiwz0wouSr7KS97kVckXtVBL1Ze65KqskCMrOR6lsQtrz8eFD0M2x7Nt6poXmZUd2jhvmxDKSjcwIdLihTbVP3XTEFnJrYkUPxnIkMU2pY2JeptQ8EySjIK1k_b9Z8pmA8YpHwIqsu-3VKZI3o3QPnysrtd_725cZFOw7Uh0iil4Ys_EfjA0Tt1C-SMT-zTO7fF0Cv4FFTGxn9VFJvZXgedW_AoAAP__LEhStA">