[cfe-users] My compiler crashes .... but the online godbolt one doesn't ?!
David Blaikie via cfe-users
cfe-users at lists.llvm.org
Mon Dec 10 10:17:53 PST 2018
Possible that the online one isn't built with assertions enabled (you could
test this with other known crashers to see if they reproduce on godbolt
with assertion crash dumps or only with raw segfaults)? If that's the
case,t hen it's possible that the codepath that should assert continues on
and perhaps either has unexpected or even undefined behavior but not a
crash.
On Sat, Dec 8, 2018 at 3:08 PM Andy Gibbs via cfe-users <
cfe-users at lists.llvm.org> wrote:
> Hi,
>
> Crazy question, but would someone kind be able to help me a little here.
> I have
> a clang 4.0 installation on my linux laptop, which crashes when compiling
> this
> code fragment:
>
> template <const int& X>
> constexpr auto fn1() { return X; }
>
> template <typename>
> auto fn2()
> {
> return ([]() {
> static constexpr auto value = 12;
> return fn1<value>();
> })();
> }
>
> auto test()
> {
> return fn2<int>();
> }
>
> However, doing the same on the godbolt clang 4.0.0 compiler doesn't
> crash. What
> I can't work out is why!?
>
> The is the command I run on my machine (using a clean checkout from the
> clang
> svn repository) and the output given (the problem seems to be a
> non-instantiated
> VarDecl in "LocalInstantiationScope::findInstantiationOf()" if you add
> debug
> information to the compiler code at this point):
>
>
> $ ~/Toolchains/clang-4.0/bin/clang++ -std=c++1z -O2 -S -o - test.cpp -v
>
> clang version 4.0.0 (branches/release_40)
> Target: x86_64-unknown-linux-gnu
> Thread model: posix
> InstalledDir: /home/user/Toolchains/clang-4.0/bin
> Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6
> Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.3.0
> Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.3.0
> Candidate multilib: .;@m64
> Selected multilib: .;@m64
> "/home/user/Toolchains/clang-4.0/bin/clang-4.0" -cc1 -triple
> x86_64-unknown-linux-gnu -S -disable-free -main-file-name test.cpp
> -mrelocation-model static -mthread-model posix -fmath-errno -masm-verbose
> -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64
> -momit-leaf-frame-pointer -v -dwarf-column-info -debugger-tuning=gdb
> -coverage-notes-file /home/user/test/-.gcno -resource-dir
> /home/user/Toolchains/clang-4.0/bin/../lib/clang/4.0.0 -internal-isystem
> /usr/lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0
> -internal-isystem
>
> /usr/lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0
> -internal-isystem
>
> /usr/lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0
> -internal-isystem
> /usr/lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/backward
> -internal-isystem /usr/local/include -internal-isystem
> /home/user/Toolchains/clang-4.0/bin/../lib/clang/4.0.0/include
> -internal-externc-isystem /usr/include/x86_64-linux-gnu
> -internal-externc-isystem /include -internal-externc-isystem /usr/include
> -O2
> -std=c++1z -fdeprecated-macro -fdebug-compilation-dir /home/user/test
> -ferror-limit 19 -fmessage-length 92 -fobjc-runtime=gcc -fcxx-exceptions
> -fexceptions -fdiagnostics-show-option -fcolor-diagnostics
> -vectorize-loops
> -vectorize-slp -o - -x c++ test.cpp
> clang -cc1 version 4.0.0 based upon LLVM 4.0.0 default target
> x86_64-unknown-linux-gnu
> ignoring nonexistent directory "/include"
> ignoring duplicate directory
>
> "/usr/lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0"
> #include "..." search starts here:
> #include <...> search starts here:
> /usr/lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0
>
> /usr/lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0
> /usr/lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/backward
> /usr/local/include
> /home/user/Toolchains/clang-4.0/bin/../lib/clang/4.0.0/include
> /usr/include/x86_64-linux-gnu
> /usr/include
> End of search list.
> clang-4.0:
> /home/user/Toolchains/clang-4.0/source/tools/clang/lib/Sema/
> SemaTemplateInstantiate.cpp:2814: llvm::PointerUnion<Decl *,
> LocalInstantiationScope::DeclArgumentPack *>
> *clang::LocalInstantiationScope::findInstantiationOf(const clang::Decl *):
> Assertion `isa<LabelDecl>(D) && "declaration not instantiated in this
> scope"'
> failed.
> 0 clang-4.0 0x0000000001ac29e5
> llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 37
> 1 clang-4.0 0x0000000001ac30b6
> 2 libpthread.so.0 0x00007f1fd115a0c0
> 3 libc.so.6 0x00007f1fcfceffff gsignal + 207
> 4 libc.so.6 0x00007f1fcfcf142a abort + 362
> 5 libc.so.6 0x00007f1fcfce8e67
> 6 libc.so.6 0x00007f1fcfce8f12
> 7 clang-4.0 0x0000000002f0ecb4
> clang::LocalInstantiationScope::findInstantiationOf(clang::Decl const*) +
> 516
> 8 clang-4.0 0x0000000002f2f815
> clang::Sema::FindInstantiatedDecl(clang::SourceLocation,
> clang::NamedDecl*,
> clang::MultiLevelTemplateArgumentList const&) + 181
> [...]
>
>
> The same output from the godbolt compiler gives...
>
>
> clang version 4.0.0 (tags/RELEASE_400/final 299826)
> Target: x86_64-unknown-linux-gnu
> Thread model: posix
> InstalledDir: /opt/compiler-explorer/clang-4.0.0/bin
> Found candidate GCC installation:
> /opt/compiler-explorer/gcc-7.2.0/lib/gcc/x86_64-linux-gnu/7.2.0
> Selected GCC installation:
> /opt/compiler-explorer/gcc-7.2.0/lib/gcc/x86_64-linux-gnu/7.2.0
> Candidate multilib: .;@m64
> Selected multilib: .;@m64
> "/opt/compiler-explorer/clang-4.0.0/bin/clang-4.0" -cc1 -triple
> x86_64-unknown-linux-gnu -S -disable-free -disable-llvm-verifier
> -discard-value-names -main-file-name example.cpp -mrelocation-model static
> -mthread-model posix -fmath-errno -masm-verbose -mconstructor-aliases
> -munwind-tables -fuse-init-array -target-cpu x86-64
> -momit-leaf-frame-pointer -v
> -dwarf-column-info -debug-info-kind=limited -dwarf-version=4
> -debugger-tuning=gdb -coverage-notes-file
> /tmp/compiler-explorer-compiler118118-58-1f6fedy.0ym1/output.gcno
> -resource-dir
> /opt/compiler-explorer/clang-4.0.0/bin/../lib/clang/4.0.0
> -internal-isystem
>
> /opt/compiler-explorer/gcc-7.2.0/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../
> include/c++/7.2.0 -internal-isystem
>
> /opt/compiler-explorer/gcc-7.2.0/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../
> include/c++/7.2.0/x86_64-linux-gnu -internal-isystem
>
> /opt/compiler-explorer/gcc-7.2.0/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../
> include/c++/7.2.0/backward -internal-isystem /usr/local/include
> -internal-isystem
> /opt/compiler-explorer/clang-4.0.0/bin/../lib/clang/4.0.0/include
> -internal-externc-isystem /usr/include/x86_64-linux-gnu
> -internal-externc-isystem /include -internal-externc-isystem /usr/include
> -O2
> -std=c++1z -fdeprecated-macro -fdebug-compilation-dir
> /tmp/compiler-explorer-compiler118118-58-1f6fedy.0ym1 -ferror-limit 19
> -fmessage-length 0 -fobjc-runtime=gcc -fcxx-exceptions -fexceptions
> -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops
> -vectorize-slp
> -mllvm --x86-asm-syntax=intel -o
> /tmp/compiler-explorer-compiler118118-58-1f6fedy.0ym1/output.s -x c++
> <source>
> clang -cc1 version 4.0.0 based upon LLVM 4.0.0 default target
> x86_64-unknown-linux-gnu
> ignoring nonexistent directory "/include"
> #include "..." search starts here:
> #include <...> search starts here:
>
> /opt/compiler-explorer/gcc-7.2.0/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../
> include/c++/7.2.0
>
> /opt/compiler-explorer/gcc-7.2.0/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../
> include/c++/7.2.0/x86_64-linux-gnu
>
> /opt/compiler-explorer/gcc-7.2.0/lib/gcc/x86_64-linux-gnu/7.2.0/../../../../
> include/c++/7.2.0/backward
> /usr/local/include
> /opt/compiler-explorer/clang-4.0.0/bin/../lib/clang/4.0.0/include
> /usr/include/x86_64-linux-gnu
> /usr/include
> End of search list.
> Compiler returned: 0
>
>
> Does anyone have an ideas why my compiler should crash? Would anybody
> please be
> able to test my fragment and report if they also have a crash like me.
> I've
> tried the 6.0.0 compiler too with the same results on my machine. I'm
> building
> the 7.0.0 compiler now to see if the problem still occurs, but it looks
> like it
> does (based on the rc-compiler I had already built).
>
> (I have a bug report 39916 for a similar issue, but the code in the bug
> report
> also exhibits problems on godbolt as well as my local compiler, producing
> both
> invalid code and compiler crashes so I don't think this is an isolated
> problem.)
>
> Any help would be gratefully received -- I am pulling my hair out trying
> to get
> this code to work :o)
>
> Thanks,
>
> Andy
>
> _______________________________________________
> cfe-users mailing list
> cfe-users at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-users/attachments/20181210/f4defd96/attachment.html>
More information about the cfe-users
mailing list