aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Krause <xerofoify@gmail.com>2020-06-23 15:47:37 -0400
committerJason Merrill <jason@redhat.com>2020-06-24 16:07:52 -0400
commit11a751ff77fba92de77b099ec5e1896d3a99d482 (patch)
tree850688658691bd97084bd0e19e71a1cb8590cb76
parent1e5da6a02fec8aa84bb00966282f420cb70fe4f0 (diff)
downloadgcc-11a751ff77fba92de77b099ec5e1896d3a99d482.zip
gcc-11a751ff77fba92de77b099ec5e1896d3a99d482.tar.gz
gcc-11a751ff77fba92de77b099ec5e1896d3a99d482.tar.bz2
c++: Handle bad pack expansion in base list. [PR96752]
This fixes PR95672 by adding the missing TYPE_PACK_EXPANSION case in cxx_incomplete_type_diagnostic in order to avoid ICEs on diagnosing incomplete template pack expansion cases. Tested on powerpc64le-unknown-linux-gnu. gcc/cp/ChangeLog: PR c++/95672 * typeck2.c (cxx_incomplete_type_diagnostic): Add missing TYPE_EXPANSION_PACK check for diagnosing incomplete types in cxx_incomplete_type_diagnostic. gcc/testsuite/ChangeLog: PR c++/95672 * g++.dg/template/pr95672.C: New test. Signed-off-by: Nicholas Krause <xerofoify@gmail.com>
-rw-r--r--gcc/cp/typeck2.c5
-rw-r--r--gcc/testsuite/g++.dg/template/pr95672.C3
2 files changed, 8 insertions, 0 deletions
diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index 5fd3b82..dac135a 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -552,6 +552,11 @@ cxx_incomplete_type_diagnostic (location_t loc, const_tree value,
TYPE_NAME (type));
break;
+ case TYPE_PACK_EXPANSION:
+ emit_diagnostic (diag_kind, loc, 0,
+ "invalid use of pack expansion %qT", type);
+ break;
+
case TYPENAME_TYPE:
case DECLTYPE_TYPE:
emit_diagnostic (diag_kind, loc, 0,
diff --git a/gcc/testsuite/g++.dg/template/pr95672.C b/gcc/testsuite/g++.dg/template/pr95672.C
new file mode 100644
index 0000000..c752b4a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/pr95672.C
@@ -0,0 +1,3 @@
+// PR c++/95672
+// { dg-do compile { target c++14 } }
+struct g_class : decltype (auto) ... { }; // { dg-error "invalid use of pack expansion" }