aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/constraint.cc4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/concepts-inherit-ctor10.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/concepts-inherit-ctor11.C21
5 files changed, 49 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c055801..f2bfe84 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2020-04-29 Patrick Palka <ppalka@redhat.com>
+ PR c++/94819
+ * constraint.cc (satisfy_declaration_constraints): Use saved_t
+ instead of t as the key to decl_satisfied_cache.
+
PR c++/94808
* error.c (print_requires_expression_info): Print the dependent
form of the parameter list with its template parameter mapping,
diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc
index 06161b8..866b0f5 100644
--- a/gcc/cp/constraint.cc
+++ b/gcc/cp/constraint.cc
@@ -2752,7 +2752,7 @@ satisfy_declaration_constraints (tree t, subst_info info)
info.in_decl = t;
if (info.quiet ())
- if (tree *result = hash_map_safe_get (decl_satisfied_cache, t))
+ if (tree *result = hash_map_safe_get (decl_satisfied_cache, saved_t))
return *result;
/* Get the normalized constraints. */
@@ -2787,7 +2787,7 @@ satisfy_declaration_constraints (tree t, subst_info info)
}
if (info.quiet ())
- hash_map_safe_put<hm_ggc> (decl_satisfied_cache, t, result);
+ hash_map_safe_put<hm_ggc> (decl_satisfied_cache, saved_t, result);
return result;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a824ba8..5129748 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2020-04-29 Patrick Palka <ppalka@redhat.com>
+ PR c++/94819
+ * g++.dg/cpp2a/concepts-inherit-ctor10.C: New test.
+ * g++.dg/cpp2a/concepts-inherit-ctor11.C: New test.
+
PR c++/94808
* g++.dg/concepts/diagnostic12.C: New test.
* g++.dg/concepts/diagnostic5.C: Adjust dg-message.
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-inherit-ctor10.C b/gcc/testsuite/g++.dg/cpp2a/concepts-inherit-ctor10.C
new file mode 100644
index 0000000..387c07a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-inherit-ctor10.C
@@ -0,0 +1,18 @@
+// PR c++/94819
+// { dg-do compile { target concepts } }
+
+struct dna4 {};
+struct rna4 {};
+
+struct alphabet_tuple_base {
+ template <typename component_type>
+ requires __is_same(component_type, rna4)
+ alphabet_tuple_base(component_type) {}
+};
+
+struct structured_rna : alphabet_tuple_base {
+ using alphabet_tuple_base::alphabet_tuple_base;
+};
+
+structured_rna t2{dna4{}}; // { dg-error "no match" }
+structured_rna t3{rna4{}}; // { dg-bogus "no match" }
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-inherit-ctor11.C b/gcc/testsuite/g++.dg/cpp2a/concepts-inherit-ctor11.C
new file mode 100644
index 0000000..947edd8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-inherit-ctor11.C
@@ -0,0 +1,21 @@
+// PR c++/94819
+// { dg-do compile { target concepts } }
+
+struct dna4 {};
+struct rna4 {};
+
+template <typename component_types>
+struct alphabet_tuple_base {
+ template <typename component_type>
+ requires __is_same(component_type, component_types)
+ alphabet_tuple_base(component_type) {}
+};
+
+template <typename sequence_alphabet_t>
+struct structured_rna : alphabet_tuple_base<sequence_alphabet_t> {
+ using base_type = alphabet_tuple_base<sequence_alphabet_t>;
+ using base_type::base_type;
+};
+
+structured_rna<rna4> t2{dna4{}}; // { dg-error "no match" }
+structured_rna<rna4> t3{rna4{}}; // { dg-bogus "no match" }