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

    <tr>
        <th>Summary</th>
        <td>
            clang: 18: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    When compile this program with clang 18, clang 18 assertion fails, while clang 17 acts normally.
```
void f(unsigned char *a) {
  int ret;
  asm volatile("setb %0 %1" : "=r"(ret) : "r"(a));
}
```

Compiler Explorer: https://gcc.godbolt.org/z/G664rETEz

The crash output:
```
clang: /root/llvm-project/llvm/include/llvm/Support/Casting.h:578: decltype(auto) llvm::cast(From*) [with To = llvm::MCTargetExpr; From = const llvm::MCExpr]: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
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: /opt/compiler-explorer/clang-assertions-trunk/bin/clang -gdwarf-4 -g -o /app/output.s -S --gcc-toolchain=/opt/compiler-explorer/gcc-9.2.0 -fcolor-diagnostics -fno-crash-diagnostics -O0 <source>
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module '<source>'.
4.      Running pass 'X86 Assembly Printer' on function '@f'
 #0 0x00000000037619f8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x37619f8)
 #1 0x000000000375f6dc llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x375f6dc)
 #2 0x00000000036a8248 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007fc2c93bb420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007fc2c8e7e00b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #5 0x00007fc2c8e5d859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #6 0x00007fc2c8e5d729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #7 0x00007fc2c8e6efd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #8 0x00000000034548df llvm::MCExpr::evaluateAsRelocatableImpl(llvm::MCValue&, llvm::MCAssembler const*, llvm::MCAsmLayout const*, llvm::MCFixup const*, llvm::DenseMap<llvm::MCSection const*, unsigned long, llvm::DenseMapInfo<llvm::MCSection const*, void>, llvm::detail::DenseMapPair<llvm::MCSection const*, unsigned long>> const*, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x34548df)
 #9 0x0000000003454b38 llvm::MCExpr::evaluateAsAbsolute(long&) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3454b38)
#10 0x00000000034e8adb (anonymous namespace)::AsmParser::parseExpression(llvm::MCExpr const*&, llvm::SMLoc&) (.part.0) AsmParser.cpp:0:0
#11 0x00000000025febf6 (anonymous namespace)::X86AsmParser::parseATTOperand(llvm::SmallVectorImpl<std::unique_ptr<llvm::MCParsedAsmOperand, std::default_delete<llvm::MCParsedAsmOperand>>>&) X86AsmParser.cpp:0:0
#12 0x0000000002603ae1 (anonymous namespace)::X86AsmParser::ParseInstruction(llvm::ParseInstructionInfo&, llvm::StringRef, llvm::SMLoc, llvm::SmallVectorImpl<std::unique_ptr<llvm::MCParsedAsmOperand, std::default_delete<llvm::MCParsedAsmOperand>>>&) X86AsmParser.cpp:0:0
#13 0x00000000034e12d2 (anonymous namespace)::AsmParser::parseAndMatchAndEmitTargetInstruction((anonymous namespace)::ParseStatementInfo&, llvm::StringRef, llvm::AsmToken, llvm::SMLoc) AsmParser.cpp:0:0
#14 0x00000000034fa327 (anonymous namespace)::AsmParser::parseStatement((anonymous namespace)::ParseStatementInfo&, llvm::MCAsmParserSemaCallback*) (.part.0) AsmParser.cpp:0:0
#15 0x00000000034eeb85 (anonymous namespace)::AsmParser::Run(bool, bool) AsmParser.cpp:0:0
#16 0x00000000045dfcda llvm::AsmPrinter::emitInlineAsm(llvm::StringRef, llvm::MCSubtargetInfo const&, llvm::MCTargetOptions const&, llvm::MDNode const*, llvm::InlineAsm::AsmDialect) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x45dfcda)
#17 0x00000000045e0b99 llvm::AsmPrinter::emitInlineAsm(llvm::MachineInstr const*) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x45e0b99)
#18 0x00000000045dbed0 llvm::AsmPrinter::emitFunctionBody() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x45dbed0)
#19 0x0000000002270661 llvm::X86AsmPrinter::runOnMachineFunction(llvm::MachineFunction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x2270661)
#20 0x0000000002b5ffe1 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#21 0x000000000311a409 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x311a409)
#22 0x000000000311a641 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x311a641)
#23 0x000000000311ae82 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x311ae82)
#24 0x00000000039d7046 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) BackendUtil.cpp:0:0
#25 0x00000000039d73d1 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*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x39d73d1)
#26 0x0000000003fe10c8 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3fe10c8)
#27 0x0000000005efcf09 clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x5efcf09)
#28 0x0000000003fe05e8 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3fe05e8)
#29 0x0000000004246f89 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x4246f89)
#30 0x00000000041c74ae clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x41c74ae)
#31 0x000000000432653e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x432653e)
#32 0x0000000000bfd846 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xbfd846)
#33 0x0000000000bf510a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#34 0x0000000004021909 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#35 0x00000000036a86f4 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x36a86f4)
#36 0x0000000004021eff clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#37 0x0000000003fe9e75 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3fe9e75)
#38 0x0000000003fea8dd clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3fea8dd)
#39 0x0000000003ff2805 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3ff2805)
#40 0x0000000000bfacec clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xbfacec)
#41 0x0000000000af4381 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xaf4381)
#42 0x00007fc2c8e5f083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#43 0x0000000000bf4bee _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xbf4bee)
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
Compiler returned: 134
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWl1z4yiX_jXkhrJLQh-WLnLhduKZnupsp9qZ2blzIenIZlsCLaB8zK_fAkm2UOxO0uuZet96u9KJLeDwnIfzBYIqxXYc4BpFn1B0c0VbvRfy-omB1IJfZaJ4uf7vPXCci7phFWC9Zwo3UuwkrfET03ucV5TvsJ8gsjp8xlQpkJoJjkvKKmXanvZmfN9jgWmuFeZC1rSqXubIu0HeEsVe_2O_PgpW4BKRpOUWZYHzPZUYkSVFJMVo8anrhzHjGkvQKDg8oarGj6KimlWASIIIUaAzjEjkmV8-IgSjYIkRISi4keYPSYwII7h73j80c5mfQTZa3JxE2_1edTxJfPvcVEKCNML2WjcKBUtE1oisd3k-34kiE5WeC7lDZP0XIutf4jiUtw-3f42lPewB55KqPRatblptZJya27LawV5LITQi66p6rGeNFP8D-fAVkTXjedUWcHywaZtGSNNjRZVmfDffo2AZLRIjrYC80i-NIZC2Whhu7LBgiYJlTpVGJFlLUSOytLxFn6xFPAiMgptR17vVA5U70LfPjUTBJ2zG2C654Eo7HW2X6MbMvjzYEIo9pigKVg8CBbeIJH_Qyk5IYkRis1YWTLB6eOnaTSOVu7YGrrEoMePGfqlmmTFhq5FvV3dh7ROK3gDvv9wuN7dYtVnNNKY4a3dYgiEIazFdRqb3bTbPjfoDmxPSmVItKETWmPIC99xjfVjUjObftaQ5GP9oJDRS5KAUFFiJVnaPzUiqlMgZ1VBg2XKscska3UPeaJp_x0VbNwfj8ObIS-97Hx1oUL15iMYg691ZzmAwU7K2RjQ7eK6aadny74isM8aHZjzbFU9UlrMQz3Z4JoxE2jRGrjXQucKzDZ7Ndnk-00JU-Z4yjoKbH05sOqdzMvfwrMxFJeSsYHTHhdIsV3hWcjGzfLmPv3oYBaueqOC2U903qqNgBaJEwS1uqFQgMdUYeGEMoTThwPYkpudKFIB3wEFSo3LXEpiWby3njO9wQ5XCiCzWLc-tLd6bB3eU053BvsCC41oUbQWmlwOILPolCk8J_DOJrYXXWfWC7yXj-iCvHOYyEkOvNH-6sIZI4GHv2Rv-BYvYT8tk5EHqRXUfrEhrHA-dhSXHTpI-bYXSEmhtXWhlAmjnUMn_20QQ-eQ998BM3Dwg913kURkX-Snkqwoob5uvfMN23Dj6Mf5Xwsi_KE4Lw8FJHJwxTUiY4JUxwG-Qi0eQLx2wXykvKjNd0rPn9FkJruFZz_PGOKZn_x-mCPopFmVO8jTIspB4eLuVoLSQsJW617BiGSLr5yTexuGsYrx9nu142zU0ei-BFnMl5p7VxQ9D4jmahONpEliA52VYUqbgHfJzIzm2ksPA8zJHcuRKjookSjHNxLuQjyQTkkSpIzmeSl4c1vvdMhfElblwZcZQFvHHZAZBWcSOzMSxkjAKk6J8ncnsZ3ikVUs1LNU3qERONc0q-Fw3leOUd6s_aNVC75Dj532YANnlS5ttpz3qL_RFtPpsjzV7bpszrTfAFdzRBgWr8ZANdFFoPGjiiaekfOaleIckU9zZKDmWUYCmrHLl3VMmP4wsuDXhf9yeCWFrhq7kuFwA6VbeMY10ahpZkLxpGstMiarVNlBbbuO_CW0WHMOyicpuQgkhoYWpkxPKBX-pRaswpzWoxiaRtIO9VPW9Ta3dV5tmjVKglEmjrlmbhtFSTMx7c_dF5L22iCTzhkptAlqKD5O8jqEGt5NOSFRCVsZv4f4ziU9BXz48fG1AUl440Ddmb_IH5FpI663BSumia2o5-98Wto2emqaVXSxVfRC4wodRBZS0rfS2gAo0vDXS2rB1EUvOGPtpRpzERWIvoOB_nBH7-TNXWrbWyxxKpo3W2V8tqZaM775BeXKlnUf_ZgwHE1_xSUF-xleWvLijOt8veXFbM93tjlzO35BqRW401WCK-48sw1LVD-I78JOL86bXhS4DJQ3I4mcYOEC_iKo2A3ZzbKCmK1pVZm817Es_ElaiyRJDlkQfVPBbaxawSzjHxPPGvPF43jAqyryg7qoNm4QucdRMf-YV47BUtRu1Ti_73WrTZro3tFIMAfkVkZ0tfm1sIjnX6-a_zMbpdDVxRDUAv2G0shvii-eznicnny1cIsHL0vSniLyj-Z7xLtqNdP0blLAYHSWSiTVkUHhvKDHsUD-J4qU_ArkkzwaBA9GpcghZeHHsjyD2wXSMUrb8K-9ZHdCeYvzYFl9Uix7kWAviVD8ki8oSxlpMEJnN_0iXk0q8Rj8KPifknQwHxN0s-z4NvbEVr-_N0OEY4sOILlRNdrAcPskUdxz678B9Z49QXGPoH10ecxy6NhBMMUNCRpgr2NH8ZchFB_RdwdJr8A8hh4Q4yN1snBYLL3yzBjYFx3Dw9CtUzbAO4-eIJMORMgqWn2j-HXix7I1oVG6dKdIkfdo2T5Jp2A6nTO-r0V4P7Ouz_tWCg2cluGprQ6KNyv3T3zWrTrtUNCUrKPyxWENAL-Rrd9rusHBzPHy85TvGh536qMuvQAtTgVCZ709l0FHXlSjgF-Bv9DqfjEedvlC--3G-PlcS9Ha6PM3vcb3HyV3LVrFH-Abliuv7ycI_ln14XLMKNi9KQ90v37-kyVzONztrcnzTKeiCEnwvT34EqbMge6b4IClXlT2S_p2ziR0uNw_92eLFI0wH0tHCqaYiKPPSS8da2JJ2uXlwMZoivLfCaRl8MbQ9GAdtMuHciyA54XW9ZXde_wx5q2F53HddllEDwcHo1E0hCeMycRhdS7O6B_cbg7x4WdfNPobnvl8I_XwRUnAp7CY0ZTHlOZxm8bw-F7bZHqGjglM7hQGJo8BRoQd71ORR5PQ18FeaXjho9Mgc6E755GVlkYQxznN_W1PmFhlLKemLCenByr4VP2xQ-tjnPBvOWy-sQYfPUSCYKBD5HsUD4Sv_wUaBH56xvdZmks2MjD4CjvJdigvJHs_srgOnUAo94qdeaikZyR1eu22lZdW2dh5nU0r3zrs7WNiW3CA92ko3d283K38l6toeMLnOe3L1DklO2BxOKye9HVP3Ia0dBmy3-fOz73dfMqpYblIgM5gsi05n82CrJWVaDc0TcbSyLyeEHLWbLqPj8-P2txuCyKKidWZ24IsjVcMJdop_E9np9Yim79jiMhwtxak3aYezlQ0twZao7126i0b0Dqtj8_HUuKAs8X-ycUw2vWetYDFJ1yksorPE2VWjr3LiwKYTuicDTYdz1fMPui6dEubyL2M6hR1TmhYwNCmKjzLym8jUeTp-E9kXpvS5ncL5A_mmew9n33W_n8Hj-frfyaOhyeHRfQVXliTxzlrWzeizUxqcqAnO8f8P8njR8tQSM2Yu9CYJnOaQdyiHGmRAboPI8tX577n0fMGqw2ByQDsVn0fLMEh8bOBebtZOqDMrmVxVKL0kwNttxTITa6nU2xGE915eCL0kcGaZVlRhBoA7-Zfk1Ig9zHu4TwhSCnuFsbv9Vfa1PM57--xuz3UXQeGZmRUvAPtBaKC1CvDsEWuBFQBmozI7nVyWlKBbycF4iBk8ueN4VVwHRRqk9Aqu_YXnxVGQxour_TVNIE0yKKiXFnmUZH6QRAtapFEK4HtRfsWuiUcC3yfE9yMSLuZJUnpFlqa0jOIAPA-FHtSUVXNjv3Mhd1f2zt71IvC99KqiGVTK3o0lpCeLoOjmSl7bm35Zu1Mo9CqmtDpK0ExXcH2g0E_-8cuMV62srn_-tqJV_v8CAAD__2c1lQY">