<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/141582>141582</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] Function body and its inner lambda are loaded from different module.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:modules
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hokein
</td>
</tr>
</table>
<pre>
See testcase: https://github.com/hokein/module-bugs/tree/main/color-bug
```
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: workspace/llvm-project/build/bin/clang -iquote . -Wuninitialized-const-reference -fmodules -Xclang=-fmodule-file=experiment_context/experiment_context.pic.pcm -std=gnu++20 -c experiment_context_test.cc -o experiment_context_test/experiment_context_test.pic.o
1. <eof> parser at end of file
2. experiment_context_test.cc:6:6: instantiating function definition 'c9::WaitForCoroutine<void>'
3. workspace/module-bugs/color-bug/util/c9/lazy.h:8:7: instantiating function definition 'c9::MakeCo<void, (lambda at experiment_context_test.cc:7:13)>'
4. workspace/module-bugs/color-bug/util/c9/co.h:45:12: instantiating function definition 'c9::internal::CoroutinePromise<void>::CoroutinePromise<(lambda at experiment_context_test.cc:7:13) &>'
#0 0x000055bbff6ea8d8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) workspace/llvm-project/llvm/lib/Support/Unix/Signals.inc:804:13
#1 0x000055bbff6e87b0 llvm::sys::RunSignalHandlers() workspace/llvm-project/llvm/lib/Support/Signals.cpp:106:18
#2 0x000055bbff63f786 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) workspace/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:74:5
#3 0x000055bbff63f786 CrashRecoverySignalHandler(int) workspace/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:391:51
#4 0x00007f5f7ee49df0 (/lib/x86_64-linux-gnu/libc.so.6+0x3fdf0)
#5 0x00007f5f7ee9e95c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#6 0x00007f5f7ee49cc2 raise ./signal/../sysdeps/posix/raise.c:27:6
#7 0x00007f5f7ee324ac abort ./stdlib/abort.c:81:3
#8 0x00007f5f7ee32420 __assert_perror_fail ./assert/assert-perr.c:31:1
#9 0x000055bc01b29d0f decltype(auto) llvm::dyn_cast<clang::TagDecl, clang::Decl const>(clang::Decl const*) workspace/llvm-project/llvm/include/llvm/Support/Casting.h:662:3
#10 0x000055bc01b29d0f clang::LocalInstantiationScope::findInstantiationOf(clang::Decl const*) workspace/llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp:4522:32
#11 0x000055bc01b6b587 clang::Sema::FindInstantiatedDecl(clang::SourceLocation, clang::NamedDecl*, clang::MultiLevelTemplateArgumentList const&, bool) workspace/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:6756:16
#12 0x000055bc01b426bd clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDeclRefExpr(clang::DeclRefExpr*) workspace/llvm-project/clang/lib/Sema/TreeTransform.h:0:44
#13 0x000055bc01b348f8 clang::ActionResult<clang::Expr*, true>::isInvalid() const workspace/llvm-project/clang/include/clang/Sema/Ownership.h:199:41
#14 0x000055bc01b348f8 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCStyleCastExpr(clang::CStyleCastExpr*) workspace/llvm-project/clang/lib/Sema/TreeTransform.h:13680:15
#15 0x000055bc01b25f88 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformStmt(clang::Stmt*, clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::StmtDiscardKind) workspace/llvm-project/clang/lib/Sema/TreeTransform.h:4310:15
#16 0x000055bc01b3b21d clang::ActionResult<clang::Stmt*, true>::isInvalid() const workspace/llvm-project/clang/include/clang/Sema/Ownership.h:199:41
#17 0x000055bc01b3b21d clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) workspace/llvm-project/clang/lib/Sema/TreeTransform.h:8108:16
#18 0x000055bc01b41c7f clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformLambdaBody(clang::LambdaExpr*, clang::Stmt*) workspace/llvm-project/clang/lib/Sema/TreeTransform.h:15802:10
#19 0x000055bc01b41c7f (anonymous namespace)::TemplateInstantiator::TransformLambdaBody(clang::LambdaExpr*, clang::Stmt*) workspace/llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp:1792:25
#20 0x000055bc01b41c7f clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformLambdaExpr(clang::LambdaExpr*) workspace/llvm-project/clang/lib/Sema/TreeTransform.h:15733:44
#21 0x000055bc01b32123 (anonymous namespace)::TemplateInstantiator::TransformLambdaExpr(clang::LambdaExpr*) workspace/llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp:1748:25
#22 0x000055bc01b34ac3 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) workspace/llvm-project/clang/lib/Sema/TreeTransform.h:0:36
#23 0x000055bc01b25f88 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformStmt(clang::Stmt*, clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::StmtDiscardKind) workspace/llvm-project/clang/lib/Sema/TreeTransform.h:4310:15
#24 0x000055bc01b3b21d clang::ActionResult<clang::Stmt*, true>::isInvalid() const workspace/llvm-project/clang/include/clang/Sema/Ownership.h:199:41
#25 0x000055bc01b3b21d clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) workspace/llvm-project/clang/lib/Sema/TreeTransform.h:8108:16
#26 0x000055bc01b25f1a clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) workspace/llvm-project/clang/lib/Sema/SemaTemplateInstantiate.cpp:4376:23
#27 0x000055bc01b7e25c clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) workspace/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:5819:14
#28 0x000055bc01b8181e clang::FunctionDecl::isDefined() const workspace/llvm-project/clang/include/clang/AST/Decl.h:2226:12
#29 0x000055bc01b8181e clang::Sema::PerformPendingInstantiations(bool, bool) workspace/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:7065:23
#30 0x000055bc01b7e35b clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) workspace/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:0:24
#31 0x000055bc01b8181e clang::FunctionDecl::isDefined() const workspace/llvm-project/clang/include/clang/AST/Decl.h:2226:12
#32 0x000055bc01b8181e clang::Sema::PerformPendingInstantiations(bool, bool) workspace/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:7065:23
#33 0x000055bc01b7e35b clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) workspace/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:0:24
#34 0x000055bc01b8181e clang::FunctionDecl::isDefined() const workspace/llvm-project/clang/include/clang/AST/Decl.h:2226:12
#35 0x000055bc01b8181e clang::Sema::PerformPendingInstantiations(bool, bool) workspace/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:7065:23
#36 0x000055bc0138b91e llvm::TimeTraceScope::~TimeTraceScope() workspace/llvm-project/llvm/include/llvm/Support/TimeProfiler.h:198:9
#37 0x000055bc0138b91e clang::Sema::ActOnEndOfTranslationUnitFragment(clang::TUFragmentKind) workspace/llvm-project/clang/lib/Sema/Sema.cpp:1198:3
#38 0x000055bc0138c101 clang::Sema::ActOnEndOfTranslationUnit() workspace/llvm-project/clang/lib/Sema/Sema.cpp:1236:9
#39 0x000055bc012f3ef7 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) workspace/llvm-project/clang/lib/Parse/Parser.cpp:0:13
#40 0x000055bc012234ae clang::ParseAST(clang::Sema&, bool, bool) workspace/llvm-project/clang/lib/Parse/ParseAST.cpp:170:5
#41 0x000055bc00440076 clang::FrontendAction::Execute() workspace/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1225:10
#42 0x000055bc003b6d1d llvm::Error::getPtr() const workspace/llvm-project/llvm/include/llvm/Support/Error.h:278:42
#43 0x000055bc003b6d1d llvm::Error::operator bool() workspace/llvm-project/llvm/include/llvm/Support/Error.h:241:16
#44 0x000055bc003b6d1d clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) workspace/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1057:23
#45 0x000055bc004d4452 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) workspace/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:300:25
#46 0x000055bbfca56483 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) workspace/llvm-project/clang/tools/driver/cc1_main.cpp:297:15
#47 0x000055bbfca52865 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) workspace/llvm-project/clang/tools/driver/driver.cpp:223:12
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWsty4zbWfhp6g5KKBHjTwgu1bP1_13SmXS1nMjsVCB7KmCYBBgAdK4t59imApERS6vYlciWZTKpTogHi4PvODQcgqNZ8JwCuveiDF91c0cY8SHX9IL8CF1eZzPfXGwBkQBtGNXhkiR6MqbVHlh5ee3i94-ahyeZMVh5et8M8vK5k3pQwy5qd9vDaKADbSF0fk6VUtsvzl_Zf7Hf__OXdp9vl5hbpJqu4QRRlzQ4pqKUyyMjvTVyWj_3PrFbyX8CMh9dc6wYsAERFjrhgZZMDMg-AmKL6AWWUfTWKMvDwCtUKaiUZaA050rJRbbMdSbWWjFMDOVKNQJopXpu55y83hrKvKG-q2sLyl_4cuf_ulNwpWiGqdk0FwljU6BepvurazTYFmjW8zO1vq6CSih2a8Z8baQDN0eynRnDBDacl_xXyGZNCm5mCAhQIBmhWtOrWaPZPN9YjN33brOAleOQGnmpQ3GLZMikMPNlpTxvnNWfzmlVopk3ukZudaDz8wcMfsI9mDJ0O2FrPmDOGZvJbvWcnasfZ2aTnL4NObx5ZgSw8cotqqjQoRA0CkSNZIMfDX-LuzW8j8cgy7v5HXGhDheHUcLFDRSOY4VKgHAqnTymQhxO2sMYjy58oN2upVlLJxnABHlk9Sp575NbDiecvyXxkwrGLH50arxvDS9u0sIamv-7nDx5Zph5ZJq_G9AP9CivZI8Er5OG0pFWWU6ea7ynBThYQDy8OBMK3EGDSwQ8jKw6_mgAXBpSgZfvXQbd3SlZcD1X8rf43EEYejg-kkYeJj_wn3_f9KMqyooiBpnmKXMpws-q9bh_uFBfGxfR9mxXS40uK_rKV2iiglRWPV4gLYyf7Tlj3WYlnHl5vmtomMg-vfxT8yTbwnaClnnNh0ad-2OJvIQcTyGmS-ecgf2lEK-f_qchLUNrD6dtQ9XBYbZNZ4NsACtIODh7DIUWSxtYXqZBiX8lGI0Er6CbsTL-yOfYLMPkIar9qzfWxqjtXaPG6dzycOl2uUCPcapSjUord22icm7XjlFgNRx0jco7RaPBIrz3GC0Mii8BiCjpQYQcqKaIiAQgXeeEjZ9FO6FMab-NwVnLRPM1ccrYdbK7lPPbwB_-JFHnhWxO0AqOxwAUsIoa229o8KKD59isvyy2v6hJsTFEXvHMPr0VtbAIYvja3ThpaDSZxJzyeomUMI0W5BidEO_15eD13f-11DrXNNLXUzv_dm04sTlzCbqUmY6kEh5QhmtkawMkxeasK1-SGp1aHfeCkJ8Oxj7ZbqjUos61BKam2BeWlk9Y2Hx5mtt_JJFZmb5bF0VeYH2R4kfsFyoGVZl_bLEEbI61rHOMz34sto9p4ZNWtyLb1nu5ugJXW0wettgm5Nd0lrfR8F16-zPm6KufYMPBDqm3Kdvk8jnGnNJts_HMEBzg-SUbLj8e8L8WGyRrazoKLfNT3uXg7i3bYIYagot3PPVR1SQ0cZ4IuhsIIOy64IxOMycRZlCZDMk6oe1qPkEPeGmcIfePqQEvfEpsY7u-06scsJ10_NKXhn-ARyh73sisFP3FtemW4ZSSTsrygUiyeTjFxErkkHneKwWPFhDjO8iHoewVwr6jQhVRVu_R-L7-fTi7VYSU_yLF4vkBx-1SrU684dLzJLUZ4nVf7bY5q6ZIxXRKmRTqku3R1yxfQTTmJ0wOmFTKqgQMprj-KR1raSswtss6ML4F9DMq-paPw-RcBSj_w2sEPFla1YdARCJ8h8C72Wm3MvgSbKk5NNu27kNUCEqfWckHUEY8m6Sgq0vcnvjGVmQS_a5mG9iUntzPccM2oyv_GRX4ZdYYkGGkznrhRhoP8ZXEwUMDvGQfJMwTeJw5kVctG5KduMe5Z_pYcfmq8NPDTYc5OJzk7YEnx7tw_uQ3XB5nvx8zb9kF2POcrF8kIUepjtwvp1LA4p4Y3cf09iX6_jgmSheWMu7jF_u9n-tPUP9HIZYycEDJYsPGkcCM4wORiRn4HSs-ZM0yH5sTT1Zwy8v5ZjJblmXX80HrBuot0KQuT_63el1u98bQI_LOt3jj6667eOD4JhYCe34pumkyblzrxi3eXF99qk8TuKHF3boAnlVkCOGLn-Q1krbsT45vDgfEr9tzHwYdtd2u-6e97bKijNLBeGPQL1qQ4S4M0gG-C7WLPsYYLxN5yc-_htUNnXQ9jHLdH9C22xTPYjqa5A2Ud-A5EzsVudJKjPZy-v1oTP44GXkX8qVeRKPsv9iqb7nHnUiT447oUwX9elyJ_YZcK_8AuFf15XWq8tpM0WwQw-AJwzytwXxEHJ-X_njS-9FPdd870rcQ7JQteguqqL1uBLDqQyTmQZ_W7ZOazuBX558KVNKXT7I-Cm7WiO1tajH3__se-_a2lr_3pt0ot6F6z6QQ0C_zglaCfV-2zmDCJB4ocL6e4IFCMPircufsKg-d7WbsK7fSbwuea_tzAnVHjct2--H9KNvUXKNyHoHh68HCg_YP7cv-xsj6wMdTAa4s9h7D_VYOkEXQ2CMdrMMYkpHDC1wV3OoU4_KzxhoAcYVtu7g_bab_7emvhjZZJPwx9P4lHOU1JYUDk7e6oP9UH1pgXRN0YTy9q8NhKPTgKjgZHVeFolfRJFudBPsgLt0r1JxQ7MNYLXphjn88FTnSbZhMbT2GXZUPyYkiyBmV3VJ3Zfnt-GmAKg8HWKAzPYZrs02xSa5Mxg5ENO7OOfG9i8ldGxMDK05kPNyKiZJD_w2jsgnkYRhiNPiI5qEdpj4dCYbofHfF85ZlMD_zeGWz9zVn7Cwe-PziUCuPhLQhGozhMCWIs2LZ39Qb3X5ZK0b1LTSv2QNXxe65NVSs0bsMr1F5YeikXI2WpPbzOFX8EZTs6DB1svEgGhyJhMoGN0zhCPfVV0OpiAH5T0bL8BzAjVXsD5QwHl7UG67eUZXdX47Ub6hMy7UNPBZNDBdRffbzKr0m-IAt6BddBEqYkjOMwuHq4xriIGcWLHOM4WGQByzJK0wyzIMzjFEdX_Br7OPIjnARB5IfBvIggowmmBFJCMAm80IeK8nJuwc6l2l25W5HXQRhEKb4qaQaldrc_Me7dsrtO6GHsRTdX6trxdPfEQr_k2uijMMNN6S6PtmOjG9SXkyiT-b69eGk04kKAQv1NLgWolDSHHBVKVijnhbvLaFA78_yqUeX12697dtwer_F_AgAA__-XpLED">