<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/134515>134515</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[msan] Runtime false positives with iostream, msan, and -O0
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
steveWang
</td>
</tr>
</table>
<pre>
Running clang version 19.1.7 obtained from Arch Linux repositories, with libc++ 19.1.7-1 and libstdc++ 14.2.1, although this also reproduces on Compiler Explorer with newer versions of clang.
I was exploring the conditions in which MSAN / ASAN / hardened builds detect buffer overruns (initially exploring with std::array which stores its data inline), and ran into the following issues with printing argc:
```c++
// $ clang++ -fsanitize=memory
#include <iostream>
#include <vector>
int main(int argc, char** argv) {
std::vector<int> vec = {1, 2, 3, 4};
std::cout << argc << std::endl;
return 0;
}
```
https://godbolt.org/z/ovxsG8e9d
(I was initially modifying vec[argc], but removed that when constructing a reproducer to make sure that wasn't a confounding factor.)
In short: with libc++, this fails when trying to format argc, while with libstdc++, this fails when printing _any_ string.
In the latter case, I've gotten this down to the following minimum reproducer on Compiler Explorer, but it doesn't reproduce locally:
```c++
// $ clang++ -stdlib=libc++ -fsanitize=memory
#include <iostream>
int main(int argc, char** argv) {
std::cout << "hello world\n";
return 0;
}
```
https://godbolt.org/z/3Ea9coP3E
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVU9v47YT_TT0ZRBDJq1YPvig2PEPC_z6B9tDjwtKHFlsKY5BjuR4P31BSbaDbIAWaIFAkSm-mTePb4Y6RnvyiDuRv4j8sNA9txR2kXHA37U_LSoy193X3nvrT1A77U8wYIiWPKy2y9VyA1Sxth4NNIE6KEPdwv-t798g4JmiZQoWo5B7uFhuwdmqFvJFyJcZ_7QC7U1aj2zun9ZLuVwlkHbcUn9qgVsbQbtIKW4g09cYgTzsqTtbhwFe386OAoYpj8cLhhvVCNRM5JciK0VWfoGLjoAjIhXGLUJN3lged1sPl9bWLfz0W_kzCHmE8vbS6mAwVVv11pkIBhlrhqpvGgxAA4bQ-whCFtZbttq567s8I7XIRqhSqFKHoK9zpsgUMILlCEazBuud9SjkdhTBGwjag_VMI9eGnKNLimhj7DFOgc_Bek6LOpzqlGKsVTxn098sblqSx1SLkOtJlVn1pybqRPo7CnXosKNwHTcr62vXGwSh9pYiB9SdUK8_fBuwZgrzl6y0nqHT1o9a8ERK7qFudRCyFLJMS4OQWxCbxAoeytwi7a1noV5hwBqEOqSNoytkeqj0WIvNQagP8Jp6ToSE2o9pb-_3DeiNu6ECch88ZNPvFO6dZlMlLfM5JuSo24lMRY6XFE5CHr8LeaThLf6vwK2ZFZfFZLCHBToytrnasXtqkb-MYuSHVEHVMwTsaEAD3GqGS4s-uTFy6OvpPB-eD8AEnf4TIfYBZ4COXsgNg06whnpvEqrRScRl8tBkeg-xpcBClR97MfEYG6zR1sWJAYeRLxM0FDr9OMBLax3eIzy69rMgd0t-0_76DSKnNlje-SQvO82MAWodMUX4IuRmQDgRcyKR4hm6ePjB-Z31tuu799J8Ng5uElsGQzgLdceAozod0Nwt_7xVIhtnK6EO7wbaJ_0Df9dA_6pN3vtcSNmicwQXCs6IfO-FlP-hx9Wr3tb0q3pdmJ0yW7XVC9ytNmtVbDfZc7Fod-us2TZZVii1Vbmq143KCp0V61zKelMpubA7mck8W2e5VPkqK5aNbJQxz8WmWm2KwhixzrDT1i2dG7qUezGOt91KrfNVvnC6QhfHq0pKj5dp-KUy88Mi7BLoqepPUawzZyPHRxi27MY7rovai_wAX3vPtkNotIsI4z1lh9scvR-R3MMImEfw0y_Zog9u90Eqy21fLWvqhDymjPO_p3OgP7BmIY_TkBbyOBcy7ORfAQAA__-LUF4j">