error.c (dump_decl): Avoid crashing when presented with a uninitialized constant...
authorMark Mitchell <mmitchell@usa.net>
Wed, 10 Sep 1997 02:28:20 +0000 (02:28 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 10 Sep 1997 02:28:20 +0000 (22:28 -0400)
Tue Sep  9 17:57:25 1997  Mark Mitchell  <mmitchell@usa.net>

* error.c (dump_decl): Avoid crashing when presented with a
uninitialized constant, as can occur with a template parameter.

From-SVN: r15208

gcc/cp/ChangeLog
gcc/cp/error.c

index 39b5e1cebcc9b364a2574cf2681c6dc75fa42527..c9eabf990d8645c4afe7274ef734bb77a663114e 100644 (file)
@@ -1,3 +1,8 @@
+Tue Sep  9 17:57:25 1997  Mark Mitchell  <mmitchell@usa.net>
+
+       * error.c (dump_decl): Avoid crashing when presented with a
+       uninitialized constant, as can occur with a template parameter.
+
 1997-09-09  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
        * typeck.c (build_indirect_ref): Heed FLAG_VOLATILE similar to
index 847bfa22495b6095c4c72cc7c3208cadadeaa1c9..4f4c5996bb786578acf628a87941aec22fab6dcc 100644 (file)
@@ -782,10 +782,13 @@ dump_decl (t, v)
 
     case CONST_DECL:
       if ((TREE_TYPE (t) != NULL_TREE && NEXT_CODE (t) == ENUMERAL_TYPE)
-         || TREE_CODE (DECL_INITIAL (t)) == TEMPLATE_CONST_PARM)
+         || (DECL_INITIAL (t) &&
+             TREE_CODE (DECL_INITIAL (t)) == TEMPLATE_CONST_PARM))
        goto general;
-      else
+      else if (DECL_INITIAL (t))
        dump_expr (DECL_INITIAL (t), 0);
+      else
+       OB_PUTS ("enumerator");
       break;
 
     case USING_DECL:
@@ -1363,29 +1366,33 @@ dump_expr (t, nop)
       }
 
     case TEMPLATE_CONST_PARM:
-      if (current_template_parms)
-       {
-         int i;
-         int l = list_length (current_template_parms);
-         tree parms = current_template_parms;
-         tree r;
-
-         for (i = 0; i < l - TEMPLATE_CONST_LEVEL (t); ++i)
-           {
-             parms = TREE_CHAIN (parms);
-             my_friendly_assert (parms != NULL_TREE, 0);
-           }
+      {
+       int l = current_template_parms ? 
+         list_length (current_template_parms) : 0;
 
-         r = TREE_VEC_ELT (TREE_VALUE (parms),
-                           TEMPLATE_CONST_IDX (t));
-         dump_decl (TREE_VALUE (r), -1);
-       }
-      else
-       {
-         OB_PUTS ("<tparm ");
-         OB_PUTI (TEMPLATE_CONST_IDX (t));
-         OB_PUTS (">");
-       }
+       if (l >= TEMPLATE_CONST_LEVEL (t))
+         {
+           int i;
+           tree parms = current_template_parms;
+           tree r;
+           
+           for (i = 0; i < l - TEMPLATE_CONST_LEVEL (t); ++i)
+             {
+               parms = TREE_CHAIN (parms);
+               my_friendly_assert (parms != NULL_TREE, 0);
+             }
+           
+           r = TREE_VEC_ELT (TREE_VALUE (parms),
+                             TEMPLATE_CONST_IDX (t));
+           dump_decl (TREE_VALUE (r), -1);
+         }
+       else
+         {
+           OB_PUTS ("<tparm ");
+           OB_PUTI (TEMPLATE_CONST_IDX (t));
+           OB_PUTS (">");
+         }
+      }
       break;
 
     case IDENTIFIER_NODE: