aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2014-01-30 14:28:55 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2014-01-30 14:28:55 +0000
commite1b317aecf5cc86d1b61ba07c79fcd93a15a47c5 (patch)
tree0d37aeb5f2dd9365f751659373b0c33c20e5b56e
parentcc27b5cd8668956fd65ec8a3e480d0d9a254e3d5 (diff)
downloadgcc-e1b317aecf5cc86d1b61ba07c79fcd93a15a47c5.zip
gcc-e1b317aecf5cc86d1b61ba07c79fcd93a15a47c5.tar.gz
gcc-e1b317aecf5cc86d1b61ba07c79fcd93a15a47c5.tar.bz2
re PR c++/58649 (ICE with use of enum before declaration)
/cp 2014-01-30 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58649 * pt.c (lookup_template_class_1): Check start_enum return value for error_mark_node. /testsuite 2014-01-30 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58649 * g++.dg/template/crash117.C: New. From-SVN: r207304
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/crash117.C9
4 files changed, 23 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7f91128..ff696e3 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,11 @@
2014-01-30 Paolo Carlini <paolo.carlini@oracle.com>
+ PR c++/58649
+ * pt.c (lookup_template_class_1): Check start_enum return value
+ for error_mark_node.
+
+2014-01-30 Paolo Carlini <paolo.carlini@oracle.com>
+
* decl.c (duplicate_decls, typename_hash, typename_compare):
Use TYPE_IDENTIFIER.
* error.c (dump_type): Likewise.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index c9c6b37..4a5b6cc 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -7521,6 +7521,9 @@ lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
tsubst (ENUM_UNDERLYING_TYPE (template_type),
arglist, complain, in_decl),
SCOPED_ENUM_P (template_type), NULL);
+
+ if (t == error_mark_node)
+ return t;
}
else
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 77953e9..ce37ff1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-01-30 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/58649
+ * g++.dg/template/crash117.C: New.
+
2014-01-30 Richard Biener <rguenther@suse.de>
PR c/59905
diff --git a/gcc/testsuite/g++.dg/template/crash117.C b/gcc/testsuite/g++.dg/template/crash117.C
new file mode 100644
index 0000000..5aaaf73
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/crash117.C
@@ -0,0 +1,9 @@
+// PR c++/58649
+
+template<typename> void foo()
+{
+ E(); // { dg-error "declaration|declared" }
+ enum E {};
+}
+
+template void foo<int>();