Quuxplusone / LLVMBugzillaTest

0 stars 0 forks source link

Ubuntu 16.04 tar.xz release: clang segmentation fault in versions >=5.0.2 with `-debug-info-kind=limited` #38876

Open Quuxplusone opened 5 years ago

Quuxplusone commented 5 years ago
Bugzilla Link PR39904
Status NEW
Importance P enhancement
Reported by Kaveh Vaghefi (kaveh@vaghefi.org)
Reported on 2018-12-06 08:37:43 -0800
Last modified on 2019-02-21 14:40:15 -0800
Version 5.0
Hardware PC Linux
CC htmldeveloper@gmail.com, llvm-bugs@lists.llvm.org, neeilans@live.com, richard-llvm@metafoo.co.uk, rnk@google.com
Fixed by commit(s)
Attachments
Blocks
Blocked by
See also

We run clang in a docker container based on Ubuntu 16.04. In it we download the tar.xz archive for clang, place it in /opt, and symlink it in using update-alternatives (here's the line from our Dockerfile)

RUN export CLANG_VERSION=5.0.1 && \ export CLANG_PKG=clang+llvm-$CLANG_VERSION-x86_64-linux-gnu-ubuntu-16.04 && \ wget --progress=bar:force http://llvm.org/releases/$CLANG_VERSION/$CLANG_PKG.tar.xz && \ tar xvfJ $CLANG_PKG.tar.xz -C /opt && \ chmod -R 755 /opt/$CLANG_PKG && \

make symlinks to abstract compiler version

update-alternatives --install /usr/bin/clang clang /opt/$CLANG_PKG/bin/clang 100 \ --slave /usr/bin/clang++ clang++ /opt/$CLANG_PKG/bin/clang++ \ --slave /usr/bin/llvm-symbolizer llvm-symbolizer /opt/$CLANG_PKG/bin/llvm-symbolizer \ --slave /usr/bin/llvm-profdata llvm-profdata /opt/$CLANG_PKG/bin/llvm-profdata\ --slave /usr/bin/llvm-ar llvm-ar /opt/$CLANG_PKG/bin/llvm-ar \ --slave /usr/bin/lld lld /opt/$CLANG_PKG/bin/lld \ --slave /usr/bin/llvm-nm llvm-nm /opt/$CLANG_PKG/bin/llvm-nm \ --slave /usr/bin/llvm-objdump llvm-objdump /opt/$CLANG_PKG/bin/llvm-objdump \ --slave /usr/bin/clang-format clang-format /opt/$CLANG_PKG/bin/clang-format \ --slave /usr/bin/llvm-ranlib llvm-ranlib /opt/$CLANG_PKG/bin/llvm-ranlib \ --slave /lib/libc++.so libc++.so /opt/$CLANG_PKG/lib/libc++.so \ --slave /lib/libc++.so.1 libc++.so.1 /opt/$CLANG_PKG/lib/libc++.so.1 \ --slave /lib/libc++.so.1.0 libc++.so.1.0 /opt/$CLANG_PKG/lib/libc++.so.1.0 \ --slave /lib/libc++abi.so libc++abi.so /opt/$CLANG_PKG/lib/libc++abi.so \ --slave /lib/libc++abi.so.1 libc++abi.so.1 /opt/$CLANG_PKG/lib/libc++abi.so.1 \ --slave /lib/libc++abi.so.1.0 libc++abi.so.1.0 /opt/$CLANG_PKG/lib/libc++abi.so.1.0 \ --slave /lib/libomp.so libomp.so /opt/$CLANG_PKG/lib/libomp.so

I'm finding that if I use any version after 5.0.1, clang exhibits a segmentation fault with the -g option passed in. If I remove the -debug-info-kind=limited command on the invocation below, the segmentation fault does not happen. I believe this is a bug that needs to be fixed, but I'd appreciate the insight of someone more knowledgable with clang. It seems to be like more recent versions might be built without the option for ZLIB compression enabled.

$ /opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0 \ -cc1 \ -triple x86_64-unknown-linux-gnu \ -emit-obj \ --compress-debug-sections \ -disable-free \ -disable-llvm-verifier \ -discard-value-names \ -main-file-name buildinfo_query.cc \ -mrelocation-model static \ -mthread-model posix \ -mdisable-fp-elim \ -fmath-errno \ -masm-verbose \ -mconstructor-aliases \ -munwind-tables \ -fuse-init-array \ -target-cpu x86-64 \ -momit-leaf-frame-pointer \ -dwarf-column-info \ -debug-info-kind=limited \ -dwarf-version=4 \ -debugger-tuning=gdb \ -coverage-notes-file /proc/self/cwd/bazel-out/k8-py3-opt/bin/devtools/_objs/buildinfo_query/devtools/buildinfo_query.gcno \ -resource-dir /opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/lib/clang/5.0.2 \ -dependency-file bazel-out/k8-py3-opt/bin/devtools/_objs/buildinfo_query/devtools/buildinfo_query.d \ -MT bazel-out/k8-py3-opt/bin/devtools/_objs/buildinfo_query/devtools/buildinfo_query.o \ -sys-header-deps \ -iquote . \ -iquote bazel-out/k8-py3-opt/genfiles \ -iquote external/bazel_tools \ -iquote bazel-out/k8-py3-opt/genfiles/external/bazel_tools \ -isystem external/bazel_tools/tools/cpp/gcc3 \ -D NDEBUG \ -internal-isystem /opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/../include/c++/v1 \ -internal-isystem /usr/local/include \ -internal-isystem /opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/lib/clang/5.0.2/include \ -internal-externc-isystem /usr/include/x86_64-linux-gnu \ -internal-externc-isystem /usr/include \ -O3 \ -Wthread-safety \ -Wno-unknown-pragmas \ -Wno-inconsistent-missing-override \ -Wno-deprecated-register \ -Werror \ -Wno-sign-compare \ -Wno-invalid-partial-specialization \ -std=c++1z \ -fdeprecated-macro \ -fdebug-compilation-dir /proc/self/cwd \ -ferror-limit 19 \ -fmessage-length 0 \ -fopenmp \ -fobjc-runtime=gcc \ -fcxx-exceptions \ -fexceptions \ -fdiagnostics-show-option \ -vectorize-loops \ -vectorize-slp \ -o bazel-out/k8-py3-opt/bin/devtools/_objs/buildinfo_query/devtools/buildinfo_query.o \ -x c++ devtools/buildinfo_query.cc

0 0x0000000001a63ae4 PrintStackTraceSignalHandler(void*) (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x1a63ae4)

1 0x0000000001a63dc6 SignalHandler(int) (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x1a63dc6)

2 0x00007fa3729bd390 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x11390)

3 0x000000000181e2a4 llvm::Error llvm::handleErrors<llvm::consumeError(llvm::Error)::{lambda(llvm::ErrorInfoBase const&)#1}>(llvm::Error, llvm::consumeError(llvm::Error)::{lambda(llvm::ErrorInfoBase const&)#1}&&) (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x181e2a4)

4 0x0000000001819b37 (anonymous namespace)::ELFObjectWriter::writeObject(llvm::MCAssembler&, llvm::MCAsmLayout const&) (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x1819b37)

5 0x000000000182a8bb llvm::MCAssembler::Finish() (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x182a8bb)

6 0x000000000207ef9c llvm::AsmPrinter::doFinalization(llvm::Module&) (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x207ef9c)

7 0x000000000169b163 llvm::FPPassManager::doFinalization(llvm::Module&) (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x169b163)

8 0x000000000169b561 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x169b561)

9 0x0000000001ba4dd2 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_delete >) (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x1ba4dd2)

10 0x0000000002298f0d clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x2298f0d)

11 0x00000000024c5636 clang::ParseAST(clang::Sema&, bool, bool) (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x24c5636)

12 0x0000000001f2cf0f clang::FrontendAction::Execute() (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x1f2cf0f)

13 0x0000000001ede2b8 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x1ede2b8)

14 0x0000000001fa94ad clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x1fa94ad)

15 0x00000000008afd51 cc1_main(llvm::ArrayRef<char const>, char const, void*) (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x8afd51)

16 0x00000000008ae5e6 main (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x8ae5e6)

17 0x00007fa371955830 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x20830)

18 0x00000000008ab999 _start (/opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0+0x8ab999)

Stack dump:

  1. Program arguments: /opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/clang-5.0 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj --compress-debug-sections -disable-free -disable-llvm-verifier -discard-value-names -main-file-name buildinfo_query.cc -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -momit-leaf-frame-pointer -dwarf-column-info -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -coverage-notes-file /proc/self/cwd/bazel-out/k8-py3-opt/bin/devtools/_objs/buildinfo_query/devtools/buildinfo_query.gcno -resource-dir /opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/lib/clang/5.0.2 -dependency-file bazel-out/k8-py3-opt/bin/devtools/_objs/buildinfo_query/devtools/buildinfo_query.d -MT bazel-out/k8-py3-opt/bin/devtools/_objs/buildinfo_query/devtools/buildinfo_query.o -sys-header-deps -iquote . -iquote bazel-out/k8-py3-opt/genfiles -iquote external/bazel_tools -iquote bazel-out/k8-py3-opt/genfiles/external/bazel_tools -isystem external/bazel_tools/tools/cpp/gcc3 -D NDEBUG -internal-isystem /opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/bin/../include/c++/v1 -internal-isystem /usr/local/include -internal-isystem /opt/clang+llvm-5.0.2-x86_64-linux-gnu-ubuntu-16.04/lib/clang/5.0.2/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /usr/include -O3 -Wthread-safety -Wno-unknown-pragmas -Wno-inconsistent-missing-override -Wno-deprecated-register -Werror -Wno-sign-compare -Wno-invalid-partial-specialization -std=c++1z -fdeprecated-macro -fdebug-compilation-dir /proc/self/cwd -ferror-limit 19 -fmessage-length 0 -fopenmp -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -vectorize-loops -vectorize-slp -o bazel-out/k8-py3-opt/bin/devtools/_objs/buildinfo_query/devtools/buildinfo_query.o -x c++ devtools/buildinfo_query.cc
  2. parser at end of file
  3. Code generation Segmentation fault (core dumped)
Quuxplusone commented 5 years ago

We need a reproducer in order to fix this bug.

If this code is open source, please attach (or upload elsewhere, such as in google drive) pre-processed source code for it.

If the code is private and cannot be shared, consider using CReduce to reduce it and attach a reduced reproduction.

Without a reproduction, we won't be able to find the problem and will eventually close this as "wontfix".