[Bug c++/103706] [11 Regression] ICE: tree check: accessed elt 1 of 'tree_vec' with 0 elts in hash, at cp/constraint.cc:2503
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103706 Patrick Palka changed: What|Removed |Added Status|ASSIGNED|RESOLVED Resolution|--- |FIXED --- Comment #11 from Patrick Palka --- Fixed for GCC 11.3/12.
[Bug c++/103706] [11 Regression] ICE: tree check: accessed elt 1 of 'tree_vec' with 0 elts in hash, at cp/constraint.cc:2503
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103706 --- Comment #10 from CVS Commits --- The releases/gcc-11 branch has been updated by Patrick Palka : https://gcc.gnu.org/g:6eb8eb51a827a349cd6acce5f16ffef31d8934b1 commit r11-9842-g6eb8eb51a827a349cd6acce5f16ffef31d8934b1 Author: Patrick Palka Date: Tue Feb 8 08:46:13 2022 -0500 c++: constrained auto in lambda using outer tparms [PR103706] Here we're crashing during satisfaction of the lambda's placeholder type constraints because the constraints depend on the template arguments from the enclosing scope, which aren't part of the lambda's DECL_TI_ARGS. This patch fixes this by making do_auto_deduction consider the "regenerating" template arguments of a lambda for satisfaction, mirroring what's done in satisfy_declaration_constraints. PR c++/103706 gcc/cp/ChangeLog: * constraint.cc (satisfy_declaration_constraints): Use lambda_regenerating_args instead. * cp-tree.h (lambda_regenerating_args): Declare. * pt.c (lambda_regenerating_args): Define, split out from satisfy_declaration_constraints. (do_auto_deduction): Use lambda_regenerating_args to obtain the full set of outer template arguments for satisfaction when inside a lambda. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-lambda18.C: New test. (cherry picked from commit 34ba3d9a2bf72742b1c150a2dd17d10e3e3f0964)
[Bug c++/103706] [11 Regression] ICE: tree check: accessed elt 1 of 'tree_vec' with 0 elts in hash, at cp/constraint.cc:2503
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103706 --- Comment #9 from CVS Commits --- The releases/gcc-11 branch has been updated by Patrick Palka : https://gcc.gnu.org/g:d3950a70da6814206eef1946c289b5652ecc9986 commit r11-9838-gd3950a70da6814206eef1946c289b5652ecc9986 Author: Patrick Palka Date: Tue Feb 8 08:46:32 2022 -0500 c++: lambda in pack expansion using pack in constraint [PR103706] Here when expanding the pack expansion pattern containing a constrained lambda, the template argument for each Ts is an ARGUMENT_PACK_SELECT, which we store inside the lambda's LAMBDA_EXPR_REGEN_INFO. Then during satisfaction of the lambda's constraint C the satisfaction cache uses this argument as part of the key to the corresponding sat_entry, but iterative_hash_template_arg and template_args_equal deliberately don't handle ARGUMENT_PACK_SELECT. Since it's wrong to preserve ARGUMENT_PACK_SELECT inside a hash table due to its instability (as documented in iterative_hash_template_arg), this patch helps make sure the satisfaction cache doesn't see such trees by resolving ARGUMENT_PACK_SELECT arguments before adding them to LAMBDA_EXPR_REGEN_INFO. PR c++/103706 gcc/cp/ChangeLog: * pt.c (preserve_args): New function. (tsubst_lambda_expr): Use it when setting LAMBDA_EXPR_REGEN_INFO. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-lambda19.C: New test. (cherry picked from commit db5f1c17031ad8a898d77121f1e0e0141306e22a)
[Bug c++/103706] [11 Regression] ICE: tree check: accessed elt 1 of 'tree_vec' with 0 elts in hash, at cp/constraint.cc:2503
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103706 Patrick Palka changed: What|Removed |Added Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |ppalka at gcc dot gnu.org
[Bug c++/103706] [11 Regression] ICE: tree check: accessed elt 1 of 'tree_vec' with 0 elts in hash, at cp/constraint.cc:2503
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103706 Patrick Palka changed: What|Removed |Added Summary|[11/12 Regression] ICE: |[11 Regression] ICE: tree |tree check: accessed elt 1 |check: accessed elt 1 of |of 'tree_vec' with 0 elts |'tree_vec' with 0 elts in |in hash, at |hash, at |cp/constraint.cc:2503 |cp/constraint.cc:2503 --- Comment #8 from Patrick Palka --- Fixed for GCC 12 so far.