[clang] [Clang] Fix assertion failure in SDiagsWriter when finish() is not called (PR #181712)

via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 16 10:47:27 PST 2026


================
@@ -0,0 +1,10 @@
+// RUN: clang-check %s -- -Wdoes-not-exist --serialize-diagnostics %t.dia 2>&1 | FileCheck %s
----------------
zeyi2 wrote:

I've verified that the testcase would crash without this fix:
```text
 warning: unknown warning option '-Wdoes-not-exist'; did you mean '-Wmicrosoft-exists'? [-Wunknown-warning-option]                                                                                                                        
 warning: unknown warning option '-Wdoes-not-exist'; did you mean '-Wmicrosoft-exists'? [-Wunknown-warning-option]                                                                                                                        
 1 warning generated.                                                                                                                                                                                                                     
 clang-check: ~/projects/llvm-project/llvm/include/llvm/Bitstream/BitstreamWriter.h:168: llvm::BitstreamWriter::~BitstreamWriter(): Assertion `BlockScope.empty() && CurAbbrevs.empty() && "Block imbalance"'      
 failed.                                                                                                                                                                                                                                  
  #0 0x00007f23f1cb7208 __interceptor_backtrace (/usr/lib/libasan.so.8+0xb7208)                                                                                                                                                           
  #1 0x000055a06e132c11 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (./build/bin/clang-check+0x80a3c11)                                                                                                                           
  #2 0x000055a06e123ada llvm::sys::RunSignalHandlers() (./build/bin/clang-check+0x8094ada)                                                                                                                                                
  #3 0x000055a06e124393 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0                                                                                                                                                             
  #4 0x00007f23f164d2d0 (/usr/lib/libc.so.6+0x3e2d0)                                                                                                                                                                                      
  #5 0x00007f23f16a7a2c (/usr/lib/libc.so.6+0x98a2c)                                                                                                                                                                                      
  #6 0x00007f23f164d1a0 raise (/usr/lib/libc.so.6+0x3e1a0)                                                                                                                                                                                
  #7 0x00007f23f16345fe abort (/usr/lib/libc.so.6+0x255fe)                                                                                                                                                                                
  #8 0x00007f23f1635697 (/usr/lib/libc.so.6+0x26697)                                                                                                                                                                                      
  #9 0x00007f23f16450b2 __assert_fail (/usr/lib/libc.so.6+0x360b2)                                                                                                                                                                        
 #10 0x000055a07101210a std::_Sp_counted_ptr_inplace<(anonymous namespace)::SDiagsWriter::SharedState, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_M_dispose() (.cold) SerializedDiagnosticPrinter.cpp:0:0                        
 #11 0x000055a071014370 (anonymous namespace)::SDiagsWriter::~SDiagsWriter() SerializedDiagnosticPrinter.cpp:0:0                                                                                                                          
 #12 0x000055a070a59ccb clang::ChainedDiagnosticConsumer::~ChainedDiagnosticConsumer() ChainedDiagnosticConsumer.cpp:0:0                                                                                                                  
 #13 0x000055a06e82c742 clang::DiagnosticsEngine::~DiagnosticsEngine() (./build/bin/clang-check+0x879d742)                                                                                                                                
 #14 0x000055a072a29c08 clang::tooling::ToolInvocation::run() (./build/bin/clang-check+0xc99ac08)                                                                                                                                         
 #15 0x000055a072a30f59 clang::tooling::ClangTool::run(clang::tooling::ToolAction*) (./build/bin/clang-check+0xc9a1f59)                                                                                                                   
 #16 0x000055a06c5b2d7f main (./build/bin/clang-check+0x6523d7f)                                                                                                                                                                          
 #17 0x00007f23f16366c1 (/usr/lib/libc.so.6+0x276c1)                                                                                                                                                                                      
 #18 0x00007f23f16367f9 __libc_start_main (/usr/lib/libc.so.6+0x277f9)                                                                                                                                                                    
 #19 0x000055a06c5a45a5 _start (./build/bin/clang-check+0x65155a5)                                                                                                                                                                        
 bash: line 1: 93529 Aborted                    ./build/bin/clang-check clang/test/Tooling/serialize-diagnostics.cpp -- -Wdoes-not-exist --serialize-diagnostics test.dia
```

https://github.com/llvm/llvm-project/pull/181712


More information about the cfe-commits mailing list