re PR c++/3656 (ICE when incorrectly deriving a class from a templated base in anothe...
authorGabriel Dos Reis <gdr@merlin.codesourcery.com>
Sat, 23 Mar 2002 01:24:18 +0000 (01:24 +0000)
committerGabriel Dos Reis <gdr@gcc.gnu.org>
Sat, 23 Mar 2002 01:24:18 +0000 (01:24 +0000)
cp/
        PR C++/3656
        * semantics.c (finish_base_specifier): Handle erronous base
        classes.

testsuite/
        * g++.dg/inherit/template-as-base.C: New test.

From-SVN: r51214

gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/inherit/template-as-base.C [new file with mode: 0644]

index 01a5f67c83b2e15218e3da4405d119c829758bac..42c2e9bf1696c4d97b8a20c3eed5d3af903968e3 100644 (file)
@@ -1,3 +1,9 @@
+2002-03-21  Gabriel Dos Reis  <gdr@merlin.codesourcery.com>
+
+       PR C++/3656
+       * semantics.c (finish_base_specifier): Handle erronous base
+       classes. 
+
 2002-03-22  Zack Weinberg  <zack@codesourcery.com>
 
        * error.c: Always use REAL_VALUE_TO_DECIMAL; don't test
index 14ecf05f9b5c14d36348b0f55b4702f85696ccfd..29e49fa92c07f87eeed1874146e477b7f999591a 100644 (file)
@@ -2026,7 +2026,12 @@ finish_base_specifier (access_specifier, base_class)
 {
   tree result;
 
-  if (! is_aggr_type (base_class, 1))
+  if (base_class == error_mark_node)
+    {
+      error ("invalid base-class specification");
+      result = NULL_TREE;
+    }
+  else if (! is_aggr_type (base_class, 1))
     result = NULL_TREE;
   else
     {
index a180bc9648db5355aaf77ae394be36e94202f98b..866c4861980c254201a339344a51d12f37a61cd7 100644 (file)
@@ -1,3 +1,7 @@
+2002-03-22  Gabriel Dos Reis  <gdr@merlin.codesourcery.com>
+
+       * g++.dg/inherit/template-as-base.C: New test.
+
 2002-03-22  Jakub Jelinek  <jakub@redhat.com>
 
        * g++.old-deja/g++.other/dwarf2-1.C: Move...
diff --git a/gcc/testsuite/g++.dg/inherit/template-as-base.C b/gcc/testsuite/g++.dg/inherit/template-as-base.C
new file mode 100644 (file)
index 0000000..51f8c3b
--- /dev/null
@@ -0,0 +1,9 @@
+// Contributed by Gabriel Dos Reis <gdr@codesourcery.com>
+// Distilled from PR C++/3656
+
+namespace N
+{
+    template<typename> struct X { };
+}
+
+struct A : N::X { };