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

    <tr>
        <th>Summary</th>
        <td>
            consteval + modules + NSDMI => Assertion failure: "consteval function should never be emitted"
        </td>
    </tr>

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

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

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

<pre>
    Given the following two source files:

```cpp
module;

consteval void global() {}

export module a;
```

```cpp
consteval void global() {}

import a;

consteval int b() {
        return 0;
}

struct bb {
        int m = b();
};

void bbb() {
        bb x;
}
```

and compiling with

```shell
clang++ -std=c++20 -x c++-module a.cpp --precompile -o a.pcm
clang++ -std=c++20 -c b.cpp -fmodule-file=a.pcm
```

causes clang to crash with

```
clang++: llvm/clang/lib/CodeGen/CodeGenModule.cpp:4193: llvm::Constant *clang::CodeGen::CodeGenModule::GetAddrOfFunction(clang::GlobalDecl, llvm::Type *, bool, bool, clang::CodeGen::ForDefinition_t): Assertion `!cast<FunctionDecl>(GD.getDecl())->isConsteval() && "consteval function should never be emitted"' 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: clang++ -std=c++2b -c b.cpp -fmodule-file=a.pcm
1. <eof> parser at end of file
2.      Per-file LLVM IR generation
3. b.cpp:9:8: Generating code for declaration 'bb::bb'
 #0 0x00005622142debf1 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (clang+++0x4150bf1)
 #1 0x00005622142dcafe llvm::sys::RunSignalHandlers() (clang+++0x414eafe)
 #2 0x00005622142ddfc1 llvm::sys::CleanupOnSignal(unsigned long) (clang+++0x414ffc1)
 #3 0x000056221425572b CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #4 0x00007fa33e0519e0 (/usr/lib/libc.so.6+0x389e0)
 #5 0x00007fa33e0a164c (/usr/lib/libc.so.6+0x8864c)
 #6 0x00007fa33e051938 raise (/usr/lib/libc.so.6+0x38938)
 #7 0x00007fa33e03b53d abort (/usr/lib/libc.so.6+0x2253d)
 #8 0x00007fa33e03b45c (/usr/lib/libc.so.6+0x2245c)
 #9 0x00007fa33e04a486 (/usr/lib/libc.so.6+0x31486)
#10 0x0000562214651c2c clang::CodeGen::CodeGenModule::GetAddrOfFunction(clang::GlobalDecl, llvm::Type*, bool, bool, clang::CodeGen::ForDefinition_t) (clang+++0x44c3c2c)
#11 0x0000562214713882 EmitFunctionDeclPointer(clang::CodeGen::CodeGenModule&, clang::GlobalDecl) CGExpr.cpp:0:0
#12 0x0000562214711ef3 EmitDirectCallee(clang::CodeGen::CodeGenFunction&, clang::GlobalDecl) CGExpr.cpp:0:0
#13 0x000056221471051d clang::CodeGen::CodeGenFunction::EmitCallee(clang::Expr const*) (clang+++0x458251d)
#14 0x00005622147100a1 clang::CodeGen::CodeGenFunction::EmitCallExpr(clang::CallExpr const*, clang::CodeGen::ReturnValueSlot) (clang+++0x45820a1)
#15 0x0000562214812a86 (anonymous namespace)::ScalarExprEmitter::VisitCallExpr(clang::CallExpr const*) CGExprScalar.cpp:0:0
#16 0x0000562214812677 (anonymous namespace)::ScalarExprEmitter::VisitCXXDefaultInitExpr(clang::CXXDefaultInitExpr*) CGExprScalar.cpp:0:0
#17 0x0000562214800e3d clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) (clang+++0x4672e3d)
#18 0x0000562214838bee clang::CodeGen::CodeGenFunction::EmitScalarInit(clang::Expr const*, clang::ValueDecl const*, clang::CodeGen::LValue, bool) (clang+++0x46aabee)
#19 0x000056221483e543 clang::CodeGen::CodeGenFunction::EmitExprAsInit(clang::Expr const*, clang::ValueDecl const*, clang::CodeGen::LValue, bool) (clang+++0x46b0543)
#20 0x00005622147ee496 clang::CodeGen::CodeGenFunction::EmitInitializerForField(clang::FieldDecl*, clang::CodeGen::LValue, clang::Expr*) (clang+++0x4660496)
#21 0x00005622147fa6ab EmitMemberInitializer(clang::CodeGen::CodeGenFunction&, clang::CXXRecordDecl const*, clang::CXXCtorInitializer*, clang::CXXConstructorDecl const*, clang::CodeGen::FunctionArgList&) CGClass.cpp:0:0
#22 0x00005622147efdef clang::CodeGen::CodeGenFunction::EmitCtorPrologue(clang::CXXConstructorDecl const*, clang::CXXCtorType, clang::CodeGen::FunctionArgList&) (clang+++0x4661def)
#23 0x00005622147ef111 clang::CodeGen::CodeGenFunction::EmitConstructorBody(clang::CodeGen::FunctionArgList&) (clang+++0x4661111)
#24 0x000056221471f14b clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (clang+++0x459114b)
#25 0x00005622149aea7b clang::CodeGen::CodeGenModule::codegenCXXStructor(clang::GlobalDecl) (clang+++0x4820a7b)
#26 0x00005622146a6dfe (anonymous namespace)::ItaniumCXXABI::emitCXXStructor(clang::GlobalDecl) ItaniumCXXABI.cpp:0:0
#27 0x000056221464793f clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (clang+++0x44b993f)
#28 0x00005622146366d0 clang::CodeGen::CodeGenModule::EmitDeferred() (clang+++0x44a86d0)
#29 0x00005622146366fc clang::CodeGen::CodeGenModule::EmitDeferred() (clang+++0x44a86fc)
#30 0x00005622146340ff clang::CodeGen::CodeGenModule::Release() (clang+++0x44a60ff)
#31 0x000056221508aaa4 (anonymous namespace)::CodeGeneratorImpl::HandleTranslationUnit(clang::ASTContext&) ModuleBuilder.cpp:0:0
#32 0x0000562215087f03 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) CodeGenAction.cpp:0:0
#33 0x000056221679c2c8 clang::ParseAST(clang::Sema&, bool, bool) (clang+++0x660e2c8)
#34 0x0000562215086595 clang::CodeGenAction::ExecuteAction() (clang+++0x4ef8595)
#35 0x0000562214f989fe clang::FrontendAction::Execute() (clang+++0x4e0a9fe)
#36 0x0000562214f00c3f clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (clang+++0x4d72c3f)
#37 0x0000562215080c76 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (clang+++0x4ef2c76)
#38 0x0000562212e691fa cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (clang+++0x2cdb1fa)
#39 0x0000562212e6536a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
#40 0x0000562214d5fee2 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) Job.cpp:0:0
#41 0x000056221425542c llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (clang+++0x40c742c)
#42 0x0000562214d5f68d clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (clang+++0x4bd168d)
#43 0x0000562214d1ac25 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (clang+++0x4b8cc25)
#44 0x0000562214d1aeee clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (clang+++0x4b8ceee)
#45 0x0000562214d3a55f clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (clang+++0x4bac55f)
#46 0x0000562212e64637 clang_main(int, char**) (clang+++0x2cd6637)
#47 0x00007fa33e03c290 (/usr/lib/libc.so.6+0x23290)
#48 0x00007fa33e03c34a __libc_start_main (/usr/lib/libc.so.6+0x2334a)
#49 0x0000562212e61465 _start (clang+++0x2cd3465)
clang-16: 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 92b4946aa2f6e061bf0ab9803fc6a0657d9ce969)
Target: x86_64-unknown-linux-gnu
Thread model: posix
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWm9vozwS_zT0jZUIbDDwoi_SpO310e491ba36rvImCHlFnBkm256n_5kQxpMSZr2OZ1OutXuJjH2zO83M57xH5hS5aYBuPSiKy9aXbBWPwt5mbOXMldaNHCRifz18rZ8gQbpZ0CFqCrxu2w2SP8WSIlWckBFWYHyyMLzV56__5_63V--3XYttcjbCjxyNezGRaM0vLAKvYgyR5tKZKzycOLhFHnxlRevhr1htxVSo04SYgdZe2WnEXxOWVlbZewo4rLRKBsM7zulEnQrG-QfBrqClZYt1yjLnFFGWo08strLdIa7GCz8LJtSnmVoN6F4ykCsyREX9basjD9_l_p50nzqGaqq516xZuPhKw9foZnSuUdWvPuJfTTbof7HbO-gOd9u0Wy2ldDpATQTiM23vD5HHkdZJ6Do5M1MnHlkNRAwyYuzVoFCVjjSAnHJ1PNxfu-geGSBquql9vBN33pTlZmHb5Yih1toDt--W1wGpEcWYZCSt6Fk4ZHF0oQKazTycC-_b-7EDH987yeHaboFvchz-Wdx0zZcl6LxcDIYfmvDdgW88vByoO3xdQtGk2nNhKiGn8e03wi5gqJsSqNmrW3ULdBCKZCmBRnz4IAzpT2y3MOxqsm1h5Pb1XwDuoNiQxanM49cl2q5nyT7CMXUwxR5GB-mT9GLQ-pZtFWOGngBiTJAUJdaQ-5h7OEYFaysIJ93Xrr_dr14uEaqzepSI4aydoMk2HmqBXrWemvzEL7x8M2m1M9tNufCOLL3p_mYbaX4J3Dt4ZtSqRaUh2-QmQtlw6s2B5vnupjJGP-lJeNgbLiVsJWCg1KQ95nPNJuRTCnBS6YhR7JtkOKy3Ooe8oNm_BfK23r7liH9ObqXYiNZjZjctDU02sBGJ6ZDdtZ0CObII0sQhUeu0ZZJBRIxjaDJkShsmu764Tmyf-5BWino27ef39HdD7SBBiSzMWc7knmn1CMLExmJQXnb92k2iIvclASJcuAV6wYiD8dZ1oWXyVBxJwl5mPjI3_m-70cU4yDEOWRFMAhg9aq6L_eybLS122Nn_OTQSbLfa6G0BFbboFqaNNyFWDKcw_jK34VB5GdFYALzDUMwwsBZAVMYfrTNQ7lpWPU31uQVSPUWyRNqQmAFOGrwSE1e8EmqywpY027_7JV5OGkbW5JzVAmj5ZjGouAuMeJqjKIYZ2hpwvgHcPEC8tXh4-GkN5zTZykaDTvd-9y3_95UhL2KuGCEgB8FKfjI2uWmVfItTVZlxudKzKnFSpIUfAdp5IphAQ35h2KShIbcEUPfoSEJkqxUcA4mkjjCYlcYySKSI5aZxPKRMIwjkjvCkrGwMPqYIMZh5BJMXTEhCxP6MbUgTOibGBPw7qyjUcAxP1oQ_rPl6C9Xo8ngDznhmDsc3VkdByRJMLquSz2sWfeibLSN_PPYd-nlCNUULW-vd1v5fqYYPHiEJ4CCWDyrUgLXS1ZVAB8DOVj861DICIofBflH7n_TaxsN7inERiey9dz6edpZUYKjIHecFY4R-Sz4GiKDYGTFvnWA63i8_bAL9Z-sauGhEkfjLUqwzwKHQuRQSALMuqnJGtG81qJVqGE1qK2tXmmn7YGzikkD7toucGTX_LNUnyCz93UnbNrjdAyOxvFfAvf0tIKCtZW-a0o9AXPi-ZlQYxeq7wP5QnAewJ8M0H0CmvYyjTEQN1ATFx1JMoCvojOm-QDd4JmNSTO7z4rjb7b7hwQZywAcgumIIEQh-TxBQ2Sh_gcIZn4UkiFB7Na-GCBM6ecJGmolq8p_gbwR8qaEKneZ2qYuGZ_JY2SmEwmUUj9MnYqOR9WuYJRltrp8hzoDOYD7V0rM8unJrAplftJNT09LLVyVU33MaNlybSr8mU7fI1vIzbfS9KZdTllWTKnJdIJHZReKHIovVBYt5L0Uldi04xp9PpPOLt0i6LMcp8MgyKFwwoCM2QbBV-rogdCVyF9PRMynwAaBUzHxuOgXQZh9Dmy_7wTz8Lwl6CG2Twba8nbf8a4pxN6jR8lFaRCEmUPOXQ6kDFj8IbnhEtvsozfQLJ-eHnpXHCc4DcosUWIXlLsMoIzmBXy0DLjTrCnbevn0tLi665qgtiuAc4A5o6dnqFvwaRin5MMZOrSUidi90v1O4bxg6Nr7BHw024ZZmhJ3mrmrAEoozf3PQl5BAVJCfuIQIWQJzX1Hc_pOc_GpndsnNBfOfmp0UkNJ6BefctMPqIApOKmU-oVjaPdoJvITxlj4UcD2uk1iEPKu3lZdc3fI8ShZoyp7KvWPd6uTxcNjf9jRz_UO_1VbVjlML1fdU53IT-LCd9ZLV4z_giY3KbWt92vor2DpaS1sVprG4mR_Gqcc82SI5Z5JBYuHR1fTA9SsL_XurnzSS5T6gHnieCkc2YBGaTQRGothmdkBbzUs9qcHx2ICiiRKI0ebm1mLNEkLZwl-I43dmnxC3SlFPksLZylM3GxZ-D4fJyZ7gSHv7JE-h2lmx5Edryd5jLmbckg8srHPY-ouGa3aA6YXwdl7CO8wH897UGAeO6tM4uQ9DDQNCoY4D9Y1KxvnTHYhJXv9AYVHlvyZDdb85NrWXacNL-3t23EsmOdZUDAHSzrCEhHK0N4Ky-DRhvAA0UPNquon8LekMAHMOiSX5cuR2R66STCPCgDc3RweFO0vMdbS0rdP99d3131xZ1WVMf5rXTQGx8E9ne7eVctgKeqaNfk4hifNbC8HTJvYGu3MMByw17JsNrbnde-DtwHrNd_tgqD7kTFV8rWy3XsbOZ1Nw1pLVmq1fzwSx6rKhJ6Qg-emy2C7bf3cWd4O8XC4Drr7o_0R9x8im3ZBMD7UDjEfXrBNHF33BahtHlgB1atjwdPeOjI1fB6H7nFjiMeRQRPn2OL_zrOThsvygCbOiUroblnygHEcHTWczV7sXV7fW9NJdaOBdXe3vV_IL0_oGHZdOKXxJLeEc-yUqjAccwP3tOgcbn-ITB0n9ofIzMbLIXYq5735cstK40Z74XO-LXqHn28RcI-XQrd454RFUXFM-2rw3SlvE3XtmCX_ixaZThUZ41HklPKQjipXSEnc6dvX0T0GO0UXJ-sipSR2pI-vrThOP76RMzsLZ6MRji-sOAkZWq_NsLXSTGqL9QzBJHTqdjiu20FII9SJPEKRhPQwrezzWUA9skAgpclF_S05KvrlFeK9k7r3BOxrHgh2pe4upwNitxCtAjR7QVogBYDKwXppqAm9gFSlaFBA5_7cGvJzrxTMN6VGKc7CNKSM4YKCT4Os8FmWJj4pOGU-jeI85ZDS9E33I5MbMHUL7RK6puGsbX414nczq8qm3c02Tdv3e5bAclSLHMw2B22FKnejl1ku8kuSpyRlF3AZ0DikfoLT6OL5MgkyTlJOo7jAPonBhzzLUlxkBYvSKMwuykvsY-IHOPL9KAmiOfAYB1kSU54xWuSRF_pQs7KaG8ZzITcX9vWJS-rjOLqoWAaVsu-RYdzAb2Qfehh70epCXlorZe1GeaFflUqrgxRd6gouD--FePiqf8NL2e9_f1h9v0MeWXnkevBqivF3K806_NOvlVy0srr8-ssilvC_AwAA___M_HEz">