aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mmitchell@usa.net>1997-09-10 02:28:20 +0000
committerJason Merrill <jason@gcc.gnu.org>1997-09-09 22:28:20 -0400
commit03555413998ae48323618a55b7c7decca29a1594 (patch)
treea1194d52597ec6e15cb52fb2ede9749a7004c06f /gcc
parenta2676865a6f4f980779e6ff60839739fbc3ad826 (diff)
downloadgcc-03555413998ae48323618a55b7c7decca29a1594.zip
gcc-03555413998ae48323618a55b7c7decca29a1594.tar.gz
gcc-03555413998ae48323618a55b7c7decca29a1594.tar.bz2
error.c (dump_decl): Avoid crashing when presented with a uninitialized constant...
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/error.c55
2 files changed, 36 insertions, 24 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 39b5e1c..c9eabf9 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index 847bfa2..4f4c599 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -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: