<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/55682>55682</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            code coverage leaks string when using dlopen
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          nolange
      </td>
    </tr>
</table>

<pre>
    If you use a custom filename for the profile data, then every loaded library will allocate a string for the name in [InstrProfilingFile.c](https://github.com/llvm/llvm-project/blob/857c612d899f271402470d4026d2e3be1dce53a4/compiler-rt/lib/profile/InstrProfilingFile.c#L713).

The problem is that this will never be free'd.

I am using llvm 14.0 x64_64 from [debian](https://tracker.debian.org/pkg/llvm-toolchain-14).

Steps to reproduce (and have the address sanitizer report the leak):

```bash
CLARGS="-stdlib=libc++ -stdlib=libc++ -fuse-ld=lld -rtlib=compiler-rt -fsanitize=address -fsanitize=undefined -fprofile-instr-generate -fcoverage-mapping "

echo "int foo() {return 0;}" | clang++ $CLARGS  -shared -o libfoo.so -x c++ -

printf '#include <dlfcn.h>\nint main() {dlclose(dlopen("libfoo.so", RTLD_LOCAL | RTLD_NOW));}\n' | clang++  $CLARGS -rpath '$ORIGIN' -L. -ldl -o test -x c++ -
 
LLVM_PROFILE_VERBOSE=1 LLVM_PROFILE_FILE=/tmp/x.profraw ./test
```

(I opened a thread on [LLVM Discourse](https://discourse.llvm.org/t/code-coverarge-with-dynamically-loaded-libraries-moved/62048), but that seems dead and I meanwhile am sure that this is a bug)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVNFuozoQ_RryMgKBISR5yEOTtKtI2c2qXe0-VgYPwVtjR7Zpmvv1dwxNN92blyshA2N7fM6Z46mMOC-3DZxND71D4FD3zpsOGqlQ8w6hMRZ8i3C0JsRAcM8jtg4xDfiK9gzKcIEClKwsp9-TVAq4UqbmPmR03kp9-Eg0ZJUaoulqq2nu-5CYVjxQ-qSOppuIzVvvjy7K7yL2QM9B-ravktp09KPU6-UVE6jfWHv6rZSp6DWfzuoyY2K-WDRslhUpK2apoFcpGOYVZqLGac4LWkrZjnSijW3YT-BpfCdJXzehsXw3y_KILZIo3UTp3Tj-GNWpFHYgHXHkngb6GoTQQSOoSEiLlHgmPu3dAu9I-KBPIARZkaTwVhbPZUEbqA6kksBKcn1LF295_YI2GVckxh4Ch5fDRR5vjKpbLnWcFX-jfvJ4JLAGLBJ40dcIlJ9rAS1_xaFSXAiLzoHjWnr5D9Ggtcb6YVIhf6GcActV1qhMx6firh1D693d45enKCf4LHZeBKXzDY2k54oeuB1syI6xEiGqBFCRxiVXVaM1F2Q0cQH7KdhrgY3UZM64ea9tLENl4wNqtMGfcVMbqhA_YNzx4zFUgoBec8K6NSEmtScTG1KJeEM0W1n0vdWQRvkqmgV6FFxDrbg-vLOIWDHSB2LZchuAmHBRKE_iDMRv8EH4-sgj3Rjf0PYZeU7qWvWCypOvhWpqnbRRfh9N1zoA6qi6fxAJVSvjyGZzocwRxxn2cV4gRlf38cdu87zbr-92A-Dh99v-V6hmKOhAhtLT6f8hdMUotkfu2xFjsX_cftl-CzviXQJUNxWIenT-BkcYX7vdz6_P3x_3D9vd_fPP-8fV_umeapbBp4kwDOZ58N2RxrckFNLyEyQhRif85bxPdmTzLQQhSHhOtrXIBZih94RDYCNdbXpLit24XeIymYTL9H67_NA5BMajayzZ5kTdKRZn6muyprZ3jsd-GI_9UKKLO1oraGPJ0mI-yLyGqvdjq3CInQMRkIXbt4UOuT61oddSb3C9xauWQg-nrYRkMRHLXCzyBZ946RUuAyq4eHm4nu7Sek-hV49dZvTFpLdq-b97rHSuR0cf02k5Z5N2mTaLImd1JrKyEFmFgje8KYu8WuSinLFsoniFyi1JbrKexhMMKYINp5uJXLKUsXTKimxRpEWZiFnD8zIr5_PQsss6KlIkf6sP_Sd2OUAiARxNKum8-zPJnZMHjTgcR_l571tjl9oE_-JkOHo5QP8XHCwtDw">