nathanchance wrote: I saw an assertion failure when building `fs/bcachefs` in the Linux kernel's 6.12 and 6.17 branches (may be the same root cause but it looks different so just mentioning it anyways).
``` clang: /mnt/nvme/tmp/cvise.ssStCqfBAx/src/clang/lib/CodeGen/CGCleanup.cpp:708: void clang::CodeGen::CodeGenFunction::PopCleanupBlock(bool, bool): Assertion `!Scope.isNormalCleanup() || !HasPrebranchedFallthrough || (Scope.getNormalBlock() && FallthroughSource->getTerminator()->getSuccessor(0) == Scope.getNormalBlock())' 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 ... -c -o fs/bcachefs/btree_update.o fs/bcachefs/btree_update.c 1. <eof> parser at end of file 2. Per-file LLVM IR generation 3. fs/bcachefs/btree_update.c:266:12: Generating code for declaration 'bch2_trans_update_extent' 4. fs/bcachefs/btree_update.c:296:52: LLVM IR generation of compound statement ('{}') #0 0x000055d618990578 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (clang+0x5eaa578) #1 0x000055d61898ddb5 llvm::sys::RunSignalHandlers() (clang+0x5ea7db5) #2 0x000055d61890f5e6 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0 #3 0x00007fbcae03e4d0 (/usr/lib/libc.so.6+0x3e4d0) #4 0x00007fbcae09890c (/usr/lib/libc.so.6+0x9890c) #5 0x00007fbcae03e3a0 raise (/usr/lib/libc.so.6+0x3e3a0) #6 0x00007fbcae02557a abort (/usr/lib/libc.so.6+0x2557a) #7 0x00007fbcae0254e3 __assert_perror_fail (/usr/lib/libc.so.6+0x254e3) #8 0x000055d618e859b7 clang::CodeGen::CodeGenFunction::PopCleanupBlock(bool, bool) (clang+0x639f9b7) #9 0x000055d618e8311d clang::CodeGen::CodeGenFunction::PopCleanupBlocks(clang::CodeGen::EHScopeStack::stable_iterator, std::initializer_list<llvm::Value**>) (clang+0x639d11d) #10 0x000055d618e85c9f clang::CodeGen::CodeGenFunction::PopCleanupBlocks(clang::CodeGen::EHScopeStack::stable_iterator, unsigned long, std::initializer_list<llvm::Value**>) (clang+0x639fc9f) #11 0x000055d618c88ec5 clang::CodeGen::CodeGenFunction::LexicalScope::~LexicalScope() (clang+0x61a2ec5) #12 0x000055d618d205f4 clang::CodeGen::CodeGenFunction::EmitSimpleStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (clang+0x623a5f4) #13 0x000055d618d1fb3f clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (clang+0x6239b3f) #14 0x000055d618d21bd6 clang::CodeGen::CodeGenFunction::EmitWhileStmt(clang::WhileStmt const&, llvm::ArrayRef<clang::Attr const*>) (clang+0x623bbd6) #15 0x000055d618d200d4 clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (clang+0x623a0d4) #16 0x000055d618d2daa1 clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) (clang+0x6247aa1) #17 0x000055d618d0c325 clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (clang+0x6226325) #18 0x000055d618bd7154 clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) (clang+0x60f1154) #19 0x000055d618bceb9f clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (clang+0x60e8b9f) #20 0x000055d618bbf2e6 clang::CodeGen::CodeGenModule::EmitDeferred() (clang+0x60d92e6) #21 0x000055d618bbbd5a clang::CodeGen::CodeGenModule::Release() (clang+0x60d5d5a) #22 0x000055d61910e8ab (anonymous namespace)::CodeGeneratorImpl::HandleTranslationUnit(clang::ASTContext&) ModuleBuilder.cpp:0:0 #23 0x000055d61910674e clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (clang+0x662074e) #24 0x000055d61a721959 clang::ParseAST(clang::Sema&, bool, bool) (clang+0x7c3b959) #25 0x000055d6195ef086 clang::FrontendAction::Execute() (clang+0x6b09086) #26 0x000055d61955934d clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (clang+0x6a7334d) #27 0x000055d6196c7fa5 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (clang+0x6be1fa5) #28 0x000055d616849965 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (clang+0x3d63965) #29 0x000055d6168454f5 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>) driver.cpp:0:0 #30 0x000055d616847b0d int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(long, llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0 #31 0x000055d6193c0ed9 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::$_0>(long) Job.cpp:0:0 #32 0x000055d61890f2ce llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (clang+0x5e292ce) #33 0x000055d6193c0713 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+0x68da713) #34 0x000055d6193820ec clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (clang+0x689c0ec) #35 0x000055d619382307 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (clang+0x689c307) #36 0x000055d61939c6d8 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (clang+0x68b66d8) #37 0x000055d616844d29 clang_main(int, char**, llvm::ToolContext const&) (clang+0x3d5ed29) #38 0x000055d616855027 main (clang+0x3d6f027) #39 0x00007fbcae027635 (/usr/lib/libc.so.6+0x27635) #40 0x00007fbcae0276e9 __libc_start_main (/usr/lib/libc.so.6+0x276e9) #41 0x000055d616842fa5 _start (clang+0x3d5cfa5) clang: error: clang frontend command failed with exit code 134 (use -v to see invocation) ClangBuiltLinux clang version 22.0.0git (https://github.com/llvm/llvm-project.git 5daad5bf45b3c7280f7b06979fb580f70e2c4fd0) ... ``` `cvise` spits out: ```c struct bpos { long inode; int snapshot; } SPOS(long, long, int), __trans_tmp_84, __attribute__bch2_trans_update_ip_k, need_whiteout_for_snapshot_pos, bch2_trans_update_extent_insert; enum btree_id { BTREE_ID_extents }; enum btree_iter_update_trigger_flags { BTREE_ITER_nopreserve }; struct btree_iter { enum btree_id btree_id; } need_whiteout_for_snapshot_iter, bch2_trans_update_extent_orig_iter, bch2_trans_update_extent_iter; struct btree_trans { int *c; } need_whiteout_for_snapshot_trans, __attribute__bch2_trans_update_ip_trans, bch2_trans_update_extent_trans; struct bkey_s_c { struct bpos *k; } bkey_i_to_s_c(struct bpos *), need_whiteout_for_snapshot_k, bch2_trans_update_extent_k; long __attribute__bch2_trans_update_ip_ip; int need_whiteout_for_snapshot_ret, bch2_trans_update_extent_ret = 0, __attribute__bch2_trans_update_ip_ret; enum btree_iter_update_trigger_flags bch2_trans_update_extent_flags, __attribute__bch2_trans_update_ip_flags; short __attribute__bch2_trans_update_ip_path_idx; int __bkey_err(struct bpos *); struct bkey_s_c bch2_btree_iter_peek_max(struct btree_trans *, struct btree_iter *, struct bpos); void bch2_btree_iter_peek_max_type(struct btree_trans *, struct btree_iter *, struct bpos, unsigned); void bch2_snapshot_is_ancestor(int *, int, int); void bch2_btree_insert_nonextent(struct btree_trans *, enum btree_id, struct bpos *, enum btree_iter_update_trigger_flags); static int need_whiteout_for_snapshot() { int snapshot = need_whiteout_for_snapshot_pos.snapshot; for (; bch2_btree_iter_peek_max_type(&need_whiteout_for_snapshot_trans, &need_whiteout_for_snapshot_iter, __trans_tmp_84, BTREE_ITER_nopreserve), need_whiteout_for_snapshot_ret = __bkey_err(need_whiteout_for_snapshot_k.k); bch2_snapshot_is_ancestor(need_whiteout_for_snapshot_trans.c, snapshot, snapshot)) ; return need_whiteout_for_snapshot_ret; } int bch2_trans_update_extent_overwrite(struct btree_trans *, struct btree_iter *, enum btree_iter_update_trigger_flags, struct bkey_s_c, struct bkey_s_c); int bch2_trans_update_extent() { enum btree_id btree_id = bch2_trans_update_extent_orig_iter.btree_id; goto next; while (0) { _Bool done = bch2_trans_update_extent_overwrite( &bch2_trans_update_extent_trans, &bch2_trans_update_extent_iter, bch2_trans_update_extent_flags, bch2_trans_update_extent_k, bkey_i_to_s_c(&bch2_trans_update_extent_insert)); if (done) goto out; next: bch2_trans_update_extent_k = bch2_btree_iter_peek_max( &bch2_trans_update_extent_trans, &bch2_trans_update_extent_iter, SPOS(bch2_trans_update_extent_insert.inode, 0, 0)); if (bch2_trans_update_extent_k.k) goto err; } out: bch2_btree_insert_nonextent(&bch2_trans_update_extent_trans, btree_id, &bch2_trans_update_extent_insert, bch2_trans_update_extent_flags); err: return bch2_trans_update_extent_ret; } void bch2_trans_update_by_path(struct btree_trans *, short, struct bpos *, enum btree_iter_update_trigger_flags, long); int __attribute__bch2_trans_update_ip() { return 0; need_whiteout_for_snapshot(); return __attribute__bch2_trans_update_ip_ret; bch2_trans_update_by_path(&__attribute__bch2_trans_update_ip_trans, __attribute__bch2_trans_update_ip_path_idx, &__attribute__bch2_trans_update_ip_k, __attribute__bch2_trans_update_ip_flags, __attribute__bch2_trans_update_ip_ip); } ``` ``` $ clang -O2 -c -o /dev/null btree_update.i clang: clang/lib/CodeGen/CGCleanup.cpp:708: void clang::CodeGen::CodeGenFunction::PopCleanupBlock(bool, bool): Assertion `!Scope.isNormalCleanup() || !HasPrebranchedFallthrough || (Scope.getNormalBlock() && FallthroughSource->getTerminator()->getSuccessor(0) == Scope.getNormalBlock())' 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 -O2 -c -o /dev/null btree_update.i 1. btree_update.i:75:1: current parser token 'void' 2. btree_update.i:51:5: LLVM IR generation of declaration 'bch2_trans_update_extent' 3. btree_update.i:51:5: Generating code for declaration 'bch2_trans_update_extent' 4. btree_update.i:54:13: LLVM IR generation of compound statement ('{}') #0 0x00005585bbdcf578 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (clang-22+0x5eaa578) #1 0x00005585bbdccdb5 llvm::sys::RunSignalHandlers() (clang-22+0x5ea7db5) #2 0x00005585bbd4e5e6 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0 #3 0x00007f4e3c03e4d0 (/usr/lib/libc.so.6+0x3e4d0) #4 0x00007f4e3c09890c (/usr/lib/libc.so.6+0x9890c) #5 0x00007f4e3c03e3a0 raise (/usr/lib/libc.so.6+0x3e3a0) #6 0x00007f4e3c02557a abort (/usr/lib/libc.so.6+0x2557a) #7 0x00007f4e3c0254e3 __assert_perror_fail (/usr/lib/libc.so.6+0x254e3) #8 0x00005585bc2c49b7 clang::CodeGen::CodeGenFunction::PopCleanupBlock(bool, bool) (clang-22+0x639f9b7) #9 0x00005585bc2c211d clang::CodeGen::CodeGenFunction::PopCleanupBlocks(clang::CodeGen::EHScopeStack::stable_iterator, std::initializer_list<llvm::Value**>) (clang-22+0x639d11d) #10 0x00005585bc2c4c9f clang::CodeGen::CodeGenFunction::PopCleanupBlocks(clang::CodeGen::EHScopeStack::stable_iterator, unsigned long, std::initializer_list<llvm::Value**>) (clang-22+0x639fc9f) #11 0x00005585bc0c7ec5 clang::CodeGen::CodeGenFunction::LexicalScope::~LexicalScope() (clang-22+0x61a2ec5) #12 0x00005585bc15f5f4 clang::CodeGen::CodeGenFunction::EmitSimpleStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (clang-22+0x623a5f4) #13 0x00005585bc15eb3f clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (clang-22+0x6239b3f) #14 0x00005585bc160bd6 clang::CodeGen::CodeGenFunction::EmitWhileStmt(clang::WhileStmt const&, llvm::ArrayRef<clang::Attr const*>) (clang-22+0x623bbd6) #15 0x00005585bc15f0d4 clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) (clang-22+0x623a0d4) #16 0x00005585bc16caa1 clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) (clang-22+0x6247aa1) #17 0x00005585bc14b325 clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (clang-22+0x6226325) #18 0x00005585bc016154 clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) (clang-22+0x60f1154) #19 0x00005585bc00db9f clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (clang-22+0x60e8b9f) #20 0x00005585bc012ada clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) (clang-22+0x60edada) #21 0x00005585bc00c7aa clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) (clang-22+0x60e77aa) #22 0x00005585bc54d72c (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) ModuleBuilder.cpp:0:0 #23 0x00005585bc545306 clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) (clang-22+0x6620306) #24 0x00005585bdb60a2a clang::ParseAST(clang::Sema&, bool, bool) (clang-22+0x7c3ba2a) #25 0x00005585bca2e086 clang::FrontendAction::Execute() (clang-22+0x6b09086) #26 0x00005585bc99834d clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (clang-22+0x6a7334d) #27 0x00005585bcb06fa5 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (clang-22+0x6be1fa5) #28 0x00005585b9c88965 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (clang-22+0x3d63965) #29 0x00005585b9c844f5 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>) driver.cpp:0:0 #30 0x00005585b9c86b0d int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::$_0>(long, llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0 #31 0x00005585bc7ffed9 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::$_0>(long) Job.cpp:0:0 #32 0x00005585bbd4e2ce llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (clang-22+0x5e292ce) #33 0x00005585bc7ff713 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-22+0x68da713) #34 0x00005585bc7c10ec clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (clang-22+0x689c0ec) #35 0x00005585bc7c1307 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (clang-22+0x689c307) #36 0x00005585bc7db6d8 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (clang-22+0x68b66d8) #37 0x00005585b9c83d29 clang_main(int, char**, llvm::ToolContext const&) (clang-22+0x3d5ed29) #38 0x00005585b9c94027 main (clang-22+0x3d6f027) #39 0x00007f4e3c027635 (/usr/lib/libc.so.6+0x27635) #40 0x00007f4e3c0276e9 __libc_start_main (/usr/lib/libc.so.6+0x276e9) #41 0x00005585b9c81fa5 _start (clang-22+0x3d5cfa5) clang: error: clang frontend command failed with exit code 134 (use -v to see invocation) ClangBuiltLinux clang version 22.0.0git (https://github.com/llvm/llvm-project.git 5daad5bf45b3c7280f7b06979fb580f70e2c4fd0) ... ``` https://github.com/llvm/llvm-project/pull/170517 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
