<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/117561>117561</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Address sanitizer reporting alloc-dealloc-mismatch on std::runtime_error when using libc++
</td>
</tr>
<tr>
<th>Labels</th>
<td>
libc++
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Harry-George
</td>
</tr>
</table>
<pre>
Running the following code
```c++
#include <stdexcept>
int main() {
std::runtime_error("Badger");
return 0;
}
```
When run with `clang++-19 -fsanitize=address -stdlib=libc++ /tmp/test.cpp` I get the following error
```
0.217 =================================================================
0.217 ==7==ERROR: AddressSanitizer: alloc-dealloc-mismatch (operator new vs free) on 0x503000000040
0.238 #0 0x607718cc3efa in free (/a.out+0xcbefa) (BuildId: 377d2fc5145128bc6bf8483523e5bfd9f3f9fce2)
0.238 #1 0x7af1b7ec1eb4 in std::range_error::~range_error() (/lib/x86_64-linux-gnu/libc++abi.so.1+0x28eb4) (BuildId: 2f464e339fcd8e0b207a4b1fe2f39d4cb76b393e)
0.238 #2 0x607718d07d39 in main (/a.out+0x10fd39) (BuildId: 377d2fc5145128bc6bf8483523e5bfd9f3f9fce2)
0.238 #3 0x7af1b7b771c9 (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId: 6d64b17fbac799e68da7ebd9985ddf9b5cb375e6)
0.238 #4 0x7af1b7b7728a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId: 6d64b17fbac799e68da7ebd9985ddf9b5cb375e6)
0.238 #5 0x607718c24364 in _start (/a.out+0x2c364) (BuildId: 377d2fc5145128bc6bf8483523e5bfd9f3f9fce2)
0.238
0.238 0x503000000040 is located 0 bytes inside of 30-byte region [0x503000000040,0x50300000005e)
0.238 allocated by thread T0 here:
0.239 #0 0x607718d057f1 in operator new(unsigned long) (/a.out+0x10d7f1) (BuildId: 377d2fc5145128bc6bf8483523e5bfd9f3f9fce2)
0.239 #1 0x7af1b7f28bac in std::runtime_error::runtime_error(char const*) (/lib/x86_64-linux-gnu/libc++.so.1+0x53bac) (BuildId: b31db19d06890cde77ca90e984eeb93c5a896573)
0.239 #2 0x607718d07d30 in main (/a.out+0x10fd30) (BuildId: 377d2fc5145128bc6bf8483523e5bfd9f3f9fce2)
0.239 #3 0x7af1b7b771c9 (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId: 6d64b17fbac799e68da7ebd9985ddf9b5cb375e6)
0.239 #4 0x7af1b7b7728a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId: 6d64b17fbac799e68da7ebd9985ddf9b5cb375e6)
0.239 #5 0x607718c24364 in _start (/a.out+0x2c364) (BuildId: 377d2fc5145128bc6bf8483523e5bfd9f3f9fce2)
0.239
0.239 SUMMARY: AddressSanitizer: alloc-dealloc-mismatch (/a.out+0xcbefa) (BuildId: 377d2fc5145128bc6bf8483523e5bfd9f3f9fce2) in free
0.239 ==7==HINT: if you don't care about these errors you may set ASAN_OPTIONS=alloc_dealloc_mismatch=0
0.239 ==7==ABORTING
```
I have written a reproducer using the following docker file
```Dockerfile
FROM ubuntu:24.04 AS adapdix_base
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get install -y --no-install-recommends \
software-properties-common \
gpg \
gnupg \
wget
ARG CLANG_VERSION=19
RUN wget https://apt.llvm.org/llvm.sh --no-check-certificate
RUN chmod +x llvm.sh
RUN ./llvm.sh $CLANG_VERSION
RUN apt-get install -y --no-install-recommends \
libc++-$CLANG_VERSION-dev \
libc++abi-$CLANG_VERSION-dev
RUN cat <<EOF > /tmp/test.cpp
#include <stdexcept>
int main() {
std::runtime_error("Error");
return 0;
}
EOF
RUN clang++-$CLANG_VERSION -fsanitize=address -stdlib=libc++ /tmp/test.cpp
RUN ./a.out
```
I have verified it fails on ubuntu 22.04 clang 13, 15, 17, 19 and 20
And ubuntu 24.04 on clang 19 and 20
The host machine was running ubuntu 22.04 on x64
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUWFtv67gR_jX0y0AGRer64Acnjs8G6HEKJ9uiTwZFjmx2ZcogqcTpQ397QUmJ7cSn2D17gPYYgi4UL998mvk4Y-Gc3hrEGUlvSLqYiM7vWjv7RVj7Gn3B1m5xUrXqdbbujNFmC36HULdN076EJ9kqJHQejowOhyTsJhx0ThjXRjadQiD81nmFR4kHT_jdMEQbD3uhDWEFYSWQvB9ES-cV4XPC57YzXu9xg9a2tu_FboTaoiWMEVYSPg6w6DtrgI4N-eIcz7DW33dowHYGXrTfQYDZCLMdoEZxCVHthNFe_wsJXwilLDoHkfOq0RXhi0ZXo11A2NLvD-GMzk_l4UAyCvewRf-BmwH1JTmEzumUxTkQvvjZD_hgTD5c7tbrhzXhc5gPLD6OvNrQJpqmlZHC4brXbi-83AFhRXtAK3xrweALPDuoLWLwitYAPaaU0-GXjBTyAsKPME6BHjOa53EhJcdagDb9YOgdZimmbecJu6FHWWEtekdjxU2nG3Uf3Ax4nitWyzRO0pgVlcyqukgKnjKOaVWrsuZ1WUvsHe7D0jHQYy7quMpRxlglYemT8wqzfXPdvuHf5y2jy_cQg4ux5bHINlkSNdp0x2hruuHF6HWi0lPXTuPeEFZglXw2hNVJliDnZS1VgbRiNBdJFdfIal6qRFZ5VvGS4xVD2DuHiuaKl8GQEJmfOIxprXj5Q0nk7yRWeR7L30VK4CIbuBCxvIInU1lSxXldCZmXJWaFEjlWqiyLVKm6rFJZ8TzF7Aqe5BwPK3p_2mzCqhvnhfWbM2J-N0hWXPG8PwEyPTk9S3jWe94A79MnY5JnV7zle77Y-81lRIJ20LRSeFRAoXr16EAbpxVCWwOnUWgCi1vdGiDpzYd4ZrfnDemFf_Y60U9cvYLfWRQKnijs0GIIqqFbeSkDiqZ5HQdGzjWFsKIz_V6noGmD9JdXvFvldfwjuCo_S0TNikrIS4m42N-ubnlyJyzI1jhP2PwPScZJL1JeCfnZqorHqopLRbOipFJhnktRUiyLBLEquUxFUWZpzq9Y9UEv6H_XC_pDGf0_0YvyZ9CL8n-pFyW83zz--vXrfP2PP54V_OAN_C03OCE8z1x-uV89hQl1Da9tB6o1hOUepLAIomq7PsFzOCR2ru-zF6_g0MP8cb7aPPz16f5h9RgSyGDIZjRo82YQ4Qt6feX5zcP66X715XPeeg878YzwYrX3aECAxYNtVSfRQuc-J-Sqlb-hhVo3H_PyRf9mfLFcP3yFruqM7wifs2RKE5g_glDioPRxUwk3Dp-vv8Di7uZ-vtos1w-rp7tVwGtao41HK6TXz6Hn-tcViIOPQhbcHZTwHxu1cV40DUSvEEWmjcbnyKJs93s0ygFJb8f8v639i7AYHWxQcK_RRaFXv3uEPsGpt4ft-ZPpLp5fwponC27_Ml992fztbv14_7AifBGXw7uAsO-68_7gggKzZXC5g582zfN-2tptCM5w63YDcLlD-VskA6xay5OhcrdvFRB2c4Sx__hiejYDYckllO8kCU4yH32cM1L4fMbERQ55tfOJCil8qNQIv717WALhd1eKne8s67616fVF3d1we6rpAvBrRd3dw_IM7VkF99GuP1XPnb7boD2XQTlG5DNaXWtUoD3UQjcuVCpDRAFjIZ56fBBzwm4hTvtz3p9LEEYBC5PNjXof1Adha97GnfUidP60Q9i1LjArd9ogvAgX6tm-Jr9YtjVwzJKJmnFV8lJMcBbnnKUJTyib7GZJlaUsZ1nC07iWnIo4lhI5LStKS1njRM8YZUkcszROKGdsmjDKk4SmIuwMNBYkobgXunkPkYl2rsNZHOdpFk8aUWHj-v8TGDvxHD5vupjYWRgVVd3WkYQ22nl3msdr3-Bs3CHg7QPaoHmt9cHSb-wU7beSKngJdf8glCcsk842s8uQ32q_66qpbPdjuI6XoEH_ROkJW_ZWOsKWo6HPM_afAAAA__-_ae-D">