Skip to content

clang crashes at -O{2,3} on x86_64-linux-gnu: Assertion `!ValuesPerBlock[0].AV.isUndefValue() && "Dead BB dominate this block"' failed  #88051

Open
@zhendongsu

Description

@zhendongsu

It appears to be a regression from 12.0.*, and affects 13.0.* and later.

Compiler Explorer: https://godbolt.org/z/KbqTbehEf

[514] % clangtk -v
clang version 19.0.0git (https://github.com/llvm/llvm-project.git 2abd71ec51079d84a29639389dc9a66edd4909e5)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /local/suz-local/software/local/clang-trunk/bin
Build config: +assertions
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/10
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/11
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/11
Candidate multilib: .;@m64
Selected multilib: .;@m64
[515] % 
[515] % clangtk -O2 -c -w small.c
clangtk: /local/suz-local/software/clangbuild/llvm-project/llvm/lib/Transforms/Scalar/GVN.cpp:971: llvm::Value* ConstructSSAForLoadSet(llvm::LoadInst*, llvm::SmallVectorImpl<llvm::gvn::AvailableValueInBlock>&, llvm::GVNPass&): Assertion `!ValuesPerBlock[0].AV.isUndefValue() && "Dead BB dominate this block"' 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: clangtk -I/usr/local/include -I/local/suz-local/software/local/include -O2 -c -w small.c
1.	<eof> parser at end of file
2.	Optimizer
 #0 0x0000558a360d2c0f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x3fe9c0f)
 #1 0x0000558a360d074c llvm::sys::CleanupOnSignal(unsigned long) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x3fe774c)
 #2 0x0000558a36011698 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f9c88f9f420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007f9c889a600b raise /build/glibc-wuryBv/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #5 0x00007f9c88985859 abort /build/glibc-wuryBv/glibc-2.31/stdlib/abort.c:81:7
 #6 0x00007f9c88985729 get_sysdep_segment_value /build/glibc-wuryBv/glibc-2.31/intl/loadmsgcat.c:509:8
 #7 0x00007f9c88985729 _nl_load_domain /build/glibc-wuryBv/glibc-2.31/intl/loadmsgcat.c:970:34
 #8 0x00007f9c88996fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #9 0x0000558a35eb57e1 ConstructSSAForLoadSet(llvm::LoadInst*, llvm::SmallVectorImpl<llvm::gvn::AvailableValueInBlock>&, llvm::GVNPass&) GVN.cpp:0:0
#10 0x0000558a35ebf974 llvm::GVNPass::processNonLocalLoad(llvm::LoadInst*) (.part.0) GVN.cpp:0:0
#11 0x0000558a35ec00ad llvm::GVNPass::processLoad(llvm::LoadInst*) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x3dd70ad)
#12 0x0000558a35ec34c7 llvm::GVNPass::processInstruction(llvm::Instruction*) (.part.0) GVN.cpp:0:0
#13 0x0000558a35ec3f9d llvm::GVNPass::processBlock(llvm::BasicBlock*) (.part.0) GVN.cpp:0:0
#14 0x0000558a35ec463d llvm::GVNPass::iterateOnFunction(llvm::Function&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x3ddb63d)
#15 0x0000558a35ec49fe llvm::GVNPass::runImpl(llvm::Function&, llvm::AssumptionCache&, llvm::DominatorTree&, llvm::TargetLibraryInfo const&, llvm::AAResults&, llvm::MemoryDependenceResults*, llvm::LoopInfo&, llvm::OptimizationRemarkEmitter*, llvm::MemorySSA*) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x3ddb9fe)
#16 0x0000558a35ec591d llvm::GVNPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x3ddc91d)
#17 0x0000558a36347696 llvm::detail::PassModel<llvm::Function, llvm::GVNPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x425e696)
#18 0x0000558a3373826c llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x164f26c)
#19 0x0000558a34fbd5b1 llvm::CGSCCToFunctionPassAdaptor::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x2ed45b1)
#20 0x0000558a3371b656 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::CGSCCToFunctionPassAdaptor, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x1632656)
#21 0x0000558a34fb557f llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x2ecc57f)
#22 0x0000558a37496aa6 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x53adaa6)
#23 0x0000558a34fb9bbd llvm::DevirtSCCRepeatedPass::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x2ed0bbd)
#24 0x0000558a37496af6 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::DevirtSCCRepeatedPass, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x53adaf6)
#25 0x0000558a34fb7afd llvm::ModuleToPostOrderCGSCCPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x2eceafd)
#26 0x0000558a37685c37 llvm::ModuleInlinerWrapperPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x559cc37)
#27 0x0000558a37496236 llvm::detail::PassModel<llvm::Module, llvm::ModuleInlinerWrapperPass, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x53ad236)
#28 0x0000558a35a8fcad llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x39a6cad)
#29 0x0000558a36357d78 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&, clang::BackendConsumer*) BackendUtil.cpp:0:0
#30 0x0000558a3635b0b0 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) BackendUtil.cpp:0:0
#31 0x0000558a3635b729 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x4272729)
#32 0x0000558a369ac8ea clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x48c38ea)
#33 0x0000558a386d600c clang::ParseAST(clang::Sema&, bool, bool) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x65ed00c)
#34 0x0000558a369abc78 clang::CodeGenAction::ExecuteAction() (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x48c2c78)
#35 0x0000558a36c364d9 clang::FrontendAction::Execute() (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x4b4d4d9)
#36 0x0000558a36bbdd9e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x4ad4d9e)
#37 0x0000558a36d1db76 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x4c34b76)
#38 0x0000558a3332370c cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x123a70c)
#39 0x0000558a3331c81a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#40 0x0000558a369f08dd 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::'lambda'()>(long) Job.cpp:0:0
#41 0x0000558a36011ba0 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x3f28ba0)
#42 0x0000558a369f0eff clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#43 0x0000558a369b5b6c clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x48ccb6c)
#44 0x0000558a369b65fd clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x48cd5fd)
#45 0x0000558a369bea05 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x48d5a05)
#46 0x0000558a33320afb clang_main(int, char**, llvm::ToolContext const&) (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x1237afb)
#47 0x0000558a3321e7ab main (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x11357ab)
#48 0x00007f9c88987083 __libc_start_main /build/glibc-wuryBv/glibc-2.31/csu/../csu/libc-start.c:342:3
#49 0x0000558a3331c2ee _start (/local/suz-local/software/local/clang-trunk/bin/clang-19+0x12332ee)
clangtk: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 19.0.0git (https://github.com/llvm/llvm-project.git 2abd71ec51079d84a29639389dc9a66edd4909e5)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /local/suz-local/software/local/clang-trunk/bin
Build config: +assertions
clangtk: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clangtk: note: diagnostic msg: /tmp/small-ca9c41.c
clangtk: note: diagnostic msg: /tmp/small-ca9c41.sh
clangtk: note: diagnostic msg: 

********************
[516] % 
[516] % cat small.c
extern void r(int z);
extern int s();
extern int t();
extern int u();
struct {
  int y;
} volatile d;
int a, b, c, e[1], k, n, q;
volatile int f, g, h, j, l, m, *o, *volatile p;
int main() {
  int i = 0;
  int w[3];
  for (; i < 3; i++)
    w[i] = 1;
  while (a) {
    int *x = (int *)&g;
    for (q = 0; q < 5;) {
      if (w[1])
        for (; h; h++) {
          for (c = 0; c < 1; c++) {
            while (1) {
              f;
              t();
              u();
              u();
              u();
              s();
              n = s();
              r(0);
              s();
              f;
              s();
              t();
              t();
              s();
              s();
              l;
              k = s();
              *p = s();
              break;
            }
            t();
            r(0);
            r(0);
            r(0);
            u();
            r(0);
            u();
            j;
            r(0);
            s();
            t();
            n = t();
            m = u();
            s();
            d;
            p;
            s();
            f;
            t();
            r(0);
          }
        }
      else {
        *o = 0;
        if (w[2])
          break;
        r(0);
        if (b)
          break;
      }
      q = 0;
      while (a)
        ;
    }
    r(e[*x]);
  }
  return 0;
}

Metadata

Metadata

Assignees

Labels

crashPrefer [crash-on-valid] or [crash-on-invalid]llvm:GVNGVN and NewGVN stages (Global value numbering)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions