<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJy9Wllv4zgS_jXKC2FD9_GQB-fsLDLbQeLtfjQoirI1I4laksqxv36LlCyJttO2M40JDB9Useqrm0dSln1cPiBaE9bWknKaIYwIx2KD3ja0RpzKltdFvYZhK7TrtixZI-EbyjmrFC2rhaSvuER5WxNZsL05QmaWt4AXTITHuISxOULLTSFgdkYRwa2gYpBb1IiUGGY73tye28hyY1wKhiQFQRlyXBh1LPe6I4eJcgO4kWTMcpO5Zd9Y9qJ7X24oSmnJ3hB9x1VTKiFAWRV1URX_A15vhdwoiOS1EFTBms62XA9e6Jk2nGUtoXz68MFyowqgkrLNlKZaEaGFwGhZ1CDZcu8IWoOINkUZA-E1kwiXCg9Gc9I0CEuJyaaitTQkX7OqKYDRAE-Zw3Kv4IVm2pw3pPvp2mhGgMLADT-7l_4pJG-JRL3nVhJZ0VVPGN1shy2vHwNRQqCtp0bapk3Lgig_6p-o9_t7wwdi8NMgBDyh50Y3g6gdESkWdAWWbSiXH6MchF4LLlsQPWBo60KKVY0rChIUYy16YDdlrYhEgwlVNHmxHvlKCq7BkiLLu9YALO8WdUhGEN7ic1hfgTMVKj8aqicpuUPODFy3Ild77AFDn1ETZ6HBsodkoKWSsscbKNSDLhkPqzHV-BCknoOeYajcBckoqKjlFMNK_57EHeQGvNCuww5GsJGO31vZtPIX8W65PjqSMGgOsrexOjhDZ2TH49PnYDgnhDdPxcob1lVOfVWJQIXoqp9oSwlhAkUtQ1ZwNfvZfZ8Bj5Zawc3ZBkbA5taKfsfruHqxeguUUlCuqPqEglwAEa5lgXWBZzmqaJVSPtZ8KIe9B3V07UXCftBFYKn_tl1NVwX8rBBCxp-yznHFIvW247ea1bNXVmSjIkOh7nMOI-22zpHd2Ezl2eDHscZtUTw93i5ebpFo06qAgo_Sdg3cGsYlNCm0kbIRyhw6A-CZmJflazVnfK0yAtdZ31aoamx9T0wx-UtyyBPV9yDUwEwE4g1MJ1jLu2E1E-oZI-AleMDbGgnCi2bbW16g1_yFsrZqhjKuGl7yxNmaY-jlfN2qVqTAqfxsBVcAi1r1sSMJNcsJKxmfZQVe10zIggg0Y2jfF-zz3OsgOQoSeJ-yXHm_wVxAnGEJS5RMBV4OjbGjdDV4ymdqCD0-_vgDPTyjNa0p12HaUXmK6pdx4W7f0H0_d9vPc8ZRRkH3juFXgrwPV6hcNrLfbfiL8iRwfC_ECQ6R8nw3S3yI7ssTB2baV8vO4fFIxPHbCqzLKa4sN1ROV4JVk1AF464s0tDvPpU5ZrCAErAourLf0yAHcaqmDHicHTxx5PmH8Dy39UuxhgT8BgFWUi62femoyAw4GiJdQ6Sb4NSNj_LBcZ525XDg4035eL7rR7AeXa2g8krG6QrybI8pAXbzUDP0XSA3-PlTfqmX-zix-x6iTXANwQCxYfy46wtGN3gLmb5YrzldQ-69KBSG337oyu8u9Kr1E76LLFMtRJGkjJUHTaznziBulTaOp9Vx0jgBvIZCgaGQn4Sxl3xJoVvoa4BiMlWN9EueI_qs11rtl5IdDtGDyhA3BayGMqGpTBQQ7H5BmfrjtylzroeIjQGzoVRkKhVTj4TnK_UAxRa2bEcVO936HuAwgMYG0CALgOh8oC-ykiZCNWKYfsyWBef445nm3VJ9O2Eh5UQltUY6VassxADa0CrZ0Sr1vS9opfZpsG3OlC4_Ya_GWvlCoCeYmk6ptgqEYxD97gzKIhuUGbRVld5oPWnoEozp-dpuR65Y9vFLX56MlDgAxEDqmEg9jBPvPKR9D6fqoYnyvmQpLm-gn5vhNsz_dQm4vt8SPtQ5mzjydHVz0MZQ1zXVDTPbO-qYP1jWlnR0S6fWFtsNzQtYf2h1TlG-Gx_706nKUNsFrIYy3o4ySRSkX1Pmn1IiyylgNJQwlwJhZKfZ0cKwqwTApxzK8mcLpU8MGoAoA0uwg8XxInIOlmdaUizomTBCkGLAMPtvmAVxjE_lFmIgNrhFO7Uoyuz0VHelBIgNbkZ3wr4fB8RY6Dyp7cPiZblTr2iFd2rwWQ09zTKQYwAxGwqhIQkNIHec1RK2MItpUX2npJVn-QeWuilwnop2zepOYt91dhZ7-jSRP-g9PKGG8B6PYZ4drGfUONd3EpBuwDNLehaEoW-UhR7IiPKVEbwPak-LMxLd9Sk8NyLH3ZbeIIj80E4Sz4cdGiHOqsJqxxsfXo5s8M4aBPqFMQYD6jzBQPfJRroL6hDkGsC8HWA2ePwURh7QGYzMUpZgO49OtZfjBUBscAv29m55NCnB1-qY4pkS9kr5x7WKn3dpDftHnNPywzDq9rwFNm3KsPoMZnvqdXhpd2BbmEcGxHBHYSd26MkKh0BscDMLVRKFWW7EbcYL0HUanHgvtWG8gl2zGck7ExWBsSw8jXTR52V_bHualtDNcjMN4h0toR_Sc7X8F0vF5yrC08dCmCvfMQ5eKlyWPyiBLfND1ZQQCsN1UYML3h-tnGEV7xbpCPqCcQjobhjHLOpJ7ATmLmEK5Gby3ShpB2rZZ0b9Z41zolmcMDC3E8NJVl-hYO8a2kiVzVPKFGSaUe_McyjPt_NAH-YoPCso9VyuCFhhNeF_-FjHhdZicnZ3OYc2MTnrWu_b948PV9crd-7OgyMigIMhYqdYq5oUoI75KcZwgXzg15nf0VcLsH5kyon9TWjed2TwZOfRHEMv7O8v6Xshu_NKx9NebQVFs1d11iyouo0cG-pUEoIw0RcW4zXrHc0Yx_3AzJvnxBvhLTFfU1XT0XscrkJ_BivcDZazsqjb99m6brd3rpziDFWAp1TEDRPFe39nqlp3CbhvCq2bYZ09E2xvH8YjZVQJfWi_Nf_feE2uj_rT-sVyubj-hpbfbtHd98fH7z8f_n2P7h4eb1_Q8rsevvrPPXq-ffr-vLS25-dPh07iY6Gy69PT-IGAU1Qqz6grdzmwPNEE7p2smkOn2rPETj0I2uFA_XcxFJsv-Oh3eerQheBFdulliZfgC9zKDeOXfxLRXLS8vDSvWLob-DmkjkpoVVy7jxm47k8orvCzEKKl4JW7wI1t_2JzGWc0sDGOfFiu5iR08yxPYGmmVgFx7rv0osQpLcWlFUAmuzV9Q5oFfLeCm4u_j6C4dG0ova5r24kPu9J57DpZRtPAt2H_5WchVC3YxBTlcHd0wS81S3WhBA9LaLnjxdIFRGKxrinVgAGhLGRJL--GsjL-wwfR_UhdgVz39z3jTf-B__Dow-VC47_U4P8P7fsrAA>52804</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Frontend crash when compiling C++ constexpr function returning nullopt
        </td>
    </tr>

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

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

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

<pre>
    I encountered a crash when returning a `nullopt` from a consteval function returning a `std::optional`.  This code causes a crash in clang 13.0.0 (also tested 12.0.1, crashes there too).

The below examples are minimized with `cvise`.

## Reproducer

I'm including code sample inline b/c github does not allow a .cpp attachment.

Compile with `clang++ -std=c++20 -c`

```
struct nullopt_t {
} nullopt;
class optional {
public:
  constexpr optional(nullopt_t) {}
};
class base_property {
  virtual optional units_name() const;
};
namespace config {
template <class> class property : base_property {
  optional units_name() const;
};
template <typename> consteval optional property_units_name() { return nullopt; }
template <typename T> optional property<T>::units_name() const {
  property_units_name<T>();
}
property<int> optional_int;
} // namespace config
```

## Output

```
$ clang++ -std=c++20 -c ./nullopt_consteval.cpp 
./nullopt_consteval.cpp:16:3: warning: expression result unused [-Wunused-value]
  property_units_name<T>();
  ^~~~~~~~~~~~~~~~~~~~~~~~
./nullopt_consteval.cpp:18:15: note: in instantiation of member function 'config::property<int>::units_name' requested here
property<int> optional_int;
              ^
./nullopt_consteval.cpp:17:1: warning: non-void function does not return a value [-Wreturn-type]
}
^
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /usr/bin/clang++ -std=c++20 -c -fcolor-diagnostics -o nullopt_consteval.o ./nullopt_consteval.cpp
1.      <eof> parser at end of file
2.      Per-file LLVM IR generation
3.      ./nullopt_consteval.cpp:12:12: Generating code for declaration 'config::property<int>::units_name'
 #0 0x00007f951436a9a6 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib64/libLLVM-13.so+0xb5f9a6)
 #1 0x00007f9514368734 llvm::sys::RunSignalHandlers() (/lib64/libLLVM-13.so+0xb5d734)
 #2 0x00007f951429ab28 (/lib64/libLLVM-13.so+0xa8fb28)
 #3 0x00007f9513424760 __restore_rt (/lib64/libc.so.6+0x42760)
 #4 0x00007f951b3f4a90 clang::CodeGen::CodeGenFunction::EmitAggregateStore(llvm::Value*, clang::CodeGen::Address, bool) (/lib64/libclang-cpp.so.13+0x1b89a90)
 #5 0x00007f951b496839 clang::CodeGen::CodeGenFunction::EmitAggExpr(clang::Expr const*, clang::CodeGen::AggValueSlot) (/lib64/libclang-cpp.so.13+0x1c2b839)
 #6 0x00007f951b475ca2 clang::CodeGen::CodeGenFunction::EmitAnyExpr(clang::Expr const*, clang::CodeGen::AggValueSlot, bool) (/lib64/libclang-cpp.so.13+0x1c0aca2)
 #7 0x00007f951b48e3c6 clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(clang::Expr const*) (/lib64/libclang-cpp.so.13+0x1c233c6)
 #8 0x00007f951b5d51c2 clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (/lib64/libclang-cpp.so.13+0x1d6a1c2)
 #9 0x00007f951b5db432 clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) (/lib64/libclang-cpp.so.13+0x1d70432)
#10 0x00007f951b62caae clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::Stmt const*) (/lib64/libclang-cpp.so.13+0x1dc1aae)
#11 0x00007f951b63aa93 clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (/lib64/libclang-cpp.so.13+0x1dcfa93)
#12 0x00007f951b66d03e clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/lib64/libclang-cpp.so.13+0x1e0203e)
#13 0x00007f951b66975b clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/lib64/libclang-cpp.so.13+0x1dfe75b)
#14 0x00007f951b670bd2 clang::CodeGen::CodeGenModule::EmitDeferred() (/lib64/libclang-cpp.so.13+0x1e05bd2)
#15 0x00007f951b67137c clang::CodeGen::CodeGenModule::Release() (/lib64/libclang-cpp.so.13+0x1e0637c)
#16 0x00007f951b6d588a (/lib64/libclang-cpp.so.13+0x1e6a88a)
#17 0x00007f951b627d0b (/lib64/libclang-cpp.so.13+0x1dbcd0b)
#18 0x00007f951a4485c9 clang::ParseAST(clang::Sema&, bool, bool) (/lib64/libclang-cpp.so.13+0xbdd5c9)
#19 0x00007f951bce6c69 clang::FrontendAction::Execute() (/lib64/libclang-cpp.so.13+0x247bc69)
#20 0x00007f951bc84219 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/lib64/libclang-cpp.so.13+0x2419219)
#21 0x00007f951bd5664b clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/lib64/libclang-cpp.so.13+0x24eb64b)
#22 0x0000557460993430 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/bin/clang+++0x16430)
#23 0x00005574609907bc (/usr/bin/clang+++0x137bc)
#24 0x00007f951b9a0f79 (/lib64/libclang-cpp.so.13+0x2135f79)
#25 0x00007f951429abf7 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/lib64/libLLVM-13.so+0xa8fbf7)
#26 0x00007f951b9a181e (/lib64/libclang-cpp.so.13+0x213681e)
#27 0x00007f951b976dfb clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const (/lib64/libclang-cpp.so.13+0x210bdfb)
#28 0x00007f951b9775be clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const (/lib64/libclang-cpp.so.13+0x210c5be)
#29 0x00007f951b981532 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) (/lib64/libclang-cpp.so.13+0x2116532)
#30 0x000055746098e360 main (/usr/bin/clang+++0x11360)
#31 0x00007f951340f560 __libc_start_call_main (/lib64/libc.so.6+0x2d560)
#32 0x00007f951340f60c __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x2d60c)
#33 0x000055746098fbf5 _start (/usr/bin/clang+++0x12bf5)
clang-13: error: clang frontend command failed with exit code 139 (use -v to see invocation)
clang version 13.0.0 (Fedora 13.0.0-3.fc35)
Target: x86_64-redhat-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang-13: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-13: note: diagnostic msg: /tmp/nullopt_consteval-90b3bc.cpp
clang-13: note: diagnostic msg: /tmp/nullopt_consteval-90b3bc.sh
clang-13: note: diagnostic msg: 

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


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9Wsly4zgS_Rr6gpCC-3LwQV7LE-4ph62pOipAAJTYTRIcEPTSXz8JkCIJSS5Jnop2KLSAQOZ7mYlMLE45_bh8QKwivK0kE4wijIjAzQa9bViFBJOtqPJqDc1WaFdtUfBawjeUCV6qvrxqJHvFBcraisic741pJLW8BbxgIDzGBbTNEVpu8gZGU4YIbhvWDHrzCpECw2jHm9tzG1lujIuGI8lAEUWOC62O5V533WGg3ABuJDm33GRu2TeWvejelxuGUlbwN8TecVkXSgn0LPMqL_O_QdZbLjcKInnNG6ZgTUdbrgcv9MxqwWlLmJg-fLDcqASopGipYqqJNFoJtBZ5BZot946gNahoU0Q5KK-4RLhQeDCak7pGWEpMNiWrpKH5mpd1DoIGeMoclnsFLzTT5rwh3U_XRjMCPQzc8LN76Z-NFC2RqPfcSiIruuo7RjfbZsvr20BV06Ctp8a-dZsWOVF-1D9R7_f3WgydwU-DEvCEHhvdDKp2VKS4YSuwbM2E_Bj1IPSaC9mC6gFDW-WyWVW4ZKBBCdaqB3FT0apTU2PCVJ8sX49yJQPXYMmQ5V1rAJZ3izokIwhv8Tmsr8CZKpUfNdODlN5hzgxStypXe-IBQz-jJs5Cg2UP6UBLpWVPNvRQD7rJeJjGlPEhSL0EPcKg3AXJqCiv5BTDSv-exB3MDXihXYcdjGBjOn5vZd3KX8S75froyIRBc9C9jdXBGXpGdjI-fQ6Gc0J481SsvGGd5dRXNRFY03TZr2kLCWECSY0iK7ia_ey-z0BGy6zg5mwDIxBza0W_43WcXqzeAkUK0hVTn5CQc-iEK5ljneB5hkpWpkyMOR_SYe9BHV17kbAfdBFY6r9tl9NVAj8rhJDxp6xznFik3nb8VvFq9spzOhIZEnU_5zDSbusc2bXN1Dwb_DjmuC2Kp8fbxcstatq0zCHho7Rdg7SaCwlFCm2krBtlDj0D4FkzL4rXcs7FWs0IXNG-rDBV2PqamGLylxQwT1Tdg1ADMxGINzBdw1vRNauRkM84AS_BA9FWqCEir7e15QVqzV-ItmU9pHFV8JInwdcCQy0X61aVIgVOzc-2EQpgXqk6dmRCzTLCCy5mNMfrijcyJw2acbTvC_753OsgOQoSeJ_xTHm_xqKBOMMSlihUBV4GhbHr6WrwTMxUE3p8_PEHenhGa1YxocO06-WpXr-MC3f7hu77sdt6nnGBKAPuncCvBHkfrpC5bGS_2_AXZUng-F6IExwi5fluVPPRdF-eBAjTvlp2Do_HTgK_rcC6guHSckPldKVYFQmVMO6KPA397lOZYwYLqAYWRVf2expkoE7llAGPs4Mnjjz_EJ7ntnrJ1zABv0GAFUw027p0VCUFiYZK11DpJjh146NycJylXToc5HhTOZ7v-hGsR1cryLySC7aCebYnlIC4eagF-i50N-T5U3mpl_k4sfsaok1wDcEAsWH8uOsTRtd4CzN9sV4Ltoa596JQGH77oTO_u9Cr1k_kLihVJUR1STkvDppYj51B3Co2jqfpOGmcAF6DUGAQ8pMw9pIvEbqFugYoJkNVS7_kOcJnvda0Xwp-OEQPkiFuClgNMqFJJgoIdr9Apvr4bWTO9RCxMWA2SEUmqZh5JDyf1AMkW9iyHSV2uvU9wGEAjQ2gAQ2g0_lAX2QpTYSqxTD9OFsWQuCPZ5Z1S_XtgIWUE0pqjXQqKxpiAG2wSnZYpb73BVZqnwbbZqq4_IS9Gm_lC4GaYDKd9toSCMcg-t0ziEY2kBnYqkxvlJ40dAnG7Hy225YrTj9-6cuTkRIHgBhIHROph3HinYe0r-FMPTRR3hc8xcUN1HMz3Ibxv04B1_fbjg9VxieOPJ1uBmwMuq5JN6S2d9Qxf3DaFmx0S0dri-2GZTmsPzSdU8h37WN9OpUMs13AapDxdsgkUZB-jcw_RYJmDDAaJMylQBjZKT2aGHZJAHwmIC1_tlD6xKABqDKwBDtYHC8i52B5ZgXDDTsTRghaDBhm_Q1pEMf4VGkhhs6GtGgnF0XUTk91V0qgsyHNqE7Y9-OAGAudJ7V9WLwsd_IVK_FODj6roKeUgh4DiFlQCAtJaAC5E7ySsIVZTJPqOyOtPMs_sNRNQfJUtWtmdxL7rrOz2NOnieJB7-EJM5T3eAzz7GA9I8e5vpOAdgOemdJpEIa-kRZ6ICPKV07wPqg9FmdMdNdn8NyIHHebeoMg8kM7STwfdmiEOKsSqx1vfHg5ssE7axCoF0YbNKjzBAPdJxvpLqhD0GsA83aA2eDxUwR50M8QZKayBNtZdKq9HC-Azoa0YG_vlkWTFHytjimeGeGvTHxcq_h5l9awf8QZKz4Mo27PW2DTpgyrz2C2p16Hl3YHtoVZZEAMdwg7scNOJhxCZ0OamaiSKKSZEbdU5MB1Gpx4b2pDewm7ZjOSdwaqDsay8LSui35e9se2p7GEapaZ0yDeYQn1kJ3L8l88bT6nCE8f88Zc-Y5x8FLiovjBCGyZH8q6gFAYrotqnIv-aOUMq3i3SEfQF4xDgLthHDOpJ7ETmLuEKZCbyXcjpR3IZZ8Z9Z81zolmccLA3E4MJ1l9hoK9a2gjlTZPSVMw04x8Z55Deb6dBfowR-FZQaoXckXACquJ_MPHOi6UFlOyuys5tIkpWed6375_fLi6Xrlzdx4cUQESDBU7yVrlpAB1wk8xhgvdB3md-R19tQDrR66c2N-EZn1FBk92Hs0w1ML-_pK957I7r3Q87dW2YWj2qs6aG6ZuI8eCOtWEIEz0hcV4zXrHKBe4b5h584x4I7wlFmumcjp6j8NV6M9ghbvBclbkVfs-W1ft9s5VMExRCXgK1bnmTf7e35mq0l0A7ptcczOss2eC7e3DeKSMykYf2m_N_3-8JtdH_Wn9YrlcXH9Dy2-36O774-P3nw__vkd3D4-3L2j5XTdf_ecePd8-fX9eWtvz86dDJ_Fxo2bXp6fxQwfBUKE8o67c5SDyRBO4d7KsD51qzxI79SBohwP13yWw2XzBR7_LU4cuBC_opUcTL8EXMpcFu7wbJsn47wtEZ1d1oH_d316M99YH_l-hJ3_RiuLSvKfprvHnIE9lBZWhu48Z-P9PyNDwM2-aloFr7wI3tv2LzaWdBMyLKYWFlwv7qoSGjDqBA2nD94I4iC4KnLKiubQCQOZW7A1pEfDdCm4u8kvXhuzrurad-LAxnceuQylLA9-GLZhPQ0hcsI_Ji-H66EJcakjqTgkeFlB1x7ulCwjGfF0xptWBfNzKDReXf5KmvtB6LzXu_wFr2hTA">