Issue 120009
Summary [c++] Crash at type deductions of static member.
Labels new issue
Assignees
Reporter cassioneri
    ## Code

```
template <typename>
struct a {
    static const int b = 0;
    static constexpr decltype(&b) c = &b;
};

auto x = a<int>::c;
```

## Stack dump
```
0.      Program arguments: clang++ -emit-llvm -Xclang -disable-llvm-passes -c main.cpp
1. <eof> parser at end of file
2.      main.cpp:7:6: LLVM IR generation of declaration 'x'
3.      main.cpp:7:6: Generating code for declaration 'x'
 #0 0x00007941e87fcd90 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /usr/src/debug/llvm/llvm-18.1.8.src/lib/Support/Unix/Signals.inc:723:22
 #1 0x00007941e87fa26d llvm::sys::RunSignalHandlers() /usr/src/debug/llvm/llvm-18.1.8.src/lib/Support/Signals.cpp:105:20
 #2 0x00007941e87fa26d llvm::sys::CleanupOnSignal(unsigned long) /usr/src/debug/llvm/llvm-18.1.8.src/lib/Support/Unix/Signals.inc:367:31
 #3 0x00007941e86e08e9 HandleCrash /usr/src/debug/llvm/llvm-18.1.8.src/lib/Support/CrashRecoveryContext.cpp:73:5
 #4 0x00007941e86e08e9 CrashRecoverySignalHandler /usr/src/debug/llvm/llvm-18.1.8.src/lib/Support/CrashRecoveryContext.cpp:390:62
 #5 0x00007941e7bfe1d0 (/usr/lib/libc.so.6+0x3d1d0)
 #6 0x00007941e8a2eae6 llvm::Type::isIntegerTy(unsigned int) const /usr/src/debug/llvm/llvm-18.1.8.src/lib/IR/Type.cpp:57:24
 #7 0x00007941f28868c6 clang::CodeGen::CodeGenTypes::ConvertTypeForMem(clang::QualType, bool) (.constprop.0) /usr/src/debug/clang/clang-18.1.8.src/lib/CodeGen/CodeGenTypes.cpp:113:0
 #8 0x00007941f1829ebe tryEmit /usr/src/debug/clang/clang-18.1.8.src/lib/CodeGen/CGExprConstant.cpp:1880:49
 #9 0x00007941f1829ebe clang::CodeGen::ConstantEmitter::tryEmitPrivate(clang::APValue const&, clang::QualType) /usr/src/debug/clang/clang-18.1.8.src/lib/CodeGen/CGExprConstant.cpp:2094:65
#10 0x00007941f182aeb1 clang::CodeGen::ConstantEmitter::tryEmitPrivateForMemory(clang::APValue const&, clang::QualType) /usr/src/debug/clang/clang-18.1.8.src/lib/CodeGen/CGExprConstant.cpp:1731:26
#11 0x00007941f182b225 clang::CodeGen::ConstantEmitter::markIfFailed(llvm::Constant*) /usr/src/debug/clang/clang-18.1.8.src/lib/CodeGen/ConstantEmitter.h:165:5
#12 0x00007941f182b225 clang::CodeGen::ConstantEmitter::tryEmitForInitializer(clang::VarDecl const&) /usr/src/debug/clang/clang-18.1.8.src/lib/CodeGen/CGExprConstant.cpp:1472:22
#13 0x00007941f1a0de16 clang::CodeGen::CodeGenModule::EmitGlobalVarDefinition(clang::VarDecl const*, bool) /usr/src/debug/clang/clang-18.1.8.src/lib/CodeGen/CodeGenModule.cpp:5334:5
#14 0x00007941f1a223e5 clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) /usr/src/debug/clang/clang-18.1.8.src/lib/CodeGen/CodeGenModule.cpp:4101:60
#15 0x00007941f1a22dc3 clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) /usr/src/debug/clang/clang-18.1.8.src/lib/CodeGen/CodeGenModule.cpp:3824:27
#16 0x00007941f1a2b6ad clang::Decl::getKind() const /usr/src/debug/clang/clang-18.1.8.src/include/clang/AST/DeclBase.h:447:0
#17 0x00007941f1a2b6ad clang::DecompositionDecl::classof(clang::Decl const*) /usr/src/debug/clang/clang-18.1.8.src/include/clang/AST/DeclCXX.h:4197:0
#18 0x00007941f1a2b6ad llvm::isa_impl<clang::DecompositionDecl, clang::Decl, void>::doit(clang::Decl const&) /usr/include/llvm/Support/Casting.h:64:0
#19 0x00007941f1a2b6ad llvm::isa_impl_cl<clang::DecompositionDecl, clang::Decl const*>::doit(clang::Decl const*) /usr/include/llvm/Support/Casting.h:110:0
#20 0x00007941f1a2b6ad llvm::isa_impl_wrap<clang::DecompositionDecl, clang::Decl const*, clang::Decl const*>::doit(clang::Decl const* const&) /usr/include/llvm/Support/Casting.h:137:0
#21 0x00007941f1a2b6ad llvm::isa_impl_wrap<clang::DecompositionDecl, clang::Decl* const, clang::Decl const*>::doit(clang::Decl* const&) /usr/include/llvm/Support/Casting.h:129:0
#22 0x00007941f1a2b6ad llvm::CastIsPossible<clang::DecompositionDecl, clang::Decl*, void>::isPossible(clang::Decl* const&) /usr/include/llvm/Support/Casting.h:257:0
#23 0x00007941f1a2b6ad llvm::CastInfo<clang::DecompositionDecl, clang::Decl*, void>::doCastIfPossible(clang::Decl* const&) /usr/include/llvm/Support/Casting.h:493:0
#24 0x00007941f1a2b6ad decltype(auto) llvm::dyn_cast<clang::DecompositionDecl, clang::Decl>(clang::Decl*) /usr/include/llvm/Support/Casting.h:663:0
#25 0x00007941f1a2b6ad clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) /usr/src/debug/clang/clang-18.1.8.src/lib/CodeGen/CodeGenModule.cpp:6753:0
#26 0x00007941f1a88853 HandleTopLevelDecl /usr/src/debug/clang/clang-18.1.8.src/lib/CodeGen/ModuleBuilder.cpp:189:0
#27 0x00007941f19a1597 clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) /usr/src/debug/clang/clang-18.1.8.src/lib/CodeGen/CodeGenAction.cpp:208:3
#28 0x00007941f067c022 clang::ParseAST(clang::Sema&, bool, bool) /usr/src/debug/clang/clang-18.1.8.src/lib/Parse/ParseAST.cpp:167:17
#29 0x00007941f2147451 clang::FrontendAction::Execute() /usr/src/debug/clang/clang-18.1.8.src/lib/Frontend/FrontendAction.cpp:1069:21
#30 0x00007941f20e8097 llvm::Error::getPtr() const /usr/include/llvm/Support/Error.h:279:0
#31 0x00007941f20e8097 llvm::Error::operator bool() /usr/include/llvm/Support/Error.h:239:0
#32 0x00007941f20e8097 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /usr/src/debug/clang/clang-18.1.8.src/lib/Frontend/CompilerInstance.cpp:1057:0
#33 0x00007941f219f7fd std::__shared_ptr<clang::FrontendOptions, (__gnu_cxx::_Lock_policy)2>::get() const /usr/include/c++/14.2.1/bits/shared_ptr_base.h:1667:0
#34 0x00007941f219f7fd std::__shared_ptr_access<clang::FrontendOptions, (__gnu_cxx::_Lock_policy)2, false, false>::_M_get() const /usr/include/c++/14.2.1/bits/shared_ptr_base.h:1364:0
#35 0x00007941f219f7fd std::__shared_ptr_access<clang::FrontendOptions, (__gnu_cxx::_Lock_policy)2, false, false>::operator*() const /usr/include/c++/14.2.1/bits/shared_ptr_base.h:1350:0
#36 0x00007941f219f7fd clang::CompilerInvocation::getFrontendOpts() /usr/src/debug/clang/clang-18.1.8.src/include/clang/Frontend/CompilerInvocation.h:254:0
#37 0x00007941f219f7fd clang::CompilerInstance::getFrontendOpts() /usr/src/debug/clang/clang-18.1.8.src/include/clang/Frontend/CompilerInstance.h:291:0
#38 0x00007941f219f7fd clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /usr/src/debug/clang/clang-18.1.8.src/lib/FrontendTool/ExecuteCompilerInvocation.cpp:273:0
#39 0x00005995236873a4 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /usr/src/debug/clang/clang-18.1.8.src/tools/driver/cc1_main.cpp:294:40
#40 0x000059952368b70a ExecuteCC1Tool /usr/src/debug/clang/clang-18.1.8.src/tools/driver/driver.cpp:365:20
#41 0x00007941f1e1d485 operator() /usr/src/debug/clang/clang-18.1.8.src/lib/Driver/Job.cpp:440:32
#42 0x00007941f1e1d485 callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef> >, std::string*, bool*) const::<lambda()> > /usr/include/llvm/ADT/STLFunctionalExtras.h:45:52
#43 0x00007941e86e0d3a llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) /usr/src/debug/llvm/llvm-18.1.8.src/lib/Support/CrashRecoveryContext.cpp:428:1
#44 0x00007941f1e1fe16 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const /usr/src/debug/clang/clang-18.1.8.src/lib/Driver/Job.cpp:444:10
#45 0x00007941f1ddb039 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const /usr/src/debug/clang/clang-18.1.8.src/lib/Driver/Compilation.cpp:200:3
#46 0x00007941f1ddb43c clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const /usr/src/debug/clang/clang-18.1.8.src/lib/Driver/Compilation.cpp:253:5
#47 0x00007941f1df9864 llvm::SmallVectorBase<unsigned int>::empty() const /usr/include/llvm/ADT/SmallVector.h:94:0
#48 0x00007941f1df9864 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) /usr/src/debug/clang/clang-18.1.8.src/lib/Driver/Driver.cpp:1921:0
#49 0x000059952368e045 llvm::SmallVectorBase<unsigned int>::size() const /usr/include/llvm/ADT/SmallVector.h:91:32
#50 0x000059952368e045 llvm::SmallVectorTemplateCommon<std::pair<int, clang::driver::Command const*>, void>::end() /usr/include/llvm/ADT/SmallVector.h:282:41
#51 0x000059952368e045 clang_main(int, char**, llvm::ToolContext const&) /usr/src/debug/clang/clang-18.1.8.src/tools/driver/driver.cpp:542:26
#52 0x000059952367efd5 main /usr/src/debug/clang/clang-18.1.8.src/build/tools/driver/clang-driver.cpp:18:1
#53 0x00007941e7be6e08 __libc_start_call_main /usr/src/debug/glibc/glibc/csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#54 0x00007941e7be6ecc call_init /usr/src/debug/glibc/glibc/csu/../csu/libc-start.c:128:20
#55 0x00007941e7be6ecc __libc_start_main /usr/src/debug/glibc/glibc/csu/../csu/libc-start.c:347:5
#56 0x000059952367f035 _start (/usr/bin/clang+++0xb035)
clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)
clang version 18.1.8
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/main-2cbcb9.cpp
clang++: note: diagnostic msg: /tmp/main-2cbcb9.sh
clang++: note: diagnostic msg: 

********************
```

## Preprocessed file

Not added since there's nothing other than source annotations, for the preprocessor to do.

## Script (`/tmp/main-2cbcb9.sh`)
```
# Crash reproducer for clang version 18.1.8
# Driver args: "--driver-mode=g++" "-emit-llvm" "-Xclang" "-disable-llvm-passes" "-c" "main.cpp"
# Original command: "/usr/bin/clang++" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-emit-llvm-bc" "-emit-llvm-uselists" "-disable-free" "-clear-ast-before-backend" "-disable-llvm-verifier" "-discard-value-names" "-main-file-name" "main.cpp" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-mframe-pointer=all" "-fmath-errno" "-ffp-contract=on" "-fno-rounding-math" "-mconstructor-aliases" "-funwind-tables=2" "-target-cpu" "x86-64" "-tune-cpu" "generic" "-debugger-tuning=gdb" "-fdebug-compilation-dir=/home/cassio/rrr" "-fcoverage-compilation-dir=/home/cassio/rrr" "-resource-dir" "/usr/lib/clang/18" "-internal-isystem" "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1" "-internal-isystem" "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu" "-internal-isystem" "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/backward" "-internal-isystem" "/usr/lib/clang/18/include" "-internal-isystem" "/usr/local/include" "-internal-isystem" "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../x86_64-pc-linux-gnu/include" "-internal-externc-isystem" "/include" "-internal-externc-isystem" "/usr/include" "-fdeprecated-macro" "-ferror-limit" "19" "-stack-protector" "2" "-fgnuc-version=4.2.1" "-fskip-odr-check-in-gmf" "-fcxx-exceptions" "-fexceptions" "-fcolor-diagnostics" "-disable-llvm-passes" "-faddrsig" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-o" "main.bc" "-x" "c++" "main.cpp"
 "/usr/bin/clang++" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-emit-llvm-bc" "-emit-llvm-uselists" "-disable-free" "-clear-ast-before-backend" "-disable-llvm-verifier" "-discard-value-names" "-main-file-name" "main.cpp" "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" "-mframe-pointer=all" "-fmath-errno" "-ffp-contract=on" "-fno-rounding-math" "-mconstructor-aliases" "-funwind-tables=2" "-target-cpu" "x86-64" "-tune-cpu" "generic" "-debugger-tuning=gdb" "-fdebug-compilation-dir=/home/cassio/rrr" "-fcoverage-compilation-dir=/home/cassio/rrr" "-fdeprecated-macro" "-ferror-limit" "19" "-stack-protector" "2" "-fgnuc-version=4.2.1" "-fskip-odr-check-in-gmf" "-fcxx-exceptions" "-fexceptions" "-fcolor-diagnostics" "-disable-llvm-passes" "-faddrsig" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-x" "c++" "main-2cbcb9.cpp"
```

## See live

https://godbolt.org/z/TfjGs7P8s

_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to