diff options
Diffstat (limited to 'gcc/cp/decl.c')
-rw-r--r-- | gcc/cp/decl.c | 60 |
1 files changed, 5 insertions, 55 deletions
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index cad0fc5b2e6..0cfcb4f29ec 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -4415,6 +4415,9 @@ build_init_list_var_init (tree decl, tree type, tree init, tree *cleanup) { tree aggr_init, array, arrtype; init = perform_implicit_conversion (type, init, tf_warning_or_error); + if (error_operand_p (init)) + return error_mark_node; + aggr_init = TARGET_EXPR_INITIAL (init); init = build2 (INIT_EXPR, type, decl, init); @@ -12444,8 +12447,8 @@ finish_function (int flags) CHANGES TO CODE IN `grokfield'. */ tree -start_method (cp_decl_specifier_seq *declspecs, - const cp_declarator *declarator, tree attrlist) +grokmethod (cp_decl_specifier_seq *declspecs, + const cp_declarator *declarator, tree attrlist) { tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0, &attrlist); @@ -12499,62 +12502,9 @@ start_method (cp_decl_specifier_seq *declspecs, cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0); - /* Make a place for the parms. */ - begin_scope (sk_function_parms, fndecl); - DECL_IN_AGGR_P (fndecl) = 1; return fndecl; } - -/* Go through the motions of finishing a function definition. - We don't compile this method until after the whole class has - been processed. - - FINISH_METHOD must return something that looks as though it - came from GROKFIELD (since we are defining a method, after all). - - This is called after parsing the body of the function definition. - STMTS is the chain of statements that makes up the function body. - - DECL is the ..._DECL that `start_method' provided. */ - -tree -finish_method (tree decl) -{ - tree fndecl = decl; - tree old_initial; - - tree link; - - if (decl == void_type_node) - return decl; - - old_initial = DECL_INITIAL (fndecl); - - /* Undo the level for the parms (from start_method). - This is like poplevel, but it causes nothing to be - saved. Saving information here confuses symbol-table - output routines. Besides, this information will - be correctly output when this method is actually - compiled. */ - - /* Clear out the meanings of the local variables of this level; - also record in each decl which block it belongs to. */ - - for (link = current_binding_level->names; link; link = TREE_CHAIN (link)) - { - if (DECL_NAME (link) != NULL_TREE) - pop_binding (DECL_NAME (link), link); - gcc_assert (TREE_CODE (link) != FUNCTION_DECL); - DECL_CONTEXT (link) = NULL_TREE; - } - - poplevel (0, 0, 0); - - DECL_INITIAL (fndecl) = old_initial; - - return decl; -} /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that |