<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/85552>85552</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[18 regression] PHINode should have one entry for each predecessor of its parent basic block!
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
berolinux
</td>
</tr>
</table>
<pre>
```
$ clang++ -o test.o -c test.cc -O1
PHINode should have one entry for each predecessor of its parent basic block!
%2 = phi ptr [ poison, <null operand!> ], [ null, %dynamic_cast.null ]
fatal error: error in backend: Broken module found, compilation aborted!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: clang++ -Wno-unused-value -o test.o -c test.cc -O1
1. <eof> parser at end of file
2. Optimizer
#0 0x00007f390239a576 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib64/libLLVM.so.18.1+0x459a576)
#1 0x00007f39023991ea llvm::sys::RunSignalHandlers() (/usr/lib64/libLLVM.so.18.1+0x45991ea)
#2 0x00007f39022b119d (/usr/lib64/libLLVM.so.18.1+0x44b119d)
#3 0x00007f39022b10ad llvm::CrashRecoveryContext::HandleExit(int) (/usr/lib64/libLLVM.so.18.1+0x44b10ad)
#4 0x00007f39023928bb (/usr/lib64/libLLVM.so.18.1+0x45928bb)
#5 0x0000556cde35771a (/usr/bin/clang-18+0x1771a)
#6 0x00007f39022c7747 llvm::report_fatal_error(llvm::Twine const&, bool) (/usr/lib64/libLLVM.so.18.1+0x44c7747)
#7 0x00007f39022c7606 (/usr/lib64/libLLVM.so.18.1+0x44c7606)
#8 0x00007f39026f6c17 (/usr/lib64/libLLVM.so.18.1+0x48f6c17)
#9 0x00007f390a7a0c8f (/usr/lib64/libclang-cpp.so.18.1+0x2da0c8f)
#10 0x00007f3902685407 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/lib64/libLLVM.so.18.1+0x4885407)
#11 0x00007f390a79345a (/usr/lib64/libclang-cpp.so.18.1+0x2d9345a)
#12 0x00007f390a78bd7b clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/usr/lib64/libclang-cpp.so.18.1+0x2d8bd7b)
#13 0x00007f390ac1a68f clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/usr/lib64/libclang-cpp.so.18.1+0x321a68f)
#14 0x00007f3909245246 clang::ParseAST(clang::Sema&, bool, bool) (/usr/lib64/libclang-cpp.so.18.1+0x1845246)
#15 0x00007f390b78285b clang::FrontendAction::Execute() (/usr/lib64/libclang-cpp.so.18.1+0x3d8285b)
#16 0x00007f390b6e6b09 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/lib64/libclang-cpp.so.18.1+0x3ce6b09)
#17 0x00007f390b801daa clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/lib64/libclang-cpp.so.18.1+0x3e01daa)
#18 0x0000556cde357036 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/bin/clang-18+0x17036)
#19 0x0000556cde352cef (/usr/bin/clang-18+0x12cef)
#20 0x00007f390b2c236b (/usr/lib64/libclang-cpp.so.18.1+0x38c236b)
#21 0x00007f39022b1033 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/usr/lib64/libLLVM.so.18.1+0x44b1033)
#22 0x00007f390b2c2253 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/usr/lib64/libclang-cpp.so.18.1+0x38c2253)
#23 0x00007f390b27aec7 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/usr/lib64/libclang-cpp.so.18.1+0x387aec7)
#24 0x00007f390b27b3de clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/usr/lib64/libclang-cpp.so.18.1+0x387b3de)
#25 0x00007f390b2bd91f clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/usr/lib64/libclang-cpp.so.18.1+0x38bd91f)
#26 0x0000556cde352265 clang_main(int, char**, llvm::ToolContext const&) (/usr/bin/clang-18+0x12265)
#27 0x0000556cde361f36 main (/usr/bin/clang-18+0x21f36)
#28 0x00007f38fd83dc0a (/usr/lib64/libc.so.6+0x29c0a)
#29 0x00007f38fd83dcc5 __libc_start_main (/usr/lib64/libc.so.6+0x29cc5)
#30 0x0000556cde34ee71 _start (/usr/bin/clang-18+0xee71)
clang++: error: clang frontend command failed with exit code 70 (use -v to see invocation)
```
Reduced test case:
```c++
struct a {
virtual void b();
};
struct c {
a *operator*();
bool operator!=(c);
void operator++();
c begin();
c end();
} d;
template <typename e> void g() {
for (a *f : d)
dynamic_cast<e *>(f);
}
struct h final : protected a {};
void i() { g<h>; }
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8WV1v2zoS_TXKyyCGRFoffsiD4yTbXrTboMnefTQocmRzK5FakkqT_fULUv4Q3bhpiotbBI0jDQ_PHA5nhjSzVm4U4lWSXyf5zQUb3FabqxqNbqUani9qLV6ukiLd_aQ3SbpMyBx4y9QmIdcJuYZLDQ6tm2m45OMnzuHySzZa33_4-E8tEOxWD62ALXtC0AoBlTMv0GgDyPgWeoMCOVqrDegGpLPQM4PKQc2s5FC3mn9LyA4UICE5gYTeQL-V0DsDSX4NvZZWq4SsIKErNbQt6B4NU8IPpLeQ5DfhZX4N_m34THLxolgn-Zoz62ZhlLcL8zTMsRbQGG0Suhw_gFRQM_4NlfDPro3-hgo6LYYWodGDn20FXHe9bJmTWgGrtXEoDuzvP90uH27BDnUnHTCohw0Y7LVx4DRsnettQpcJuUvI3Ua67VDPuO4Scte2T_tfl73R_0HuEnInrR3QJuQOmBIgFW8HgeC2CNwwuw1knWEcPa_eYG-0FxoFWD2Y8bEfyazVXDKHAsygwHIjezcbKT84xr-BGLreMwuP0hncG70xrANmNkOHynnacWj8W-nLQQ0WxeUTawd8I1iymV851I1frZ4ZiwaYA1TCB0UjWxztyAzCvy-9k538H5pdWCSEppA-p2malg1dpIQuWF4WEISjy4Qu7YsdP9wbqVxw63HUpjoaGfZ9ra0zyLqEFF4fqVxCFpCQKiF3gzV-FWRdzMffnz79-Xlm9SyrZllCrtPneR7mTcjiSCw7IbbIkL1G7OugHuRGsfYDU6JFY8Ok75rbQ0dzk2huUmfZQvw64DzYR4D0FDBlYuLMygfeV-T6Cc3LSiuHz258Mzp1-yxdQqr3qjoP80RE5ieqkqqu3yOVt48A8x1gnhdcIM3LMmMRYC1VQu5ClF9mVcDJvFGEUsT68LKclxN9xt2-DullPaaXafw9fpcKgWtl3S7-aq3b90kVpow4laecirR4F2CRxhFdRYBFU_Cs_HXAKthHgIspICtZyqvmHOC4ALzvI1QiwqADqt93cUYoqnyeTtfinln7mSm2QZPQ1fH555DRvfjHZ0vF2hcrf2ZPb8NPWOVBRcu6Ryx-B9SPesf6V8HNSIcsVndB5zl7r7phUIRKYtSqFmW9qwHBg9tOuuuxXH4ZXD_4fT95fSPZRmnrJLe3aiPVXp6JyQdkAs0DMsO3PuFrZaO9MTFdaYH_QPWG1SMzG3RvGH1iavOayXFtHpyRavMVm_jxfpWXJ4A7EZbcY8ZDPipnBiuf8Cs2K-XuXRwET82uNNzJFh9erMMuRMQKrBPjm0HJ_w647k9G-kLWfzfS4XpfziaDBDZsaN1aYIsO3xg4xvWrLq20skOHJvh8NkbPhVSImCikouLCeMaKqvnZtJPC8miYsmPb9S8lT2Jt-fC4r0U_3U2vM6UkEImYRtVnQeY5mRdTpve-hVk-PMY8HrBjUV5_M7-_ziirwoQRo3zKqC4rUuXRdrwzXoFDGI5b9Bn54PDnfcYZUUSYIaIQ1b66wKJOF_Em9a0xmo_KOqY4RiT226M6z_l31o4HFhHNqBzWVZoJxqLENRI6sn3SnP1I7gdvfmMTUAyzR_Sq0z4kpQVwnq07JuOysjSGvfg0RFd8y8w-Wy33-zV6RlbwpKV4heWrfU1K4_BanLAiHJs3UbzRFIVEFbkmnNDibNN2RrEqDIpQsx96Ukp_qSf1HTdrsH2JZG0GFeJtbYK0XrWR4yII-862ldKIKzlVgOR0GnzCyKd9ZlutspXuOqbE6XZ9NQYO6V2H6sXaKLEfi9YhoR8GrNf8-TnLxj_Csdsnf-k5hciKjP2DtTNM-lPf-PoEjrWt3zH-6Hx4702Wx4QXgjDE5vuXn-SxpDSWtGTIy7OSHk_np5s96Bzt8JOB3uBc0_AT0-VJJ_9bXgenIq_nJ17XVOB7vf5D1_a8y3_o-pO07lwT1LG2_RO50-Zj17fT-OuZ9EsfDnm_rtIuSP4CrbwUkVZxbSS1WGTNOV43k89RJXilBJzT-G_U6r0FpwrOR-oUp6mdFPnIZF9y9uxCKljuNvLk1Kp1u8urk2B5u8j4iSImZcykyBpagOfwFhTxlhHU5IhaNaKigqfnzzxeomIEWvA0Ksdk8QMQz2G99sPW1jHj1j8QPAvNI3cPN1Y7d-eIZQYj6FsOe9MD1uTi7XBZebiQg2bXRAHfRVHDZIsCvku3BXyWfs0EQpn6OQeLcPkEToNFBDlpffa8T66Ew_9fUQwcRbjWA84sHu4KTwbxHcvw1DozcAcMkvJ6f7v7JI0bWBtaFaj3VXf3OilvDp93g_l0sF_gZbj49bXHR2k0HEJagaNBltAbv6FjozD10SjwPQHiUOMm7Ix4KAcMNeSENIjDXw67vmUOIaEr99KjYh2CP-aP0272rfjRqUYbvzDBtwb8sk7uwQBgeomd0BXCvgEcTyxT7abCbaGRirUBsDfaIXcodmsxkTmwkkdW4FuCbcg_13DAPKzvhbiiYkEX7AKvsjJLC5KWVXaxvcoIyShbFHWNZbUQdF4zQQilosEqFYRdyCuSknlKs4KkpCDZjGdzmvOM0rLOK9GQZJ5ix2Q783lnps3mIlx_X1V5npOLltXY2vBtBiEKv0N4mRCS5DcX5ipcnNfDxibztJXW2SOKk64NX4NkFRjcGLTWx3t-A3_xFxgXg2mvfv-OP_j5_wAAAP__jVZ-Hw">