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

    <tr>
        <th>Summary</th>
        <td>
            Clang assertion failure after D139237
        </td>
    </tr>

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

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

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

<pre>
    I bisected a Clang assertion failure to [D139237](https://reviews.llvm.org/D139237) and derived a minimal reproducible example:

### Minimal Reproducible Example
```c
// RUN: clang -Xclang -no-opaque-pointers -Xclang -triple=x86_64-unknown-linux-gnu -c -O2 mre.c

#include <string.h>

static int foo() {
  char *env = NULL;
  return (env!=NULL && strcmp(env,"xmgr")==0);
}

int bar() {
  return foo();
}
```

### Error Message (assertion failure)
```
clang: ~/llvm-project/llvm/include/llvm/Support/Casting.h:578: decltype(auto) llvm::cast(From *) [To = llvm::CallBase, From = llvm::User]: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
```

### Stacktrace
```
Stack dump:
0.      Program arguments: ~/llvm-project/build/bin/clang -Xclang -no-opaque-pointers -Xclang -triple=x86_64-unknown-linux-gnu -c -O2 mre.c
1.      <eof> parser at end of file
2.      Optimizer
 #0 0x000000000ac8ecca llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) ~/llvm-project/llvm/lib/Support/Unix/Signals.inc:567:11
 #1 0x000000000ac8ee7b PrintStackTraceSignalHandler(void*) ~/llvm-project/llvm/lib/Support/Unix/Signals.inc:641:1
 #2 0x000000000ac8d4e6 llvm::sys::RunSignalHandlers() ~/llvm-project/llvm/lib/Support/Signals.cpp:104:5
 #3 0x000000000ac8e5be llvm::sys::CleanupOnSignal(unsigned long) ~/llvm-project/llvm/lib/Support/Unix/Signals.inc:367:1
 #4 0x000000000ab9cb27 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) ~/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:0:7
 #5 0x000000000ab9cf9c CrashRecoverySignalHandler(int) ~/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:398:1
 #6 0x00007f5222414050 __restore_rt (/lib64/libpthread.so.0+0x14050)
 #7 0x00007f522206518b raise (/lib64/libc.so.6+0x3a18b)
 #8 0x00007f5222066585 abort (/lib64/libc.so.6+0x3b585)
 #9 0x00007f522205d85a __assert_fail_base (/lib64/libc.so.6+0x3285a)
#10 0x00007f522205d8d2 (/lib64/libc.so.6+0x328d2)
#11 0x0000000008d969c5 decltype(auto) llvm::cast<llvm::CallBase, llvm::User>(llvm::User*) ~/llvm-project/llvm/include/llvm/Support/Casting.h:579:10
#12 0x000000000aac03d1 llvm::runIPSCCP(llvm::Module&, llvm::DataLayout const&, std::function<llvm::TargetLibraryInfo const& (llvm::Function&)>, llvm::function_ref<llvm::AnalysisResultsForFn (llvm::Function&)>) ~/llvm-project/llvm/lib/Transforms/Scalar/SCCP.cpp:756:17
#13 0x000000000a4f4740 llvm::IPSCCPPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) ~/llvm-project/llvm/lib/Transforms/IPO/SCCP.cpp:40:7
#14 0x000000000ce104c7 llvm::detail::PassModel<llvm::Module, llvm::IPSCCPPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) ~/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:88:17
#15 0x000000000a27a38a llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) ~/llvm-project/llvm/include/llvm/IR/PassManager.h:521:33
#16 0x000000000bc5a497 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&) ~/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1059:5
#17 0x000000000bc54d99 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) ~/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1116:3
#18 0x000000000bc54304 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) ~/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1275:3
#19 0x000000000c27d628 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) ~/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:381:7
#20 0x000000000ec85e7c clang::ParseAST(clang::Sema&, bool, bool) ~/llvm-project/clang/lib/Parse/ParseAST.cpp:203:12
#21 0x000000000c09480c clang::ASTFrontendAction::ExecuteAction() ~/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1164:1
#22 0x000000000c278dd4 clang::CodeGenAction::ExecuteAction() ~/llvm-project/clang/lib/CodeGen/CodeGenAction.cpp:1170:5
#23 0x000000000c09420c clang::FrontendAction::Execute() ~/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1059:7
#24 0x000000000bfc14c9 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) ~/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1045:23
#25 0x000000000c261c67 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) ~/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:264:8
#26 0x00000000072c1560 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) ~/llvm-project/clang/tools/driver/cc1_main.cpp:251:13
#27 0x00000000072af48d ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) ~/llvm-project/clang/tools/driver/driver.cpp:319:5
#28 0x000000000be7ddc5 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_1::operator()() const ~/llvm-project/clang/lib/Driver/Job.cpp:428:34
#29 0x000000000be7dd95 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::$_1>(long) ~/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:5
#30 0x000000000988bb49 llvm::function_ref<void ()>::operator()() const ~/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:5
#31 0x000000000ab9c93a llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) ~/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:434:3
#32 0x000000000be7d537 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const ~/llvm-project/clang/lib/Driver/Job.cpp:428:7
#33 0x000000000be1a9df clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const ~/llvm-project/clang/lib/Driver/Compilation.cpp:200:15
#34 0x000000000be1abe7 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const ~/llvm-project/clang/lib/Driver/Compilation.cpp:254:13
#35 0x000000000be34348 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) ~/llvm-project/clang/lib/Driver/Driver.cpp:1816:7
#36 0x00000000072aef08 clang_main(int, char**) ~/llvm-project/clang/tools/driver/driver.cpp:520:9
#37 0x00000000072e3192 main ~/llvm-project/build/tools/clang/tools/driver/clang-driver.cpp:11:35
#38 0x00007f522205034d __libc_start_main (/lib64/libc.so.6+0x2534d)
clang-15: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 16.0.0 (https://github.com/llvm/llvm-project.git 0a67e771f6d21b1232c40f226c4eee48c3527210)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: ~/llvm-project/build/bin
clang-15: note: diagnostic msg:

```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWktv27q2_jXKhIghUe9BBq4d392i3Q0Sd-PODIpadngrkd4klTp3cH77ASnJEmW7SdqejfMqgtoWycVvfevBRVJEKbbjADde_M6Ll1ek0Y9C3nz4fBvkeXRViPL55j0qmAKqoUQELSrCd4goBVIzwdGWsKqRgLRAXvxuGYQ5DlMvXno4e9R6r7xw7uGVh1cSnhh8U7OqeqpnQu48vOp74xwRXqISJHuyk9SMs5pUSMJeirKhrKgAwYHU-wqMQH_p-f3_OGz_0Kdu0P140G03qO2b-O0f7ccaYOj-y-9eOEfUanb9v90nF9diT_5s4HovGNcg1dCmJbNIlocs2STRdcO_cvGNX1eMN4frHW_QNUXXnzGqJczoBC7jtGpKQF64UFoyvps9euHtuJPSRDOKGNdoK4SHM8OQl75rWxGij0QiD8-BPyEvXKLfv3z86IXHZgm6kRx5OAP-5OHAC5emB_Jw4uEEKS1pve9bFx7Gh3onPYw9nHvh0guXvv3WyfPS5RibAVUQeQqqm_UI-IyAnv7z9ruVUkj0CZQiOzDoT5zMSD0nyVrFmPBvHl4Z_7reS_F_QHX308OrjvThwUOz3wtpeiyI0p0V5nGaGTkl0Eo_78GAaLQwmtph4dwL55Qo7eFsJUVtjGBpiN-thTXF0G1BquodUeDhBWr7Os1fFEgTJuEczY96eonPFPHCxVoYl8DZH6Sy8lvLeRjbycPF-rltt6Ejd00NXCOxRYxTUe-Jtr7fahBYy6aWQyhnrzLFgyb0q5aETgOn_WmbUdnU-2Mw-jNk_91JsZOkPoJSF8xSNKwqzSfjHl79g0Mv6MB54QLE1gtv0Z5IBRIRjYCXhrgt65ME7jp_3mtWs_8H2Tm4h0Mf-Qe__0doBpSSkUnVs2q_3EnGtSVpbTnE2dBJkm8bobQEUlurLkyYGzNe9t2KFY7DfuHsYB6wHSeVmjFOjecmqRfOg2BAG0zRQlqgCbRWxm-ElxWYmH4SrOx8-ifxJFFg8Axw8AROGUFyjrz7hjuoVOfmr8fTA6F745-BHxl6BiDhlJe4gHNAFhUQ3uw_d3A8nDXcLpYlqgTf_QKOwtZmA7TIgVbktMCpzYRc8OdaNApxUoPaW6fKO5iSqMd7oOIJ5PNCcA0H_b7eV21rS6Lt4-HMutoC_YQe52briPa9cJ4OusRTXbY5Rc7wqfO9ORC-AybMM5fapIOTbmOMcRREfuyjzUaC0kLCRmpk_czMkUTt514_SiDlTImZ7-F3_sEOOi5CRmrqSPWTOMgKJAlTcCqOGkGJFRSSICscQdlEUBJnMSKFOIdrLKiIs9gRlLuC4jKLCdps2rV0YxaBTUFegoezmAyLLQ4D_0RqiV8SUWJHhJOOsjJPchq_YqENF-eX1MlKalfDybOX8tira4LcppFBFTeVEeqHZTACJBv-_u5hsbhzIH0SZVNBl_OHx0uiyUfyLBqNqOCmsrAdlC7b9m3DqakNHCLWRO5Af2SFJPL5Pd-K41jkzLnqBxuhuSVpPHcveyNh68ifc1I9K6buQTWVVishV_xFyS9H7loSrrZC1sqQTUll6siVYaqL2jRODNXpQLWbrKNtlEb-SIOW5zui1JH615De6_eJcLIz3rM4GWI0St6s1Pu7z65G0SgrGn2cDE8h8COajoCVoAnrUrfR6pMooToHz1FnxILz_E6CAvkEZasvqB9hwfz95dSehOb7ew-vLCOt3PemLOSkshGaZROvcdcenJIwGxdqIzkvcvuvTFKbvswGcB6GAzvJmJ2CxiTKX6wybmumzT6lLqrn36DaG9BdtdYVysSkgzu2h4pxk8_7TZkXzt8R-hV4Oe8yxii7NZz92cBmr10OTJG8_yaZhk1fKo8GlbAlTaU3JVSg4YWBrXEmSfXCtGshqs-N3jd6xVo_eM2ck1HDhGdt19LSJ4-FKOF_wGyBOo6-aFYdC9c4HypXY7h0YriozPMfNdz4-T-dtX6WuSAw68jI5bMpc6EfoZHOho1OTmtKl5IlIzsulGZU3fKd9W_rUKMuvwEpQT4AkfTRRITgylnQR1076C_0atf4Fzp9JHx3rsvA8YM9YrqHrfu4T0zzicB_A-PjNHaNnztrLk7LBGdndF4Irpq6j492W2IX98qmti-cTbxi_rDuNh1vD_fuW8tzv2fJAqdYwM55A9AshpSOgd8RqWD-sHZhPUBNOjcohKiGz1cAtBL7z_nDukOG_dAyO0Bzqnnq51HmO9DmD-uVNOQcfamNswPQRkPvXpc29i6oXtDoq8NbECTRsNkz6PDE4llZRmci8KeRfd-eQZD6TgLH4ZQ17LL2Hcp-GVntqjLyMqckLbY0iGjuklXvWWVKLqUJp3Cer8tavDI2RsCnMw4nOSay8RDaOHYNnQQ0SZ283qIcBD4JSk4Rn6h4cet4HvPaxtfq4mx9GFk_zQb4TiWWYhrEiY8oDTY1YW4hOZeSPN_bbZo9_e-S_bzb07nP8AJ9_yCv10ILUZltSynZk9kwr_q5e8CxPcQbEZ66iMk2ykrU670IWiJGuB9qUlV_ANVCtodSZ-C_5B8nKNsvfdYM3CoJu2s9pGVJ47FPdGJawy-ChahrwstpsJ2l_riuCbvmEndrNiy13Uo2Wgg3G3o4BEH7oyCK0U17-dMx4nQ2DzZaEqZV3zwRR6rKuJaQo3bTZT5ke2v7lmc7xMPRJujRg7SD24uaNrPYri-7_LI3wgdR9HtcbPZfYTSYID8xQR5bl7x8-GBb-5uj2_4AqKoKQr9uttzo-V8Ttia0R10vntye7A7ny7WHVw_rj_3ZDaluD1oSZbeJNrUOUeTedeRZVhRR_jbrvc3Lfgx1krmog-mhcx6ON_7nDoyHWweyBbsXeq2Wv-qsOgojp2B1r0pM-MRh-h-dwX4iLQ2FjnvxU0BA8nJ7kVa7hpOTMqzn2ikfJgNNh0sbtu90nTtF-9s1H0E-lu2m_gxG8RFNKSjgsmddoOCDKNRl_T-I4iNT-tJu9KQcODrEnjDjC90V1WspGx_v_ELi4site9zbrALCKIyySyCXo-9OSXim8rxE-F9I3Cvq3CNVy3HlFWT2mGUUYZN6lsDW71jqK9oepU0Y8x-oUJ3aL8bGwYdLpnBSnkIY5BiZqb_3DkI_x-Wq2DRcOzPbRBiOImtygRf7YVSizaZihcmTRGrLwHfvzHAcRuXxzqydNDDLMgIpTaLs31HadtsORDurtu92oG9MPyI4MBN9JaAgjMx8jQJ0_YS0QAoAsdEWaDwTegKpmOAoSGb-zEcn72_tmH5sihkV9WiRGxE62zGNfJKkkKbBNilxUAQ4xDTytxgnNAKAKKNhjFMcDJeo7SmXUe3S-xxdP3sVi-r2PmSO9kKxQ9tkN21VBeWSyVe8bXJCLhca7Es_x0M-VCsbQuN3Y_o3YK7Km7DMw5xcwU2QpEGURUmErx5vggBSGsZlGW4hCOK4wCkuwygtcRyRIiyu2A32MQ5wkOMgSDGeZXFG_CSKisJPYpKnXuRDTVh1fEXuiinVwE2cJz6-qkgBlbLv6WHM4RuyjR7GXry8kjdW46LZKS_yK6b08KLdlWa6gptLL-6RrQaJulfxrhpZ3bzN7qZoM0hMxFikfw8AAP__Hl9CAA">