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@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users