diff options
| -rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/cp/pt.c | 25 |
2 files changed, 19 insertions, 11 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 508cd1e..960f17d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2000-10-05 Nathan Sidwell <nathan@codesourcery.com> + * pt.c (tsubst_expr, DECL_STMT case): Don't process if + tsubsting fails. + +2000-10-05 Nathan Sidwell <nathan@codesourcery.com> + * spew.c (frob_id): New static function. (frob_opname): Use it. (yylex): Use it. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index e3357a0..171250e 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -7145,17 +7145,20 @@ tsubst_expr (t, args, complain, in_decl) init = DECL_INITIAL (decl); decl = tsubst (decl, args, complain, in_decl); init = tsubst_expr (init, args, complain, in_decl); - if (init) - DECL_INITIAL (decl) = error_mark_node; - /* By marking the declaration as instantiated, we avoid - trying to instantiate it. Since instantiate_decl can't - handle local variables, and since we've already done - all that needs to be done, that's the right thing to - do. */ - if (TREE_CODE (decl) == VAR_DECL) - DECL_TEMPLATE_INSTANTIATED (decl) = 1; - maybe_push_decl (decl); - cp_finish_decl (decl, init, NULL_TREE, 0); + if (decl != error_mark_node) + { + if (init) + DECL_INITIAL (decl) = error_mark_node; + /* By marking the declaration as instantiated, we avoid + trying to instantiate it. Since instantiate_decl can't + handle local variables, and since we've already done + all that needs to be done, that's the right thing to + do. */ + if (TREE_CODE (decl) == VAR_DECL) + DECL_TEMPLATE_INSTANTIATED (decl) = 1; + maybe_push_decl (decl); + cp_finish_decl (decl, init, NULL_TREE, 0); + } } return decl; } |
