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

Reply via email to