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

    <tr>
        <th>Summary</th>
        <td>
            [Polly] Build failure with shared lib at -O0 and lld
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            build-problem,
            polly
      </td>
    </tr>

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

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

<pre>
    Polly uses `AllAnalysesOn<Loop>`, which has an explicit template instantiation in LoopAnalysisManager.cpp/h. Therefore, there are multiple (weak) definitions for libLLVM.so, the Polly ones are hidden (`STV_HIDDEN`) due to `-fvisibility-inlines-hidden` while the explicit instantiation has default visibility. According to the gABI, the non-default visibility wins (implemented by LLD/Gold; with BFD, default wins). The symbol ends up with `STV_HIDDEN` in libLLVM.so and linking the unit tests therefore fails with `undefined symbol: llvm::AllAnalysesOn<llvm::Loop>::ID()`.

(FWIW, this behavior was implemented in LLD in 78471f0ec1e6182b51607e2b4f7f99002533e8b3 (2015).)

CMake command: `cmake -DLLVM_ENABLE_PROJECTS="polly" -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_BUILD_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS_RELEASE=-O0 -DCMAKE_CXX_FLAGS_RELEASE=-O0 -G Ninja -DLLVM_ENABLE_ASSERTIONS=OFF -DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_C_COMPILER=clang-19 -DCMAKE_CXX_COMPILER=clang++-19 -DLLVM_USE_LINKER=lld -B llvm-build-tmp -S llvm-project/llvm`.

(cc @MaskRay – could we get a warning when a previously default-visible symbol gets hidden? Or are there cases where this is intended?)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJxsVV1zozoP_jXOjSYZsMkHF7kgAfrmXdJ0kuxu9ypjQAneGsNg05z8-zM2Tdvt2Rlm-JD0SHr0WHCtxUUhLsl0RabxiPemarolR3VB-YKjvClvy6dGyhv0GjWQmRdJGSkubxr1ThG2zpqmJSwhM4_QNVwrUVRQcQ1cAf7TSlEIAwbrVnKDIJQ2XBnBjWgUCAU2eoATessVv2A3KdqW0LSawLHCDs9NhxbZ2BfgHULdSyNaiUDo4or8hdAQSjwLJSyqhnPTgRR5lv3YTnTzFgtDF41C7UAqUZaoLASZeYfjj9P_NnGcPLo2Qih7BNPYdsfnV6FFLqQwt7FQUijU4yGYzDzbr0SH_97snz1aKko8814a-ECaQFQUTVcKdbF5bPwlWm3utapGjf8bBFehtK1Y1K3EGpXBEvIbZFlMaPrQyJKwFVyFqWCVxhbrjmEDCQ0do6Bvdd5IQFVq6NvB_ysHdjQfFAJXJUihXly5FUKv3FC10cNY7IzgzIXU73C9ciPB8i0fYRFI-VoTFhEWfRXRh-UuJ_eyie18aEhm3oR4kb3oIv25-TkQJTTkWPFX0XRw5Ro-82K1lcX2Nl8Ec__sYeHjzF_QfOrPvDnSPDjPz2HoeXTKGC5yZpmlnj-1RNmcLt96y18QiqauuSptD2TmFbX9No4tO6fkMVplyelpv_t_sj4eCIsJpa3VGqH07nSM9g_J8XA67k6r75ssHryeF7NPPs5wSp6j7VOWWJxdmsI4Xm-jb8mb8fjrKSEs3qNErvHduD6lWfRwOO2TLIkO1mO88z6sz89_tz_Ao1C_-ZdGosMh2R83u8ePEj6V5x7jX9lmZa2Pd2O2efz2F9u9vPVu-7TJkj1hcSG5uoz98I_yvtoJXRG6Grwc6vdD4nI4FylLGK-cmMZ5L2Q5NnUL48Pwpe2a31gYQlOnqc_CKQoggbfl-mXPb0ASShYeCRkUTS9LuCJc0ACHK--UFfq1QgUc2g5fRdNrebsfp7E7kvL9JF3Q6Ld9QlgKu84tmGFfFdyuzat7doK1lzKoSiwJSwkNR-WSlSEL-QiX_jxg8_nCD7xRtfRZMZvPp0FBc84WwZzNGZsX_nlaFnlxZnwkltSjUy_wAj8IQs-bsMWUz_zFbIaeX2K5IIGHNRdyYqmYNN1lJLTucemzgIVsJHmOUrvVT-nAZNs1ucSaUEro-pOQ7b-hW75RftEk8KTQRn8AG2Gk-4u4NUumMawsoFsKfYfDWtAV79Bukhy4AStCt1hkOeo7uayMabU99zQlNL0IU_X5pGjq-yiH26cBu2Y0oelbP69L-m8AAAD__ycNKEI">