Skip to content

[clang++-19][regression] "error: type constraint differs in template redeclaration" #110231

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

Closed
mpusz opened this issue Sep 27, 2024 · 30 comments · Fixed by #118288
Closed

[clang++-19][regression] "error: type constraint differs in template redeclaration" #110231

mpusz opened this issue Sep 27, 2024 · 30 comments · Fixed by #118288
Labels
clang:frontend Language frontend issues, e.g. anything involving "Sema" concepts C++20 concepts regression:19 Regression in 19 release

Comments

@mpusz
Copy link

mpusz commented Sep 27, 2024

I get the following error while compiling on clang-19:

[build] ../../src/core/include/mp-units/framework/quantity_point.h:111:26: error: type constraint differs in template redeclaration
[build]   111 | MP_UNITS_EXPORT template<QuantitySpec auto QS>
[build]       |                          ^
[build] ../../src/core/include/mp-units/framework/quantity_point_concepts.h:35:26: note: previous template declaration is here
[build]    35 | MP_UNITS_EXPORT template<QuantitySpec auto QS>
[build]       |                          ^

Here are the offending declarations:

The same code works fine on clang-17, clang-18, gcc-13, and gcc-14.

@github-actions github-actions bot added the clang Clang issues not falling into any other category label Sep 27, 2024
@mpusz
Copy link
Author

mpusz commented Sep 27, 2024

A repro can be found here: https://godbolt.org/z/6brEd3de6. It also fails on "clang (trunk)," but it works fine on the other compilers mentioned.

@EugeneZelenko EugeneZelenko added clang:frontend Language frontend issues, e.g. anything involving "Sema" and removed clang Clang issues not falling into any other category labels Sep 27, 2024
@llvmbot
Copy link
Member

llvmbot commented Sep 27, 2024

@llvm/issue-subscribers-clang-frontend

Author: Mateusz Pusz (mpusz)

I get the following error while compiling on clang-19:
[build] ../../src/core/include/mp-units/framework/quantity_point.h:111:26: error: type constraint differs in template redeclaration
[build]   111 | MP_UNITS_EXPORT template&lt;QuantitySpec auto QS&gt;
[build]       |                          ^
[build] ../../src/core/include/mp-units/framework/quantity_point_concepts.h:35:26: note: previous template declaration is here
[build]    35 | MP_UNITS_EXPORT template&lt;QuantitySpec auto QS&gt;
[build]       |                          ^

Here are the offending declarations:

The same code works fine on clang-17, clang-18, gcc-13, and gcc-14.

@zyn0217 zyn0217 added concepts C++20 concepts needs-reduction Large reproducer that should be reduced into a simpler form labels Sep 27, 2024
@ByunghoonKim
Copy link

I came to open an issue exactly about this with llvm-19.1.0 via homebrew on Apple M1 Pro CPU.
llvm-18.1.8 via homebrew and apple-clang 16 successfully compiles.

@shafik
Copy link
Collaborator

shafik commented Sep 30, 2024

Looks like this started in clang-19: https://godbolt.org/z/oxPf3oWjM

CC @erichkeane @mizvekov

I would like a reduction to understand what is going on better though.

@Endilll
Copy link
Contributor

Endilll commented Oct 2, 2024

Confirmed on 19 and trunk.
This was very tricky to reduce. (Partial) reduction that I have works intermittently, failing to compile in 10-20% runs, and compiling successfully otherwise. So it's advised to hit the recompilation button 10 times before considering the example as working.
Another notable thing is that seemingly innocuous changes like removing an unused lambda can trigger SIGSEGV without stack instead of the diagnostic.

Note several declarations between quantity_point declarations at the end. It seems that constant evaluations and template argument deductions triggered by them bring Clang into inconsistent state.
Reduced by me and C-Reduce (https://godbolt.org/z/jbEbfrexP):

struct array {
  int __elems_[4] = {1, 2, 3, 4};
};

template < typename, template < typename > typename >
int is_specialization_of;

template < typename, template < auto... > typename >
constexpr bool is_specialization_of_v = 0;

template < auto... Params, template < auto... > typename Type >
constexpr bool is_specialization_of_v< Type< Params... >, Type > = 1;

constexpr auto get_first_of(int n) {
  auto g = [&]{};

  int __elems_[4] = {1, 2, 3, 4};
  int* first = __elems_;
  for (;;++first)
    if (n % (*first)) 
      return *first;
  return 0;
}

consteval int find_first_factor(int n) {
  constexpr auto basis = array{};
  auto k = get_first_of(n);
  return k;
}

template < typename T >
concept PowerVBase = true;

template < PowerVBase auto, int >
struct power_v {
  static constexpr auto base = 0;
};

template < typename T >
concept MagnitudeSpec = is_specialization_of_v< T, power_v >;

template < MagnitudeSpec auto... >
struct magnitude;

template < typename T >
concept Magnitude = is_specialization_of_v< T, magnitude >;

template < auto V >
consteval auto power_v_or_T() {
  return power_v< V, 0 >{};
}

template < typename >
struct magnitude_base {};

template < MagnitudeSpec auto... Ms >
struct magnitude : magnitude_base< magnitude< Ms... > > {
  template < Magnitude M >
  friend consteval auto operator*(magnitude m1, M) {
    return m1;
  }

  friend auto operator/(magnitude, auto r) {
    return pow(r);
  }

  friend auto pow(magnitude) {
    return magnitude< power_v_or_T< Ms >()... >{};
  }
};

template < int N >
struct prime_factorization {
  static constexpr int first_base = find_first_factor(N);
  static constexpr int remainder = N / first_base;
  static constexpr auto value = magnitude< power_v_or_T< first_base >() >{} * prime_factorization< remainder >::value;
};
 
template <>
struct prime_factorization< 0 > {
  static magnitude<> value;
};

template < int N >
auto prime_factorization_v = prime_factorization< N >::value;

template < auto, auto >
concept NestedQuantityKindSpecOf = true;

template < typename T, auto >
concept QuantitySpecOf = NestedQuantityKindSpecOf< 0, T{} >;

template < Magnitude auto >
struct scaled_unit {};

template < typename T >
concept Reference = true;

template < typename T, auto >
concept PointOriginFor = true;

struct unit_interface {};

template < typename M >
consteval auto operator*(M, unit_interface) -> scaled_unit< M{} > {
  return scaled_unit< M{} >{};
}

template < auto >
struct named_unit;

template < auto U >
requires(true)
struct named_unit< U > {};

template < Reference auto R, PointOriginFor< R > auto >
struct quantity_point;

auto mag_ratio = prime_factorization_v< 0 > / prime_factorization_v< 1000 >;
template class named_unit< mag_ratio * unit_interface{} >;

template < Reference auto R, PointOriginFor< R > auto >
struct quantity_point;

Clang 20 output:

<source>:122:30: error: type constraint differs in template redeclaration
  122 | template < Reference auto R, PointOriginFor< R > auto >
      |                              ^
<source>:116:30: note: previous template declaration is here
  116 | template < Reference auto R, PointOriginFor< R > auto >
      |                              ^
1 error generated.

@zyn0217
Copy link
Contributor

zyn0217 commented Oct 2, 2024

CC @mizvekov because I saw several TTPs are at play (where the situation could be horrible)

@hubert-reinterpretcast hubert-reinterpretcast changed the title [clang++-19] "error: type constraint differs in template redeclaration" [clang++-19][regression] "error: type constraint differs in template redeclaration" Oct 2, 2024
@hubert-reinterpretcast hubert-reinterpretcast added the regression:19 Regression in 19 release label Oct 2, 2024
@Endilll
Copy link
Contributor

Endilll commented Oct 2, 2024

Somewhat surprisingly, when I locally ran Clang 19.1 binary that CE uses against the reduction, I got a crash:

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: /media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -dumpdir a- -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name reduced.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/user/endill/llvm-reproducers/gh110231 -fcoverage-compilation-dir=/home/user/endill/llvm-reproducers/gh110231 -resource-dir /media/hdd2tb/compiler-explorer/clang-19.1.0/lib/clang/19 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/x86_64-linux-gnu/c++/14 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/backward -internal-isystem /media/hdd2tb/compiler-explorer/clang-19.1.0/lib/clang/19/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -std=c++20 -fdeprecated-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fno-implicit-modules -fskip-odr-check-in-gmf -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/reduced-39c73d.o -x c++ reduced.cpp
1.      reduced.cpp:122:55: current parser token '>'
  #0 0x00000000036fdb08 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x36fdb08)
  #1 0x00000000036fb4ac SignalHandler(int) Signals.cpp:0:0
  #2 0x00007f9923c49d20 (/lib/x86_64-linux-gnu/libc.so.6+0x3fd20)
  #3 0x0000000007533ff3 (anonymous namespace)::StmtProfiler::VisitStmt(clang::Stmt const*) StmtProfile.cpp:0:0
  #4 0x0000000007536f65 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
  #5 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
  #6 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
  #7 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
  #8 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
  #9 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
 #10 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
 #11 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
 #12 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
 #13 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
 #14 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
 #15 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
 #16 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
 #17 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
 #18 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
 #19 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
 #20 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
 #21 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
 #22 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
 #23 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
 #24 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
 #25 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
 #26 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
 #27 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
 #28 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
 #29 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
 #30 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
 #31 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
 #32 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
 #33 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
 #34 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
 #35 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
 #36 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
 #37 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
 #38 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
 #39 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
 #40 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
 #41 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
 #42 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
 #43 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
 #44 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
 #45 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
 #46 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
 #47 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
 #48 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
 #49 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
 #50 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
 #51 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
 #52 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
 #53 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
 #54 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
 #55 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
 #56 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
 #57 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
 #58 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
 #59 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
 #60 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
 #61 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
 #62 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
 #63 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
 #64 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
 #65 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
 #66 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
 #67 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
 #68 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
 #69 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
 #70 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
 #71 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
 #72 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
 #73 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
 #74 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
 #75 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
 #76 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
 #77 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
 #78 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
 #79 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
 #80 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
 #81 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
 #82 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
 #83 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
 #84 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
 #85 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
 #86 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
 #87 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
 #88 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
 #89 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
 #90 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
 #91 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
 #92 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
 #93 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
 #94 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
 #95 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
 #96 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
 #97 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
 #98 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
 #99 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#100 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#101 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#102 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#103 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#104 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#105 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#106 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#107 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#108 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#109 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#110 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#111 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#112 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#113 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#114 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#115 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#116 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#117 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#118 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#119 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#120 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#121 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#122 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#123 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#124 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#125 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#126 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#127 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#128 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#129 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#130 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#131 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#132 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#133 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#134 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#135 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#136 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#137 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#138 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#139 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#140 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#141 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#142 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#143 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#144 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#145 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#146 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#147 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#148 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#149 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#150 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#151 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#152 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#153 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#154 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#155 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#156 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#157 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#158 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#159 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#160 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#161 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#162 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#163 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#164 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#165 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#166 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#167 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#168 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#169 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#170 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#171 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#172 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#173 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#174 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#175 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#176 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#177 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#178 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#179 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#180 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#181 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#182 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#183 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#184 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#185 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#186 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#187 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#188 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#189 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#190 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#191 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#192 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#193 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#194 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#195 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#196 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#197 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#198 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#199 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#200 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#201 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#202 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#203 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#204 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#205 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#206 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#207 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#208 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#209 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#210 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#211 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#212 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#213 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#214 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#215 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#216 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#217 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#218 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#219 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#220 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#221 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#222 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#223 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#224 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#225 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#226 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#227 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#228 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#229 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#230 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#231 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#232 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#233 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#234 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#235 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#236 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#237 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#238 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#239 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#240 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#241 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#242 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#243 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#244 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#245 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
#246 0x0000000007538510 clang::Stmt::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&, bool, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x7538510)
#247 0x000000000753bf28 clang::TemplateArgument::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x753bf28)
#248 0x000000000757da42 clang::AutoType::Profile(llvm::FoldingSetNodeID&, clang::ASTContext const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x757da42)
#249 0x0000000006f8da5a llvm::ContextualFoldingSet<clang::AutoType, clang::ASTContext&>::NodeEquals(llvm::FoldingSetBase const*, llvm::FoldingSetBase::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6f8da5a)
#250 0x0000000003653297 llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&, llvm::FoldingSetBase::FoldingSetInfo const&) (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x3653297)
#251 0x0000000006fc2cb2 clang::ASTContext::getAutoTypeInternal(clang::QualType, clang::AutoTypeKeyword, bool, bool, clang::ConceptDecl*, llvm::ArrayRef<clang::TemplateArgument>, bool) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc2cb2)
#252 0x0000000006fc3035 clang::ASTContext::getUnconstrainedType(clang::QualType) const (/media/hdd2tb/compiler-explorer/clang-19.1.0/bin/clang-19+0x6fc3035)
#253 0x00000000075315aa (anonymous namespace)::StmtProfilerWithPointers::VisitDecl(clang::Decl const*) StmtProfile.cpp:0:0
#254 0x0000000007536f93 (anonymous namespace)::StmtProfiler::VisitDeclRefExpr(clang::DeclRefExpr const*) StmtProfile.cpp:0:0
#255 0x000000000753244a clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::StmtProfiler, void>::Visit(clang::Stmt const*) StmtProfile.cpp:0:0
clang: error: unable to execute command: Segmentation fault
clang: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 19.1.0 (https://github.com/llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /media/hdd2tb/compiler-explorer/clang-19.1.0/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/reduced-9841d2.cpp
clang: note: diagnostic msg: /tmp/reduced-9841d2.sh
clang: note: diagnostic msg: 

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

@Endilll
Copy link
Contributor

Endilll commented Oct 2, 2024

When I feed a local debug build of trunk with the reduction, I consistently get the following diagnostics:

reduced.cpp:8:41: error: deduced non-type template argument does not have the same type as the corresponding template parameter ('auto' vs 'int')
    8 | template < typename, template < auto... > typename >
      |                                         ^
reduced.cpp:40:52: note: template template argument has different template parameters than its corresponding template template parameter
   40 | concept MagnitudeSpec = is_specialization_of_v< T, power_v >;
      |                                                    ^
reduced.cpp:8:52: note: previous template template parameter is here
    8 | template < typename, template < auto... > typename >
      |                      ~~~~~~~~~~~~~~~~~~~~          ^
reduced.cpp:34:33: note: template parameter is declared here
   34 | template < PowerVBase auto, int >
      |                                 ^
reduced.cpp:42:12: error: a concept definition cannot refer to itself
   42 | template < MagnitudeSpec auto... >
      |            ^
reduced.cpp:40:9: note: declared here
   40 | concept MagnitudeSpec = is_specialization_of_v< T, power_v >;
      |         ^
reduced.cpp:56:12: error: a concept definition cannot refer to itself
   56 | template < MagnitudeSpec auto... Ms >
      |            ^
reduced.cpp:40:9: note: declared here
   40 | concept MagnitudeSpec = is_specialization_of_v< T, power_v >;
      |         ^
3 errors generated.

@shafik
Copy link
Collaborator

shafik commented Oct 2, 2024

On godbolt using -O3 and or libc++ makes a difference: https://godbolt.org/z/3jnrWP7qn

It SIGSEGVs

@Endilll
Copy link
Contributor

Endilll commented Oct 2, 2024

On godbolt using -O3 and or libc++ makes a difference: https://godbolt.org/z/3jnrWP7qn

It SIGSEGVs

I guess it runs out of stack like it did for me several comments above

@Endilll
Copy link
Contributor

Endilll commented Oct 3, 2024

Bisected to #92425
CC @sdkrystian as the author.

@shafik
Copy link
Collaborator

shafik commented Oct 3, 2024

Bisected to #92425 CC @sdkrystian as the author.

Also see bc62fb9 which introduced getUnconstrainedType which looks like it is only applied to NTTP.

CC @zygoloid who implemented that patch

@mizvekov
Copy link
Contributor

mizvekov commented Oct 3, 2024

When I feed a local debug build of trunk with the reduction, I consistently get the following diagnostics:
...

That's a separate regression introduced by a recent commit, should be fixed by #110963

mizvekov added a commit that referenced this issue Oct 3, 2024
…ck argument

This fixes a regression introduced in #96023, reported in
#110231 (comment)
mizvekov added a commit that referenced this issue Oct 3, 2024
…ck argument (#110963)

This fixes a regression introduced in #96023, reported in
#110231 (comment)
@shafik
Copy link
Collaborator

shafik commented Oct 16, 2024

ping @sdkrystian

@sdkrystian
Copy link
Member

sdkrystian commented Oct 16, 2024

@shafik Is this still broken? I cannot seem to replicate it on trunk

Edit: It's still broken

@shafik
Copy link
Collaborator

shafik commented Oct 16, 2024

This looks fixed on trunk can you confirm @mpusz

@sdkrystian
Copy link
Member

@shafik It's still failing intermittently on trunk (but not assertions trunk)

@mpusz
Copy link
Author

mpusz commented Oct 16, 2024

@shafik, I confirm that it seems to be fixed on trunk: https://godbolt.org/z/rf5dTe9hh. Now we wait for the next clang-19 release (or patch).

@shafik
Copy link
Collaborator

shafik commented Oct 16, 2024

@shafik It's still failing intermittently on trunk (but not assertions trunk)

Is it failing the same way?

Which reproducer? Do you only see it locally or also on godbolt?

@sdkrystian
Copy link
Member

Is it failing the same way?

Yes, you just need to recompile a few times.

Which reproducer?

https://godbolt.org/z/dqKo15vdq

@shafik
Copy link
Collaborator

shafik commented Oct 16, 2024

Is it failing the same way?

Yes, you just need to recompile a few times.

Which reproducer?

https://godbolt.org/z/dqKo15vdq

I was able to see this now. That is bad, we need to understand what is going on.

@cor3ntin
Copy link
Contributor

Looks like UB in the compiler somewhere
@Endilll are you able to run that through asan/ubsan/msan?

@Endilll
Copy link
Contributor

Endilll commented Oct 19, 2024

@Endilll are you able to run that through asan/ubsan/msan?

Combination of ASan and UBSan didn't find anything.
The issue doesn't reproduce under valgrind (compilation always succeeds).
I tried MSan, but apparently it requires unusual setup (compiling Clang against instrumented libc++), and I can't simply enable it in our CMake configuration. I'm working on this, and share the results in the near future.

@JohelEGP
Copy link

Maybe actually using the library could help reproduce.
I remember finding it errors 100% of the time in Compiler Explorer.
Perhaps its due to its vast amount of definitions,
where one of them eventually triggers the bug.

@Endilll
Copy link
Contributor

Endilll commented Oct 21, 2024

I failed to get a build of Clang with MSan that doesn't produce false-positives in the driver, which is likely caused by uninstrumented runtime despite my best efforts to provide one and make sure it's used. I know we have an MSan buildbot, but I sank too much time into this over the weekend to continue.

@mpusz
Copy link
Author

mpusz commented Nov 17, 2024

Hi, is there any update on this issue? I am being asked by my customers why clang-19 does not work with mp-units 😢

If you have problems with reproduction, you can follow @JohelEGP's suggestion to try to compile all the mp-units directly. It fails every single time. With Conan, you can reproduce the problem with just a simple single command:

git clone https://github.com/mpusz/mp-units.git && cd mp-units
conan build . -pr <your_conan_profile> -s compiler.cppstd=23 -c user.mp-units.build:all=True -b missing

More info can be found in our documentation if needed.

@mpusz
Copy link
Author

mpusz commented Nov 18, 2024

BTW, I am attending the ISO C++ Committee meeting this week in Wrocław. If someone from the Clang team is here this week as well, we can work together to find the source of this issue.

@alejandro-alvarez-sonarsource
Copy link
Contributor

Hello,

Following the stack overflow hint, I think I have managed to reduce further:

template < typename >
concept Reference = true;

template < typename , auto >
concept PointOriginFor = true;

template < Reference auto R, PointOriginFor< R > auto>
struct quantity_point;

I can reproduce the (random!) stack overflow in the main branch with:

clang -std=c++20 -c -o /dev/null crash.cpp.

@alejandro-alvarez-sonarsource
Copy link
Contributor

alejandro-alvarez-sonarsource commented Nov 20, 2024

Hello again,

I believe the problem is somewhere between ASTContext::getAutoTypeInternal and FindNodeOrInsertPos, and triggers non-deterministically due to how hashing happens (i.e., pointers).

Basically, the NTTP PointOfOriginFor<R> depends on Reference auto R, so when computing its FoldingSetNodeID, we need the ID for Reference auto R as well.

As the parser advances, Reference auto R is inserted into AutoTypes. Then, PointOfOriginFor<R> is inserted into the same set.

Now, the hashing is not stable, and the iteration does not depend on the order of insertion.

Later on, when looking again inside AutoTypes, we can have two scenarios (for the snippet I posted):

  1. First variant, PointOfOriginFor<R> is inserted in a later position. When looking for Reference auto R, the first node we hit is Reference auto R, all is good!
  2. Second variant, PointOfOriginFor<R> is inserted first. When looking for some other auto, during iteration, PointOfOriginFor<R> comes first, the folding set needs its node ID (Info.NodeEquals()), so it calls its Profile method. However, there is a NTTP, so we need its ID too. This implies recursing, landing again on AutoTypes.FindNodeOrInsert, where the first element is PointOfOrigin<R>, etc... This is what we see on the stack trace reported in [clang++-19][regression] "error: type constraint differs in template redeclaration" #110231 (comment)

While this explains the random stack overflow, I am not clear how this influences the false diagnostics mentioned above. However, I think there may be some unexpected iterator invalidation at some point: i.e., while traversing the set, we recurse, land in the same set again (an insertion?), and invalidate the iterator.

A very dirty hack that prevents the recursion (simply a boolean added to the node to make sure we don't land on it again) resolves the stack overflow (or, at least, doesn't reproduce after 1000 runs), which seems to confirm this is what is happening.

Now, I do not know how to solve this because, in isolation, each step makes sense.

@alejandro-alvarez-sonarsource
Copy link
Contributor

I think I have got the other one figured out, but since I am not too confident about how this part of the code works, I am not going to open a PR, not yet, at least:

<source>:122:30: error: type constraint differs in template redeclaration
  122 | template < Reference auto R, PointOriginFor< R > auto >
      |                              ^
<source>:116:30: note: previous template declaration is here
  116 | template < Reference auto R, PointOriginFor< R > auto >
      |                              ^
1 error generated.

This goes away (does not reproduce after several thousand of runs), with this patch (I have left an assert I used to track the issue, which states my assumption)

diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 14fbadbc35ae..a769817d07b3 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -6295,6 +6295,9 @@ QualType ASTContext::getAutoTypeInternal(
       !TypeConstraintConcept && !IsDependent)
     return getAutoDeductType();
 
+  IsDependent =
+      IsDependent || (!DeducedType.isNull() && DeducedType->isDependentType());
+
   // Look in the folding set for an existing type.
   void *InsertPos = nullptr;
   llvm::FoldingSetNodeID ID;
@@ -6334,6 +6337,10 @@ QualType ASTContext::getAutoTypeInternal(
           (IsPack ? TypeDependence::UnexpandedPack : TypeDependence::None),
       Canon, TypeConstraintConcept, TypeConstraintArgs);
   Types.push_back(AT);
+
+  llvm::FoldingSetNodeID AUX;
+  AT->Profile(AUX, *this);
+  assert(AUX.ComputeHash() == ID.ComputeHash());
   AutoTypes.InsertNode(AT, InsertPos);
   return QualType(AT, 0);
 }

My understanding is that AutoType is dependent also if the deduced type is dependent (the DeducedType constructor does this). So the FoldingSetNodeID computed by

// In ASTContext::getAutoTypeInternal
  llvm::FoldingSetNodeID ID;
  AutoType::Profile(ID, *this, DeducedType, Keyword, IsDependent,
                    TypeConstraintConcept, TypeConstraintArgs);

Does not match the FoldingSetNodeID of the actually inserted AutoType. The InsertPos ends up being bogus, IIUC.
All lit tests pass with assertions enabled, but I am not sure if this is how it is supposed to work.

alejandro-alvarez-sonarsource added a commit to alejandro-alvarez-sonarsource/llvm-project that referenced this issue Dec 2, 2024
...in `ASTContext::getAutoTypeInternal`

Given

```cpp
template < typename >
concept C1 = true;

template < typename , auto >
concept C2 = true;

template < C1 auto V, C2< V > auto>
struct S;
```

Both `C1 auto V` and `C2<V> auto` end on the set `AutoType`, the former
being a template parameter for the latter.

Since the hashing is not deterministic (i.e., pointers are hashed),
every now and then, both will end on the same bucket.
Given that `FoldingSet` recomputes the `FoldingSetID` for each node in
the target bucket on lookup, this triggers an infinite recursion:

1. Look for `X` in `AutoTypes`
2. Let's assume it would be in bucket N, so it iterates over nodes in
that bucket. Let's assume the first is `C2<V> auto`.
3. Computes the `FoldingSetID` for this one, which requires the profile
of its template parameters, so they are visited.
4. In some frames below, we end on the same `FoldingSet`, and, by
chance, `C1 auto V` would be in bucket N too.
5. But the first node in the bucket is `C2<V> auto` for which we need to
profile `C1 auto V`
6. ... stack overflow!

No step individually does anything wrong, but in general, `FoldingSet`
seems not to be re-entrant, and this fact is hidden behind many nested
calls.

With this change, we store the `AutoType`s inside a `DenseMap` instead.
The `FoldingSetID` is computed once only and then kept as the map's key,
avoiding the need to do recursive lookups.

We also now make sure the key for the inserted `AutoType` is the same as
the key used for lookup. Before, this was not the case, and it caused
also non-deterministic parsing errors.

Fixes llvm#110231
nikic pushed a commit to nikic/llvm-project that referenced this issue Dec 9, 2024
...in `ASTContext::getAutoTypeInternal`

Given

```cpp
template < typename >
concept C1 = true;

template < typename , auto >
concept C2 = true;

template < C1 auto V, C2< V > auto>
struct S;
```

Both `C1 auto V` and `C2<V> auto` end on the set `AutoType`, the former
being a template parameter for the latter.

Since the hashing is not deterministic (i.e., pointers are hashed),
every now and then, both will end on the same bucket.
Given that `FoldingSet` recomputes the `FoldingSetID` for each node in
the target bucket on lookup, this triggers an infinite recursion:

1. Look for `X` in `AutoTypes`
2. Let's assume it would be in bucket N, so it iterates over nodes in
that bucket. Let's assume the first is `C2<V> auto`.
3. Computes the `FoldingSetID` for this one, which requires the profile
of its template parameters, so they are visited.
4. In some frames below, we end on the same `FoldingSet`, and, by
chance, `C1 auto V` would be in bucket N too.
5. But the first node in the bucket is `C2<V> auto` for which we need to
profile `C1 auto V`
6. ... stack overflow!

No step individually does anything wrong, but in general, `FoldingSet`
seems not to be re-entrant, and this fact is hidden behind many nested
calls.

With this change, we store the `AutoType`s inside a `DenseMap` instead.
The `FoldingSetID` is computed once only and then kept as the map's key,
avoiding the need to do recursive lookups.

We also now make sure the key for the inserted `AutoType` is the same as
the key used for lookup. Before, this was not the case, and it caused
also non-deterministic parsing errors.

Fixes llvm#110231

Fix formatting
@EugeneZelenko EugeneZelenko removed the needs-reduction Large reproducer that should be reduced into a simpler form label Dec 10, 2024
@EugeneZelenko EugeneZelenko marked this as a duplicate of #117972 Jan 2, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
clang:frontend Language frontend issues, e.g. anything involving "Sema" concepts C++20 concepts regression:19 Regression in 19 release
Projects
None yet
Development

Successfully merging a pull request may close this issue.