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

    <tr>
        <th>Summary</th>
        <td>
            [mlir] ASAN ODR violations in `mlir-pdll` when `LLVM_LINK_LLVM_DYLIB=ON`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir
      </td>
    </tr>

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

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

<pre>
    There appears to be a circular dependency issue with the `[MLIR` `mlir-pdll` tool](https://github.com/llvm/llvm-project/blob/main/mlir/tools/mlir-pdll/CMakeLists.txt):

```cmake
set(LIBS
 MLIRIR
  MLIRPDLLAST
  MLIRPDLLCodeGen
  MLIRPDLLODS
  MLIRPDLLParser
 )

add_tablegen(mlir-pdll MLIR_PDLL
  DESTINATION "${MLIR_TOOLS_INSTALL_DIR}"
  EXPORT MLIR
  mlir-pdll.cpp

  DEPENDS
 ${LIBS}
  )
```

Some of the libraries in `LIBS` here will link `libLLVM` when `LLVM_LINK_LLVM_DYLIB=ON`. This includes MLIRIR but also `MLIRPDLLCodeGen` and others. TableGen binaries are explictly linked statically against LLVM. 

This results in ODR violation messages when building with both ASAN and `LLVM_LINK_LLVM_DYLIB=ON`:

```
==1842017==ERROR: AddressSanitizer: odr-violation (0x61a21d591220):
  [1] size=1 'llvm::vfs::FileSystem::ID' /llvm-project/llvm/lib/Support/VirtualFileSystem.cpp in /build/bin/mlir-pdll
  [2] size=1 'llvm::vfs::FileSystem::ID' /llvm-project/llvm/lib/Support/VirtualFileSystem.cpp in /build/bin/../lib/libLLVM.so.21.0git
These globals were registered at these points:
...
``` 

Looking at the dependency graph, we need to force `mlir-pdll` to link all its dependencies statically. That can be done by swapping out targets that aren't explicitly declared STATIc (e.g. `MLIRIR`) with object lib (`obj.MLIRIR`) targets if available, However, you have to transitively resolve all the dependencies required. It looks like the set it needs is (`MLIRIR` , `MLIRSupport` , `MLIRPDLDialect`, and some builtin op interface libraries). In some cases, object libraries are currently not built (e.g. if `BUILD_SHARED_LIBS=ON` and `LLVM_LINK_LLVM_DYLIB=ON` and (too be added in [PR#155488](https://github.com/llvm/llvm-project/pull/155488)) `MLIR_BUILD_MLIR_DYLIB=OFF`. Therefore we would need to start explicitly requesting that object libraries be built for at least this subset of libraries. 

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMVlGP4rAR_jXmZXRRYjYEHnhgN8sdanZZAT21T8iJB-Jbb5zaDhz366txsuzSq9RrnyohYTue8Tcz3ze2cE4dG8Q5S-9Zmo9E52tj51VtlfOmrdGWwuOoNPIy39VoEUTborAOvIESQUClbNVpYUFii43EprqAcq5DOCtfg68R2CRm6f1TsdqwSUyzN63sl1ZqTXNvjGZpzvi09r51bLxgfMn48qh83ZVRZd4YX2p9ev_70lrzAyvP-LLUpmR8-SZUQ39aWcaX5M8N0_4Qvnx4Eq9YKOdd5H96xmd0Shx-k7j_VW_iFVm8cOgZnxar-y2LF0CgVxsaheFLXhSL7e5m_mAkfsXmZm2db2_mL8I6tLREZ4eDhZR7L0qNR2wYn17RBps9GQUP-eN2t3pe7FbrZ2CcM37HspDK_W69Lrb71fN2tyiKfb7asCynHWT1-LeX9WYXXIX51XtUtW1_Prl-eXzugfZuQ9BZHj4OON-z09tszRuCOYSialVaYRU6UA3VNBhPYggkOSutQavmlb5oVRbF9yf6eK6x31x8f9oXq-e_7MMo_3uxumfjfP3MJnEEu1qR10p3Et1QAig7D0I7Q-b_mvpJDKKRYHyN1kWwo7R-xQZK1fQQhUXAn61WldeXAAwlOC-8qoTWFxBHoRrngdBE0AcbUFh0nfYhxnW-gZMyWnhlGnhD58QRXR9S2SktVXPsOV8aX8Niu3gOqP5DuL8zkcbjnI3zZHrH4yTrJ4-bzXrDxgtYSGnRua1olFe_0NKakfbLBzbGp_HPSSJ4ItNZwnl8JTwAS-8Tlubg1C-kI4DxLIhrvGDjxeng-sFSadxenMfhwypnPIPfFfiuS0U63HZtaywtf1fWd0J_eCHeBaLwZcgV_V9F26t0QMf_n9BF0dV8YHHkTMSTKD4qHziCDuGoTSm0gzNR3-JROY8WJQhPSnEIrVGNd30Joij6XOyBbIUxr8Sf3uRzLz1a0daMP8AZoUGU1HgPxlb4bxppLzmhNSjvPpyQAj7ITvoSHirRUAOXpkEoL-DOom0Jgek8eGGP6B142igsNajMDwJSpCCJlRYU4na32K0qYhxGx-hdm6HRMz7r5WBKKgc1DNrHJrEpf0Q3297PUwcQJ6E06ZdC_mbOeEJLw4vpoBYnpCi9FY1TXp1QX0ihRp8wRH2TOora4j86ZVFGsPKgjXl1oNUrho0OPSgfcupAuQHbFRfQqcPCO3VuV1_yIldCE9UojIegdkctkkjkVQOGWOXRHkT1qWEyPotg1fRbK-Fo5eFTluxHz6o6a7GhjDfG926vuVYHAnL_11WR77ffFpvHfB968NBX_qT39Hv41Jv-MpcSZdBBev-yYXycpOnddPo_Xs5tF67ewQefUaGHzO171GF4BbRcDs0fLR4MXSIIZ9NpeaW988Le0JDKi84TbQNVf8thOdSCFEPa0igcKUw5cF1JDDCHj-2h84_kfCxn45kY4TzJ0tksTniWjep5OU2TNLtLMsmrAxc8FQfkCQpZluPZWFQjNecxT5M4nsYpz9Ismoh4yoWIUYo4HcuM3cX4JpSOKFORscdReCjNkwm_45ORFiVqF15inPePGWqGIzsPmS27o2N3sQ6vmKsHr7wOr7dgkOb9vXNzV73f0DfN4k9u4lFn9fy_rnuIiR5gQ1inOf9nAAAA__9RtkTT">