Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Assertion failure in clang::Sema::tryCaptureVariable: isa<To>(Val) && "cast<Ty>() argument of incompatible type!") #64045

Open
DenisYaroshevskiy opened this issue Jul 23, 2023 · 5 comments
Labels
c++20 clang:codegen confirmed Verified by a second party

Comments

@DenisYaroshevskiy
Copy link

Unfortunately, diagnostic folder does not have clang files. Attaching .cpp and .sh

Output:

denisarosevskij@192 build % ninja unit.internals.canonical_shuffle_adapter.exe && unit/unit.internals.canonical_shuffle_adapter.exe
[0/2] Re-checking globbed directories...
[4/5] Building CXX object test/unit/CMakeFiles/unit.internals.canonical_shuffle_adapter.exe.dir/internals/canonical_shuffle_adapter.cpp.o
FAILED: test/unit/CMakeFiles/unit.internals.canonical_shuffle_adapter.exe.dir/internals/canonical_shuffle_adapter.cpp.o 
/usr/bin/clang++  -I/Users/denisarosevskij/space/eve/test -I/Users/denisarosevskij/space/eve/examples -I/Users/denisarosevskij/space/eve/include -g -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk -std=c++20 -Werror -Wall -Wpedantic -Wextra -Winvalid-pch -Xarch_arm64 -include/Users/denisarosevskij/space/eve/build/CMakeFiles/test_pch.dir/cmake_pch_arm64.hxx -MD -MT test/unit/CMakeFiles/unit.internals.canonical_shuffle_adapter.exe.dir/internals/canonical_shuffle_adapter.cpp.o -MF test/unit/CMakeFiles/unit.internals.canonical_shuffle_adapter.exe.dir/internals/canonical_shuffle_adapter.cpp.o.d -o test/unit/CMakeFiles/unit.internals.canonical_shuffle_adapter.exe.dir/internals/canonical_shuffle_adapter.cpp.o -c /Users/denisarosevskij/space/eve/test/unit/internals/canonical_shuffle_adapter.cpp
clang: error: unable to execute command: Segmentation fault: 11
clang: error: clang frontend command failed due to signal (use -v to see invocation)
Apple clang version 14.0.3 (clang-1403.0.22.14.1)
Target: arm64-apple-darwin22.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/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: /var/folders/c9/tcz63fmd5qx7ssm10_5wm6j00000gn/T/canonical_shuffle_adapter-83dffe.cpp
clang: note: diagnostic msg: /var/folders/c9/tcz63fmd5qx7ssm10_5wm6j00000gn/T/canonical_shuffle_adapter-83dffe.sh
clang: note: diagnostic msg: Crash backtrace is located in
clang: note: diagnostic msg: /Users/denisarosevskij/Library/Logs/DiagnosticReports/clang_<YYYY-MM-DD-HHMMSS>_<hostname>.crash
clang: note: diagnostic msg: (choose the .crash file that corresponds to your crash)
clang: note: diagnostic msg: 

********************

Files:
https://drive.google.com/file/d/1MrKoY80U3xQ6rGJ6cvMMvuhIEma3H8Ev/view?usp=sharing

@DenisYaroshevskiy
Copy link
Author

If I rewrite as:

template<typename Selector> struct just_shuffle_test_
{
  Selector sel;

  template<typename... Args>
  auto operator()(Args... args)
  requires(std::invocable<Selector, Args...>)
  {
    return kumi::tuple {sel(args...), eve::index<0>};
  }
};

template<typename Selector>
constexpr auto
just_shuffle_test(Selector selector)
{
  auto canonical = eve::detail::as_canonical_shuffle(just_shuffle_test_<Selector> {selector});
  return [canonical](auto... args) -> decltype(get<0>(canonical(args...)))
  { return get<0>(canonical(args...)); };
}

the crash goes away

@DimitryAndric DimitryAndric added c++20 clang:codegen confirmed Verified by a second party labels Jul 23, 2023
@llvmbot
Copy link
Collaborator

llvmbot commented Jul 23, 2023

@llvm/issue-subscribers-clang-codegen

@llvmbot
Copy link
Collaborator

llvmbot commented Jul 23, 2023

@llvm/issue-subscribers-c-20

@DimitryAndric
Copy link
Collaborator

I can reproduce (though with some tweaks to the shell script) with relatively recent main. It's an assertion:

Assertion failed: (isa<To>(Val) && "cast<Ty>() argument of incompatible type!"), function cast, file /home/dim/src/llvm/llvm-project/llvm/include/llvm/Support/Casting.h, line 578.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang -cc1 -triple arm64-apple-macosx13.0.0 -Wundef-prefix=TARGET_OS_ -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -Werror=implicit-function-declaration -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -mrelocation-model pic -pic-level 2 -mframe-pointer=non-leaf -fno-strict-return -ffp-contract=on -fno-rounding-math -target-sdk-version=13.3 -fvisibility-inlines-hidden-static-local-var -target-cpu apple-m1 -target-feature +v8.5a -target-feature +crc -target-feature +lse -target-feature +rdm -target-feature +crypto -target-feature +dotprod -target-feature +fp-armv8 -target-feature +neon -target-feature +fp16fml -target-feature +ras -target-feature +rcpc -target-feature +zcm -target-feature +zcz -target-feature +fullfp16 -target-feature +sm4 -target-feature +sha3 -target-feature +sha2 -target-feature +aes -target-abi darwinpcs -mllvm -treat-scalable-fixed-error-as-warning -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=lldb -target-linker-version 857.1 -stdlib=libc++ -Wall -Wpedantic -Wextra -Winvalid-pch -Wno-reorder-init-list -Wno-implicit-int-float-conversion -Wno-c99-designator -Wno-final-dtor-non-final-class -Wno-extra-semi-stmt -Wno-misleading-indentation -Wno-quoted-include-in-framework-header -Wno-implicit-fallthrough -Wno-enum-enum-conversion -Wno-enum-float-conversion -Wno-elaborated-enum-base -Wno-reserved-identifier -Wno-gnu-folding-constant -Wno-gnu-line-marker -std=c++20 -fdeprecated-macro -stack-protector 1 -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fgnuc-version=4.2.1 -fno-implicit-modules -fcxx-exceptions -fexceptions -fmax-type-align=16 -fcommon canonical_shuffle_adapter-83dffe.ii
1.      /Users/denisarosevskij/space/eve/test/unit/internals/canonical_shuffle_adapter.cpp:138:2: current parser token ';'
2.      /Users/denisarosevskij/space/eve/test/unit/internals/canonical_shuffle_adapter.cpp:12:1: parsing namespace '(anonymous)'
3.      /Users/denisarosevskij/space/eve/test/tts/tts.hpp:416:10: instantiating function definition 'tts::detail::test_captures<eve::wide<double, eve::fixed<1ULL>>, eve::wide<double, eve::fixed<2>>, eve::wide<double, eve::fixed<4>>, eve::wide<float, eve::fixed<1ULL>>, eve::wide<float, eve::fixed<2>>, eve::wide<float, eve::fixed<4>>, eve::wide<float, eve::fixed<8>>, eve::wide<long long, eve::fixed<1ULL>>, eve::wide<long long, eve::fixed<2>>, eve::wide<long long, eve::fixed<4>>, eve::wide<int, eve::fixed<1ULL>>, eve::wide<int, eve::fixed<2>>, eve::wide<int>, eve::wide<int, eve::fixed<8>>, eve::wide<short, eve::fixed<1ULL>>, eve::wide<short, eve::fixed<2>>, eve::wide<short, eve::fixed<4>>, eve::wide<short, eve::fixed<8>>, eve::wide<short, eve::fixed<16>>, eve::wide<signed char, eve::fixed<1ULL>>, eve::wide<signed char, eve::fixed<2>>, eve::wide<signed char, eve::fixed<4>>, eve::wide<signed char, eve::fixed<8>>, eve::wide<signed char, eve::fixed<16>>, eve::wide<signed char, eve::fixed<32>>, eve::wide<unsigned long long, eve::fixed<1ULL>>, eve::wide<unsigned long long, eve::fixed<2>>, eve::wide<unsigned long long, eve::fixed<4>>, eve::wide<unsigned int, eve::fixed<1ULL>>, eve::wide<unsigned int, eve::fixed<2>>, eve::wide<unsigned int, eve::fixed<4>>, eve::wide<unsigned int, eve::fixed<8>>, eve::wide<unsigned short, eve::fixed<1ULL>>, eve::wide<unsigned short, eve::fixed<2>>, eve::wide<unsigned short, eve::fixed<4>>, eve::wide<unsigned short, eve::fixed<8>>, eve::wide<unsigned short, eve::fixed<16>>, eve::wide<unsigned char, eve::fixed<1ULL>>, eve::wide<unsigned char, eve::fixed<2>>, eve::wide<unsigned char, eve::fixed<4>>, eve::wide<unsigned char, eve::fixed<8>>, eve::wide<unsigned char, eve::fixed<16>>, eve::wide<unsigned char, eve::fixed<32>>>::operator+<(anonymous namespace)::(lambda at /Users/denisarosevskij/space/eve/test/unit/internals/canonical_shuffle_adapter.cpp:90:141)>'
4.      /Users/denisarosevskij/space/eve/test/unit/internals/canonical_shuffle_adapter.cpp:90:141: instantiating function definition '(anonymous namespace)::(anonymous class)::operator()<eve::wide<unsigned char, eve::fixed<32>>>'
5.      /Users/denisarosevskij/space/eve/include/eve/detail/function/canonical_shuffle_adapter.hpp:78:75: instantiating function definition 'eve::detail::reverse_arguments<eve::detail::canocical_shuffle_adapter_bound<(lambda at /Users/denisarosevskij/space/eve/test/unit/internals/canonical_shuffle_adapter.cpp:32:7)>>::impl<eve::logical<eve::wide<unsigned char, eve::fixed<32>>>, eve::pattern_t<31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0>>'
6.      /Users/denisarosevskij/space/eve/include/eve/detail/kumi.hpp:501:28: instantiating function definition 'kumi::apply<const eve::detail::canocical_shuffle_adapter_bound<(lambda at /Users/denisarosevskij/space/eve/test/unit/internals/canonical_shuffle_adapter.cpp:32:7)> &, kumi::tuple<eve::pattern_t<31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0>, eve::logical<eve::wide<unsigned char, eve::fixed<32>>>>>'
7.      /Users/denisarosevskij/space/eve/include/eve/detail/kumi.hpp:506:14: instantiating function definition 'kumi::apply(const eve::detail::canocical_shuffle_adapter_bound<(lambda at /Users/denisarosevskij/space/eve/test/unit/internals/canonical_shuffle_adapter.cpp:32:7)> &, kumi::tuple<eve::pattern_t<31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0>, eve::logical<eve::wide<unsigned char, eve::fixed<32>>>> &&)::(anonymous class)::operator()<0UL, 1UL>'
8.      /Users/denisarosevskij/space/eve/include/eve/detail/function/canonical_shuffle_adapter.hpp:41:50: instantiating function definition 'eve::detail::canocical_shuffle_adapter_bound<(lambda at /Users/denisarosevskij/space/eve/test/unit/internals/canonical_shuffle_adapter.cpp:32:7)>::operator()<1L, 31L, 30L, 29L, 28L, 27L, 26L, 25L, 24L, 23L, 22L, 21L, 20L, 19L, 18L, 17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L, 0L, eve::logical<eve::wide<unsigned char, eve::fixed<32>>>>'
9.      /Users/denisarosevskij/space/eve/include/eve/detail/function/simd/common/canonical_shuffle_adapter.hpp:22:1: instantiating function definition 'eve::detail::canonical_shuffle_adapter_impl_<(lambda at /Users/denisarosevskij/space/eve/test/unit/internals/canonical_shuffle_adapter.cpp:32:7), 1L, 31L, 30L, 29L, 28L, 27L, 26L, 25L, 24L, 23L, 22L, 21L, 20L, 19L, 18L, 17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L, 0L, unsigned char, eve::fixed<32>>'
10.     /Users/denisarosevskij/space/eve/include/eve/detail/function/simd/common/canonical_shuffle_adapter.hpp:243:1: instantiating function definition 'eve::detail::canonical_shuffle_adapter_impl_<(lambda at /Users/denisarosevskij/space/eve/test/unit/internals/canonical_shuffle_adapter.cpp:32:7), 1L, 31L, 30L, 29L, 28L, 27L, 26L, 25L, 24L, 23L, 22L, 21L, 20L, 19L, 18L, 17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L, 0L, unsigned char, eve::fixed<32>>'
11.     /Users/denisarosevskij/space/eve/include/eve/detail/function/simd/common/canonical_shuffle_adapter.hpp:223:1: instantiating function definition 'eve::detail::canonical_shuffle_adapter_impl_after_simplification<(lambda at /Users/denisarosevskij/space/eve/test/unit/internals/canonical_shuffle_adapter.cpp:32:7), 1L, 31L, 30L, 29L, 28L, 27L, 26L, 25L, 24L, 23L, 22L, 21L, 20L, 19L, 18L, 17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L, 0L, unsigned char, eve::fixed<32>, 0UL>'
  #0 0x00000000043a8157 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x43a8157)
  #1 0x00000000043a5f38 llvm::sys::RunSignalHandlers() (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x43a5f38)
  #2 0x00000000043a8930 SignalHandler(int) Signals.cpp:0:0
  #3 0x000000082a505a3e handle_signal /usr/src/lib/libthr/thread/thr_sig.c:0:3
  #4 0x000000082a504ff9 thr_sighandler /usr/src/lib/libthr/thread/thr_sig.c:247:1
  #5 0x0000000829386903 ([vdso]+0x2d3)
  #6 0x000000083015497a __sys_thr_kill /usr/obj/usr/src/lib/libc/thr_kill.S:4:0
  #7 0x00000008300cd954 __raise /usr/src/lib/libc/gen/raise.c:0:10
  #8 0x000000083017e3e9 abort /usr/src/lib/libc/stdlib/abort.c:73:17
  #9 0x00000008300b0a41 (/lib/libc.so.7+0x93a41)
 #10 0x0000000006223e4d clang::Sema::tryCaptureVariable(clang::ValueDecl*, clang::SourceLocation, clang::Sema::TryCaptureKind, clang::SourceLocation, bool, clang::QualType&, clang::QualType&, unsigned int const*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6223e4d)
 #11 0x00000000061e679e clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&, clang::NestedNameSpecifierLoc, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61e679e)
 #12 0x00000000061e670b clang::Sema::BuildDeclRefExpr(clang::ValueDecl*, clang::QualType, clang::ExprValueKind, clang::DeclarationNameInfo const&, clang::CXXScopeSpec const*, clang::NamedDecl*, clang::SourceLocation, clang::TemplateArgumentListInfo const*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61e670b)
 #13 0x00000000061eb28a clang::Sema::BuildDeclarationNameExpr(clang::CXXScopeSpec const&, clang::DeclarationNameInfo const&, clang::NamedDecl*, clang::NamedDecl*, clang::TemplateArgumentListInfo const*, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61eb28a)
 #14 0x0000000006733cdb clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDeclRefExpr(clang::DeclRefExpr*) SemaTemplateInstantiate.cpp:0:0
 #15 0x0000000006725e3a clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
 #16 0x000000000673c65e clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDecltypeType(clang::TypeLocBuilder&, clang::DecltypeTypeLoc) SemaTemplateInstantiate.cpp:0:0
 #17 0x00000000067156ea clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
 #18 0x000000000671513b clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*) SemaTemplateInstantiate.cpp:0:0
 #19 0x00000000067322c7 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateArgument(clang::TemplateArgumentLoc const&, clang::TemplateArgumentLoc&, bool) SemaTemplateInstantiate.cpp:0:0
 #20 0x0000000006731134 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateSpecializationType(clang::TypeLocBuilder&, clang::TemplateSpecializationTypeLoc, clang::TemplateName) SemaTemplateInstantiate.cpp:0:0
 #21 0x0000000006740cdd clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateSpecializationType(clang::TypeLocBuilder&, clang::TemplateSpecializationTypeLoc) SemaTemplateInstantiate.cpp:0:0
 #22 0x0000000006715ba8 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
 #23 0x000000000673e3e7 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformElaboratedType(clang::TypeLocBuilder&, clang::ElaboratedTypeLoc) SemaTemplateInstantiate.cpp:0:0
 #24 0x00000000067157c6 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
 #25 0x00000000067162e0 clang::Sema::SubstFunctionDeclType(clang::TypeSourceInfo*, clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation, clang::DeclarationName, clang::CXXRecordDecl*, clang::Qualifiers, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x67162e0)
 #26 0x0000000006765678 clang::TemplateDeclInstantiator::SubstFunctionType(clang::FunctionDecl*, llvm::SmallVectorImpl<clang::ParmVarDecl*>&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6765678)
 #27 0x0000000006762612 clang::TemplateDeclInstantiator::VisitCXXMethodDecl(clang::CXXMethodDecl*, clang::TemplateParameterList*, std::__1::optional<clang::ASTTemplateArgumentListInfo const*>, clang::TemplateDeclInstantiator::RewriteKind) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6762612)
 #28 0x00000000067a2a89 void llvm::function_ref<void ()>::callback_fn<clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&)::$_0>(long) SemaTemplateInstantiateDecl.cpp:0:0
 #29 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
 #30 0x000000000676c752 clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x676c752)
 #31 0x00000000066a5934 clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool, llvm::function_ref<bool ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66a5934)
 #32 0x000000000670de56 void llvm::function_ref<void ()>::callback_fn<clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>)::$_4>(long) SemaTemplateDeduction.cpp:0:0
 #33 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
 #34 0x00000000066a74ad clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66a74ad)
 #35 0x0000000006545461 clang::Sema::AddMethodTemplateCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::TemplateArgumentListInfo*, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, clang::OverloadCandidateParamOrder) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6545461)
 #36 0x0000000006545ded clang::Sema::AddMethodCandidate(clang::DeclAccessPair, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, clang::OverloadCandidateParamOrder) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6545ded)
 #37 0x000000000655f543 clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x655f543)
 #38 0x00000000061e174b clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61e174b)
 #39 0x00000000061fc526 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61fc526)
 #40 0x0000000006725fb9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
 #41 0x00000000067378f0 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformRequiresExpr(clang::RequiresExpr*) SemaTemplateInstantiate.cpp:0:0
 #42 0x000000000672db68 (anonymous namespace)::TemplateInstantiator::TransformRequiresExpr(clang::RequiresExpr*) SemaTemplateInstantiate.cpp:0:0
 #43 0x000000000674a796 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCondition(clang::SourceLocation, clang::VarDecl*, clang::Expr*, clang::Sema::ConditionKind) SemaTemplateInstantiate.cpp:0:0
 #44 0x0000000006746eb6 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformIfStmt(clang::IfStmt*) SemaTemplateInstantiate.cpp:0:0
 #45 0x000000000673a5e4 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
 #46 0x000000000671c2df clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x671c2df)
 #47 0x000000000676e226 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x676e226)
 #48 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
 #49 0x00000000066ab216 clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66ab216)
 #50 0x00000000061dbce7 clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61dbce7)
 #51 0x000000000655784f FinishOverloadedCallExpr(clang::Sema&, clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, clang::OverloadCandidateSet*, clang::OverloadCandidate**, clang::OverloadingResult, bool) SemaOverload.cpp:0:0
 #52 0x0000000006557781 clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6557781)
 #53 0x00000000061e1672 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61e1672)
 #54 0x00000000061fc526 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61fc526)
 #55 0x0000000006725fb9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
 #56 0x000000000671a98a clang::Sema::SubstInitializer(clang::Expr*, clang::MultiLevelTemplateArgumentList const&, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x671a98a)
 #57 0x000000000676ad9c clang::Sema::InstantiateVariableInitializer(clang::VarDecl*, clang::VarDecl*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x676ad9c)
 #58 0x000000000675e21b clang::Sema::BuildVariableInstantiation(clang::VarDecl*, clang::VarDecl*, clang::MultiLevelTemplateArgumentList const&, llvm::SmallVector<clang::Sema::LateInstantiatedAttribute, 16u>*, clang::DeclContext*, clang::LocalInstantiationScope*, bool, clang::VarTemplateSpecializationDecl*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x675e21b)
 #59 0x000000000675d8bc clang::TemplateDeclInstantiator::VisitVarDecl(clang::VarDecl*, bool, llvm::ArrayRef<clang::BindingDecl*>*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x675d8bc)
 #60 0x00000000067a2a89 void llvm::function_ref<void ()>::callback_fn<clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&)::$_0>(long) SemaTemplateInstantiateDecl.cpp:0:0
 #61 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
 #62 0x000000000676c752 clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x676c752)
 #63 0x00000000067468dc clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDeclStmt(clang::DeclStmt*) SemaTemplateInstantiate.cpp:0:0
 #64 0x000000000673a5e4 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
 #65 0x000000000671c2df clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x671c2df)
 #66 0x000000000676e226 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x676e226)
 #67 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
 #68 0x00000000066ab216 clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66ab216)
 #69 0x00000000061dbce7 clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61dbce7)
 #70 0x000000000655784f FinishOverloadedCallExpr(clang::Sema&, clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, clang::OverloadCandidateSet*, clang::OverloadCandidate**, clang::OverloadingResult, bool) SemaOverload.cpp:0:0
 #71 0x0000000006557781 clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6557781)
 #72 0x00000000061e1672 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61e1672)
 #73 0x00000000061fc526 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61fc526)
 #74 0x0000000006725fb9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
 #75 0x00000000067378f0 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformRequiresExpr(clang::RequiresExpr*) SemaTemplateInstantiate.cpp:0:0
 #76 0x000000000672db68 (anonymous namespace)::TemplateInstantiator::TransformRequiresExpr(clang::RequiresExpr*) SemaTemplateInstantiate.cpp:0:0
 #77 0x000000000671d61d clang::Sema::SubstConstraintExpr(clang::Expr*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x671d61d)
 #78 0x0000000005f8fb0c calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7::operator()(clang::Expr const*) const SemaConcept.cpp:0:0
 #79 0x0000000005f8e951 clang::ActionResult<clang::Expr*, true> calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7&&) SemaConcept.cpp:0:0
 #80 0x0000000005f88bb1 CheckConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) SemaConcept.cpp:0:0
 #81 0x0000000005f888b9 clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5f888b9)
 #82 0x00000000065d911e clang::Sema::CheckConceptTemplateId(clang::CXXScopeSpec const&, clang::SourceLocation, clang::DeclarationNameInfo const&, clang::NamedDecl*, clang::ConceptDecl*, clang::TemplateArgumentListInfo const*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x65d911e)
 #83 0x0000000006727247 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformConceptSpecializationExpr(clang::ConceptSpecializationExpr*) SemaTemplateInstantiate.cpp:0:0
 #84 0x000000000671d61d clang::Sema::SubstConstraintExpr(clang::Expr*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x671d61d)
 #85 0x0000000005f8fb0c calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7::operator()(clang::Expr const*) const SemaConcept.cpp:0:0
 #86 0x0000000005f8e951 clang::ActionResult<clang::Expr*, true> calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7&&) SemaConcept.cpp:0:0
 #87 0x0000000005f8ea52 clang::ActionResult<clang::Expr*, true> calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7&&) SemaConcept.cpp:0:0
 #88 0x0000000005f88bb1 CheckConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) SemaConcept.cpp:0:0
 #89 0x0000000005f888b9 clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5f888b9)
 #90 0x0000000005f8b9c1 clang::Sema::CheckInstantiatedFunctionTemplateConstraints(clang::SourceLocation, clang::FunctionDecl*, llvm::ArrayRef<clang::TemplateArgument>, clang::ConstraintSatisfaction&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5f8b9c1)
 #91 0x00000000066a5acb clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool, llvm::function_ref<bool ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66a5acb)
 #92 0x000000000670de56 void llvm::function_ref<void ()>::callback_fn<clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>)::$_4>(long) SemaTemplateDeduction.cpp:0:0
 #93 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
 #94 0x00000000066a74ad clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66a74ad)
 #95 0x0000000006545461 clang::Sema::AddMethodTemplateCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::TemplateArgumentListInfo*, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, clang::OverloadCandidateParamOrder) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6545461)
 #96 0x0000000006545ded clang::Sema::AddMethodCandidate(clang::DeclAccessPair, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, clang::OverloadCandidateParamOrder) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6545ded)
 #97 0x000000000655f543 clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x655f543)
 #98 0x00000000061e174b clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61e174b)
 #99 0x00000000061fc526 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61fc526)
#100 0x0000000006725fb9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#101 0x000000000671a98a clang::Sema::SubstInitializer(clang::Expr*, clang::MultiLevelTemplateArgumentList const&, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x671a98a)
#102 0x000000000676ad9c clang::Sema::InstantiateVariableInitializer(clang::VarDecl*, clang::VarDecl*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x676ad9c)
#103 0x000000000675e21b clang::Sema::BuildVariableInstantiation(clang::VarDecl*, clang::VarDecl*, clang::MultiLevelTemplateArgumentList const&, llvm::SmallVector<clang::Sema::LateInstantiatedAttribute, 16u>*, clang::DeclContext*, clang::LocalInstantiationScope*, bool, clang::VarTemplateSpecializationDecl*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x675e21b)
#104 0x000000000675d8bc clang::TemplateDeclInstantiator::VisitVarDecl(clang::VarDecl*, bool, llvm::ArrayRef<clang::BindingDecl*>*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x675d8bc)
#105 0x000000000675d568 clang::TemplateDeclInstantiator::VisitDecompositionDecl(clang::DecompositionDecl*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x675d568)
#106 0x00000000067a2a89 void llvm::function_ref<void ()>::callback_fn<clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&)::$_0>(long) SemaTemplateInstantiateDecl.cpp:0:0
#107 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
#108 0x000000000676c752 clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x676c752)
#109 0x00000000067468dc clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDeclStmt(clang::DeclStmt*) SemaTemplateInstantiate.cpp:0:0
#110 0x000000000673a5e4 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#111 0x000000000671c2df clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x671c2df)
#112 0x000000000676e226 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x676e226)
#113 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
#114 0x00000000066ab216 clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66ab216)
#115 0x00000000061dbce7 clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61dbce7)
#116 0x000000000655784f FinishOverloadedCallExpr(clang::Sema&, clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, clang::OverloadCandidateSet*, clang::OverloadCandidate**, clang::OverloadingResult, bool) SemaOverload.cpp:0:0
#117 0x0000000006557781 clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6557781)
#118 0x00000000061e1672 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61e1672)
#119 0x00000000061fc526 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61fc526)
#120 0x0000000006725fb9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#121 0x00000000067378f0 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformRequiresExpr(clang::RequiresExpr*) SemaTemplateInstantiate.cpp:0:0
#122 0x000000000672db68 (anonymous namespace)::TemplateInstantiator::TransformRequiresExpr(clang::RequiresExpr*) SemaTemplateInstantiate.cpp:0:0
#123 0x000000000671d61d clang::Sema::SubstConstraintExpr(clang::Expr*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x671d61d)
#124 0x0000000005f8fb0c calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7::operator()(clang::Expr const*) const SemaConcept.cpp:0:0
#125 0x0000000005f8e951 clang::ActionResult<clang::Expr*, true> calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7&&) SemaConcept.cpp:0:0
#126 0x0000000005f88bb1 CheckConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) SemaConcept.cpp:0:0
#127 0x0000000005f888b9 clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5f888b9)
#128 0x00000000065d911e clang::Sema::CheckConceptTemplateId(clang::CXXScopeSpec const&, clang::SourceLocation, clang::DeclarationNameInfo const&, clang::NamedDecl*, clang::ConceptDecl*, clang::TemplateArgumentListInfo const*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x65d911e)
#129 0x0000000006727247 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformConceptSpecializationExpr(clang::ConceptSpecializationExpr*) SemaTemplateInstantiate.cpp:0:0
#130 0x000000000671d61d clang::Sema::SubstConstraintExpr(clang::Expr*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x671d61d)
#131 0x0000000005f8fb0c calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7::operator()(clang::Expr const*) const SemaConcept.cpp:0:0
#132 0x0000000005f8e951 clang::ActionResult<clang::Expr*, true> calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7&&) SemaConcept.cpp:0:0
#133 0x0000000005f8ea52 clang::ActionResult<clang::Expr*, true> calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7&&) SemaConcept.cpp:0:0
#134 0x0000000005f88bb1 CheckConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) SemaConcept.cpp:0:0
#135 0x0000000005f888b9 clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5f888b9)
#136 0x0000000005f8b9c1 clang::Sema::CheckInstantiatedFunctionTemplateConstraints(clang::SourceLocation, clang::FunctionDecl*, llvm::ArrayRef<clang::TemplateArgument>, clang::ConstraintSatisfaction&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5f8b9c1)
#137 0x00000000066a5acb clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool, llvm::function_ref<bool ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66a5acb)
#138 0x000000000670de56 void llvm::function_ref<void ()>::callback_fn<clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>)::$_4>(long) SemaTemplateDeduction.cpp:0:0
#139 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
#140 0x00000000066a74ad clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66a74ad)
#141 0x0000000006545461 clang::Sema::AddMethodTemplateCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::TemplateArgumentListInfo*, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, clang::OverloadCandidateParamOrder) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6545461)
#142 0x0000000006545ded clang::Sema::AddMethodCandidate(clang::DeclAccessPair, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, clang::OverloadCandidateParamOrder) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6545ded)
#143 0x000000000655f543 clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x655f543)
#144 0x00000000061e174b clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61e174b)
#145 0x00000000061fc526 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61fc526)
#146 0x0000000006725fb9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#147 0x0000000006749ba8 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) SemaTemplateInstantiate.cpp:0:0
#148 0x000000000673a5e4 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#149 0x000000000671c2df clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x671c2df)
#150 0x000000000676e226 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x676e226)
#151 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
#152 0x00000000066ab216 clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66ab216)
#153 0x00000000061dbce7 clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61dbce7)
#154 0x000000000655e32a clang::Sema::BuildCallToMemberFunction(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x655e32a)
#155 0x00000000061fc526 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61fc526)
#156 0x0000000006725fb9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#157 0x000000000673c65e clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDecltypeType(clang::TypeLocBuilder&, clang::DecltypeTypeLoc) SemaTemplateInstantiate.cpp:0:0
#158 0x00000000067156ea clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
#159 0x00000000067162e0 clang::Sema::SubstFunctionDeclType(clang::TypeSourceInfo*, clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation, clang::DeclarationName, clang::CXXRecordDecl*, clang::Qualifiers, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x67162e0)
#160 0x0000000006765678 clang::TemplateDeclInstantiator::SubstFunctionType(clang::FunctionDecl*, llvm::SmallVectorImpl<clang::ParmVarDecl*>&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6765678)
#161 0x0000000006762612 clang::TemplateDeclInstantiator::VisitCXXMethodDecl(clang::CXXMethodDecl*, clang::TemplateParameterList*, std::__1::optional<clang::ASTTemplateArgumentListInfo const*>, clang::TemplateDeclInstantiator::RewriteKind) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6762612)
#162 0x00000000067a2a89 void llvm::function_ref<void ()>::callback_fn<clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&)::$_0>(long) SemaTemplateInstantiateDecl.cpp:0:0
#163 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
#164 0x000000000676c752 clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x676c752)
#165 0x00000000066a5934 clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool, llvm::function_ref<bool ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66a5934)
#166 0x000000000670de56 void llvm::function_ref<void ()>::callback_fn<clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>)::$_4>(long) SemaTemplateDeduction.cpp:0:0
#167 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
#168 0x00000000066a74ad clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66a74ad)
#169 0x0000000006545461 clang::Sema::AddMethodTemplateCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::TemplateArgumentListInfo*, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, clang::OverloadCandidateParamOrder) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6545461)
#170 0x0000000006545ded clang::Sema::AddMethodCandidate(clang::DeclAccessPair, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, clang::OverloadCandidateParamOrder) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6545ded)
#171 0x000000000655f543 clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x655f543)
#172 0x00000000061e174b clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61e174b)
#173 0x00000000061fc526 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61fc526)
#174 0x0000000006725fb9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#175 0x0000000006749ba8 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) SemaTemplateInstantiate.cpp:0:0
#176 0x000000000673a5e4 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#177 0x000000000671c2df clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x671c2df)
#178 0x000000000676e226 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x676e226)
#179 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
#180 0x00000000066ab216 clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66ab216)
#181 0x00000000061dbce7 clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61dbce7)
#182 0x0000000006559767 CreateFunctionRefExpr(clang::Sema&, clang::FunctionDecl*, clang::NamedDecl*, clang::Expr const*, bool, clang::SourceLocation, clang::DeclarationNameLoc const&) SemaOverload.cpp:0:0
#183 0x000000000655fef5 clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x655fef5)
#184 0x00000000061e174b clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61e174b)
#185 0x00000000061fc526 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61fc526)
#186 0x0000000006725fb9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#187 0x0000000006749ba8 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) SemaTemplateInstantiate.cpp:0:0
#188 0x000000000673a5e4 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#189 0x0000000006746f37 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformIfStmt(clang::IfStmt*) SemaTemplateInstantiate.cpp:0:0
#190 0x000000000673a5e4 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#191 0x000000000671c2df clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x671c2df)
#192 0x000000000676e226 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x676e226)
#193 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
#194 0x00000000066ab216 clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66ab216)
#195 0x00000000061dbce7 clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61dbce7)
#196 0x000000000655784f FinishOverloadedCallExpr(clang::Sema&, clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, clang::OverloadCandidateSet*, clang::OverloadCandidate**, clang::OverloadingResult, bool) SemaOverload.cpp:0:0
#197 0x0000000006557781 clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6557781)
#198 0x00000000061e1672 clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61e1672)
#199 0x00000000061fc526 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61fc526)
#200 0x0000000006725fb9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#201 0x0000000006749ba8 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) SemaTemplateInstantiate.cpp:0:0
#202 0x000000000673a5e4 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) SemaTemplateInstantiate.cpp:0:0
#203 0x000000000671c2df clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x671c2df)
#204 0x000000000676e226 clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x676e226)
#205 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
#206 0x00000000066ab216 clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66ab216)
#207 0x00000000061dbce7 clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61dbce7)
#208 0x000000000655e32a clang::Sema::BuildCallToMemberFunction(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x655e32a)
#209 0x00000000061fc526 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61fc526)
#210 0x0000000006725fb9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#211 0x000000000671dcd3 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExprs(clang::Expr* const*, unsigned int, bool, llvm::SmallVectorImpl<clang::Expr*>&, bool*) SemaTemplateInstantiate.cpp:0:0
#212 0x0000000006725e9d clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#213 0x000000000673c65e clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDecltypeType(clang::TypeLocBuilder&, clang::DecltypeTypeLoc) SemaTemplateInstantiate.cpp:0:0
#214 0x00000000067156ea clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
#215 0x000000000671513b clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*) SemaTemplateInstantiate.cpp:0:0
#216 0x00000000067322c7 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateArgument(clang::TemplateArgumentLoc const&, clang::TemplateArgumentLoc&, bool) SemaTemplateInstantiate.cpp:0:0
#217 0x000000000671cae1 bool clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateArguments<clang::TemplateArgumentLoc const*>(clang::TemplateArgumentLoc const*, clang::TemplateArgumentLoc const*, clang::TemplateArgumentListInfo&, bool) SemaTemplateInstantiate.cpp:0:0
#218 0x00000000067271d9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformConceptSpecializationExpr(clang::ConceptSpecializationExpr*) SemaTemplateInstantiate.cpp:0:0
#219 0x000000000671d61d clang::Sema::SubstConstraintExpr(clang::Expr*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x671d61d)
#220 0x0000000005f8fb0c calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7::operator()(clang::Expr const*) const SemaConcept.cpp:0:0
#221 0x0000000005f8e951 clang::ActionResult<clang::Expr*, true> calculateConstraintSatisfaction<calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7>(clang::Sema&, clang::Expr const*, clang::ConstraintSatisfaction&, calculateConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, clang::SourceLocation, clang::MultiLevelTemplateArgumentList const&, clang::Expr const*, clang::ConstraintSatisfaction&)::$_7&&) SemaConcept.cpp:0:0
#222 0x0000000005f88bb1 CheckConstraintSatisfaction(clang::Sema&, clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) SemaConcept.cpp:0:0
#223 0x0000000005f888b9 clang::Sema::CheckConstraintSatisfaction(clang::NamedDecl const*, llvm::ArrayRef<clang::Expr const*>, llvm::SmallVectorImpl<clang::Expr*>&, clang::MultiLevelTemplateArgumentList const&, clang::SourceRange, clang::ConstraintSatisfaction&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5f888b9)
#224 0x0000000005f8b9c1 clang::Sema::CheckInstantiatedFunctionTemplateConstraints(clang::SourceLocation, clang::FunctionDecl*, llvm::ArrayRef<clang::TemplateArgument>, clang::ConstraintSatisfaction&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5f8b9c1)
#225 0x00000000066a5acb clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool, llvm::function_ref<bool ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66a5acb)
#226 0x000000000670de56 void llvm::function_ref<void ()>::callback_fn<clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>)::$_4>(long) SemaTemplateDeduction.cpp:0:0
#227 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
#228 0x00000000066a74ad clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66a74ad)
#229 0x0000000006545461 clang::Sema::AddMethodTemplateCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::TemplateArgumentListInfo*, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, clang::OverloadCandidateParamOrder) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6545461)
#230 0x0000000006545ded clang::Sema::AddMethodCandidate(clang::DeclAccessPair, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, clang::OverloadCandidateParamOrder) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6545ded)
#231 0x000000000655f543 clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x655f543)
#232 0x00000000061e174b clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61e174b)
#233 0x00000000061fc526 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61fc526)
#234 0x0000000006725fb9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#235 0x000000000671dcd3 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExprs(clang::Expr* const*, unsigned int, bool, llvm::SmallVectorImpl<clang::Expr*>&, bool*) SemaTemplateInstantiate.cpp:0:0
#236 0x0000000006725e9d clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
#237 0x000000000673c65e clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDecltypeType(clang::TypeLocBuilder&, clang::DecltypeTypeLoc) SemaTemplateInstantiate.cpp:0:0
#238 0x00000000067156ea clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) SemaTemplateInstantiate.cpp:0:0
#239 0x00000000067162e0 clang::Sema::SubstFunctionDeclType(clang::TypeSourceInfo*, clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation, clang::DeclarationName, clang::CXXRecordDecl*, clang::Qualifiers, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x67162e0)
#240 0x0000000006765678 clang::TemplateDeclInstantiator::SubstFunctionType(clang::FunctionDecl*, llvm::SmallVectorImpl<clang::ParmVarDecl*>&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6765678)
#241 0x0000000006762612 clang::TemplateDeclInstantiator::VisitCXXMethodDecl(clang::CXXMethodDecl*, clang::TemplateParameterList*, std::__1::optional<clang::ASTTemplateArgumentListInfo const*>, clang::TemplateDeclInstantiator::RewriteKind) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6762612)
#242 0x00000000067a2a89 void llvm::function_ref<void ()>::callback_fn<clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&)::$_0>(long) SemaTemplateInstantiateDecl.cpp:0:0
#243 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
#244 0x000000000676c752 clang::Sema::SubstDecl(clang::Decl*, clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x676c752)
#245 0x00000000066a5934 clang::Sema::FinishTemplateArgumentDeduction(clang::FunctionTemplateDecl*, llvm::SmallVectorImpl<clang::DeducedTemplateArgument>&, unsigned int, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, llvm::SmallVectorImpl<clang::Sema::OriginalCallArg> const*, bool, llvm::function_ref<bool ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66a5934)
#246 0x000000000670de56 void llvm::function_ref<void ()>::callback_fn<clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>)::$_4>(long) SemaTemplateDeduction.cpp:0:0
#247 0x0000000005e3d43e clang::Sema::runWithSufficientStackSpace(clang::SourceLocation, llvm::function_ref<void ()>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x5e3d43e)
#248 0x00000000066a74ad clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, llvm::ArrayRef<clang::Expr*>, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool, bool, llvm::function_ref<bool (llvm::ArrayRef<clang::QualType>)>) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x66a74ad)
#249 0x0000000006545461 clang::Sema::AddMethodTemplateCandidate(clang::FunctionTemplateDecl*, clang::DeclAccessPair, clang::CXXRecordDecl*, clang::TemplateArgumentListInfo*, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, bool, clang::OverloadCandidateParamOrder) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6545461)
#250 0x0000000006545ded clang::Sema::AddMethodCandidate(clang::DeclAccessPair, clang::QualType, clang::Expr::Classification, llvm::ArrayRef<clang::Expr*>, clang::OverloadCandidateSet&, bool, clang::OverloadCandidateParamOrder) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x6545ded)
#251 0x000000000655f543 clang::Sema::BuildCallToObjectOfClassType(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x655f543)
#252 0x00000000061e174b clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61e174b)
#253 0x00000000061fc526 clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) (/home/dim/ins/llvmorg-17-init-18583-g8acdcf40168/bin/clang+0x61fc526)
#254 0x0000000006725fb9 clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) SemaTemplateInstantiate.cpp:0:0
Abort trap

Btw, note that Apple clang bugs should also be reported in Apple's bug tracker.

@fhahn fhahn changed the title apple clang crashed Assertion failure in clang::Sema::tryCaptureVariable: isa<To>(Val) && "cast<Ty>() argument of incompatible type!") Jul 23, 2023
@DimitryAndric
Copy link
Collaborator

This turned out to be difficult to reduce; I couldn't get it much further down than the following:

// working: clang -cc1 -triple x86_64-- -S -std=c++20 -DALTERNATIVE canonical_shuffle_adapter-min.cpp
// failing: clang -cc1 -triple x86_64-- -S -std=c++20 canonical_shuffle_adapter-min.cpp

namespace std {
namespace {
template <class _Tp, _Tp __v> struct integral_constant {
  static const _Tp value = __v;
};
typedef integral_constant<bool, 1> true_type;
} // namespace
} // namespace std
typedef int ptrdiff_t;
typedef int size_t;
namespace std {
namespace {
template <class _Tp> using remove_cvref_t = _Tp;
template <class> struct __libcpp_is_floating_point : true_type {};
template <class _Tp>
struct is_floating_point : __libcpp_is_floating_point<_Tp> {};
template <class _Tp>
constexpr int is_floating_point_v = is_floating_point<_Tp>::value;
typedef int string;
template <class _Tp> struct __unwrap_reference {
  typedef _Tp type;
};
template <class _Tp> struct unwrap_reference : __unwrap_reference<_Tp> {};
template <class _Tp> struct unwrap_ref_decay : unwrap_reference<_Tp> {};
template <class> struct tuple_size;
template <class _Tp, _Tp...> struct integer_sequence {};
template <size_t... _Ip>
using index_sequence = integer_sequence<size_t, _Ip...>;
template <class _Tp, _Tp _Ep>
using __make_integer_sequence = __make_integer_seq<integer_sequence, _Tp, _Ep>;
template <class _Tp, _Tp _Np>
using make_integer_sequence = __make_integer_sequence<_Tp, _Np>;
template <size_t _Np>
using make_index_sequence = make_integer_sequence<size_t, _Np>;
template <class _Tp, size_t> struct array {
  typedef _Tp reference;
  typedef size_t size_type;
  constexpr reference operator[](size_type __n) { return __n; }
};
} // namespace
} // namespace std
namespace tts {
struct callable {
  template <typename Function> callable(Function) {}
};
struct test {
  static bool acknowledge(test);
  std::string name;
  callable behaviour;
};
template <typename...> struct types {};
template <typename... Ls> struct concatenate {
  using type = decltype((Ls{} + ...));
};
template <typename... Ls>
using concatenate_t = typename concatenate<Ls...>::type;
template <typename> struct type {};
using real_types = types<float>;
using arithmetic_types = real_types;
} // namespace tts
namespace tts::detail {
template <typename... Types> struct test_captures {
  auto operator+(auto body) {
    return test::acknowledge({name, [=] { (body(type<Types>()), ...); }});
  }
  std::string name;
};
template <typename... Types>
struct test_captures<types<Types...>> : test_captures<Types...> {};
} // namespace tts::detail
namespace {
template <ptrdiff_t Cardinal>
struct fixed : std::integral_constant<ptrdiff_t, Cardinal> {};
template <ptrdiff_t Cardinal> fixed<Cardinal> lane;
} // namespace
namespace _ {
template <int, typename T> struct leaf {
  T value;
};
template <int I, typename T> T get_leaf(leaf<I, T>);
template <typename...> struct binder;
template <int... Is, typename... Ts>
struct binder<std::integer_sequence<int, Is...>, Ts...> : leaf<Is, Ts>... {};
template <typename ISeq, typename... Ts> struct make_binder {
  using type = binder<ISeq, Ts...>;
};
template <typename ISeq, typename... Ts>
using make_binder_t = typename make_binder<ISeq, Ts...>::type;
} // namespace _
namespace kumi {
template <size_t> struct index_t {};
template <size_t N> index_t<N> index;
template <typename> struct is_product_type : std::true_type {};
template <typename T> struct size : std::tuple_size<T> {};
template <typename...> struct tuple;
template <typename T>
concept product_type = is_product_type<std::remove_cvref_t<T>>::value;
template <typename Function, product_type Tuple>
auto apply(Function f, Tuple t) {
  [&]<size_t... I>(std::index_sequence<I...>) {
    f(get<I>(t)...);
  }(std::make_index_sequence<size<Tuple>::value>());
}
} // namespace kumi
template <typename... Ts>
struct std::tuple_size<kumi::tuple<Ts...>>
    : integral_constant<size_t, sizeof...(Ts)> {};
namespace kumi {
template <typename... Ts> struct tuple {
  using binder_t =
      _::make_binder_t<std::make_integer_sequence<int, sizeof...(Ts)>, Ts...>;
  binder_t impl;
  template <size_t I> auto operator[](index_t<I>) { return get_leaf<I>(impl); }
};
template <typename... Ts>
tuple(Ts...) -> tuple<typename std::unwrap_ref_decay<Ts>::type...>;
template <typename... Ts>
tuple<typename std::unwrap_ref_decay<Ts>::type...> make_tuple(Ts...);
template <size_t I, typename... Ts> auto get(tuple<Ts...> arg) {
  return arg[index<I>];
}
template <product_type Tuple> auto reverse(Tuple t) {
  return [&]<size_t... I>(std::index_sequence<I...>) {
    return make_tuple(get<1 - I>(t)...);
  }(std::make_index_sequence<size<Tuple>::value>());
}
} // namespace kumi
namespace eve::detail {
template <typename, template <typename> class>
struct instance_of_impl : std::true_type {};
template <typename T, template <typename> class Templ>
concept instance_of = instance_of_impl<T, Templ>::value;
} // namespace eve::detail
namespace eve {
template <typename> struct logical;
}
namespace eve::detail {
template <typename T> constexpr bool is_plain() {
  return std::is_floating_point_v<T>;
}
} // namespace eve::detail
namespace eve {
template <typename T>
concept plain_scalar_value = detail::is_plain<T>();
template <typename T>
concept arithmetic_scalar_value = plain_scalar_value<T>;
//inline namespace arm_abi_v0 {
template <arithmetic_scalar_value, typename> struct wide;
//}
template <typename T>
concept logical_simd_value = detail::instance_of<T, logical>;
template <typename T>
concept simd_value = logical_simd_value<T>;
namespace detail {
template <typename, typename = void> struct callable_object;
}
template <typename Type, typename Size> struct as_wide {
  using type = wide<Type, Size>;
};
template <typename Type, typename Size>
using as_wide_t = typename as_wide<Type, Size>::type;
template <ptrdiff_t...> struct pattern_t {};
template <ptrdiff_t...> auto pattern = pattern_t{};
template <typename F>
concept pattern_formula = !requires { F::size0; };
template <ptrdiff_t, pattern_formula F> auto fix_pattern(F) {
  return pattern<>;
}
//namespace arm_abi_v0 {
template <arithmetic_scalar_value, typename Cardinal> struct wide {
  using size_type = ptrdiff_t;
  static constexpr size_type size() { return Cardinal::value; }
};
//} // namespace arm_abi_v0
template <arithmetic_scalar_value Type, typename Cardinal>
struct logical<wide<Type, Cardinal>> {};
namespace tag {
struct canonical_shuffle_adapter_impl_;
}
namespace detail {
template <typename Dummy> struct callable_object<Dummy> {
  template <typename Arg> auto call(Arg d) { d(); }
  template <typename... Args> auto operator()(Args... args) { call(args...); }
};
callable_object<tag::canonical_shuffle_adapter_impl_>
    canonical_shuffle_adapter_impl;
} // namespace detail
} // namespace eve
namespace eve::detail {
template <typename InternalShuffle> struct canocical_shuffle_adapter_bound {
  InternalShuffle internalShuffle;
  template <ptrdiff_t G, simd_value T>
  auto operator()(pattern_t<>, fixed<G>, T) {
    canonical_shuffle_adapter_impl(internalShuffle);
  }
  auto operator()(pattern_t<> p, auto x) -> decltype(operator()(p, lane<1>, x));
};
template <typename Internal> struct reverse_arguments {
  Internal internal;
  template <typename... Ts> auto impl(Ts... args) {
    apply(internal, reverse(kumi::tuple{args...}));
  }
  auto operator()(auto... args) { impl(args...); }
};
template <typename Internal>
reverse_arguments(Internal) -> reverse_arguments<Internal>;
template <typename InternalShuffle> auto as_canonical_shuffle(InternalShuffle) {
  return reverse_arguments{canocical_shuffle_adapter_bound<InternalShuffle>{}};
}
} // namespace eve::detail
namespace eve {
template <typename, typename> struct to_wide;
template <typename T, size_t... N>
struct to_wide<T, std::index_sequence<N...>> {
  using type = tts::types<as_wide_t<T, fixed<N>>...>;
};
template <typename T, typename I>
using to_wide_t = typename to_wide<T, I>::type;
template <typename> struct wides;
template <typename... Ts> struct wides<tts::types<Ts...>> {
  static constexpr std::array<size_t, 9> cardinals() { return {}; }
  using type = tts::concatenate_t<
      to_wide_t<Ts, std::make_index_sequence<cardinals()[sizeof(Ts)]>>...>;
};
} // namespace eve
namespace eve::test::simd {
using all_types = wides<tts::arithmetic_types>::type;
}
namespace {
template <typename T, ptrdiff_t>
auto some_pattern = eve::fix_pattern<T::size()>([] {});
template <typename T, ptrdiff_t G = 1>
using some_p_t = decltype(some_pattern<T, G>);
#if ALTERNATIVE
template <typename Selector> auto just_shuffle_test(Selector) {
  return [](...) {};
}
#else
template <typename Selector> auto just_shuffle_test(Selector selector) {
  auto add_index = [](auto... args) -> kumi::tuple<decltype(selector(args))> {
  } auto canonical = eve : detailas_canonical_shuffle(add_index);
  return [](auto... args) -> decltype(canonical(args...)) {}
}
#endif
bool case_tts_function2 =
    tts::detail::test_captures<eve::test::simd::all_types>{} +
    []<typename T>(tts::type<T>) {
      auto hasShuffle = just_shuffle_test([] {});
      using P = some_p_t<T>;
      hasShuffle(eve::logical<T>{}, P{});
    };
} // namespace

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
c++20 clang:codegen confirmed Verified by a second party
Projects
None yet
Development

No branches or pull requests

3 participants