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

    <tr>
        <th>Summary</th>
        <td>
            undeduced type in IR-generation UNREACHABLE executed at llvm/clang/lib/CodeGen/CodeGenFunction.cpp:233!
        </td>
    </tr>

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

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

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

<pre>
    Given the following four files:

```cpp
export module d;

export template<typename>
struct integer {
        using type = int;
        
        static constexpr auto value() {
                return 0;
        }
        
        friend constexpr void f(integer const x) {
                x.value();
        }
};

export constexpr void ddd(auto const value) {
        f(value);
}


template<typename T>
constexpr auto dd = T();

export template<typename T>
constexpr auto d() {
        dd<T>;
}
```

```cpp
export module c;

import d;

template<typename T>
auto cc = T();

auto c() {
        cc<integer<int>>;
        integer<int>().value();
}
```

```cpp
export module b;

import d;

auto b() {
        integer<int>::type;
}
```

``cpp
export module a;

import b;
import c;
import d;


constexpr void aa() {
        d<integer<unsigned>>();
        ddd(integer<int>());
}

void a() {
        aa();
}
```

clang crashes with an assertion failure while compiling `a.cpp`:

```
In module 'b':
crashes/d.cpp:26:2: warning: expression result unused [-Wunused-value]
        dd<T>;
 ^~~~~
crashes/a.cpp:9:2: note: in instantiation of function template specialization 'd<integer<unsigned int>>' requested here
 d<integer<unsigned>>();
        ^
1 warning generated.
undeduced type in IR-generation
UNREACHABLE executed at llvm/clang/lib/CodeGen/CodeGenFunction.cpp:233!
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: llvm/build/bin/clang-16 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -clear-ast-before-backend -main-file-name a.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debug-info-kind=constructor -dwarf-version=5 -debugger-tuning=gdb -fcoverage-compilation-dir=build -resource-dir llvm/build/lib/clang/16 -std=c++2b -fdebug-compilation-dir=build -ferror-limit 19 -ftemplate-backtrace-limit 0 -fgnuc-version=4.2.1 -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o dependencies/bounded-integer/CMakeFiles/crashes.dir/source/crashes/a.cpp.o -x pcm dependencies/bounded-integer/CMakeFiles/crashes.dir/a.pcm
1. <eof> parser at end of file
2.      Per-file LLVM IR generation
3. crashes/d.cpp:11:24: Generating code for declaration 'f'
 #0 0x0000564f0e297c7b llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (llvm/build/bin/clang-16+0x4146c7b)
 #1 0x0000564f0e295b3e llvm::sys::RunSignalHandlers() (llvm/build/bin/clang-16+0x4144b3e)
 #2 0x0000564f0e298506 SignalHandler(int) Signals.cpp:0:0
 #3 0x00007fc4e2851a00 (/usr/lib/libc.so.6+0x38a00)
 #4 0x00007fc4e28a164c (/usr/lib/libc.so.6+0x8864c)
 #5 0x00007fc4e2851958 raise (/usr/lib/libc.so.6+0x38958)
 #6 0x00007fc4e283b53d abort (/usr/lib/libc.so.6+0x2253d)
 #7 0x0000564f0e2147e1 (llvm/build/bin/clang-16+0x40c37e1)
 #8 0x0000564f0e6d4b2e clang::CodeGen::CodeGenFunction::getEvaluationKind(clang::QualType) (llvm/build/bin/clang-16+0x4583b2e)
 #9 0x0000564f0ecca13a (anonymous namespace)::X86_64ABIInfo::getIndirectReturnResult(clang::QualType) const TargetInfo.cpp:0:0
#10 0x0000564f0ecc485f (anonymous namespace)::X86_64ABIInfo::computeInfo(clang::CodeGen::CGFunctionInfo&) const TargetInfo.cpp:0:0
#11 0x0000564f0e66ee7c clang::CodeGen::CodeGenTypes::arrangeLLVMFunctionInfo(clang::CanQual<clang::Type>, bool, bool, llvm::ArrayRef<clang::CanQual<clang::Type>>, clang::FunctionType::ExtInfo, llvm::ArrayRef<clang::FunctionType::ExtParameterInfo>, clang::CodeGen::RequiredArgs) (llvm/build/bin/clang-16+0x451de7c)
#12 0x0000564f0e66f3a1 arrangeLLVMFunctionInfo(clang::CodeGen::CodeGenTypes&, bool, llvm::SmallVectorImpl<clang::CanQual<clang::Type>>&, clang::CanQual<clang::FunctionProtoType>) CGCall.cpp:0:0
#13 0x0000564f0e66f250 clang::CodeGen::CodeGenTypes::arrangeFreeFunctionType(clang::CanQual<clang::FunctionProtoType>) (llvm/build/bin/clang-16+0x451e250)
#14 0x0000564f0e695f23 clang::CodeGen::CodeGenTypes::ConvertFunctionTypeInternal(clang::QualType) (llvm/build/bin/clang-16+0x4544f23)
#15 0x0000564f0e693f3e clang::CodeGen::CodeGenTypes::ConvertType(clang::QualType) (llvm/build/bin/clang-16+0x4542f3e)
#16 0x0000564f0e60edfd clang::CodeGen::CodeGenModule::GetAddrOfFunction(clang::GlobalDecl, llvm::Type*, bool, bool, clang::CodeGen::ForDefinition_t) (llvm/build/bin/clang-16+0x44bddfd)
#17 0x0000564f0e6d1e22 EmitFunctionDeclPointer(clang::CodeGen::CodeGenModule&, clang::GlobalDecl) CGExpr.cpp:0:0
#18 0x0000564f0e6d0583 EmitDirectCallee(clang::CodeGen::CodeGenFunction&, clang::GlobalDecl) CGExpr.cpp:0:0
#19 0x0000564f0e6cea4d clang::CodeGen::CodeGenFunction::EmitCallee(clang::Expr const*) (llvm/build/bin/clang-16+0x457da4d)
#20 0x0000564f0e6ce75d clang::CodeGen::CodeGenFunction::EmitCallExpr(clang::CallExpr const*, clang::CodeGen::ReturnValueSlot) (llvm/build/bin/clang-16+0x457d75d)
#21 0x0000564f0e7d1bc6 (anonymous namespace)::ScalarExprEmitter::VisitCallExpr(clang::CallExpr const*) CGExprScalar.cpp:0:0
#22 0x0000564f0e7bff4d clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) (llvm/build/bin/clang-16+0x466ef4d)
#23 0x0000564f0e6ad121 clang::CodeGen::CodeGenFunction::EmitAnyExpr(clang::Expr const*, clang::CodeGen::AggValueSlot, bool) (llvm/build/bin/clang-16+0x455c121)
#24 0x0000564f0e6ad090 clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(clang::Expr const*) (llvm/build/bin/clang-16+0x455c090)
#25 0x0000564f0e6eea50 clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (llvm/build/bin/clang-16+0x459da50)
#26 0x0000564f0e6fc951 clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) (llvm/build/bin/clang-16+0x45ab951)
#27 0x0000564f0e6ddb9b clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (llvm/build/bin/clang-16+0x458cb9b)
#28 0x0000564f0e60ce09 clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) (llvm/build/bin/clang-16+0x44bbe09)
#29 0x0000564f0e604c17 clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (llvm/build/bin/clang-16+0x44b3c17)
#30 0x0000564f0e5f3cb0 clang::CodeGen::CodeGenModule::EmitDeferred() (llvm/build/bin/clang-16+0x44a2cb0)
#31 0x0000564f0e5f3cdc clang::CodeGen::CodeGenModule::EmitDeferred() (llvm/build/bin/clang-16+0x44a2cdc)
#32 0x0000564f0e5f3cdc clang::CodeGen::CodeGenModule::EmitDeferred() (llvm/build/bin/clang-16+0x44a2cdc)
#33 0x0000564f0e5f169f clang::CodeGen::CodeGenModule::Release() (llvm/build/bin/clang-16+0x44a069f)
#34 0x0000564f0f04dac4 (anonymous namespace)::CodeGeneratorImpl::HandleTranslationUnit(clang::ASTContext&) ModuleBuilder.cpp:0:0
#35 0x0000564f0f04ae38 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) CodeGenAction.cpp:0:0
#36 0x0000564f1075f2ca clang::ParseAST(clang::Sema&, bool, bool) (llvm/build/bin/clang-16+0x660e2ca)
#37 0x0000564f0f049494 clang::CodeGenAction::ExecuteAction() (llvm/build/bin/clang-16+0x4ef8494)
#38 0x0000564f0ef59cfe clang::FrontendAction::Execute() (llvm/build/bin/clang-16+0x4e08cfe)
#39 0x0000564f0eec04df clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (llvm/build/bin/clang-16+0x4d6f4df)
#40 0x0000564f0f043e77 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (llvm/build/bin/clang-16+0x4ef2e77)
#41 0x0000564f0ce10684 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (llvm/build/bin/clang-16+0x2cbf684)
#42 0x0000564f0ce0cb9b ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#43 0x0000564f0ce0bdf4 clang_main(int, char**) (llvm/build/bin/clang-16+0x2cbadf4)
#44 0x00007fc4e283c290 (/usr/lib/libc.so.6+0x23290)
#45 0x00007fc4e283c34a __libc_start_main (/usr/lib/libc.so.6+0x2334a)
#46 0x0000564f0ce08be5 _start /build/glibc/src/glibc/csu/../sysdeps/x86_64/start.S:117:0
clang-16: error: unable to execute command: Aborted (core dumped)
clang-16: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 16.0.0 (git@github.com:mathstuf/llvm-project.git 073ab80a546cdb407dd242c0017269af014b3590)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: llvm/build/bin
clang-16: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-16: note: diagnostic msg: /tmp/a-9ab9b4.cppm
clang-16: note: diagnostic msg: /tmp/a-9ab9b4.sh
clang-16: note: diagnostic msg: 

********************
```

Where my clang build is https://github.com/mathstuf/llvm-project/tree/p1689r5-csd rebased on 396ad408fdf7a34581a9df5bd22e5913baf26f35, so it should still reproduce on main.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEWs1y27qSfhp6g6KKBP8XXsiS5eOanBuP7ZPMzgUCTRk3JKALgI4zi_PsUwBJS6RkS3LuzKQciQLBxtf_DaKJ1nwtAC695MpLlhekNc9SXTLywpk2UsBFKdmvyxv-AgKZZ0CVrGv5k4s1qmSrUMVr0F4094KlFwyfadD90c2mG4HXjVQGNZK1NSDmRVe78_u7BppNTQx40cL82oAgDXjRdTdFG9VSg7gwsAaFvOyNQNFqC8Y-gbxoaafskC_eLrQhhlNEpdAGXjcKkdZI9ELqFjyce7gYEfWCQoFplUDBiFq23KdcKQ6C7VB-kZyhysP5ANfdQq8HFnmd7SA4vFK2PCyuyXqMMQ_njqluuZ7weEmLarixJbvlavt5QBvo8U0fEzEy5mT_uMfHx-r9gOABnTDmRQv3xD7wweLOMUM6wckbd3dqnR_j7gROP2C_m3GAH0q9aNGbSHfleLveNYO9247MYaP5LWGUpwnDMVMeYGafj7kXza3AzgL4DjpyGN0WdD9ApwNT_FNjc65DyCFrGymnFS5Msl5De-7aed9hbX3gat3yB1YfIJ0oPFoTsUZUEf0MGv3k5hkRgYjWoAyXAlWE160C9POZW8OXzYbXNmp6aUBmVuZp8F4M737eikEVHs5KD2dv0_tFPbxijlI0x6n98KI5-kmU4GJtL620QWsLRoFua4Na0WpgyEuu_O_dtd-ZddJzivp_-36PvOT677___nuKgPQIigGAkNZv54gLxIU2RBhOnEBkhapWUHc9ODjSG6Cc1Py_uzkezg4bAdq6Ks6Qgn-1oA0w9AwKeoBnWM_Appf0ISUc5IbWIEARA2zW3WkFA9ZSYF264wLd3vv9JC5FN-mvf9xfzxd_zK--XCN4BdpaaMSgun5pPLxypuLhVc1LD68WksENiO3VqpfKoMso8nDYEb77cj1_uEa6LRtuEEFlu0YKutgu0bMxG1cI4JWHV2tunttyRqVdsl_ZfvkbJf8J1Hh4xbVundYQEVaktG4ZuBLDKRSVhP4wilDw8AJtFGyUpKCtyWjZqm7YPkm0lpRbKSHVCqSp4hvTC-zBEPoDsbbZvNlrMOvEfafkWpEGEbVuGxDGYh9kVLa8Zvabi0Fifpgin9IQ-UbxTQ3oNU-f0thvxQ8hfwq_5qJ99deiRT403Piy_CfyGwU1efVJXSOfcU3KGvxKASCf1kCUT7TxS6ikAt9ya6sIvyFc-Laq8l2mcSbdUZLUadlvJIMabThF_oZTv4YXqBHufnDtbzggv6kUacDfSGuEyouWDkPVEPPsg1JCIr-qNj6VworYeNFSCuRXQvpKtoJxsfbtXOQ3Llba4ksqn9ScaNDIr1rxkwvmG8uS9qIlRr4hag3Gp5vWysZPY-SbVoAbcDZqATdWwlaGQIyvKak7mfBXYBaXXUP7g_n7DMp27XNRSf8HF8yLljtokM9-ElX5L6BsWPGiZdI_sQZll3aRZ7lmJfIrKl9AkTX4XezrBMm4lYxTNvIVdGZlR6d20PnK4DnWErRxaDx85eErbFfosL5Lvuq4q7n1nbBAfjWEHf_N0Pu7AfKrtWjpDmfxDM9Cx0Ytlc84WQupDadWFYQxpfka-cunp5vF4umP-bfrp-X3-f0KPy1Wt0_zhz-9aBkiXyIGGxAMBOXO8UrpAoo_BCq8WvxJfsDKlfR41cfVmeUDrwanW03C7Uwi_xVtaPNb1MlsQ5s-_M2QFy1AVl50jTZEaVA2fFnnsFGb132MxYMjg3L-gr58-fYnur1H04AYzdB-kgpDG91i6_Q3_XybQSWzOxyFGNCaqLc8UNmM16ceHAUoeA2CIEjSuAoAFxnNys5kXNGjf-nu4k5xYVwIeuziWL6dpMjPJ6mtHzQeTm0ss0nFVgH9rPeikIevgtc4jFNq83CxRRVOUCVlBIdQ3bfiga8Fqf8ggtWg9FB-nLhwXEYwWhhPFs6TIEWjJbrSyC7SDeteCYH7_0Yo6gllFY0B50lIggA5dKtWqzc_rHlJZ1rOOkRRToJghCcekyFhGtOjZPI8jemITDJFUyQ5UoRrOAFTkeQjYumYWFQmEUOktLnzGDGMk4iNiGVjgYdxBuGJ6gtolEE4opaPqKUsLjGgLtY5exlKhN0fQ5XQDa7BXNvSzbnLf9hAjfMdAv_ZkvrRbgRONrIkj0o8NrJihJJSEkbEUiNCil-NbDWy6VJvnJ8V3cL_5VL0_Or2VlTyDeqtYFwBNfduf3_vitH3AXd76UeX2yyZfcu1rhdM0MV5Un0Cnc0erQE3MEI01sHNIP5uYno6znGMSFOAjB7TtZVEHzqIUkSswQbaMYQRViKsAL1osTPoxGlL3wUqpax3v7chaq4U-XUP1fjRD-l1JHduDLi6CXbk-tV0II8vdfDhO2JLKQOq09N0wZHI7uFfLVfA5mqtzzD3kEG2DT5WUXiiqCoiITpN_O-qsEsz-2J_aEhdfwNbU902m_pM6adTeRx6YIB7p6SRb7ZQoMXNgtT1YVuNpiLASXC-ra4UwEitx231PbCnKhNwEoyUGY85KZIKR2dwspDiBZTZ5eLWVvWC1L8daOO4wtEIbDIBG1XR0XSwD3Zf1J8Bh6udUsOCS8fgAmAVOwbuT_feohu6ATNnTH2t3hLYCONNLUtSL4FOPKTDPT8Uvd5bfCXVEiouuF3l6YzKLi4Zq9iI62ySoUPAGF03_M0kLOK7fqt3NBj08thz3F3mrWdev27UYc-cVgxBkkcOz9IlVuvSMHW0j4qI34AyLgtSCiQ-ahDj4sXiPoTYrtllVaf5k402YyQeqQ8HU4xZ8kmMFtM0gHWjO0g_yk624vlG6hYeanmGTSYZy5IxU-NKImNhSdNjFc-D3e8rC9cy5N5L2OFvXJ_B3mAPHbGDVoHH2TMrq-ozVrGF-6FlDLHgVGGmKVQTC5mkOsJCHJ6Pdy5-nQD2PbLz9XrHMs5lKkloiMMRU_GUqaA4mr_3mbpdC6mAHWXsDKBBMUrPeJLxAMjxQuOAtZhmso2wIyPRHys_58bssHRW0VEwMi468CRVVrRIPmFTC9lsZCuY5eU7N8-yNQ9U7pVRO7MGBtJTsuTY6E7mlpRFMja2aYpkZVGex23_FgjszdOqgm3--tCxxtu1HfGcvhumZVGO2J1k4IBCUJxTB1nVdmxtS4ihWDmN-W78W3cOeYb_xWUJQTFiZpLDg5iG2eeY-b9jIqJhtsvE5J1gUkW0PBpEpkwsoQKlgJ31Qi4mmJYj15-8CbRY2NFd_r8NCxttZCcvB_9_sUQTLGFaVOdguYcaiIYzYQRpUY1gjBJjFcSM0PhY6dSjsRFq2KXb4e796qMiQneHDn8JPslC84fHhRQGXoeg03F0ZTHD4fopSiYICUT5rqCuusOqhRS6bYYy7jNYerbmu0eOEyy7eSwMsqTClOxiuSNKw_zhcZJ7oSGTHHRWQZOmAWBKRnrLJlIp4iI-YD7z3RTanb_Oh73m6XYDVR4X8Wj9cdCvkoJWo535SlnZCnYAwHlLBzmtRvvuydtXoEHMJp7TbHgN6tYdslM4zP37WM9JhyytYjbyqDiYaCaCbJRBeiBblC_9Wep-GTPi4pycABWGbJQT4lEcphAGaR4jSsOnhlgC-eF68JlMisAFGo_hhWtbOQcdpmWV5iNzivEYXWCLDDRIahE-OnfJP3xNuAfVqZEp_vJOZImjyaIlq3ofGoTiDoo6lh2HZzFJWDVmcnIWFFFcHD9SsjXJKKPGyZRMFBP09GQfe9KGKOPQn0A4ikcxJU4n8shLSFBHEu1wu7Z0PLzSiu78orr18Go2szd-aQYb7eFV15dghyyR2YM768y2WngTWTRH7kzaXrSClDUgI4eOEURl0xDB7M15KZUBZrmjUoFrp4DtBvYgwa4hqeq9fKDm-pCAIda6tbQ7DLR0Ww3If3FjAIjv-OfuIqg_EEdhOgtmTo9rbrw42Ok2ieYNMc_atNWk42S25gYFWUTKPCBJnFJWxkHGGI4xDYIww2lBqiCMyyjZUX53oGI5eq_fo5_3rIAw5Foz7OyN1Px1aJ3ShtQ1sCVX7_SY7Mlx6FvanvSjRrs-qsF0fuNvp8urb-mZPz7OF3-gxz-u0errly9fv9_-4watbr9cP6DHr2746q8bdH999_X-0Rsaae4OteTk7tjj3bactwkKkOtnca1JbyRPFAFemWbj4RXxC1IWZWxDTfN7FPTzJ5Tw71LFoY6-78-gADW_ek_quki4_qjN6h3Dt8wqAA-vNmGaFyrxqWZIQUms4qRAUZESFgd5xaqMRHGSh6RgVVIyjCEpwqgkFU6rKLFhWUvEDdLPsq0Z0obXNXJmwFoKlpYNg7MLdhmxIirIBVyGaRblRZYG2cXzZR6FOEyzLKVBWMZ5EOQpFCktSBqUuILwgl_iAEdBGKZhEUU4mxURyasoZXkZxWlUZl4cQEN4PbMczqRaX7g2sss0CPLkoiYl1HpoZVeXTgxlu9ZeHNRcG719zHBTw-WRhjr0v9BLd9Gq-vLzzXKO0f8JAAD__8vvPVI">