<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/127572>127572</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang-cl] access violation at runtime with clang-cl 20.1.0-rc2 using /std:c++latest
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Mishura4
</td>
</tr>
</table>
<pre>
```c++
// test.hpp
#include <vector>
#include <string>
extern const std::vector<std::string>& my_vec;
void init();
```
```c++
// test.cpp
#include "test.hpp"
namespace
{
std::vector<std::string> impl;
}
const std::vector<std::string>& my_vec = impl;
void init() {
std::vector<std::string> vec_ref;
vec.push_back("hello");
vec.push_back("world!");
impl = std::move(vec);
}
```
```c++
// main.cpp
#include "test.hpp"
#include <iostream>
int main()
{
init();
for (auto& str : vec_ref)
{
std::cout << str << std::endl;
}
}
```
Compile with `clang-cl test.cpp main.cpp /std:c++latest`. For some reason either `vec_ref` or `impl` seems to become corrupted and the for loop seems to read garbage data. In the project I initially encountered this, the program crashed with an access violation.
The same code works without an issue with `/std:c++20`, the same code works without an issue on 19.1.0 even with `/std:c++latest`.
clang-cl was compiled with:
```bat
set CXX=clang-cl
set CC=clang-cl
set VECTORIZE="-march=native -mtune=native"
cmake llvm/ -B build ^
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb" ^
-DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx" ^
-DLLVM_TARGETS_TO_BUILD=Native ^
-DLLVM_PARALLEL_COMPILE_JOBS=30 ^
-DLLVM_PARALLEL_LINK_JOBS=3 ^
-DLLVM_ENABLE_LLD=on ^
-DCLANG_DEFAULT_LINKER=lld ^
-DCMAKE_BUILD_TYPE=Release ^
-DCLANG_ENABLE_BOOTSTRAP=On ^
-DLLVM_HOST_TRIPLE=x86_64-pc-windows-msvc ^
-DLLVM_ENABLE_LTO=Thin ^
-DLLVM_ENABLE_EH=ON ^
-DLLVM_ENABLE_RTTI=ON ^
-DLLVM_ENABLE_LIBXML2=ON ^
-DCMAKE_CXX_STANDARD=20 ^
-DBOOTSTRAP_CMAKE_CXX_FLAGS=%VECTORIZE% ^
-DBOOTSTRAP_CMAKE_C_FLAGS=%VECTORIZE% ^
-DBOOTSTRAP_CMAKE_EXE_LINKER_FLAGS=%VECTORIZE% ^
-DRUNTIMES_x86_64-pc-windows-msvc_LLVM_ENABLE_EH=ON ^
-DRUNTIMES_x86_64-pc-windows-msvc_LLVM_ENABLE_RTTI=ON ^
-DRUNTIMES_x86_64-pc-windows-msvc_LLVM_ENABLE_LIBXML2=ON ^
-DCMAKE_MT=mt.exe ^
-G Ninja
ninja -C build
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVtFy2joQ_RrxooExckzggQeDTUrrQIa4ndz74hHyBquVJUaSIf37O7KNSSFp05thMvZ69-zZs6u1qTF8JwGmKJihIOrRyhZKT--5KSpNb3pblf-copHX_BgiM_fzQkQWiCywBWMHxX7vLM7oc8lElQNG_vwAzCqN_PjqibGay137xAvhxYKWmClpLDY2R36I_PAUPu8s5zAywuXP7AAM-bMG46B4jrnkFpExIpPWfuLd0vt9Gawp4xVTQrr6CGkwJC3B7CkDd3vbJv8IZ8zLvejootuoufg_RWPkR7_CXVSPG2YfgsUHYJmG5w4LY-xsg31limxL2Y8akxQghHIynMR9y-motMgRGb72ayEd35p4R6FUB0Bk7LrY-TayfLRtJeXyY237df64MlYDLbsJ5NLWYO3wnFpb876YKWd7VhojMqaVVa4rxmqM_LBTskZwfmcU99cVzlRlHQ3kz9vY9rJ9DjJvW4tbQd6SZa7KPReAj9wW2KkjqNz1meiGuZMHI7JowFsFBXU-aOQN8EJpbFQJWAM1SmLgtgDt8E7VjDysakM9cSMPG4DSYKvwFpiLZErram8hx1Tm2BZQ6yOU2p9dNdAc76je0h3gnFo6wEtZ--61-g7M4mWtNKdC_MQgmaqkBQ0OjxtE5iffnaYlZpqaAvKmdCoxZQyMwQeuBLVcyUGjUFoANrRmmAM-Kv3D1CFOfioxN6Y6y3epEamVbhP_EUVJPJwMhgMPwwHku6Bn4dvTf-rZkRrMmoY2ZblJeNXyLbVuz4DF86cn5EenwJNxfm37Fs_T9Wb5b4z8CBHSL6lmBfIjSS0_AO6XtpLQ3XcnhZX0B2AhDqU7Yf0Z3lZc5BgF7qjgfpQk3-6zeBXOkjh72Kw_x_P0sclQ50f-rOFhlRKmDy9WU-TPhMib_1tEyNtgm6-rdHkfn8AaMXRfWxfIt-zl5To0DTd3cfqYpets9nWZRMiPVk15rd_J8SHchEkSJ9l8ff-wTOLs83rmMvneBWLnmCxXXzqvS7iWclJnVPKMMU_C1V0WxYvwa5LWGPEG-ZE4K-ic7sMvcUM4S_95cA3agABq4BKozTNbr9PHdBM-ID9ay0syn9aPaZZulg-JQ3oZj7LRTX_P-kcuc3U0_dIc2HsFpGvkR2nBr0Bbh_iTS7l6p2Npuvzl8SX6cvZ0n5ALhKb6-dNT9piGqyjcOA2J9wqjKzc7-y6S8K4ZjeA82CQ4w14F_X1I_BS3Lftz7Glas7f1zn4r4t8EX4n8d-G_68F9ivyotAN4eXVe7vCKy--0_dpxl7g_b5bA64XUy6d-PvEntAfT4a0_GY-G3mjSK6aMMhaMJ_SWkoDRLQFg9BloMMxvfeI9Bz0-JR4JPDIce6ObGzIZbOn4-QYCGE_G_tAbeujGg5JyMXBLaKD0rlfv2OmQ3Aa3pCfoFoSpv1cJkXBsNrDbX0HU01MX1N9WO4NuPMGNNWcYy62oP3S7TRlEV-8OTC3WlbS8bN8N3Y4mnlvwfc0IrgyXu3deq71Ki2lh7d64HV5_qOy4LartgCm3U9vVWvNsX36ILOoiDCKLtsrDlPwXAAD__yiMZGE">