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

    <tr>
        <th>Summary</th>
        <td>
            lld segfaults linking llvm-tblgen on Alpine linux with -flto=thin (bootstrap build)
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          user-45-20
      </td>
    </tr>
</table>

<pre>
    LLVM version: 14.0.3, downloaded from https://github.com/llvm/llvm-project/releases.

I was running a two-stage bootstrap build on Alpine; the second stage has LTO enabled and uses lld (from the first stage). The first stage is built with g++ 10:
```
# g++ --version
g++ (Alpine 10.3.1_git20211027) 10.3.1 20211027
```

The second stage build fails due to a segfault in lld when trying to link llvm-tblgen, with the following output:
```
[2602/2605] Performing build step for 'stage2'
[447/3454] Linking CXX executable bin/llvm-tblgen
FAILED: bin/llvm-tblgen
: && /tmp/llvm-project-14.0.3.src/build/./bin/clang++ -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -fdiagnostics-color -ffunction-sections -fdata-sections -flto=thin -O3 -DNDEBUG -fuse-ld=lld -Wl,--color-diagnostics -flto=thin -Wl,--thinlto-cache-dir=/tmp/llvm-project-14.0.3.src/build/tools/clang/stage2-bins/lto.cache    -Wl,--gc-sections utils/TableGen/CMakeFiles/llvm-tblgen.dir/AsmMatcherEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/AsmWriterEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/AsmWriterInst.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/Attributes.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/CallingConvEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/CodeBeadsGen.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/CodeEmitterGen.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/CodeGenDAGPatterns.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/CodeGenHwModes.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/CodeGenInstruction.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/CodeGenMapTable.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/CodeGenRegisters.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/CodeGenSchedule.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/CodeGenTarget.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/DAGISelEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/DAGISelMatcherEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/DAGISelMatcherGen.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/DAGISelMatcherOpt.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/DAGISelMatcher.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/DFAEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/DFAPacketizerEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/DirectiveEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/DisassemblerEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/ExegesisEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/FastISelEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/FixedLenDecoderEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/GICombinerEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/GlobalISelEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/InfoByHwMode.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/InstrInfoEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/InstrDocsEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/IntrinsicEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/OptEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/OptParserEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/OptRSTEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/PredicateExpander.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/PseudoLoweringEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/CompressInstEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/RegisterBankEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/RegisterInfoEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/SDNodeProperties.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/SearchableTableEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/SubtargetEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/SubtargetFeatureInfo.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/TableGen.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/Types.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/X86DisassemblerTables.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/X86EVEX2VEXTablesEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/X86FoldTablesEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/X86ModRMFilters.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/X86RecognizableInstr.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/WebAssemblyDisassemblerEmitter.cpp.o utils/TableGen/CMakeFiles/llvm-tblgen.dir/CTagsEmitter.cpp.o -o bin/llvm-tblgen  -Wl,-rpath,"\$ORIGIN/../lib"  lib/libLLVMSupport.a  lib/libLLVMTableGen.a  lib/libLLVMTableGenGlobalISel.a  lib/libLLVMTableGen.a  lib/libLLVMSupport.a  -lrt  -ldl  -lm  /lib/libz.so  lib/libLLVMDemangle.a && :
clang-14: error: unable to execute command: Segmentation fault
clang-14: error: linker command failed due to signal (use -v to see invocation)
```

The crash happens in `llvm::PHITransAddr::PHITranslateSubExpr(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::DominatorTree const*)`. Attached is a stacktrace I got from gdb, if that helps, and a Dockerfile that can be used to reproduce the problem (named Dockerfile.txt, as github won't allow a file without an extension). To use it:
```
mv Dockerfile.txt Dockerfile
docker build . -t alpine-llvm-test
```

The problem only happens if LTO is enabled; removing `set(BOOTSTRAP_LLVM_ENABLE_LTO Thin ...)` from stage 1 config prevents it.

All CMake variables & commands used are in the dockerfile.

This configuration successfully links on Ubuntu 22, so the issue seems to be alpine (musl?) specific.

[lld-segfault-stacktrace.txt](https://github.com/llvm/llvm-project/files/8747607/lld-segfault-stacktrace.txt)
[Dockerfile.txt](https://github.com/llvm/llvm-project/files/8747791/Dockerfile.txt)


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytWVtz4jgW_jXkRWUXGEjIQx4ghB6qkk4qYab7rUu2hNFGlrySDEn_-v2ODLnt9M52TIr4Ip3z6Vwl-Si34vni-vqvG7aVzitresMpG4zSfjrsZZdM2J3Rlgsp2NrZim1CqD1IetkCv1KFTZOnha3wovX2cEtqZ_8li4BXJ7XkXvq015_3-tP2umQ77plrjFGmZJyFnU184KVkubXBB8drljdKC2YNm-paGdkbzljYSOZlYY1gLfUGKNerWyYNzzVE5OhpMBjTYO1lkygyca2V86Fl6mXnKVu9b2PKx_EC20EjVvayGX5s0CdNW7lP-_tf-5oNX6iS5GC52HVoxvCt5IBJh-ngB4yV9bPBoJ-dQYZ9K3tp-tth4nX1Ue3WNGuutGeikSxY2NDLcs0bqKBMVH-3kYYF90wWBoFW5pFF34Rcl9KQc6Oy0TxWa7sjStuEugm_VHs8y077GdyK27g3nrM76dbWVcTaSuWDrIHnoP9ZlBbUZy_coxF0XwxH4xExX0Mm4rz8_p3JJ1k0gdzIcmUOcbSXNbIvpsvrqzmF5y8IqKuXneKH2yJU9YdoTNqwTr0r0BPFxT2l5whYaG5enLq-W17iahCYsuImqCJRJkhXW68CnI2-rfIqV1qFZ3TBvtInGyUEzJ58k85Z1xvOBQ8yCaqSb9oaUzbcIaUSvoUP-R7DyB2IuNZE-oQcwB3DNwYRLZKaO15JCIDWnVNARZrAeB7vBfch-XfDibNS3qM5WSupBeSCsFyrn4hQltRSRE1aYG1BRhdCaNU-nyTI5ZqHJApAqiv0qqrWqlAhWUO6sHG2KTfEZBH4EM0jjopNImQbfxHcWPlUyDok4bmWsckkW-UChExEsKSFwMwANf6mxzdlKaES4TsliL9VFtKZfbK1qmJuEdSuDMwe-N4xQvHSWA9NPTg0Ya7XjSmoGzrFuyc6Hvjbdx0s3BM2yKDkdsiS-df51ezPL-iBCxJEy3BOmZV808iepIVO3gz2AWJPRi9oTgpebCTIKQR-Iz6Dtdq_RueiTaoEIUutAE4jMMPfYcSyeNWqCSqyryi1vlDeLy5v-KNcKC39-yxKSbZsMfXVDYdDpbuqVEDEpUVdp_ZzSN8oVI8HtDQ-fB4lIIjyJmAx-izEJRIA8XaJMOyq06UVcobw9aDuBLIXpCsMCOfTL3ecsEwHC7VQf-xu8NAZhvztmhjKXaFueB15uuLcy1JhkXOddXtAiommu0Ar7kr5-ayA05cPUncN5z3MkWaO92hdQvs90m3d2VB7pM_DLKadrbOY3vHiUQZa1zuDKUdrxVZ2B_LcY8cA-s5CXT1J7ACU74qzwM7oGNG9UE9SXGOGxDZcdFfvy_LSVljBj4Ckbc71MVRcmrWdPbfzdgcQzNeE1F0aAM1t0TkCloZ2jl4VXYEwdRwB4o47393rALp_WHVFucPmXRX4QLl6qvHl3AXJy0bYa7uTtEvvvjOqaie9pxjoinVYrWfcPB4L6xjx_TD_ijy7c7aWLqgOG6UHyV2xIfLI01muJg9xP3E0oIXkoXGSjPZpsAPl5wHwFfp5G3-fnL5d3CJjJ7Srv66-Z_hvkbqaGoALq8XRwLAC3N-AotMmFzj3WCxLo34ST5zPPw32TebT1vrPx9xlXK54-cFgif3v6tLLh7WredjgoZdlvTGuo9v75ZflV1CnVEXSKkcPY_FOb1RWfWjq2rqQ8g_tLyH9q47Xlf3_530zWKJdoKvQdK0YOwhI15-ptx9Y51TlKvE1wl9qaIciYKw8JIMR1df2Nawpa2LJlSqLbeVOssJWgBDU-SDL6qUeE6tC_wOJKpPSHdhjWVOKQ13Tq9JwTcXUxkuWbGOblEyZrS0ifi87_4faaeG437ANr2tpPJVHQROL1UMqGd79sVw5bvxUCPe-RWNpxDSG1RHBMnnl-IvrRvayKZVQX1tnHJuMmbbF4-90zW2lDA_WrZwkEyJNIs05ZEzZNASq7QiqT3Mq_haPwfFCsiUrbWgr8qXICVKtWdjwwDZS154ayJacYQsF464VuYq6C25YLqlILsiUTtbOiqaQsQyMZ_i0ImsbXoHilTsNTyGietYW_dmOTH8WGKfSMUaKY1BF2TZoNAiLAHO3DkrZytKYTP2ytFxtP4z25rWlEPF9X2ZOWUJDU309aVNV-vAPcXBQzxr9_BoO63iCAAPvDxHooMHJym6pMg0UL6H4ZHZ7u3pY3U_vflCy_Lj6Op1dX_0gzhXV-lKaAMhnrU_aMv2A_LlWJQaWW6QDBgvvjkGmWrM4RbEtdypO35R8h1TwrZu4o3CPDhKvFnqvHMRvx2pcm3S-KQpsodaNhq6UYZ6OUv7MGxMahukLrsQUQJjK-4bOF2TlKSIQHK1ZKQqqxuvecEHHFb6WhVqr4t3AvfFMa5Ecjh6S1wiN8TKeA-O3T4zW-_l6cjY6O-2fRYJfj_GS_ePZh2jtPvrZ-QBPH5Pg_K0FTsTFUJwPz_lJUEHLC6oPH0T10fAURm8Xk5cTLeptntpDmHeFY4j94RgMg540Tl_8tjbRuaTOeHyajU42F_1-PhGjwXotiwHPT2U-GWeyP5rkZ6PRUEz6J5rnUvsLmBNrGR1JRIi44s1P1EXWz7L-OBsMRsPT_igdCn6aybGQo36eT0Z5b9THOqJ0SnKk1pUn7iKKlDelR6fGBtq_dmIlx_wuZRwO-LzB9OEuEPYuGY2TrH8SR7-I0v8HPme2Ow">