<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/72391>72391</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang does not warn about access to uninitialized data
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
fekir
</td>
</tr>
</table>
<pre>
Consider following snippet of code
----
struct data{
int i;
};
data foo();
void bar(const data& d);
void bar1(){
const data d = [&]{bar(d); return foo();}();
}
void bar2(){
data d = (bar(d), void(), foo());
}
void bar3(){
data d;
bar(d);
d = foo();
}
----
bar1, bar2, bar3 are equivalent, but only in bar2 clang warns about a potential potentially access to uninitialized data ("-Wuninitialized-const-reference").
In fact, clang does not generally warn when accessing an unitialized member variable
----
void bar5(){
data d;
++d.i;
bar(d);
}
----
or even an integral value:
----
void bar6(){
int i = [&]{ ++i; bar(i); return 42;}();
}
----
Example on compiler explorer: https://godbolt.org/z/4GKnqGcdz
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMlM2SozgMx5_GXFSkQHyFA4dOspna2gfYs8EK8a5jM7ZJT_fTbxnI50xn5yJciqz_T5YU7pzsNVHDig0rdhEf_dHY5kD_Shu1Rnw0W6OdFGThYJQy71L34LQcBvJgDtAZQSzZseRttnEcx_PJeTt2HgT3nFWbS0wttQfJsouj2l3PIRIOxjBcM6yv7rORAlpuGa47o92SEUsQ91GPsemS46ILt5sggGU7COViyYodqzZz8iUdWPKj1Y8g1e4JKnh-oYvPuveKuL4Twi2ES0s8bu_0_l8me5YBWJSuN-GhqLuwieXnV74q3Ro42_k1t0t10zcDbgno-yjPXJH2k3v0YLT6AKmnUOgU1z28c6sd8NaMHjgMxpP2kqvbSX0A7zpyDryBUUstg1d-kpgrmjAx_vvhp3hqZ2zpQJZ0RwyRYb26x57tnxoOvJsAZx5hyIE2HnrSZCf5gAjvR9ILSBhwrgPLleREp5YsnLmVvFVfzPulOcVvNAcAGG4YbsRKvmzZl20xFugcmDVI7am3XMGZq5FY9vaar_wF37SUP-3FwhgIFzb5uCM5vl6OZ-jZ_vGDnwZFYDR05jRIRRbox6CMJcuyNzh6P7hQBu4Z7nsjWqP8ytie4f6T4T7_9pf-_q0Tn5FoMlFnNY-oSaskSYqyTtLo2IgW26LtsM3rDOu6KERVrssizykvq4NIItlgglmapkWaJ2meroi3dcIr6kSdFWXHWZ7QiUu1Uup8CtqRdG6kpsKsTiPFW1Ju-stEnAYrTGCxi2wT4uN27B3LEyWdd7cMXnpFzfZxDqfpW_bjxR5Eo1XN08NIfxzbVWdODPdBZPnEgzX_UBj6_cTsGO4n7P8CAAD__9VksPU">