]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/58649 (ICE with use of enum before declaration)
authorPaolo Carlini <paolo.carlini@oracle.com>
Thu, 30 Jan 2014 14:28:55 +0000 (14:28 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Thu, 30 Jan 2014 14:28:55 +0000 (14:28 +0000)
/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

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/crash117.C [new file with mode: 0644]

index 7f9112826262813e8c4b60282211b26aa72cb1a0..ff696e3e88484a87c99abd596937fadfe40bf097 100644 (file)
@@ -1,3 +1,9 @@
+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):
index c9c6b379bf6ff54a7d1930f1b6054c34f066eda5..4a5b6cc06843a4d6e9403a2e26c31585df64d82c 100644 (file)
@@ -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
             {
index 77953e9b395a8cb181e4d2faf6ca0f8939eb4a6a..ce37ff1813992671d47413969b7b03081b0e41c9 100644 (file)
@@ -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 (file)
index 0000000..5aaaf73
--- /dev/null
@@ -0,0 +1,9 @@
+// PR c++/58649
+
+template<typename> void foo()
+{
+  E();  // { dg-error "declaration|declared" }    
+  enum E {};
+}
+
+template void foo<int>();