diff options
author | Patrick Palka <ppalka@redhat.com> | 2024-07-23 13:16:14 -0400 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2024-07-23 13:16:14 -0400 |
commit | 2861eb34e30973cb991a7964af7cfeae014a98b0 (patch) | |
tree | 5a03dcf49b1fbc5bf5deaf6ada07ecf78d72165c /gcc/cp/pt.cc | |
parent | f70281222df432a7bec1271904c5ebefd7f2c934 (diff) | |
download | gcc-2861eb34e30973cb991a7964af7cfeae014a98b0.zip gcc-2861eb34e30973cb991a7964af7cfeae014a98b0.tar.gz gcc-2861eb34e30973cb991a7964af7cfeae014a98b0.tar.bz2 |
c++: normalizing ttp constraints [PR115656]
Here we normalize the constraint same_as<T, bool> for the first
time during ttp coercion of B / UU, specifically constraint subsumption
checking. During this normalization the set of in-scope template
parameters i.e. current_template_parms is empty, which we rely on
during normalization of the ttp constraints since we pass in_decl=NULL_TREE
to norm_info. And this tricks the satisfaction cache into thinking that
the satisfaction value of same_as<T, bool> is independent of its template
parameters, and we incorrectly conflate the satisfaction value with
T = bool vs T = long and accept the specialization A<long, B>.
Since is_compatible_template_arg rewrites the ttp's constraints to
be in terms of the argument template's parameters, and since it's
the only caller of weakly_subsumes, the latter funcion can instead
pass in_decl=tmpl to avoid relying on current_template_parms. This
patch implements this, and in turns renames weakly_subsumes to
ttp_subsumes to reflect that this predicate is now hardcoded for this
one caller.
PR c++/115656
gcc/cp/ChangeLog:
* constraint.cc (weakly_subsumes): Pass in_decl=tmpl to
get_normalized_constraints_from_info. Rename to ...
(ttp_subsumes): ... this.
* cp-tree.h (weakly_subsumes): Rename to ...
(ttp_subsumes): ... this.
* pt.cc (is_compatible_template_arg): Adjust after renaming.
gcc/testsuite/ChangeLog:
* g++.dg/cpp2a/concepts-ttp7.C: New test.
Reviewed-by: Jason Merrill <jason@redhat.com>
Diffstat (limited to 'gcc/cp/pt.cc')
-rw-r--r-- | gcc/cp/pt.cc | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 8cc5e21..3939132 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -8482,7 +8482,7 @@ is_compatible_template_arg (tree parm, tree arg, tree args) return false; } - return weakly_subsumes (parm_cons, arg); + return ttp_subsumes (parm_cons, arg); } // Convert a placeholder argument into a binding to the original |