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

    <tr>
        <th>Summary</th>
        <td>
            Memory leak in llvm::orc when llvm::orc::DuplicateDefinition happens
        </td>
    </tr>

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

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

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

<pre>
    Hello everyone,
I had found a memory leak in llvm's error handling in ORCv2, llvm 15.0.7.  The original code exits only if compiled as debug due to a llvm::orc::DuplicateDefinition error.

I had triggered the issue while doing (simplified the code):
```cpp
llvm::orc::IRCompilerLayer lm;
llvm::orc::ResourceTrackerSP rt;
...
...
 llvm::cantFail(lm.add(rt,std::move(TSM))); // this triggers a llvm::orc::DuplicateDefinition
```
Assume orc to be properly initialized when running that piece of code.

The issue won't happen when "fixing" the code in this way
```cpp
llvm::orc::IRCompilerLayer lm;
llvm::orc::ResourceTrackerSP rt;
...
...
  llvm::Error e = lm.add(rt,std::move(TSM));
  if (!e.isA<
          llvm::orc::
 DuplicateDefinition>()) // https://discourse.llvm.org/t/duplicate-symbols-in-separate-modules-no-longer-allowed/1805
 llvm::cantFail(std::move(e));
  else
 llvm::consumeError(std::move(e));
```
The relevant valgrind output is the following:
```==41010== 40 bytes in 1 blocks are definitely lost in loss record 2 of 6
==41010==    at 0x4843003: operator new(unsigned long) (vg_replace_malloc.c:422)
==41010==    by 0xA9AC716: make_unique<llvm::orc::DuplicateDefinition, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > (unique_ptr.h:1065)
==41010==    by 0xA9AC716: make_error<llvm::orc::DuplicateDefinition, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > (Error.h:334)
==41010== by 0xA9AC716: llvm::orc::JITDylib::defineImpl(llvm::orc::MaterializationUnit&) (Core.cpp:1694)
==41010==    by 0xAA181AC: operator() (Core.h:1825)
==41010==    by 0xAA181AC: runSessionLocked<llvm::orc::JITDylib::define<llvm::orc::BasicIRLayerMaterializationUnit>(std::unique_ptr<llvm::orc::BasicIRLayerMaterializationUnit, std::default_delete<llvm::orc::BasicIRLayerMaterializationUnit> >&&, llvm::orc::ResourceTrackerSP)::<lambda()> > (Core.h:1421)
==41010==    by 0xAA181AC: define<llvm::orc::BasicIRLayerMaterializationUnit> (Core.h:1838)
==41010==    by 0xAA181AC: llvm::orc::IRLayer::add(llvm::IntrusiveRefCntPtr<llvm::orc::ResourceTracker>, llvm::orc::ThreadSafeModule) (Layer.cpp:29)
```

Probably the issue is around here:

https://github.com/llvm/llvm-project/blob/8dfdcc7b7bf66834a761bd8de445840ef68e4d1a/llvm/include/llvm/ExecutionEngine/Orc/Core.h#L1822

Or here:
https://github.com/llvm/llvm-project/blob/8dfdcc7b7bf66834a761bd8de445840ef68e4d1a/llvm/lib/ExecutionEngine/Orc/Core.cpp#L1691

But I have no clue so far.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUV99v27AR_mvol0MEiZJl-cEPjl1jGVq0SLNngyJPFheK1EjKiffXD6T8q4nbpR0wbIFiS-L5ePd9H3lH5pzcacQFmd6T6XrCBt8au9gY7lqjcFIbcVj8BZUygHu0B6OR0BVJ1yRdPkDLBDRm0AIYdNgZewCF7BmkBqX2HaEzB2itsdAyLZTUuzD09XG1p4Suog1k0yRNZgnAU4tgrNxJzRRwIxDwVXoHRqsDyAa46XqpUABzILAediAGBG-AjZPlS5IvjeXjzXroleTM4xobqaWXRo-hJGPw1yl4K3c7tCjAtwjSuQHhpZUKQZgQM6GVk12vZCOPNiE8QudhqtFbmY4X7_vxzY2QHh5XYwr2MzugBdWR_P6n1o_ozGA5PlnGn9F-_wbWn-2TJHlzc4UBZ9pvmFSEVqpLmBCEVtYTunJejBad2SOh1dP3LyGJ8crvgdANoRvwrXQnTNyH0X0DxPi4dG7oAq08EFUj9Nb0aAOh4VdMyX-igJcWNdhB6wC2b5mHXiJHME0E-gfGni4MGU3ozEPL-h716IRQ2shXqXeE0jNRQXMxpxd2-J-h6wrVT3GFIJB8DR8l7OQZwsogtCI0w0S6JclXp4HT341gjya3WMw_RW9hkpMeWu97F34VH4V03AzWYRIcJ8buCN34MHDyducOXW2Uu5P6zmHPbHjXGTEodHfa3Cmjd2jvmFLmBQWhm6xKp79S8VsY8B0IqBy-92B0UF-E9wNe3kg3CM2iwj3THvZM7azUAszg-8FDWCAtQmNCDkFu7zYCkq9Jvi6yNDveQpFCffDoghwzqJXhzw6YRRAj-qgOoIzzcfc0zoFFbqwAGtZBeXT_zisAMA_pa1EVeZrmJF9CWGHMGwsaXwitBh23eAEB95HWar_bWuwV47jtAg88CcooKA2A_Hym-gDp63K-XM2yMszUsWfcDlr-Y0CSrz64T9AVnKnYbvnra5aNDzVzkm-dtxHQFW-Z_cE4vNh6y6R3p-Gg1iuLmEpI_TIO5_-ARIh023ubtCRfZmk5_YN8YxX5f0g3Cj9mmufFLxJ9m-WNxP768LQ-KFmPT1Gw-ND1scS8t_7CPNq4ubMAwd-09ISWR-mtjMUk7Lv5Mivnv4rrTMAyq7Ll6lra4x51dhfZrOiH2Lw4s4P-js5Joz8b_oziNqe3Ur9teR8IfXiM1eIWBHFrPZN3EeOfebsWgsCGDcpvBSr0fxwdxAjLeK1uqeBdjTu2QOFaKdbVgh2Lx0WEF34Kmv0eP_8Z1m_EkVe_N_nNhiBOd1x7sUpfrB60t4OTe3zEZqX9t5_R-gbD45K-YfjUWmTiO2vwSyydR73HEI7rZ6xft4rX-PnNmprV6nDV1spQcmLH3qLFS9mKnz8W-p307VAn3HSEbsZ2Pn7d9db8HXko-bUyNaGbSjSC81k9q5uyrPKCzcqsFpXAophWRYpNWWEhMnbxIzVXQ2ihTy8-vSIfAnuf9C6QTjdfLSd0c2SQ5p-zitLrYL_aH1P47wUfNoN_E3HgJ8RczrPrmO8HD-HIsUfQBrgaEJyBhtlkIha5mOdzNsFFVs6KWTGdVdWkXZQsb-b1TNA0z4qiSKfThtesqeumzuv5PJvIBU1pnma0zKbpvCgSKrJqyvNinmLK57QkRYodk-rcr02iFBZlmmd0oliNysXjH6UaX0adEErDadAuImb1sHOkSJV03l28eOkVLr7cOPadhDz25B88nI1tvJsMVi1-m8sYtCN0E5P6VwAAAP__-2t2mg">