This reverts commit ef0dcb506300dc9644e8000c6028d14214be9d97.
This change is causing a lot of compiler crashes.
Differential D95622
Revert "[DWARF] Create subprogram's DIE in DISubprogram's unit" SureYeaah on Jan 28 2021, 8:22 AM. Authored by
Details This reverts commit ef0dcb506300dc9644e8000c6028d14214be9d97. This change is causing a lot of compiler crashes.
Diff Detail
Event TimelineComment Actions I am trying to create a small repro for this that I can share but it would be great if we could revert this asap. Comment Actions Sure, please do revert if this is causing a crash. I'm aware that there's a latent bug hanging around, documented in https://bugs.llvm.org/show_bug.cgi?id=37255 that could be related. (This is speculation right now). Comment Actions Here's the stacktrace from a crash: #0 0x00005568d4c35205 SignalHandler(int) (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x5d5e205) #1 0x00007f00dfea89a0 __restore_rt (/usr/grte/v4/lib64/libpthread.so.0+0xf9a0) #2 0x00005568d2756aa0 llvm::DIE::computeOffsetsAndAbbrevs(llvm::AsmPrinter const*, llvm::DIEAbbrevSet&, unsigned int) (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x387faa0) #3 0x00005568d2757edc llvm::DIE::computeOffsetsAndAbbrevs(llvm::AsmPrinter const*, llvm::DIEAbbrevSet&, unsigned int) (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x3880edc) #4 0x00005568d2757edc llvm::DIE::computeOffsetsAndAbbrevs(llvm::AsmPrinter const*, llvm::DIEAbbrevSet&, unsigned int) (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x3880edc) #5 0x00005568d178ae88 llvm::DwarfFile::computeSizeAndOffsets() (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x28b3e88) #6 0x00005568d1788a28 llvm::DwarfDebug::endModule() (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x28b1a28) #7 0x00005568d2c9f5f9 llvm::AsmPrinter::doFinalization(llvm::Module&) (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x3dc85f9) #8 0x00005568d1edae12 llvm::FPPassManager::doFinalization(llvm::Module&) (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x3003e12) #9 0x00005568d1b27ac3 llvm::legacy::PassManagerImpl::run(llvm::Module&) (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x2c50ac3) #10 0x00005568d1b26d20 codegen(llvm::lto::Config const&, llvm::TargetMachine*, std::__u::function<std::__u::unique_ptr<llvm::lto::NativeObjectStream, std::__u::default_delete<llvm::lto::NativeObjectStream> > (unsigned int)>, unsigned int, llvm::Module&, llvm::ModuleSummaryIndex const&) (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x2c4fd20) #11 0x00005568d1b2514a llvm::lto::thinBackend(llvm::lto::Config const&, unsigned int, std::__u::function<std::__u::unique_ptr<llvm::lto::NativeObjectStream, std::__u::default_delete<llvm::lto::NativeObjectStream> > (unsigned int)>, llvm::Module&, llvm::ModuleSummaryIndex const&, llvm::StringMap<std::__u::unordered_set<unsigned long, std::__u::hash<unsigned long>, std::__u::equal_to<unsigned long>, std::__u::allocator<unsigned long> >, llvm::MallocAllocator> const&, llvm::DenseMap<unsigned long, llvm::GlobalValueSummary*, llvm::DenseMapInfo<unsigned long>, llvm::detail::DenseMapPair<unsigned long, llvm::GlobalValueSummary*> > const&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, std::__u::vector<std::__u::pair<llvm::StringRef, llvm::BitcodeModule>, std::__u::allocator<std::__u::pair<llvm::StringRef, llvm::BitcodeModule> > > >&, std::__u::vector<unsigned char, std::__u::allocator<unsigned char> > const&)::$_2::operator()(llvm::Module&, llvm::TargetMachine*, std::__u::unique_ptr<llvm::ToolOutputFile, std::__u::default_delete<llvm::ToolOutputFile> >) const (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x2c4e14a) #12 0x00005568d1b24288 llvm::lto::thinBackend(llvm::lto::Config const&, unsigned int, std::__u::function<std::__u::unique_ptr<llvm::lto::NativeObjectStream, std::__u::default_delete<llvm::lto::NativeObjectStream> > (unsigned int)>, llvm::Module&, llvm::ModuleSummaryIndex const&, llvm::StringMap<std::__u::unordered_set<unsigned long, std::__u::hash<unsigned long>, std::__u::equal_to<unsigned long>, std::__u::allocator<unsigned long> >, llvm::MallocAllocator> const&, llvm::DenseMap<unsigned long, llvm::GlobalValueSummary*, llvm::DenseMapInfo<unsigned long>, llvm::detail::DenseMapPair<unsigned long, llvm::GlobalValueSummary*> > const&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, std::__u::vector<std::__u::pair<llvm::StringRef, llvm::BitcodeModule>, std::__u::allocator<std::__u::pair<llvm::StringRef, llvm::BitcodeModule> > > >&, std::__u::vector<unsigned char, std::__u::allocator<unsigned char> > const&) (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x2c4d288) #13 0x00005568d1b1e54d clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*, clang::BackendAction, std::__u::unique_ptr<llvm::raw_pwrite_stream, std::__u::default_delete<llvm::raw_pwrite_stream> >) (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x2c4754d) #14 0x00005568d189269e clang::CodeGenAction::ExecuteAction() (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x29bb69e) #15 0x00005568d19eb395 clang::FrontendAction::Execute() (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x2b14395) #16 0x00005568d19eaa21 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x2b13a21) #17 0x00005568d19e998c clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x2b1298c) #18 0x00005568d19dc944 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x2b05944) #19 0x00005568d19dbdfd ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x2b04dfd) #20 0x00005568d235dcfb main (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x3486cfb) #21 0x00007f00dfd16bbd __libc_start_main (/usr/grte/v4/lib64/libc.so.6+0x38bbd) #22 0x00005568d1e25659 _start (third_party/crosstool/v18/llvm_unstable/toolchain/bin/clang+0x2f4e65 Comment Actions The stack trace is exploding when enumerating child DIEs, so it seems possible that this is running into another scenario where a subprogram is referred to incorrectly across CUs, and that wouldn't be surprising. To state the obvious, we'll need a reproducer to pin down where this is coming from. Comment Actions I can reproduce the issue internally as well, so I can try to reduce something. Oddly, my initial attempts to build with an release+asserts build makes the crash disappear, so I can't say if it's the same issue as http://llvm.org/PR37255 (which is an assertion failure). Comment Actions While I'm reducing the source, the minimal flags to hit this seem to be clang -g -mllvm -generate-type-units ... Lots of compilations trigger this crash, so you may not actually need me to reduce anything, you could maybe try compiling any large codebase (clang+llvm probably works) with those flags and find something. I'm reducing https://github.com/abseil/abseil-cpp/blob/master/absl/strings/str_split.cc which is the earliest failure seen. Comment Actions Hi, Ah, generate-type-units is the key, I generate a bunch of assertion failures on a stage2 RelWithDebInfo build and that flag: Unknown DIE kind UNREACHABLE executed at /fast/fs/llvm4/llvm/lib/CodeGen/AsmPrinter/DIE.cpp:347! I'll start digging into that, thanks for the flags. |