llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.96k stars 11.94k forks source link

ICE on valid code:emitGlobalConstantStruct(const llvm::DataLayout&, const llvm::ConstantStruct*, llvm::AsmPrinter&, const llvm::Constant*, uint64_t): Assertion `SizeSoFar == Layout->getSizeInBytes() && "Layout of constant struct may be incorrect!"'failed #50222

Open chengniansun opened 3 years ago

chengniansun commented 3 years ago
Bugzilla Link 50878
Version trunk
OS Linux
CC @DougGregor,@zygoloid

Extended Description

$ clang-trunk -v clang version 13.0.0 (https://github.com/llvm/llvm-project.git 2e9c75daffddd65e37c3236708b5b133e6f5f2f5) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /home/cnsun/usr/bin Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/10 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9 Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/10 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Candidate multilib: x32;@mx32 Selected multilib: .;@m64

$ cat mutant.c struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { struct { char *line, ulmask } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } c[2] } character = {""};

$ clang-trunk mutant.c mutant.c:30:77: warning: expected ';' at end of declaration list char line, ulmask ^ ; mutant.c:31:63: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:32:61: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:33:59: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:34:57: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:35:55: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:36:53: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:37:51: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:38:49: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:39:47: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:40:45: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:41:43: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:42:41: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:43:39: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:44:37: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:45:35: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:46:33: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:47:31: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:48:29: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:49:27: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:50:25: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:51:23: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:52:21: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:53:19: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:54:17: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:55:15: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:56:13: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:57:11: warning: expected ';' at end of declaration list } c[2] ^ ; mutant.c:58:9: warning: expected ';' at end of declaration list } c[2] ^ ; clang-13: /tmp/tmp.xjN6dMkdrg-clang-builder/llvm-project/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:2774: void emitGlobalConstantStruct(const llvm::DataLayout&, const llvm::ConstantStruct, llvm::AsmPrinter&, const llvm::Constant*, uint64_t): Assertion `SizeSoFar == Layout->getSizeInBytes() && "Layout of constant struct may be incorrect!"' failed. PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script. Stack dump:

  1. Program arguments: /scratch/software/clang-trunk/bin/clang-13 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all --mrelax-relocations -disable-free -main-file-name mutant.c -mrelocation-model static -mframe-pointer=all -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/scratch/cnsun/workspace/perses-fuzzer/default_c_finding_folder/crash_20210626_043652_042a/delta/perses_result -resource-dir /scratch/software/clang-trunk/lib/clang/13.0.0 -c-isystem . -c-isystem /usr/local/include/cmsith -internal-isystem /scratch/software/clang-trunk/lib/clang/13.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir=/scratch/cnsun/workspace/perses-fuzzer/default_c_finding_folder/crash_20210626_043652_042a/delta/perses_result -ferror-limit 19 -fgnuc-version=4.2.1 -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/mutant-1b36a9.o -x c mutant.c
  2. parser at end of file
  3. Code generation

    ​0 0x000055d72e383184 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0

    ​1 0x000055d72e38093e SignalHandler(int) Signals.cpp:0:0

    ​2 0x00007f9e6bc6d3c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x153c0)

    ​3 0x00007f9e6b70c18b raise /build/glibc-ZN95T4/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1

    ​4 0x00007f9e6b6eb859 abort /build/glibc-ZN95T4/glibc-2.31/stdlib/abort.c:81:7

    ​5 0x00007f9e6b6eb729 get_sysdep_segment_value /build/glibc-ZN95T4/glibc-2.31/intl/loadmsgcat.c:509:8

    ​6 0x00007f9e6b6eb729 _nl_load_domain /build/glibc-ZN95T4/glibc-2.31/intl/loadmsgcat.c:970:34

    ​7 0x00007f9e6b6fcf36 (/lib/x86_64-linux-gnu/libc.so.6+0x36f36)

    ​8 0x000055d72f0ce88d emitGlobalConstantImpl(llvm::DataLayout const&, llvm::Constant const, llvm::AsmPrinter&, llvm::Constant const, unsigned long) AsmPrinter.cpp:0:0

    ​9 0x000055d72f0cee93 llvm::AsmPrinter::emitGlobalConstant(llvm::DataLayout const&, llvm::Constant const*) (/scratch/software/clang-trunk/bin/clang-13+0x46a6e93)

    ​10 0x000055d72f0cfa6a llvm::AsmPrinter::emitGlobalVariable(llvm::GlobalVariable const*) (/scratch/software/clang-trunk/bin/clang-13+0x46a7a6a)

    ​11 0x000055d72f0d104b llvm::AsmPrinter::doFinalization(llvm::Module&) (/scratch/software/clang-trunk/bin/clang-13+0x46a904b)

    ​12 0x000055d72da6df75 llvm::FPPassManager::doFinalization(llvm::Module&) (/scratch/software/clang-trunk/bin/clang-13+0x3045f75)

    ​13 0x000055d72da7b176 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/scratch/software/clang-trunk/bin/clang-13+0x3053176)

    ​14 0x000055d72e6b5e72 (anonymous namespace)::EmitAssemblyHelper::EmitAssemblyWithNewPassManager(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete >) BackendUtil.cpp:0:0

    ​15 0x000055d72e6b792d clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete >) (/scratch/software/clang-trunk/bin/clang-13+0x3c8f92d)

    ​16 0x000055d72f4e0e1f clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/scratch/software/clang-trunk/bin/clang-13+0x4ab8e1f)

    ​17 0x000055d7305984d9 clang::ParseAST(clang::Sema&, bool, bool) (/scratch/software/clang-trunk/bin/clang-13+0x5b704d9)

    ​18 0x000055d72f4df968 clang::CodeGenAction::ExecuteAction() (/scratch/software/clang-trunk/bin/clang-13+0x4ab7968)

    ​19 0x000055d72ed8f599 clang::FrontendAction::Execute() (/scratch/software/clang-trunk/bin/clang-13+0x4367599)

    ​20 0x000055d72ed227e6 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/scratch/software/clang-trunk/bin/clang-13+0x42fa7e6)

    ​21 0x000055d72ee6d480 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/scratch/software/clang-trunk/bin/clang-13+0x4445480)

    ​22 0x000055d72bc8d696 cc1_main(llvm::ArrayRef<char const>, char const, void*) (/scratch/software/clang-trunk/bin/clang-13+0x1265696)

    ​23 0x000055d72bc899d8 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) driver.cpp:0:0

    ​24 0x000055d72bbb70e6 main (/scratch/software/clang-trunk/bin/clang-13+0x118f0e6)

    ​25 0x00007f9e6b6ed0b3 __libc_start_main /build/glibc-ZN95T4/glibc-2.31/csu/../csu/libc-start.c:342:3

    ​26 0x000055d72bc8954e _start (/scratch/software/clang-trunk/bin/clang-13+0x126154e)

    clang-13: error: unable to execute command: Aborted (core dumped) clang-13: error: clang frontend command failed due to signal (use -v to see invocation) clang version 13.0.0 (https://github.com/llvm/llvm-project.git 2e9c75daffddd65e37c3236708b5b133e6f5f2f5) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /home/cnsun/usr/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/mutant-95fd46.c clang-13: note: diagnostic msg: /tmp/mutant-95fd46.sh clang-13: note: diagnostic msg:


Endilll commented 1 year ago

Still crashing as of post-17 trunk: https://godbolt.org/z/9cWdY68rv

<source>:30:77: warning: expected ';' at end of declaration list
   30 |                                                           char *line, ulmask
      |                                                                             ^
      |                                                                             ;
<source>:31:63: warning: expected ';' at end of declaration list
   31 |                                                         } c[2]
      |                                                               ^
      |                                                               ;
<source>:32:61: warning: expected ';' at end of declaration list
   32 |                                                       } c[2]
      |                                                             ^
      |                                                             ;
<source>:33:59: warning: expected ';' at end of declaration list
   33 |                                                     } c[2]
      |                                                           ^
      |                                                           ;
<source>:34:57: warning: expected ';' at end of declaration list
   34 |                                                   } c[2]
      |                                                         ^
      |                                                         ;
<source>:35:55: warning: expected ';' at end of declaration list
   35 |                                                 } c[2]
      |                                                       ^
      |                                                       ;
<source>:36:53: warning: expected ';' at end of declaration list
   36 |                                               } c[2]
      |                                                     ^
      |                                                     ;
<source>:37:51: warning: expected ';' at end of declaration list
   37 |                                             } c[2]
      |                                                   ^
      |                                                   ;
<source>:38:49: warning: expected ';' at end of declaration list
   38 |                                           } c[2]
      |                                                 ^
      |                                                 ;
<source>:39:47: warning: expected ';' at end of declaration list
   39 |                                         } c[2]
      |                                               ^
      |                                               ;
<source>:40:45: warning: expected ';' at end of declaration list
   40 |                                       } c[2]
      |                                             ^
      |                                             ;
<source>:41:43: warning: expected ';' at end of declaration list
   41 |                                     } c[2]
      |                                           ^
      |                                           ;
<source>:42:41: warning: expected ';' at end of declaration list
   42 |                                   } c[2]
      |                                         ^
      |                                         ;
<source>:43:39: warning: expected ';' at end of declaration list
   43 |                                 } c[2]
      |                                       ^
      |                                       ;
<source>:44:37: warning: expected ';' at end of declaration list
   44 |                               } c[2]
      |                                     ^
      |                                     ;
<source>:45:35: warning: expected ';' at end of declaration list
   45 |                             } c[2]
      |                                   ^
      |                                   ;
<source>:46:33: warning: expected ';' at end of declaration list
   46 |                           } c[2]
      |                                 ^
      |                                 ;
<source>:47:31: warning: expected ';' at end of declaration list
   47 |                         } c[2]
      |                               ^
      |                               ;
<source>:48:29: warning: expected ';' at end of declaration list
   48 |                       } c[2]
      |                             ^
      |                             ;
<source>:49:27: warning: expected ';' at end of declaration list
   49 |                     } c[2]
      |                           ^
      |                           ;
<source>:50:25: warning: expected ';' at end of declaration list
   50 |                   } c[2]
      |                         ^
      |                         ;
<source>:51:23: warning: expected ';' at end of declaration list
   51 |                 } c[2]
      |                       ^
      |                       ;
<source>:52:21: warning: expected ';' at end of declaration list
   52 |               } c[2]
      |                     ^
      |                     ;
<source>:53:19: warning: expected ';' at end of declaration list
   53 |             } c[2]
      |                   ^
      |                   ;
<source>:54:17: warning: expected ';' at end of declaration list
   54 |           } c[2]
      |                 ^
      |                 ;
<source>:55:15: warning: expected ';' at end of declaration list
   55 |         } c[2]
      |               ^
      |               ;
<source>:56:13: warning: expected ';' at end of declaration list
   56 |       } c[2]
      |             ^
      |             ;
<source>:57:11: warning: expected ';' at end of declaration list
   57 |     } c[2]
      |           ^
      |           ;
<source>:58:9: warning: expected ';' at end of declaration list
   58 |   } c[2]
      |         ^
      |         ;

clang++: /root/llvm-project/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp:3310:
void emitGlobalConstantStruct(const llvm::DataLayout&, const llvm::ConstantStruct*, llvm::AsmPrinter&, const llvm::Constant*, uint64_t, llvm::AsmPrinter::AliasMapTy*):
Assertion `SizeSoFar == Layout->getSizeInBytes() && "Layout of constant struct may be incorrect!"' 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: /opt/compiler-explorer/clang-assertions-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -x c -Wno-implicit-int <source>
1.  <eof> parser at end of file
2.  Code generation
 #0 0x0000000003673848 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3673848)
 #1 0x00000000036716cc llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x36716cc)
 #2 0x00000000035bef28 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f504e4fe420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007f504dfc100b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #5 0x00007f504dfa0859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #6 0x00007f504dfa0729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #7 0x00007f504dfb1fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #8 0x00000000044bdaa2 emitGlobalConstantImpl(llvm::DataLayout const&, llvm::Constant const*, llvm::AsmPrinter&, llvm::Constant const*, unsigned long, llvm::DenseMap<unsigned long, llvm::SmallVector<llvm::GlobalAlias const*, 1u>, llvm::DenseMapInfo<unsigned long, void>, llvm::detail::DenseMapPair<unsigned long, llvm::SmallVector<llvm::GlobalAlias const*, 1u>>>*) AsmPrinter.cpp:0:0
 #9 0x00000000044be76e llvm::AsmPrinter::emitGlobalConstant(llvm::DataLayout const&, llvm::Constant const*, llvm::DenseMap<unsigned long, llvm::SmallVector<llvm::GlobalAlias const*, 1u>, llvm::DenseMapInfo<unsigned long, void>, llvm::detail::DenseMapPair<unsigned long, llvm::SmallVector<llvm::GlobalAlias const*, 1u>>>*) (.constprop.0) AsmPrinter.cpp:0:0
#10 0x00000000044bfdb2 llvm::AsmPrinter::emitGlobalVariable(llvm::GlobalVariable const*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x44bfdb2)
#11 0x00000000044bb523 llvm::AsmPrinter::doFinalization(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x44bb523)
#12 0x0000000003008dfd llvm::FPPassManager::doFinalization(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3008dfd)
#13 0x0000000003014aa6 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3014aa6)
#14 0x00000000038e30a0 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) BackendUtil.cpp:0:0
#15 0x00000000038e39c9 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>>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x38e39c9)
#16 0x00000000048c6faf clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x48c6faf)
#17 0x0000000005d80689 clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5d80689)
#18 0x00000000048c5798 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x48c5798)
#19 0x000000000412d9d9 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x412d9d9)
#20 0x00000000040b1d6e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x40b1d6e)
#21 0x000000000420dc46 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x420dc46)
#22 0x0000000000bcb672 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbcb672)
#23 0x0000000000bc3e5a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#24 0x0000000003f11c19 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
#25 0x00000000035bf3d4 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x35bf3d4)
#26 0x0000000003f1220f 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
#27 0x0000000003eda175 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3eda175)
#28 0x0000000003edabdd clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3edabdd)
#29 0x0000000003ee2705 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3ee2705)
#30 0x0000000000bc9927 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbc9927)
#31 0x0000000000ac39f1 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xac39f1)
#32 0x00007f504dfa2083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#33 0x0000000000bc393e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbc393e)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)