Skip to content

clang -O1 causes "PHI node has multiple entries for the same basic block with different incoming values!" #48562

@haoxintu

Description

@haoxintu
Bugzilla Link 49218
Resolution FIXED
Resolved on Mar 02, 2021 20:13
Version trunk
OS Linux
Blocks #48246
CC @LebedevRI,@rotateright
Fixed by commit(s) 356cdab f73ba0f

Extended Description

Hi all.

This program make clang crash with -O1, and this problem only happens in the current trunk version of clang.

$cat small.c
#include <stdint.h>
int a, b;
int c() {
int64_t d = b;
if (d) {
uint16_t e;
for (; b;)
f:
for (; d;)
g:
if (e)
for (;;)
;
for (;;) {
int64_t k;
uint8_t i;
if (k) {
m:
k %= i;
goto g;
}
}
}
{
int16_t j;
for (;; d++) {
int32_t l;
if (j)
goto f;
if (a) {
for (; d;)
goto m;
if (0 / 0)
return a;
for (;;)
;
}
}
}
}

$clang -w -c -O1 small.c
PHI node has multiple entries for the same basic block with different incoming values!
%k.2.ph = phi i64 [ poison, %for.cond9.preheader ], [ poison, %cleanup29 ], [ undef, %cleanup29 ], [ %k.0, %for.cond ]
label %cleanup29
i64 undef
i64 poison
in function c
fatal error: error in backend: Broken function found, compilation aborted!
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: clang -c -w -O1 small.c

  1. parser at end of file
  2. Code generation
  3. Running pass 'Function Pass Manager' on module 'small.c'.
  4. Running pass 'Module Verifier' on function '@c'
    #​0 0x000055a24fc7567c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x33de67c)
    #​1 0x000055a24fc732b4 llvm::sys::RunSignalHandlers() (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x33dc2b4)
    #​2 0x000055a24fc7354b llvm::sys::CleanupOnSignal(unsigned long) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x33dc54b)
    #​3 0x000055a24fbd26bf llvm::CrashRecoveryContext::HandleExit(int) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x333b6bf)
    #​4 0x000055a24fc6b97e llvm::sys::Process::Exit(int, bool) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x33d497e)
    #​5 0x000055a24d8ddf05 LLVMErrorHandler(void*, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, bool) cc1_main.cpp:0:0
    #​6 0x000055a24fbda439 llvm::report_fatal_error(llvm::Twine const&, bool) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x3343439)
    #​7 0x000055a24fbda578 (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x3343578)
    #​8 0x000055a24f4c6083 (anonymous namespace)::VerifierLegacyPass::runOnFunction(llvm::Function&) Verifier.cpp:0:0
    #​9 0x000055a24f441e14 llvm::FPPassManager::runOnFunction(llvm::Function&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x2baae14)
    #​10 0x000055a24f442959 llvm::FPPassManager::runOnModule(llvm::Module&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x2bab959)
    #​11 0x000055a24f441731 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x2baa731)
    #​12 0x000055a24ff30de0 (anonymous namespace)::EmitAssemblyHelper::EmitAssemblyWithNewPassManager(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_deletellvm::raw_pwrite_stream >) BackendUtil.cpp:0:0
    #​13 0x000055a24ff33f65 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_deletellvm::raw_pwrite_stream >) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x369cf65)
    #​14 0x000055a250b90f6b clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x42f9f6b)
    #​15 0x000055a2516e4059 clang::ParseAST(clang::Sema&, bool, bool) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x4e4d059)
    #​16 0x000055a250b8fce8 clang::CodeGenAction::ExecuteAction() (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x42f8ce8)
    #​17 0x000055a25052df19 clang::FrontendAction::Execute() (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x3c96f19)
    #​18 0x000055a2504c4dc9 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x3c2ddc9)
    #​19 0x000055a2505f4fa0 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x3d5dfa0)
    #​20 0x000055a24d8df054 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x1048054)
    #​21 0x000055a24d8db557 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0
    #​22 0x000055a250384745 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optionalllvm::StringRef >, std::__cxx11::basic_string<char, std::char_traits, std::allocator >, bool) const::'lambda'()>(long) Job.cpp:0:0
    #​23 0x000055a24fbd2592 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x333b592)
    #​24 0x000055a250385a8c clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optionalllvm::StringRef >, std::__cxx11::basic_string<char, std::char_traits, std::allocator >, bool) const (.part.185) Job.cpp:0:0
    #​25 0x000055a25035cfa9 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x3ac5fa9)
    #​26 0x000055a25035e157 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x3ac7157)
    #​27 0x000055a2503704a9 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x3ad94a9)
    #​28 0x000055a24d80b955 main (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0xf74955)
    #​29 0x00007fbbac038bf7 __libc_start_main /build/glibc-S9d2JN/glibc-2.27/csu/../csu/libc-start.c:344:0
    #​30 0x000055a24d8dafda _start (/media/haoxin/SeagateData/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin/clang-13+0x1043fda)
    clang-13: error: clang frontend command failed with exit code 70 (use -v to see invocation)
    clang version 13.0.0 (https://github.com/llvm/llvm-project 22f00f6)
    Target: x86_64-unknown-linux-gnu
    Thread model: posix
    InstalledDir: /home/haoxin/haoxin-data/dut-research/compilers/llvm-project/build-20210216/bin
    clang-13: note: diagnostic msg:

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


Thanks.
Haoxin

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugzillaIssues migrated from bugzilla

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions