decl.c (grokdeclarator): Catch wierd declarators.
authorJason Merrill <jason@yorick.cygnus.com>
Thu, 11 Feb 1999 00:00:28 +0000 (00:00 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 11 Feb 1999 00:00:28 +0000 (19:00 -0500)
* decl.c (grokdeclarator): Catch wierd declarators.
* decl2.c (finish_file): Don't abort because of namespace parsing
failure.
(check_decl_namespace): Remove.

From-SVN: r25144

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/decl2.c

index 1eb28f0e257dda0ed1632e7bc51f423d52f2d989..dd1612da1bcb63be418aacd594cca91cef58b8c7 100644 (file)
@@ -1,3 +1,10 @@
+1999-02-10  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * decl.c (grokdeclarator): Catch wierd declarators.
+       * decl2.c (finish_file): Don't abort because of namespace parsing
+       failure.
+       (check_decl_namespace): Remove.
+
 1999-02-09  Mark Mitchell  <mark@markmitchell.com>
 
        * cp-tree.h (get_template_base): Don't declare.
index b206fd6f76795f1353b94e16a6bf071963af92c2..2547ddf17de33ee28777efe62a9d64e687953dba 100644 (file)
@@ -10574,6 +10574,20 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
        }
     }
 
+  if (declarator == NULL_TREE
+      || TREE_CODE (declarator) == IDENTIFIER_NODE
+      || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
+         && (TREE_CODE (type) == FUNCTION_TYPE
+             || TREE_CODE (type) == METHOD_TYPE)))
+    /* OK */;
+  else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
+    {
+      cp_error ("template-id `%D' used as a declarator", declarator);
+      declarator = dname;
+    }
+  else
+    my_friendly_abort (990210);
+
   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
     {
       tree decl;
index 87a257787489b0ed7a9191508cab5ad67d4eb098..103974718dbf02bec5c162c928f9ffbd128192ce 100644 (file)
@@ -58,7 +58,6 @@ static int is_namespace_ancestor PROTO((tree, tree));
 static void add_using_namespace PROTO((tree, tree, int));
 static tree ambiguous_decl PROTO((tree, tree, tree,int));
 static tree build_anon_union_vars PROTO((tree, tree*, int, int));
-static void check_decl_namespace PROTO((void));
 
 extern int current_class_depth;
 
@@ -3228,11 +3227,9 @@ finish_file ()
   at_eof = 1;
 
   /* Bad parse errors.  Just forget about it.  */
-  if (! global_bindings_p () || current_class_type)
+  if (! global_bindings_p () || current_class_type || decl_namespace_list)
     return;
 
-  check_decl_namespace ();
-
   start_time = get_run_time ();
 
   /* Otherwise, GDB can get confused, because in only knows
@@ -4288,12 +4285,6 @@ pop_decl_namespace ()
   decl_namespace_list = TREE_CHAIN (decl_namespace_list);
 }
 
-static void 
-check_decl_namespace ()
-{
-  my_friendly_assert (decl_namespace_list == NULL_TREE, 980711);
-}
-
 /* Enter a class or namespace scope. */
 
 void