aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2018-04-05 10:48:40 -0400
committerJason Merrill <jason@gcc.gnu.org>2018-04-05 10:48:40 -0400
commit4cbe585c99bf621607420b341384bdb7e0e8a71d (patch)
treea03d05e7d47a98493d1700b2079764fa3ec89fef /gcc
parent9aee04a4c032b075d07bdde6f8bd22b06d709f42 (diff)
downloadgcc-4cbe585c99bf621607420b341384bdb7e0e8a71d.zip
gcc-4cbe585c99bf621607420b341384bdb7e0e8a71d.tar.gz
gcc-4cbe585c99bf621607420b341384bdb7e0e8a71d.tar.bz2
PR c++/85228 - ICE with lambda in enumerator.
* pt.c (bt_instantiate_type_proc): Don't assume CLASSTYPE_TEMPLATE_INFO is non-null. From-SVN: r259130
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c1
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/constexpr-lambda21.C9
3 files changed, 16 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 37d82bd..cd3e363 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2018-04-05 Jason Merrill <jason@redhat.com>
+
+ PR c++/85228 - ICE with lambda in enumerator in template.
+ * pt.c (bt_instantiate_type_proc): Don't assume
+ CLASSTYPE_TEMPLATE_INFO is non-null.
+
2018-04-05 Ville Voutilainen <ville.voutilainen@gmail.com>
Implement P0969
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index ed6e62c..dc74635 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -22841,6 +22841,7 @@ bt_instantiate_type_proc (binding_entry entry, void *data)
tree storage = *(tree *) data;
if (MAYBE_CLASS_TYPE_P (entry->type)
+ && CLASSTYPE_TEMPLATE_INFO (entry->type)
&& !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
}
diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda21.C b/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda21.C
new file mode 100644
index 0000000..8b0c95b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda21.C
@@ -0,0 +1,9 @@
+// PR c++/85228
+// { dg-additional-options -std=c++17 }
+
+template<int> struct A
+{
+ enum E { e = []{ return 0; }() };
+};
+
+template class A<0>;