aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPatrick Palka <ppalka@redhat.com>2020-04-23 17:26:46 -0400
committerPatrick Palka <ppalka@redhat.com>2020-04-23 17:30:01 -0400
commit9a453da5cac7b6610cd342a7bea256acba5e61e1 (patch)
tree1145f49f47c7d912e4e9bcba893841c484005500 /gcc
parentf9f166251f181ddcee64092d89aecbc1166ca706 (diff)
downloadgcc-9a453da5cac7b6610cd342a7bea256acba5e61e1.zip
gcc-9a453da5cac7b6610cd342a7bea256acba5e61e1.tar.gz
gcc-9a453da5cac7b6610cd342a7bea256acba5e61e1.tar.bz2
c++: zero_init_expr_p of dependent expression
This fixes an ICE coming from mangle.c:write_expression when building the testsuite of range-v3; the added testcase is a reduced reproducer for the ICE. gcc/cp/ChangeLog: * tree.c (zero_init_expr_p): Use uses_template_parms instead of dependent_type_p. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/dependent3.C: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/tree.c2
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/dependent3.C28
4 files changed, 34 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6506f28..043e6aa 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2020-04-23 Patrick Palka <ppalka@redhat.com>
+ * tree.c (zero_init_expr_p): Use uses_template_parms instead of
+ dependent_type_p.
+
PR c++/94645
* pt.c (template_class_depth): Walk into the DECL_FRIEND_CONTEXT of a
friend declaration rather than into its CP_DECL_CONTEXT.
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 090c565..8840932 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -4486,7 +4486,7 @@ bool
zero_init_expr_p (tree t)
{
tree type = TREE_TYPE (t);
- if (!type || dependent_type_p (type))
+ if (!type || uses_template_parms (type))
return false;
if (zero_init_p (type))
return initializer_zerop (t);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e0df5bc..7c6fc64 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,7 @@
2020-04-23 Patrick Palka <ppalka@redhat.com>
+ * g++.dg/cpp0x/dependent3.C: New test.
+
PR c++/94645
* g++.dg/cpp2a/concepts-lambda6.C: New test.
diff --git a/gcc/testsuite/g++.dg/cpp0x/dependent3.C b/gcc/testsuite/g++.dg/cpp0x/dependent3.C
new file mode 100644
index 0000000..caf7e1c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/dependent3.C
@@ -0,0 +1,28 @@
+// { dg-do compile { target c++11 } }
+
+template<typename c>
+struct d
+{
+ using e = c;
+};
+
+template<class f>
+struct g
+{
+ using h = typename d<f>::e;
+
+ template<class i, class j>
+ auto operator()(i, j k) -> decltype(h{k});
+};
+
+template<class l>
+void m()
+{
+ int a[1];
+ l{}(a, a);
+}
+
+int main()
+{
+ m<g<int *>>();
+}