Commit Graph

532 Commits

Author SHA1 Message Date
Mark Mitchell
b35d4555e6 Turn on function-at-a-time processing.
* cp-tree.h (doing_semantic_analysis_p): New macro.
	(SF_DEFAULT): Define to zero, not SF_EXPAND.
	(start_handler_parms): Change prototype.
	(expand_start_catch_block): Likewise.
	(expand_end_catch_block): Likewise.
	(expand_start_eh_spec): Likewise.
	(expand_end_eh_spec): Declare.
	(finish_handler_parms): Change prototype.
	(begin_catch_block): Declare.
	(finish_handler): Change prototype.
	(do_pushlevel): Declare.
	(do_poplevel): Likewise.
	* decl.c (pushlevel): Don't create
	binding levels when not doing semantic analysis.
	(poplevel): Don't pop them.
	(pushdecl): Assert that we are never called when not doing
	semantic analysis.
	(pushdecl_top_level): Use push_to_top_level.
	(make_label_decl): Don't fiddle with obstacks.  Make RTL For the
	label when expanding.
	(cp_finish_decl): Only inject for-scope variables when doing
	semantic analysis.  Add comments.
	(start_handler_parms): Return the handler parm.
	(start_function): Reorganize.  Don't clear DECL_INITIAL if it is
	already set.  Reinitialize from saved function data if available.
	Don't pushlevel when not doing semantic analysis.
	(store_parm_decls): Only generate RTL when expanding.  Only
	pushdecl when doing semantic analysis.  Set
	current_eh_spec_try_block if appropriate.
	(finish_function): Simplify.  Use do_pushlevel and do_poplevel.
	Combine common code.  Don't poplevel when not doing semantic
	analysis.
	(push_cp_function_context): Don't expand functions without an
	explicit call to expand_body.
	(mark_lang_function): Make eh_spec_try_block and
	x_scope_stmt_stack.
	* except.c (expand_end_eh_spec): Don't
	declare.
	(process_start_catch_block): Likewise.
	(push_eh_cleanup): Use finish_decl_cleanup.
	(initialize_handler_parm): New function.
	(expand_start_catch_block): Use it.
	(expand_end_catch_block): Use tree-generation functions, not
	RTL-generation functions.
	(expand_start_eh_spec): Likewise.
	(expand_end_eh_spec): Likewise.
	(expand_exception_blocks): Simplify.
	(start_anon_func): Use do_pushlevel.
	(end_anon_func): Use do_poplvel.  Call expand_body for the
	function.
	* expr.c (do_case): Don't call define_case_label.
	* init.c (create_temporary_var): Set DECL_CONTEXT for local
	variables.
	* method.c (emit_thunk): Call expand_body for the
	thunk.
	(sythesize_method): Likewise.
	* parse.y (handler_args): Give it ttype.
	(eat_saved_input): Call expand_body.
	(base_init): Use do_pushlevel.
	(pending_inline): Call expand_body.
	(handler): Adjust calls to finish_handler_parms and
	finish_handler.
	(handler_args): Don't call expand_start_catch_block.  Return the
	catch parameter.  * pt.c (tsubst_expr): Adjust HANDLER handling.
	* parse.c: Regenerated.
	* rtti.c (synthesize_tinfo_fn): Call finish_function.
	* semantics.c (do_pushlevel): Give it external linkage.  Build
	SCOPE_STMTs.
	(do_poplevel): Likewise.
	(finish_case_label): Call define_case_label when doing semantic
	analysis.
	(finish_goto_stmt): Create RTL for labels.
	(finish_function_try_block): Set in_function_try_handler
	unconditionally.
	(finish_function_handler_sequence): Unset it.
	(finish_handler_parms): Use expand_start_catch_block even when
	building a statement-tree.
	(begin_catch_block): New function.
	(finish_handler): Move a little RTL-generation logic here.
	(finish_decl_cleanup): Allow cleanups for empty declarations.
	(finish_named_return_value): Don't pushdecl when not doing
	semantic analysis.
	(expand_stmt): Don't do semantic analysis for variable
	declarations.  Handle START_CATCH_STMT.  Call expand_label
	directly for a LABEL_STMT.  Tweak handling of GOTO_STMT.  Adjust
	HANDLERs.  Handle SCOPE_STMT, CTOR_INITIALIZER, and RETURN_INIT.
	(expand_body): Let expand_stmt handle CTOR_INITIALIZER,
	RETURN_INIT and function try blocks.

From-SVN: r29490
1999-09-18 01:23:20 +00:00
Mark Mitchell
273a708f27 cp-tree.h (poplevel_class): Declare.
* cp-tree.h (poplevel_class): Declare.
	* class.c (popclass): Use poplevel_class, not poplevel.
	* decl.c (poplevel_class): Don't make it static.  Don't return a
	value.
	(poplevel): Don't call poplevel_class; abort in a class
	binding level is seen.
	* semantics.c (finish_translation_unit): Use pop_everything.
	* parse.y (member_init): Allow errors.
	(pending_inline): Call finish_function.
	* parse.c: Regenerated.
	* Makefile.in (CONFLICTS): Adjust.

From-SVN: r29472
1999-09-17 07:35:07 +00:00
Mark Mitchell
24bef15854 cp-tree.def (CLEANUP_STMT): New node.
* cp-tree.def (CLEANUP_STMT): New node.
	* cp-tree.h (language_function): Add name_declared.
	(current_function_name_declared): New macro.
	(CLEANUP_DECL): New macro.
	(CLEANUP_EXPR): Likewise.
	(emit_local_var): Likewise.
	(finish_decl_cleanup): New function.
	* cvt.c (build_up_reference): Simplify.
	(ocp_convert): Remove dead code.
	* decl.c (start_decl): Remove call to add_decl_stmt.
	(grok_reference_init): Adjust, to handle bindings temporaries to
	references.  Remove dead code.
	(initialize_local_var): Don't generate RTL for
	declarations here, or build cleanups here.  Don't fuss with
	obstacks.  Replace expand_start_target_temps calls with explicit
	setting of stms_are_full_exprs_p.
	(destroy_local_var): New function.
	(emit_local_var): Likewise.
	(cp_finish_decl): Use them, as appropriate.
	(start_function): Announce template functions.
	(store_parm_decls): Don't call declare_function_name here.
	(finish_stmt): Don't start emit base-initialization code when just
	building the statement-tree.
	* init.c (create_temporary_var): Move add_decl_stmt call ...
	(get_temp_regvar): Here.
	* pt.c (tsubst_expr): Make DECL_INITIAL look like what
	cp_finish_decl would expect.  Don't call add_decl_stmt.
	* semantics.c (begin_compound_stmt): Call declare_function_name,
	if appropriate.
	(finish_decl_cleanup): New function.
	(expand_stmt): Use emit_local_var to output variables.
	(expand_body): Set current_funtion_name_declared.

From-SVN: r29348
1999-09-12 01:12:59 +00:00
Mark Mitchell
ed5511d94e cp-tree.h (language_function): Rename expanding_p to x_expanding_p.
* cp-tree.h (language_function): Rename expanding_p to
	x_expanding_p.  Rename named_label_uses to x_named_label_uses.
	(expanding_p): Adjust accordingly.
	(TREE_VIA_PRIVATE): Fix typo in comment.
	(DECL_REFERENCE_SLOT): Remove.
	(SET_DECL_REFERENCE_SLOT): Likewise.
	* decl.c (named_label_uses): Adjust. Remove chicken comment.
	(push_overloaded_decl): Don't truncate the chain of bindings when
	adding an overloaded function.
	(grok_reference_init): Don't use DECL_REFERENCE_SLOT.
	(initialize_local_var): Fix typo in comment.
	(store_parm_decls): Don't set DECL_REFERENCE_SLOT.  Tidy up.
	* decl2.c (start_objects): Make the fact that we are expanding
	the generated function right away explicit.
	(start_static_storage_duration_function): Likewise.
	(finish_file): Fix typo in comment.
	* init.c (build_vec_init): Correct bugs in handling cleanups.
	* semantics.c (maybe_convert_cond): New function.
	(FINISH_COND): Always store the condition, even if there's
	a declaration.
	(finish_if_stmt_cond): Use maybe_convert_cond.
	(finish_while_stmt_cond): Likewise.
	(finish_do_stmt): Likewise.
	(finish_for_cond): Likewise.
	(expand_cond): Adjust.

From-SVN: r29265
1999-09-10 10:19:47 +00:00
Mark Mitchell
efa8eda3b8 cp-tree.h (finish_cleanup_try_block): New function.
* cp-tree.h (finish_cleanup_try_block): New function.
	* semantics.c (finish_cleanup_try_block): Add comment.

From-SVN: r29264
1999-09-10 09:30:57 +00:00
Mark Mitchell
62409b397b cp-tree.h (FN_TRY_BLOCK_P): New macro.
* cp-tree.h (FN_TRY_BLOCK_P): New macro.
	* init.c (perform_member_init): Remove obstack machinations.
	(expand_cleanup_for_base): Likewise.
	(finish_init_stmts): Mark the statement-expression as used.
	* method.c (emit_thunk): Use tree-generating functions, not
	RTL.
	(do_build_copy_constructor): Likewise.
	(do_build_assign_ref): Likewise.
	(synthesize_method): Likewise.  Keep track of line numbers.
	* pt.c (tsubst_expr): Handle various kinds of try blocks.
	* semantics.c (expand_stmts): Remove.
	(begin_function_try_block): Set FN_TRY_BLOCK_P.
	(finish_function_try_block): Be careful rechaining
	function try blocks.
	(expand_stmt): Loop through all the statements at a given level.
	(exapnd_body): Be careful with line-numbers here too.  Prepare for
	being called directly from the parser.

From-SVN: r29263
1999-09-10 09:21:37 +00:00
Mark Mitchell
cb39191d23 semantics.c (RECHAIN_STMTS): Remove `last' parameter.
* semantics.c (RECHAIN_STMTS): Remove `last' parameter.
	(RECHAIN_STMTS_FROM_LAST): Remove.  Replace all uses with
	RECHAIN_STMTS.
	(RECHAIN_STMST_FROM_CHAIN): Likewise.

From-SVN: r29256
1999-09-10 05:31:24 +00:00
Mark Mitchell
a7e4cfa017 cp-tree.h (EXPR_STMT_ASSIGNS_THIS): New macro.
* cp-tree.h (EXPR_STMT_ASSIGNS_THIS): New macro.
	(STMT_IS_FULL_EXPR_P): Likewise.
	(STMT_LINENO_FOR_FN_P): Likewise.
	(prep_stmt): New function.
	(building_stmt_tree): Tweak for safety.
	* pt.c (tsubst_expr): Use prep_stmt throughout.
	(add_tree): Move it to semantics.c
	* semantics.c (add_tree): Move it here.
	(finish_expr_stmt_real): New function.
	(finish_expr_stmt): Use it.
	(finish_if_stmt_cond): Use FINISH_COND.
	(finish_while_stmt_cond): Likewise.
	(finish_for_cond): Likewise.
	(finish_stmt_tree): Tweak line-number handling.
	(prep_stmt): New function.
	(expand_stmt): Use it.

From-SVN: r29249
1999-09-09 23:24:34 +00:00
Mark Mitchell
527f0080b0 cp-tree.h (begin_switch_stmt): Adjust prototype.
* cp-tree.h (begin_switch_stmt): Adjust prototype.
	(finish_switch_cond): Likewise.
	* parse.y (simple_stmt): Adjust accordingly.
	* parse.c: Regenerated.
	* pt.c (tsubst_expr): Adjust accordingly.
	* semantics.c (expand_cond): New function.
	(FINISH_COND): New macro.
	(begin_switch_stmt): Build the SWITCH_STMT here.
	(finish_switch_stmt_cond): Not here.
	(expand_stmt): Adjust calls to begin_switch_stmt and
	finish_switch_cond.  Use expand_cond throughout.

From-SVN: r29246
1999-09-09 22:28:15 +00:00
Mark Mitchell
a8f73d4b36 Reorganize per-function data.
* cp-tree.h (saved_scope): Add function_decl, bindings.
	(language_function): Rename binding_level to bindings.
	(cp_function_chain): Use the current_function, not the
	outer_function_chain.
	(current_class_ptr): Make it work, even when there's no
	current function.
	(current_class_ref): Likewise.
	(SF_DEFAULT, SF_PRE_PARSED, SF_INCLASS_INLINE, SF_EXPAND): New
	macros.
	(clear_temp_name): Remove.
	* decl.c (check_function_type): New function, broken out from
	start_function.
	(current_binding_level): Adjust definition.
	(pushlevel): Simplify.
	(poplevel): Don't use named_label_uses when we're outside
	a function scope.
	(mark_saved_scope): Mark function_decl and bindings.
	(maybe_push_to_top_level): Don't unconditionally push a new
	function context.  Save bindings and the current_function_decl.
	Don't clear named_labels.
	(pop_from_top_level): Pop function context if appropriate.
	(init_decl_processing): Set init_lang_status and free_lang_status,
	rather than save_lang_status and restore_lang_status.
	(start_function): Take SF_* flags.  Don't clear per-function data.
	Reorder and simplify to use new per-function data code.  Add
	asserts.
	(store_parm_decls): Don't call init_function_start here.
	(finish_function): Adjust for new handling of per-function data.
	(push_cp_function_context): Simplify.
	(mark_cp_function_context): Change binding_level to bindings.
	* decl2.c (clear_temp_name): Remove.
	(start_objects): Use SF flags to start_function.
	(start_static_storage_duration_function): Likewise.
	* except.c (start_anon_func): Remove redundant calls to
	push_function_context_to.  Use SF flags to start function.
	(end_anon_func): Remove redundant call to pop_function_context
	from.
	* lex.c (reinit_parse_for_function): Don't initialize per-function
	data.
	* method.c (emit_thunk): Clear current_function after calling
	assemble_end_function.  Use SF flags for start_function.
	(synthesize_method): Use SF flags for start_function.
	* parse.c: Regenerated.
	* parse.y (fn.defpen): Likewise.
	(pending_inline): Clear current_function, even if something goes
	wrong.
	* pt.c (instantiate_decl): Use SF flags to start_function.
	Don't save and restore expanding_p.
	(add_tree): Handle the case where we are outside any function.
	(end_tree): Likewise.
	* rtti.c (sythesize_tinfo_fn): Use SF flags to start_function.
	* semantics.c (begin_function_definition): Likewise.
	(expand_body): Likewise.

From-SVN: r29240
1999-09-09 19:02:39 +00:00
Nathan Sidwell
02cac427d5 extend.texi (Volatiles): New node.
gcc/ChangeLog:
	* extend.texi (Volatiles): New node.
gcc/cp/ChangeLog:
	* cp-tree.h (convert_to_void): Prototype new function.
	(require_complete_type_in_void): Remove prototype.
	* cvt.c (convert_to_void): New function.
	(ocp_convert): Use convert_to_void.
	* decl.c (cplus_expand_expr_stmt): Likewise, for complete
	expressions.
	* typeck.c (require_complete_type_in_void): Remove function.
	(build_compound_expr): Use convert_to_void.
	(build_static_cast): Likewise.
	(build_c_cast): Likewise.
	* semantics.c (finish_expr_stmt): Do not decay full expressions.

	* typeck.c (build_x_compound_expr): Add FIXME.

From-SVN: r29233
1999-09-09 12:07:46 +00:00
Mark Mitchell
2a1e9fdd03 cp-tree.h (copy_to_permanent): Remove.
* cp-tree.h (copy_to_permanent): Remove.
	(permanent_p): Likewise.
	* decl.c (building_typename_type): Don't use copy_to_permanent.
	(start_decl): Likewise.
	(grok_reference_init): Likewise.
	(cp_finish_decl): Likewise.
	* init.c (build_new_1): Don't use mapcar.
	(build_vec_delete_1): Don't use copy_to_permanent.
	(build_vec_init): Likewise.
	* parse.y (primary): Likewise.
	* parse.c: Regenerated.
	* pt.c (push_template_decl_real): Don't use copy_to_permanent.
	(lookup_template_class): Likewise.
	(tsubst_friend_function): Likewise.
	(instantiate_class_template): Likewise.
	(tsubst_decl): Likewise.
	(tsubst): Likewise.
	(instantiate_template): Likewise.
	(unify): Likewise.
	* rtti.c (get_tinfo_fn): Likewise.
	(build_dynamic_cast): Likewise.
	* semantics.c (finish_if_stmt_cond): Likewise.
	(finish_while_stmt_cond): Likewise.
	(finish_do_stmt): Likewise.
	(finish_for_cond): Likewise.
	(finish_for_expr): Likewise.
	(finish_cleanup): Likewise.
	(add_decl_stmt): Likewise.
	(finish_named_return_value): Likewise.
	(finish_qualified_call_expr): Likewise.
	* tree.c (perm_manip): Remove.
	(build_exception_variant): Don't use copy_to_permanent.
	(permanent_p): Remove.
	(copy_to_permament): Remove.
	(build_min_nt): Don't use copy_to_permanent.
	(build_min): Likewise.
	(min_tree_cons): Likewise.
	* typeckc.c (build_static_cast): Likewise.
	(build_reinterpret_cast): Likewise.
	(build_const_cast): Likewise.

From-SVN: r29211
1999-09-08 20:12:35 +00:00
Mark Mitchell
fdfcc44c12 Makefile.in (tree.o): Depend on ggc.h.
* Makefile.in (tree.o): Depend on ggc.h.
	* class.c (make_method_vec): Remove.
	(free_method_vec): Likewise.
	(free_method_vecs): Remove.
	(add_method): Don't use them.
	* cp-tree.def (PTRMEM_CST): Make it longer.
	(TEMPLATE_PARM_INDEX): Make it shorter.
	* cp-tree.h (BINDING_HAS_LEVEL_P): New macro.
	(template_parm_index): Remove RTL field.
	(ptrmem_cst): Add RTL field.
	(finish_function): Removed parameter.
	(process_next_inline): Change prototype.
	(init_cplus_unsave): Rename to init_tree.
	(binding_init): Remove.
	* decl.c (free_binding_nodes): Remove.
	(push_binding): Don't use them.  Set BINDING_HAS_LEVEL_P.
	(pop_binding): Don't use free_binding_nodes.
	(free_binding_vecs): Remove.
	(store_bindings): Don't use them.
	(pop_from_top_level): Likewise.
	(lookup_namespace_name): Simplify.
	(build_typename_type): Don't use obstack_free.
	(unqualified_namespace_lookup): Simplify.
	(lookup_name_real): Simplify.
	(start_function): Remove comment about leaks.
	(finish_function): Removed nested parameter.  Call
	expand_end_bindings even when building_stmt_tree.
	Call ggc_push_context and ggc_pop_context around
	rest_of_compilation, if necessary.
	(mark_cp_function_context): Handle a NULL language-context.
	(lang_mark_false_label_stack): Fix typo.
	(lang_mark_tree): Handle CPLUS_BINDING, OVERLOAD,
	TEMPLATE_PARM_INDEX.  Handle the funny TYPE_LANG_SPECIFIC on
	pointer to method types.
	(lang_cleanup_tree): Use free to free TYPE_LANG_SPECIFIC.
	* decl2.c (finish_objects): Adjust call to finish_function.
	(finish_static_store_duration_function): Likewise.
	(do_nonmember_using_decl): Remove call to binding_init.
	* except.c (end_anon_func): Adjust call to finish_function.
	* lex.c (mark_impl_file_chain): New function.
	(init_parse): Call init_tree, not init_cplus_unsave.
	Add GC roots.
	(cp_pramga_interface): Use xmalloc, not permalloc.
	(cp_pragma_implementation): Likewise.
	(begin_definition_of_inclass_inline): Simplify.
	(process_next_inline): Adjust prototype.
	(do_scoped_id): Don't call binding_init.
	(make_lang_type): Allocate TYPE_LANG_SPECIFIC with xmalloc.
	* method.c (emit_thunk): Adjust call to finish_function.
	(synthesize_method): Likewise.
	* parse.y (%union): Add a new `pi' variant.
	(PRE_PARSED_FUNCTION_DECL): Use it.
	(fn.defpen): Likewise.
	(fndef): Adjust call to finish_function.
	* pt.c (instantiate_decl): Likewise.
	* rtti.c (syntheisze_tinfo_fn): Likewise.
	* semantics.c (expand_body): Likewise.
	* tree.c: Include ggc.h.
	(mark_list_hash): New function.
	(binding_init): Remove.
	(init_cplus_unsave): Rename to ...
	(init_tree): This.  Add GC roots.

From-SVN: r29173
1999-09-07 18:01:53 +00:00
Mark Mitchell
8012c98334 cp-tree.h (cp_function): Move here, from decl.c.
* cp-tree.h (cp_function): Move here, from decl.c.
	(cp_function_chain): Declare.
	(dtor_label): New macro, instead of variable.
	(ctor_label): Likewise.
	(current_base_init_list): Likewise.
	(current_member_init_list): Likewise.
	(base_init_expr): Likewise.
	(current_class_ptr): Likewise.
	(current_class_ref): Likewise.
	(last_tree): Likewise.
	(last_expr_type): Likewise.
	(current_function_returns_value): Likewise.
	(current_function_returns_null): Likewise.
	(current_function_just_assigned_this): Likewise.
	(current_function_parms_stored): Likewise.
	(temp_name_counter): Likewise.
	(static_labelno): Likewise.
	(expanding_p): Likewise.
	(stmts_are_full_exprs_p): Likewise.
	(in_function_try_handler): Likewise.
	(lang_type): Remove nested type_flags.  All uses changed.
	* call.c (ctor_label): Remove.
	(dtor_label): Likewise.
	* class.c (current_class_ptr): Remove.
	(current_class_ref): Likewise.
	* decl.c (static_labelno): Remove.
	(dtor_label): Likewise.
	(last_dtor_insn): New macro, instead of variable.
	(last_parm_cleanup_insn): Likewise.
	(original_result_rtx): Likewise.
	(in_function_try_handler): Remove.
	(named_label_uses): New macro, instead of variable.
	(named_labels): Likewise.
	(current_function_returns_value): Remove.
	(current_function_returns_null): Likewise.
	(current_function_assigns_this): New macro, instead of variable.
	(current_function_just_assigned_this): Likewise.
	(current_binding_level): Likewise.
	(init_decl_processing): Call push_cp_function_context.
	(cp_function): Move to cp-tree.h
	(cp_function_chain): Make it global.
	(temp_name_counter): Remove.
	(push_cp_function_context): Simplify.
	(pop_cp_function_context): Likewise.
	* decl2.c (temp_name_counter): Remove.
	* init_c (current_base_init_list): Likewise.
	(current_member_init_list): Likewise.
	(base_init_expr): Likewise.
	* method.c (static_labelno): Likewise.
	* pt.c (last_tree): Likewise.
	* semantics.c (expanding_p): Likewise.
	(stmts_are_full_exprs_p): Likewise.
	(last_expr_type): Likewise.
	* typeck.c (dtor_label): Likewise.
	(ctor_label): Likewise.

From-SVN: r29062
1999-09-02 19:14:06 +00:00
Mark Mitchell
3c5c0849a9 cp-tree.h (start_handler_parms): New function.
* cp-tree.h (start_handler_parms): New function.
	(expand_start_catch_block): Take only one parameter.
	(start_handler_parms): New function.
	* decl.c (start_handler_parms): Define it.
	* except.c (process_start_catch_block): Take only one parameter.
	Don't call grokdeclarator here.
	(expand_start_catch_block): Don't call grokdeclarator here,
	either.
	* parse.y (handler_args): Adjust call to
	expand_start_catch_block.  Use start_handler_parms.
	* pt.c (push_template_decl_real): Make permanent lists have
	permanent elements.
	(tsubst_expr): Adjust calls to expand_start_catch_block
	appropriately.
	* semantics.c (expand_stmt): Likewise.

From-SVN: r28983
1999-08-30 15:50:40 +00:00
Mark Mitchell
b7b8bcd23a cp-tree.h (TYPE_NEEDS_CONSTRUCTING): Remove #if 0'd definition.
* cp-tree.h (TYPE_NEEDS_CONSTRUCTING): Remove #if 0'd definition.
	(maybe_inject_for_scope_var): Declare it.
	(initialize_local_var): Likewise.
	* decl.c (maybe_inject_for_scope_var): Make it global.
	(initialize_local_var): Likewise.  Move cleanup handling here,
	from cp_finish_decl.
	(make_rtl_for_nonlocal_decl): Use
	push_obstacks_nochange/pop_obstacks, rather than
	end_temporary_allocation/resume_temporary_allocation.
	(cp_finish_decl): Try to complete the type of a variable when it
	is declared.  Move cleanup-handling to initialize_local_var.
	(expand_static_init): Use tree-building code, rather than
	RTL-building code.
	* decl2.c (get_temp_name): Assert non-initializedness of
	temporaries.
	* init.c (create_temporary_var): Move RTL-assigning code to ...
	(get_temp_regvar): Here.
	* pt.c (tsbust_expr): Fix indentation.  Call cp_finish_decl here.
	* semantics.c (expand_stmt): Don't call cp_finish_decl here.  Just
	call initialize_local_var to generate initialization code.

From-SVN: r28973
1999-08-29 19:03:31 +00:00
Mark Mitchell
acef433b61 cp-tree.def (LABEL_STMT): New tree node.
* cp-tree.def (LABEL_STMT): New tree node.
	(LABEL_STMT_LABEL): New macro.
	(shadow_label): Remove.
	(declare_local_label): New function.
	(finish_label_decl): Likewise.
	* decl.c (make_label_decl): New function, split out from
	lookup_label.
	(shadowed_labels): Remove.
	(binding_level): Add shadowed_labels.
	(clear_binding_level): Remove.
	(push_binding_level): Just bzero the new binding level.
	(pushlevel): Fix indentation.
	(pop_label): New function.
	(pop_labels): Likewise, split out from poplevel.
	(poplevel): Pop local labels.  Use pop_labels.
	(maybe_push_to_top_level): Don't clear shadowed_labels.
	(lookup_label): Use make_label_decl.
	(shadow_label): Remove.
	(declare_local_label): New function.
	(define_label): Simplify.
	(start_function): Don't clear shadowed_labels.
	(cp_function): Remove shadowed_labels.
	(push_cp_function_context): Don't save shadowed_labels.
	(pop_cp_function_context): Don't restore it.
	* dump.c (dequeue_and_dump): Handle LABEL_STMT.
	* parse.y (label_decl): Use finish_label_decl.
	* pt.c (tsubst_expr): Handle LABEL_STMTs, and local label
	declarations.
	* semantics.c (finish_label_stmt): Add a LABEL_STMT when
	building_stmt_tree.
	(finish_label_decl): New function.
	(expand_stmt): Handle LABEL_STMTs and local label declarations.

From-SVN: r28943
1999-08-28 21:46:30 +00:00
Mark Mitchell
3fa5619139 decl.c (lookup_label): Build labels on the permanent obstack when building statement trees.
* decl.c (lookup_label): Build labels on the permanent obstack
	when building statement trees.  Don't build RTL for labels when
	building statement trees.
	* semantics.c (finish_goto_stmt): Use LABEL_DECLs even when
	building statement trees.
	(finish_label_stmt): Likewise.
	(expand_stmt): Adjust accordingly.
	* pt.c (tsubst_expr); Likewise.
	(do_decl_instantiation): Robustify.

From-SVN: r28918
1999-08-27 06:07:08 +00:00
Mark Mitchell
38c7331af5 * semantics.c (do_poplevel): Always initialize the return value.
From-SVN: r28908
1999-08-26 23:40:50 +00:00
Mark Mitchell
f1dedc319f cp-tree.def (SUBOBJECT): New tree node.
* cp-tree.def (SUBOBJECT): New tree node.
	* cp-tree.h (CLEANUP_P): New macro.
	(SUBOBJECT_CLEANUP): Likewise.
	(keep_next_level): Add parameter.
	(get_temp_regvar): Don't declare.
	(emit_base_init): Remove parameter.
	(expand_aggr_init): Rename to build_aggr_init.
	(expand_vec_init): Rename to build_vec_init.
	(do_pushlevel): Remove.
	(do_poplevel): Likewise.
	(finish_cleanup): New function.
	(finish_subobject): Likewise.
	(stmts_are_full_exprs_p): New variable.
	* decl.c (keep_next_level): Add parameter.
	(cp_finish_decl): Use build_aggr_init, not
	expand_aggr_init.  Use finish_expr_stmt to expand the code.
	(expand_static_init): Use tree-generating, not RTL-generating,
	functions to handle the initialization.
	(start_function): Remove dead code.  Always have a momentary
	obstack inside the function, even before hitting the first curly
	brace.
	(cplus_expand_expr_stmt): Move calls to
	expand_{start,end}_target_temps into semantics.c.
	(cp_function): Add stmts_are_full_exprs_p.
	(push_cp_function_context): Save it.
	(pop_cp_function_context): Restore it.
	* decl2.c (get_temp_regvar): Move to init.c.
	(do_static_initialization): Use build_{aggr,vec}_init.
	(do_static_destruction): Fix typo in comment.
	* dump.c (dequeue_and_dump): Handle INIT_EXPR.
	* except.c (expand_throw): Use create_temporary_var.
	* expr.c (cplus_expand_expr): Use build_{aggr,vec}_init.
	* init.c (expand_vec_init_try_block): Remove.
	(expand_vec_init_catch_clause): Likewise.
	(get_temp_regvar): New function.
	(begin_init_stmts): Likewise.
	(finish_init_stmts): Likewise.
	(perform_member_init): Use build_{aggr,vec}_init.  Build up tree
	structure here.
	(emit_base_init): Likewise.  Remove unused parameter.
	(expand_virtual_init): Likewise.
	(expand_cleanup_for_base): Use finish_subobject.
	(expand_aggr_vbase_init_1): Simplify.
	(construct_virtual_bases): Use tree-generating functions to build
	up initialization.
	(expand_aggr_init): Likewise.  Rename to build_aggr_init.
	(expand_default_init): Likewise.
	(expand_aggr_init_1): Likewise.
	(expand_vec_init): Rename to build_vec_init.
	* method.c (do_build_copy_constructor): Use tree-generating
	functions.  Don't call clear_last_expr.
	(do_build_assign_ref): Likewise.
	(synthesize_method): Call clear_last_expr here.
	* parse.y (base_init): Don't call clear_last_expr here.
	(nodecls): Likewise.
	* pt.c (tsubst_expr): Handle a TRY_BLOCK with CLEANUP_P set.
	* semantics.c (do_pushlevel): Move to here.
	(do_poplevel): Likewise.
	(stmts_are_full_exprs_p): New variable.
	(finish_expr_stmt): Handle logic for temoprary cleanup here.
	(finish_for_stmt): Use finish_expr_stmt.
	(finish_cleanup): New function.
	(finish_function_try_block): Fix indentation.
	(finish_subobject): New function.
	(setup_vtbl_ptr): Call keep_next_level here.
	(finish_stmt_expr): Handle a block with no scope inside the
	statement-expression.
	(expand_stmt): Handle a TRY_BLOCK with CLEANUP_P set.  Handle
	SUBOBJECT.
	* tree.c (search_tree): Handle INIT_EXPR.
	(mapcar): Likewise.
	* typeck.c (build_modify_expr): Don't build an RTL_EXPR.
	* typeck2.c (store_init_value): Change expand_aggr_init to
	build_aggr_init in comment.

From-SVN: r28878
1999-08-25 22:07:18 +00:00
Mark Mitchell
9d9169deaa cp-tree.def (STMT_EXPR): Fix typo in node name.
* cp-tree.def (STMT_EXPR): Fix typo in node name.

	* dump.c (dump_next_stmt): New function.
	(dequeue_and_dump): Use it.

	* pt.c (tsubst_copy): Make sure to initialize return value for a
	STMT_EXPR, even when processing_template_decl.
	* semantics.c (finish_stmt_expr): A statement-expression whose
	last statement is not an expression-statement has type `void'.

From-SVN: r28804
1999-08-22 18:11:40 +00:00
Mark Mitchell
22e9174f54 semantics.c (finish_stmt_expr): Fix typo in comment.
* semantics.c (finish_stmt_expr): Fix typo in comment.
	* tree.c (search_tree): Handle EXIT_EXPR, LOOP_EXPR.
	(mapcar): Likewise.
	* init.c (build_vec_delete_1): Make the children of a permanent
	BIND_EXPR permanent.
	* pt.c (register_specialization): Don't register a specialization
	more than once.

From-SVN: r28781
1999-08-20 22:07:22 +00:00
Mark Mitchell
40242ccfbd cp-tree.def (PSEUDO_DTOR_EXPR): New tree code.
* cp-tree.def (PSEUDO_DTOR_EXPR): New tree code.
	* decl2.c (build_expr_from_tree): Handle it.
	* error.c (dump_expr): Likewise.
	* pt.c (for_each_template_parm): Likewise.
	(tsubst_copy): Likewise.
	* tree.c (search_tree): Likewise.
	* semantics.c (finish_pseudo_destructor_call): Create it.

From-SVN: r28760
1999-08-19 08:06:17 +00:00
Mark Mitchell
558475f07c cp-tree.def (STMT_EXPR): New tree node.
* cp-tree.def (STMT_EXPR): New tree node.
	* cp-tree.h (STMT_EXPR_STMT): New macro.
	(store_return_init): Change prototype.
	(finish_named_return_value): New function.
	(expand_stmt): Likewise.
	(expand_body): Likewise.
	(begin_stmt_tree): Likewise.
	(finish_stmt_tree): Likewise.
	(expanding_p): New variable.
	(last_expr_type): Likewise.
	(building_stmt_tree): New macro.
	* decl.c (start_function): Use building_stmt_tree, not
	processing_template_decl, where appropriate.
	(store_parm_decls): Likewise.
	(store_return_init): Move most of the body to semantics.c.
	(finish_function): Use building_stmt_tree.
	(finish_stmt): Clear last_expr_type here.
	(cp_function): Add expanding_p, last_tree, last_expr_type.
	(push_cp_function_context): Save them.
	(pop_cp_function_context): Restore them.
	* decl2.c (setup_vtbl_ptr): Move to semantics.c.
	* error.c (dump_expr): Handle STMT_EXPR.
	* except.c (expand_start_catch_block): Use building_stmt_tree.
	Use add_decl_stmt.
	* expr.c (cplus_expand_expr): Handle STMT_EXPR.
	(do_case): Move add_tree call to semantics.c.
	* parse.y (return_init): Use finish_named_return_value.
	(for.init.statement): Use finish_expr_stmt.
	* parse.c: Regenerated.
	* pt.c (do_pushlevel): Move to semantics.c.
	(do_poplevel): Likewise.
	(tsubst_copy): Handle STMT_EXPR instead of BIND_EXPR.
	(tsubst_expr): Don't expand all the way to RTL here.  Handle
	RETURN_INIT and CTOR_INITIALIZER.
	(instantiate_decl): Call expand_body after tsubst'ing into
	DECL_SAVED_TREE.
	* semantics.c (expand_stmts): New function.
	(expanding_p): New variable.
	(last_expr_type): Likewise.
	(finish_expr_stmt): Use building_stmt_tree.
	(begin_if_stmt): Likewise.
	(finish_if_stmt_cond): Likewise.
	(finish_then_clause): Likewise.
	(begin_else_clause): Likewise.
	(finish_else_clause): Likewise.
	(begin_while_stmt): Likewise.
	(finish_while_stmt_cond): Likewise.
	(finish_while_stmt): Likewise.
	(finish_do_body): Likewise.
	(finish_do_stmt): Likewise.
	(finish_return_stmt): Likewise.
	(begin_for_stmt): Likewise.
	(fnish_for_init_stmt): Likewise.
	(finish_for_cond): Likewise.
	(finish_for_expr): Likewise.
	(finish_for_stmt): Likewise.
	(finish_break_stmt): Likewise.
	(finish_continue_stmt): Likewise.
	(finish_switch_cond): Likewise.
	(finish_switch_stmt): Likewise.
	(finish_case_label): Call add_tree here if necessary.
	(finish_goto_statement): Use building_stmt_tree.
	(begin_try_block): Likewise.
	(begin_function_try_block): Likewise.
	(finish_try_block): Likewise.
	(finish_function_try_block): Likewise.
	(finish_handler_sequence): Likewise.
	(finish_function_handler_sequence): Likewise.
	(begin_handler): Likewise.
	(finish_handler_parms): Likewise.
	(finish_handler): Likewise.
	(begin_compound_stmt): Likewise.
	(finish_compound_stmt): Likewise.
	(finish_asm_stmt): Likewise.
	(finish_label_stmt): Likewise.
	(finish_named_return_value): New function.
	(setup_vtbl_ptr): Moved here from decl2.c.
	(do_pushlevel): Moved here from pt.c.
	(do_poplevel): Likewise.
	(begin_stmt_expr): Use building_stmt_tree.
	(finish_stmt_expr): Likewise.  Build a STMT_EXPR, not a BIND_EXPR,
	when building_stmt_tree.
	(begin_stmt_tree): New function.
	(finish_stmt_tree): Likewise.
	(expand_stmt): Likewise.
	(expand_body): Likewise.
	* tree.c (build_cplus_method_type): Make sure the argument types
	end up on the same obstack as the METHOD_TYPE.
	(search_tree): Handle COMPOUND_EXPR, MODIFY_EXPR,
	THROW_EXPR, STMT_EXPR.
	(mapcar): Break out common cases.  Handle COMPOUND_EXPR,
	MODIFY_EXPR, THROW_EXPR, STMT_EXPR, RTL_EXPR.  Abort, rather than
	sorry, if an unsupported node is encountered.
	* typeck.c (require_complete_type_in_void): Handle BIND_EXPR.
	(c_expand_return): Don't call add_tree here.

From-SVN: r28729
1999-08-16 19:01:36 +00:00
Mark Mitchell
9188c36364 cp-tree.def (DECL_STMT): Make it smaller.
* cp-tree.def (DECL_STMT): Make it smaller.
	* cp-tree.h (lang_decl_flags): Move saved_tree to ...
	(lang_decl): ... here.  Add next.
	(DECL_SAVED_TREE): Adjust accordingly.
	(DECL_IMPLICIT_TYPEDEF_P): New macro.
	(SET_DECL_IMPLICIT_TYPEDEF_P): Likewise.
	(DECL_STMT_DECL): Likewise.
	(create_implicit_typedef): New function.
	(maybe_push_decl): Likewise.
	(tsubst_default_argument): New function.
	(at_function_scope_p): Likewise.
	(add_decl_stmt): Likewise.
	(push_permanent_obstack): Likewise.
	* call.c (convert_default_arg): Use tsubst_default_argument.
	* class.c (add_method): Use push_permanent_obstack.
	(build_self_reference): Create a TEMPLATE_DECL for the
	self-reference, if necessary.
	* decl.c (pseudo_global_level_p): Only look at the current binding
	level.
	(push_binding): Use push_permanent_obstack.
	(create_implicit_typedef): New function.
	(pushtag): Use it.
	(duplicate_decls): Use push_permanent_obstack.
	(maybe_push_decl): New function.
	(start_decl): Use it.  Remove dead code.  Use add_decl_stmt.
	(start_decl_1): Remove dead code.
	(cp_finish_decl): Remove DECL_STMT handling here.  Don't use
	pseudo_global_level_p.
	(grokvardecl): Create DECL_LANG_SPECIFIC for a VAR_DECL in a
	template.
	(grokdeclarator): Likewise, for TYPE_DECLs.  Don't use
	pseudo_global_level_p.
	* decl2.c (grokfield): Call push_template_decl for a TYPE_DECL in
	a template.
	(get_sentry): Use push_permanent_obstack.
	* dump.c (dequeue_and_dump): Enable DECL_STMT.
	* except.c (call_eh_info): Use push_permanent_obstack.
	(build_eh_type_ref): Likewise.
	(do_pop_exception): Likewise.
	(expand_eh_spec): Likewise.
	(alloc_eh_object): Likewise.
	(expand_throw): Likewise.
	* init.c (build_java_class_ref): Likewise.
	* lex.c (get_time_identifier): Likewise.
	(free_lang_decl_chain): Correct type.
	(retrofit_lang_decl): Adjust accordingly.
	(build_lang_field_decl): Likewise.
	* lex.h (free_lang_decl_chain): Likewise.
	* parse.y (lang_extdef): Don't use pseudo_global_level_p.
	* parse.c: Regenerated.
	* pt.c (tsubst_default_arguments): New function.
	(retrieve_local_specialization): Likewise.
	(register_local_specialization): Likewise.
	(push_template_decl_real): Use DECL_IMPLICIT_TYPEDEF_P.  Just use
	pseudo_global_level_p to determine whether or not a template is
	primary.
	(lookup_template_class): Likewise.  Use create_implicit_typedef.
	(instantiate_class_template): Call tsubst_default_arguments for
	member functions, if appropriate.
	(tsubst_default_argument): New function.
	(tsubst_decl): Use it.  Change TYPE_DECL handling to match VAR_DECLs.
	* search.c (at_function_scope_p): New function.
	* semantics.c (finish_asm_stmt): Use push_permanent_obstack.
	(finish_label_stmt): Likewise.
	(add_decl_stmt): New function.
	(begin_class_definition): Likewise.
	(finish_typeof): Likewise.
	* tree.c (copy_template_template_parm): Likewise.
	(copy_to_permanent): Likewise.
	(push_permanent_obstack): Define.
	(mark_addressable): Use it.
	* typeck.c (mark_addressable): Likewise.

From-SVN: r28709
1999-08-14 09:23:49 +00:00
Mark Mitchell
f01b0acb0f cp-tree.h (minimal_parse_mode): Remove.
* cp-tree.h (minimal_parse_mode): Remove.
	(finish_label_stmt): New function.
	* decl.c (saved_scope): Remove minimal parse mode.
	(maybe_push_to_top_level): Don't save it.
	(pop_from_top_level): Don't restore it.
	(define_label): Split out template-handling code to semantics.c.
	(start_decl): Don't use minimal_parse_mode.
	(cp_finish_decl): Likewise.
	(start_function): Don't increment it.
	(store_return_init): Don't use it.
	(finish_function): Don't decrement it.
	* parse.y (label_colon): Use finish_label_stmt throughout.
	* parse.c: Regenerated.
	* pt.c (minimal_parse_mode): Don't define it.
	(tsubst_expr): Use finish_label_stmt.
	* semantics.c (finish_label_stmt): New function.

From-SVN: r28682
1999-08-12 01:45:44 +00:00
Mark Mitchell
6eabb2412f extend.texi (C++ Signatures): Remove node.
* extend.texi (C++ Signatures): Remove node.
	* invoke.texi: Remove discussion of -fhandle-signatures,
	signature, sigof, __signature__, and __sigof__.

	* Make-lang.in (CXX_SRCS): Remove sig.c.
	* Makefile.in (CXX_OBJS): Remove sig.o.
	(sig.o): Remove.
	* cp-tree.h (CPTI_OPAQUE_TYPE): Remove.
	(CPTI_SIGNATURE_TYPE): Likewise.
	(CPTI_SIGTABLE_ENTRY_TYPE): Likewise.
	(opaque_type_node): Likewise.
	(signature_type_node): Likewise.
	(sigtable_entry_type): Likewise.
	(flag_handle_signatures): Likewise.
	(lang_type): Remove is_signature, is_signature_pointer,
	is_signature_reference, has_opaque_typedecls,
	sigtables_has_been_generated.  Adjust dummy.  Remove signature,
	signature_pointer_to, signature_reference_to.
	(IS_SIGNATURE): Remove.
	(SET_SIGNATURE): Remove.
	(CLEAR_SIGNATURE): Remove.
	(IS_SIGNATURE_POINTER): Remove.
	(IS_SIGNATURE_REFERENCE): Remove.
	(SIGNATURE_HAS_OPAQUE_TYPEDECLS): Remove.
	(SIGTABLE_HAS_BEEN_GENERATED): Remove.
	(CLASSTYPE_SIGNATURE): Remove.
	(SIGNATURE_TYPE): Remove.
	(SIGNATURE_METHOD_VEC): Remove.
	(SIGNATURE_POINTER_TO): Remove.
	(SIGNATURE_REFERENCE_TO): Remove.
	(lang_decl_flags): Remove is_default_implementation.  Rename
	memfunc_pointer_to to saved_tree.
	(IS_DEFAULT_IMPLEMENTATION): Remove.
	(DECL_MEMFUNC_POINTER_TO): Remove.
	(DECL_MEMFUNC_POINTING_TO): Remove.
	(DECL_SAVED_TREE): Adjust definition.
	(tag_types): Remove signature_type_node.
	(SIGNATURE_FIELD_NAME): Remove.
	(SIGNATURE_FIELD_NAME_FORMAT): Likewise.
	(SIGNATURE_OPTR_NAME): Likewise.
	(SIGNATURE_SPTR_NAME): Likewise.
	(SIGNATURE_POINTER_NAME): Likewise.
	(SIGNATURE_POINTER_NAME_FORMAT): Likewise.
	(SIGNATURE_REFERENCE_NAME): Likewise.
	(SIGNATURE_REFERNECE_NAME_FORMAT): Likewise.
	(SIGTABLE_PTR_TYPE): Likewise.
	(SIGTABLE_NAME_FORMAT): Likewise.
	(SIGTABLE_NAME_FORMAT_LONG): Likewise.
	(SIGTABLE_TAG_NAME): Likewise.
	(SIGTABLE_VB_OFF_NAME): Likewise.
	(SIGTABLE_VT_OFF_NAME): Likewise.
	(finish_base_specifiers): Change prototype.
	(build_signature_pointer_type): Remove.
	(build_signature_reference_type): Remove.
	(build_signature_pointer_constructor): Remove.
	(build_signature_method_call): Remove.
	(build_optr_ref): Likewise.
	(append_signature_fields): Likewise.
	(signature_error): Likewise.
	* call.c (build_this): Remove signature support.
	(build_over_call): Likewise.
	(build_new_method_call): Likewise.
	* class.c (add_implicitly_declared_members): Likewise.
	(finish_struct_1): Likewise.
	(finish_struct): Likewise.
	* cvt.c (cp_convert_to_pointer): Likewise.
	(convert_to_pointer_force): Likewise.
	(ocp_convert): Likewise.
	* decl.c (sigtable_decl_p): Remove.
	(init_decl_processing): Remove support for signatures.
	(cp_finish_decl): Likewise.
	(grokdeclarator): Likewise.
	(grokparms): Likewise.
	(xref_tag): Likewise.
	(start_function): Likewise.
	(start_method): Likewise.
	* decl2.c (finish_sigtable_vardecl): Remove.
	(flag_handle_signatures): Remove.
	(lang_f_options): Remove handle-signatures.
	(grokfield): Remove support for signatures.
	(grokbitfield): Likewise.
	(finish_file): Likewise.
	(reparse_absdcl_as_casts): Likewise.
	* error.c (dump_type_real): Likewise.
	(dump_function_decl): Likewise.
	* friend.c (make_friend_class): Likewise.
	* gxx.gperf: Remove __signature__, signature, __sigof__, sigof.
	* hash.h: Regenerated.
	* init.c (build_new_1): Remove support for signatures.
	* lang-options.h: Remove -fhandle-signatures,
	-fno-handle-signatures.
	* lex.c (init_parse): Remove support for signatures.
	(yyprint): Likewise.
	* lex.h (rid): Remove RID_SIGNATURE.
	* method.c (build_decl_overload_real): Remove support for
	signatures.
	(hack_identifier): Likewise.
	* parse.y (base_class): Likewise.
	(base_class.1): Likewise.
	(access_specifier): Likewise.
	* search.c (lookup_member): Likewise.
	* semantics.c (finish_qualified_object_call_expr): Likewise.
	(finish_template_type_parm): Likewise.
	(begin_class_definition): Likewise.
	(finish_base_specifier): Likewise.
	* sig.c: Remove.
	* tree.c (build_cplus_method_type): Remove support for signatures.
	* typeck.c (require_complete_type): Likewise.
	(c_sizeof): Likewise.
	(c_alignof): Likewise.
	(build_object_ref): Likewise.
	(build_component_ref): Likewise.
	(build_indirect_ref): Likewise.
	(build_c_cast): Likewise.
	(build_modify_expr): Likewise.
	(convert_for_initialization): Likewise.
	* typeck2.c (signature_error): Remove.
	(store_init_value): Remove support for signatures.
	(digest_init): Likewise.
	(build_x_arrow): Likewise.
	(build_functional_cast): Likewise.
	* xref.c (GNU_xref_decl): Likewise.

From-SVN: r28677
1999-08-11 20:22:41 +00:00
Jason Merrill
0dde4175ef semantics.c (begin_function_try_block, [...]): New fns.
* semantics.c (begin_function_try_block, finish_function_try_block,
	finish_function_handler_sequence): New fns.
	* parse.y (function_try_block): Use them.
	* pt.c (instantiate_decl): Likewise.

	* cp-tree.h: Declare in_function_try_handler.
	* decl.c: Define it.
	(start_function): Clear it.
	(struct cp_function, push_cp_function_context): Save it.
	(pop_cp_function_context): Restore it.
	* parse.y (function_try_block): Set and clear it.
	* except.c (expand_end_catch_block): Rethrow if we reach the end
	of a function-try-block handler in a ctor or dtor.
	* typeck.c (c_expand_return): Complain about returning from a
	function-try-block handler of a ctor.

	* parse.y (function_try_block): Call end_protect_partials
	before expand_start_all_catch.

From-SVN: r28624
1999-08-09 06:45:00 -04:00
Mark Mitchell
f71f87f9eb invoke.texi (-fdump-translation-unit): New option.
* invoke.texi (-fdump-translation-unit): New option.
	* Make-lang.in (CXX_SRCS): Add dump.c.
	* Makefile.in (CXX_OBJS): Add dump.o.
	(dump.o): New target.
	* cp-tree.h (DECL_CONV_FN_P): Document.
	(DECL_OVERLOADED_OPERATOR_P): New function.
	(TYPE_PTRMEM_CLASS_TYPE): New macro.
	(TYPE_PTRMEM_POINTED_TO_TYPE): Likewise.
	(PTRMEM_CST_CLASS): Use TYPE_PTRMEM_CLASS_TYPE.
	(ASM_VOLATILE_P): New macro.
	(STMT_LINENO): Likewise.
	(cp_namespace_decls): New function.
	(dump_node_to_file): New function.
	* decl.c (cp_namespace_decls): New function.
	(walk_namespaces_r): Use it.
	(wrapup_globals_for_namespace): Likewise.
	* decl2.c (flag_dump_translation_unit): New variable.
	(lang_decode_option): Handle -fdump-translation-unit.
	(finish_file): If flag_dump_translation_unit is set, dump the
	translation unit.
	* dump.c: New file.
	* lang-options.h: Add -fdump-translation-unit.
	* pt.c (tsubst_template_parms): Robustify.
	(tsubst_decl): Use DECL_OVERLOADED_OPERATOR_P.
	(tsubst_expr): Use STMT_LINENO.
	* semantics.c (finish_asm_stmt): Eliminate duplicate code.  Check
	for invalid cv-qualifiers even while building templates.

From-SVN: r28434
1999-08-03 01:37:47 +00:00
Jason Merrill
9f33663b8d decl.c (warn_extern_redeclared_static): Check DECL_ARTIFICIAL...
* decl.c (warn_extern_redeclared_static): Check DECL_ARTIFICIAL,
	not DECL_BUILT_IN, to determine if a function is internally declared.
	(duplicate_decls): Likewise.  Improve handling of builtins.
	(push_overloaded_decl): Remove special handling of builtins.

	* cp-tree.h (ANON_AGGR_TYPE_P): Use CLASS_TYPE_P.

	* decl.c (grokdeclarator): Pull out decl_constant_value in
	templates, too.

	* class.c (finish_struct, finish_struct_1): Remove 'warn_anon' parm.
	* cp-tree.h, pt.c, semantics.c: Adjust.
	* method.c (largest_union_member): Remove.

From-SVN: r28204
1999-07-21 04:52:14 -04:00
Jason Merrill
1d02ac8371 decl2.c (reparse_absdcl_as_casts): Don't warn about old-style casts in system headers or extern "C" blocks.
* decl2.c (reparse_absdcl_as_casts): Don't warn about old-style
	casts in system headers or extern "C" blocks.
	* decl2.c (write_virtuals): Deleted declaration.
	* cp-tree.h (write_virtuals): Deleted extern declaration.
	* class.c (finish_struct_1): Removed #if 0'd code that mentions
	write_virtuals.
	* semantics.c (begin_class_definition): Rewrite code to not depend
	on write_virtuals.
	* lex.c (cp_pragma_interface): New function.
	(cp_pragma_implementation): Likewise.
	(handle_cp_pragma): Call them.

From-SVN: r28045
1999-07-09 08:44:37 -04:00
Mark Mitchell
7dc5bd62ab semantics.c (finish_asm_statement): Apply decay conversions to input operands.
* semantics.c (finish_asm_statement): Apply decay conversions to
        input operands.

From-SVN: r27617
1999-06-19 17:56:56 -06:00
Jason Merrill
ecfa9fccd5 semantics.c (finish_if_stmt_cond): Copy cond to permanent_obstack.
* semantics.c (finish_if_stmt_cond): Copy cond to permanent_obstack.
	(finish_while_stmt_cond, finish_do_stmt, finish_for_cond): Likewise.

From-SVN: r27348
1999-06-03 23:45:57 -04:00
Nathan Sidwell
b4f70b3d42 semantics.c (begin_class_definition): Update the struct's location here ...
* semantics.c (begin_class_definition): Update the struct's
	location here ...
	* class.c (finish_struct): ... rather than here.
	* decl.c (make_typename_type): Don't rely on uninitialized
	variable.

From-SVN: r27326
1999-06-03 07:16:15 +00:00
Mark Mitchell
3ebc5c52e8 class.c (finish_vtbls): Copy BINFO_VIRTUALs before using it to intialize a vtable.
* class.c (finish_vtbls): Copy BINFO_VIRTUALs before using it to
	intialize a vtable.
	* cp-tree.h (NAMESPACE_LEVEL): Reformat.
	(lang_decl_flags): Document MEMFUNC_POINTER_TO.  Save four bytes
	by combining TEMPLATE_INFO and LEVEL into a single union.
	(DECL_TEMPLATE_INFO): Reformat.
	(DECL_SAVED_TREE): Document.
	(DECL_TEMPLATE_INJECT): Remove.
	* class.c (finish_struct): Remove code to deal with
	DECL_TEMPLATE_INJECT.
	* decl.c (maybe_process_template_type_declaration): Handle all new
	types in templates uniformly.
	* method.c (bulid_overload_identifier): Use CP_DECL_CONTEXT, not
	DECL_CONTEXT.
	* pt.c (lookup_template_class): Inject template instantiations of
	forward-declarations.
	(instantiate_class_template): Remove code processing
	DECL_TEMPLATE_INJECT.
	* pt.c (lookup_template_class): Tweak lookup to find member
	templates.
	* pt.c (tsubst_expr, case ASM_STMT): Don't tsubst into
	ASM_CV_QUAL.
	* semantics.c (finish_asm_stmt): Make strings permanent if they're
	used in a template.

From-SVN: r27144
1999-05-25 15:31:38 +00:00
Mark Mitchell
fbdd002411 cp-tree.h (finish_class_definition): Add parameter.
* cp-tree.h (finish_class_definition): Add parameter.
	* parse.y (structsp): Use it.  Don't call pop_scope here.
	* parse.c: Regenerated.
	* semantics.c (finish_class_definition): Pop it here.

From-SVN: r26537
1999-04-18 10:58:42 +00:00
Mark Mitchell
3d7de1fa03 cp-tree.h (lang_type): Add documentation.
* cp-tree.h (lang_type): Add documentation.
	* decl2.c (handle_class_head): Create template declarations here,
	as appropriate.
	* parse.y (class_head): Return whether or not we entered a new
	scope, as well as the type named.
	(named_class_head): Likewise.
	(named_complex_class_head_sans_basetype): Likewise.
	(structsp): Adjust accordingly.  Pop scope when required.
	* parse.c: Regenerated.
	* pt.c (check_default_tmpl_args): Robustify.
	(redeclare_class_template): Likewise.
	(instantiate_class_template): An instantiation of an
	anonymous union is itself an anonymous union.
	* semantics.c (begin_class_definition): Don't create template
	declarations here.

From-SVN: r26475
1999-04-15 17:52:25 +00:00
Mark Mitchell
8f0327178b tinfo.h (__class_type_info): Fix illegal declaration.
1999-04-02  Mark Mitchell  <mark@codesourcery.com>
	* tinfo.h (__class_type_info): Fix illegal declaration.
	* cp-tree.def (TEMPLATE_ID_EXPR): Update comment.
	* cp-tree.h (INHERITED_VALUE_BINDING_P): New macro.
	(IDENTIFIER_CLASS_VALUE): Improve documentation.
	(is_properly_derived_from): Declare.
	(invalidate_class_lookup_cache): Likewise.
	(maybe_maybe_note_name_used_in_class): Likewise.
	(note_name_declared_in_class): Likewise.
	(push_using_decl): Remove duplicate declaration.
	(id_in_current_class): Remove declaration.
	(push_class_binding): Change prototype.
	(clear_identitifer_class_values): Declare.
	* call.c (is_properly_derived_from): Make it global.
	(build_new_function_call): Be careful about updating candidates.
	(build_new_method_call): Handle COMPONENT_REFs.  Don't crash when
	asked to make illegal calls.
	* class.c: Include splay-tree.h.
	(class_stack_node): Add names_used slot.
	(check_member_decl_is_same_in_complete_scope): Remove.
	(add_method): Fix comment.  Push the declaration into class
	scope.
	(finish_struct_1): When popping the class, pop the bindings too.
	Remove check for data member/function member conflict.
	(finish_struct): Remove calls to
	check_member_decl_is_same_in_complete_scope.  Change calls to
	popclass.
	(pushclass): Clear names_used in the class stack entry.
	Use invalidate_class_lookup_cache to remove cached entries, rather
	than magic values with popclass.  Clear IDENTIFIER_CLASS_VALUE
	before entering a new class.  Remove dead code.  Don't mess with
	current_function_decl when pushing declarations.
	(invalidate_class_lookup_cache): New function, split out from ...
	(popclass): Here.  Clean up names_used on our way out.
	(instantiate_type): Adjust.
	(build_self_reference): Don't push the declaration here.
	(maybe_note_name_used_in_class): New function.
	(note_name_declared_in_class): Likewise.
	* decl.c (add_binding): Change prototype.
	(find_class_binding_level): New function.
	(innermost_nonclass_level): Likewise.
	(current_binding_level): Update documentation.
	(inner_binding_level): Remove.  Replace with current_binding_level
	throughout.
	(push_binding_level): Remove special handling of
	class_binding_level.
	(pop_binding_level): Likewise.  Use find_class_binding_level.
	(suspend_binding_level): Likewise.
	(global_bindings_p): Use innermost_nonclass_level.
	(toplevel_bindings_p): Likewise.
	(namespace_bindings_p): Likewise.
	(pseudo_global_level_p): Likewise.
	(push_binding): Clear INHERITED_VALUE_BINDING_P.
	(add_binding): Check for illegal multiple declarations.  Return a
	value indicating whether or not the new binding was legal.
	(push_local_binding): Skip over class binding levels.  Check
	return value from add_binding.
	(push_class_binding): Set INHERITED_VALUE_BINDING_P.  Call
	note_name_declared_in_class.
	(pushlevel_class): Remove "fake out the rest of the compiler"
	code.
	(poplevel_class): Reset IDENTIFIER_CLASS_VALUEs.
	(clear_identifier_class_values): New function.
	(pop_from_top_level): Use it.
	(pop_everything): Tweak.
	(maybe_process_template_type_declaration): Don't push the
	declaration for the template here.
	(pushtag): Don't push tag declarations into class scope here.
	(pushdecl): Apply DeMorgan's law for readability.
	(pushdecl_class_level): Remove special-case code for
	TYPE_BEING_DEFINED.  Handle OVERLOADs and anonymous unions.
	(push_class_level_bindng): Deal with inherited bindings.
	(lookup_name_real): Remove special-case code for
	TYPE_BEING_DEFINED, and some implicit typename magic.
	(grokdeclarator): Handle COMPONENT_REF for a template function.
	(build_enumerator): Don't call pushdecl_class_level here.
	(id_in_current_class): Remove.
	* decl2.c (grokfield): Don't call pushdecl_class_level or
	check_template_shadow.
	* errfn.c (cp_file_of): Don't declare.
	(cp_line_of): Likewise.
	* error.c (dump_decl): Handle an OVERLOAD.
	(cp_file_of): Likewise.
	(cp_line_of): Likewise.
	* init.c (build_member_call): Handle a COMPONENT_REF.
	* lex.c (do_identifier): Call maybe_note_name_used_in_class, not
	pushdecl_class_level.
	* method.c (hack_identifier): Build COMPONENT_REFs for references
	to member templates as well as member functions.  Remove dead
	code.
	* parse.y (left_curly): Remove.
	(nonnested_type): Call maybe_note_name_used_in_class, not
	pushdecl_class_level.
	* parse.c: Regenerated.
	(nested_name_specifier_1): Likewise.
	* pt.c (check_explicit_specialization): Adjust, for robustness.
	(check_template_shadow): Handle OVERLOADs.
	(build_template_decl): Set DECL_CONSTRUCTOR_P on the
	TEMPLATE_DECL, if appropriate.
	* search.c (envelope_add_decl): Remove.
	(dfs_pushdecls): Likewise.
	(dfs_compress_decls): Likewise.
	(dfs_push_decls): New function.
	(dfs_push_type_decls): Likewise.
	(setup_class_bindings): Likewise.
	(template_self_reference_p): Likewise.
	(lookup_field_r): Use it.
	(looup_member): Remove old comment.  Deal with ambiguity.
	(push_class_decls): Use dfs_push_decls and dfs_push_type_decls,
	and remove envelope processing.
	* semantics.c (begin_class_definition): Let pushclass push
	declarations for base classes.
	(finish_member_declaration): Push declarations into class scope.
	* typeck.c (build_component_ref): Just put an OVERLOAD into the
	COMPONENT_REF, not a TREE_LIST of an OVERLOAD.
	(build_x_function_call): Deal with OVERLOAD.  Handle template-ids.
	* Makefile.in (class.o): Depend on splay-tree.h.

From-SVN: r26133
1999-04-02 15:36:57 +00:00
Jason Merrill
51632249ef semantics.c (begin_inline_definitions, [...]): Rename from finish_default_args and begin_inline_definitions...
* semantics.c (begin_inline_definitions,
	finish_inline_definitions): Rename from finish_default_args and
	begin_inline_definitions, respectively, to something that isn't a
	total lie.  :)
	* parse.y (structsp): Adjust.
	* tree.c (hash_tree_cons): Remove obsolete via_* parms.
	(list_hash_lookup): Likewise.
	(hash_tree_chain): Adjust.
	* pt.c (tsubst): Adjust.
	(tsubst_arg_types): Use plain hash_tree_cons.
	* cp-tree.h (hash_tree_cons_simple): Lose.
	* parse.y (declmods, nonempty_cv_qualifiers): Use hash_tree_cons.

From-SVN: r26092
1999-03-31 13:59:19 -05:00
Jason Merrill
9e0781b581 cp-tree.h (IDENTIFIER_AS_DESC, [...]): Remove cruft.
* cp-tree.h (IDENTIFIER_AS_DESC, IDENTIFIER_AS_LIST,
	CLASSTYPE_BASELINK_VEC, CLASSTYPE_N_SUPERCLASSES,
	CLASSTYPE_N_BASECLASSES, CLASSTYPE_MAX_DEPTH,
	CLASSTYPE_BASE_INIT_LIST, CLASSTYPE_AS_LIST, CLASSTYPE_ID_AS_LIST,
	CLASSTYPE_BINFO_AS_LIST): Remove cruft.
	* class.c, lex.c, parse.y, ptree.c, search.c, semantics.c,
	tree.c: Adjust.

From-SVN: r26071
1999-03-30 18:30:32 -05:00
Martin v. Löwis
0db982bee5 semantics.c (finish_switch_cond): Handle error cases gracefully.
* semantics.c (finish_switch_cond): Handle error cases gracefully.
        Detected by g++.law/enum5.C
        * typeck.c (build_modify_expr): Check for errors after resolving
        offsets. Detected by g++.brendan/static1.C
        * decl.c (complete_array_type): Ignore initial_value if it is an
        error. Detected by g++.benjamin/17930.C
        * typeck2.c (process_init_constructor): Return error if one argument
        is in error. Detected by g++.benjamin/13478.C

From-SVN: r25740
1999-03-13 01:16:36 +00:00
Mark Mitchell
b7975aedf6 semantics.c (begin_class_definition): Call build_self_reference.
* semantics.c (begin_class_definition): Call build_self_reference.
	(finish_member_declaration): Set DECL_CONTEXT for TYPE_DECLs.

From-SVN: r25672
1999-03-10 17:58:08 +00:00
Nathan Sidwell
6654316990 typeck.c (complete_type_or_else): Add VALUE arg, for helpful diagnostics.
* typeck.c (complete_type_or_else): Add VALUE arg, for helpful
	diagnostics.
	cp-tree.h (complete_type_or_else): Added VALUE parameter.
	* init.c (build_new_1): Extra arg to complete_type_or_else.
	(build_delete): Likewise.
	* typeck.c (require_complete_type): Likewise.
	(pointer_int_sum): Likewise.
	(pointer_diff): Likewise.
	(build_component_ref): Likewise.
	* typeck2.c (incomplete_type_error): Always use cp_error.
	Show declaration of undefined type, if appropriate.
	Deal with UNKNOWN_TYPE nodes.
	* typeck.c (require_complete_type): Use TYPE_SIZE as
	size_zero_node to mean incomplete type.
	(require_complete_type_in_void): New function.
	(build_compound_expr): Call complete_type_in_void for LHS.
	(build_c_cast): Call complete_type_in_void for void cast.
	* cvt.c (ocp_convert): Call complete_type_in_void for void cast.
	* decl.c (cplus_expand_expr_stmt): Void expression checks moved to
	require_complete_type_in_void. Call it.
	* cp-tree.h (require_complete_type_in_void): Prototype new function.
	* typeck.c (convert_arguments): Use alternative format for function
	decls. Don't require_complete_type here. Simplify diagnostic printing.
	(convert_for_initialization): Don't require_complete_type on RHS yet.
	* call.c (convert_arg_to_ellipsis): Call require_complete_type.
	* call.c (build_over_call): Cope with qualified void return type.
	* semantics.c (finish_call_expr): Likewise
	* typeck.c (build_function_call_real): Likewise
	(c_expand_return): Likewise
	* decl2.c (reparse_absdcl_as_expr): Cope with qualified void type.
	* call.c (print_z_candidates): Use alternate print format, to be
	consistant with (pt.c) print_candidates.
	method.c (hack_identifier): List candidate members.
	search.c (lookup_field): Build ambiguous list, and show it, if
	ambiguous.

From-SVN: r25474
1999-02-26 18:37:04 -05:00
Mark Mitchell
61cd552e3b error.c (dump_function_decl): Don't print the argument types for a function when the verbosity level is negative.
* error.c (dump_function_decl): Don't print the argument types for
	a function when the verbosity level is negative.
	* call.c (build_over_call): Check format attributes at call-time.
	* pt.c (tsubst_copy): Fix comment.
	(unify): Don't allow unification with variable-sized arrays.
	* semantics.c (finish_stmt_expr): When processing a template make
	the BIND_EXPR long-lived.

From-SVN: r24788
1999-01-20 13:11:59 +00:00
Jason Merrill
ad236eab58 re PR other/18132 (Problem compiling gcc 3.4.2)
* semantics.c (finish_asm_stmt): Don't warn about redundant volatile.
PR 18132
	* decl2.c (import_export_class): MULTIPLE_SYMBOL_SPACES only means
	that we don't suppress the other copies.
	* lex.c (handle_cp_pragma): Likewise.
PR 18627

From-SVN: r24662
1999-01-14 05:42:12 -05:00
Mark Mitchell
4c57111494 cp-tree.h (IDENTIFIER_TYPENAME_P): Use OPERATOR_TYPENAME_FORMAT here.
* cp-tree.h (IDENTIFIER_TYPENAME_P): Use OPERATOR_TYPENAME_FORMAT
	here.
	(lang_type): Add is_partial_instantiation.  Decrease width of
	dummy.
	(PARTIAL_INSTANTIATION_P): New macro.
	(OPERATOR_TYPENAME_P): Remove.
	* decl.c (unary_op_p): Use IDENTIFIER_TYPENAME_P, not
	OPERATOR_TYPENAME_P.
	(grok_op_properties): Likewise.
	* friend.c (do_friend): Handle friends that are member functions
	correctly.
	* lex.c (init_parse): Use OPERATOR_TYPENAME_FORMAT.
	* pt.c (instantiate_class_template): Rework for clarity.  Avoid
	leaving TYPE_BEING_DEFINED set in obscure cases.  Don't do
	any more partial instantiation than is absolutely necessary for
	implicit typename.  Set PARTIAL_INSTANTIATION_P.
	(tsubst_decl): Use IDENTIFIER_TYPENAME_P.
	* semantics.c (begin_class_definition): Handle partial
	specializations of a type that was previously partially
	instantiated.

From-SVN: r24548
1999-01-06 23:38:05 +00:00
Jason Merrill
ff350acdf9 semantics.c (begin_class_definition): Call maybe_process_partial_specialization before push_template_decl.
* semantics.c (begin_class_definition): Call
	maybe_process_partial_specialization before push_template_decl.
	Don't call push_template_decl for a specialization.
	* search.c (lookup_field): Do return a member template class.
	* decl2.c (handle_class_head): Handle member template classes.
	* decl.c (grokdeclarator): A parm type need not be complete.
	* pt.c (convert_nontype_argument): Fix thinko.

From-SVN: r23705
1998-11-18 21:35:15 -05:00
Mark Mitchell
7ddedda4aa cp-tree.h (TYPE_ALIAS_SET): Document language-dependent uses.
* cp-tree.h (TYPE_ALIAS_SET): Document language-dependent uses.
	(TYPE_BINFO): Likewise.
	(IS_AGGR_TYPE): Tweak.
	(SET_IS_AGGR_TYPE): New macro.
	(CLASS_TYPE_P): Tweak.
	(lang_type): Group mark bitfields together.  Remove linenum.
	(CLASSTYPE_SOURCE_LINE): Remove macro.
	(CLASSTYPE_MARKED_N): New macro.
	(SET_CLASSTYPE_MARKED_N): Likewise.
	(CLEAR_CLASSTYPE_MARKED_N): Likewise.
	(CLASS_TYPE_MARKED_*): Use them.
	(SET_CLASSTYPE_MARKED_*): Likewise.
	(CLEAR_CLASSTYPE_MARKED_*): Likewise.
	(TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO): Likewise.
	(TYPE_TEMPLATE_INFO): Handle TEMPLATE_TEMPLATE_PARMs as well.
	(TYPENAME_TYPE_FULLNAME): Use TYPE_BINFO rather than CLASSTYPE_SIZE.
	* class.c (class_cache_obstack): New variable.
	(class_cache_firstobj): Likewise.
	(finish_struct): Don't set CLASSTYPE_SOURCE_LINE.
	(pushclass): Free the cache, when appropriate.
	(popclass): Tidy.
	(maybe_push_cache_obstack): Use class_cache_obstack.
	* decl.c (include hash.h).
	(typename_hash): New function.
	(typename_compare): Likewise.
	(build_typename_type): Check the hash table to avoid creating
	duplicates.
	(build_ptrmemfunc_type): Use SET_IS_AGGR_TYPE.
	(grokdeclarator): Use CLASS_TYPE_P.
	(xref_basetypes): Likewise.
	(start_function): Likewise.  Don't put current_class_ref on the
	permanent obstack.
	* error.c (dump_type_real): Use	TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO
	and TYPE_TI_ARGS.
	* lex.c (note_got_semicolon): Use CLASS_TYPE_P.
	(make_lang_type): Don't create TYPE_LANG_SPECIFIC and associated
	fields for types other than class types.  Do clear TYPE_ALIAS_SET
	for types other than class types, though.
	* method.c (build_overload_identifier): Use CLASS_TYPE_P and
	TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
	* pt.c (process_template_parm): Don't set
	CLASSTYPE_GOT_SEMICOLON.
	(lookup_template_class) Use TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
	Coerce arguments on the momentary obstack.
	(for_each_template_parm): Use TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
	(instantiate_class_template): Calculate template arguments on the
	momentary obstack.  Tidy.
	(tsubst_template_arg_vector): Use make_temp_vec.
	(tsubst_aggr_type): Put template arguments on the momentary
	obstack.
	(tsubst_decl): Likewise.
	(tsubst): Copy the array bounds index to the permanent obstack
	before building index types.  Use new macros.
	(unify): Use new macros.
	(do_type_instantiation): Likewise.
	* search.c (lookup_fnfields_1): Use new macros.
	(dfs_pushdecls): Build envelopes on the cache obstack.
	(dfs_compress_decls): Use new macros.
	(push_class_decls): Build on the cache obstack.
	* semantics.c (finish_typeof): Don't set CLASSTYPE_GOT_SEMICOLON.
	* sign.c (build_signature_pointer_or_reference_type): Use
	SET_IS_AGGR_TYPE.
	* tree.c (make_binfo): Check CLASS_TYPE_P.
	(copy_template_template_parm): Adjust.
	(make_temp_vec): Use push_expresion_obstack.
	* typeck.c (complete_type): Use new macros.
	(comptypes): Likewise.

From-SVN: r23686
1998-11-17 12:51:20 +00:00
Jason Merrill
b894fc0596 cp-tree.def (TYPEOF_TYPE): New code.
* cp-tree.def (TYPEOF_TYPE): New code.
	* error.c (dump_type_real): Handle it.
	* pt.c (tsubst): Likewise.
	* tree.c (search_tree): Likewise.
	* semantics.c (finish_typeof): New fn.
	* parse.y (typespec): Use it.
	* cp-tree.h: Declare it.

From-SVN: r23343
1998-10-25 21:07:50 -05:00
Anthony Green
6e9438cf7c semantics.c (finish_asm_stmt): Revert my 1998-09-28 change.
* semantics.c (finish_asm_stmt): Revert my 1998-09-28
	change.

From-SVN: r22924
1998-10-08 16:04:13 +00:00
Mark Mitchell
61a127b3d1 cp-tree.def (PTRMEM_CST): New tree node.
* cp-tree.def (PTRMEM_CST): New tree node.
	* cp-tree.h (ptrmem_cst): New type.
	(lang_type): Remove local_typedecls.
	(dummy): Increase to 12 bits from 11.
	(CLASSTYPE_LOCAL_TYPEDECLS): Remove.
	(PTRMEM_CST_CLASS): New macro.
	(PTRMEM_CST_MEMBER): Likewise.
	(current_access_specifier): New variable.
	(current_class_type): Remove duplicate declaration.
	(finish_struct): Change prototype.
	(unreverse_member_declarations): New function.
	(pushdecl_class_level): Change prototype.
	(grok_enum_decls): Remove.
	(fixup_anonymous_union): New function.
	(grok_x_components): Change prototype.
	(tsubst_chain): Remove.
	(finish_member_template_decl): Likewise.
	(check_explicit_specialization): Fix indentation.
	(finish_class_definition): Change prototype.
	(finish_member_class_template): Likewise.
	(finish_member_declaration): New function.
	(check_multiple_declarators): Likewise.
	* class.c (class_stack_node_t): New type.
	(current_class_base): Remove.
	(current_class_stack): Change type.
	(current_access_specifier): New variable.
	(grow_method): Remove.
	(check_member_decl_is_same_in_complete_scope): Break out from
	finish_struct.
	(make_method_vec): New function.
	(free_method_vec): Likewise.
	(add_implicitly_declared_members): Break out from finish_struct_1.
	(free_method_vecs): New variable.
	(add_method): Rework for direct use from parser.
	(handle_using_decl): Watch for NULL_TREE while iterating through
	CLASSTYPE_METHOD_VEC.
	(finish_struct_methods): Don't build CLASSTYPE_METHOD_VEC here;
	just do some error-checking.
	(warn_hidden): Change iteration through CLASSTYPE_METHOD_VEC.
	(finish_struct_1): Simplify.  Use add_implicitly_declared_members.
	(finish_struct): Change prototype.  Simplify; fields and methods
	are already set up at this point.
	(init_class_processing): Set up current_class_stack.
	(pushclass): Save current_access_specifier.
	(popclass): Restore it.
	(currently_open_class): Simplify.
	(build_self_reference): Remove use of CLASSTYPE_LOCAL_TYPEDECLS.
	* decl.c (saved_scope): Add access_specifier.
	(maybe_push_to_top_level): Save it.
	(pop_from_top_level): Restore it.
	(maybe_process_template_type_declaration): Use
	finish_member_declaration.
	(pushtag): Likewise.
	(pushdecl_class_level): Don't return a value.
	(fixup_anonymous_union): Break out from grok_x_components.
	(shadow_tag): Use it.
	(xref_tag): Complain about using an elaborated type specifier to
	reference a template type parameter or typedef name.
	(xref_basetypes): Don't set CLASSTYPE_LOCAL_TYPEDECLS.
	(current_local_enum): Remove.
	(build_enumerator): Call finish_member_declaration.
	(grok_enum_decls): Remove.
	* decl2.c (grok_x_components): Simplify.
	(check_classfn): Change iteration through CLASSTYPE_METHOD_VEC.
	(grokfield): Don't set CLASSTYPE_LOCAL_TYPEDECLS.
	(merge_functions): Add to comment.
	(arg_assoc_type): Prototype.
	(arg_assoc): Pass as many arguments as there are parameters.
	* error.c (dump_expr): Handle PTRMEM_CST.  Improve handling of
	OFFSET_REF.
	* expr.c (cpls_expand_expr): Remove dead code.  Handle
	PTRMEM_CST.
	* friend.c (do_friend): Lookup friends when in nested classes.
	Change comments.
	* init.c (build_offset_ref): Do lookup even for classes that are
	only partially defined.
	(decl_constant_value): Remove dead code.
	* method.c (build_overload_value): Remove hack where by TYPE was
	not a TYPE.  Handle PTRMEM_CST.
	(build_template_parm_names): Don't pass a PARM_DECL where a TYPE
	should go.
	* parse.y (components, notype_components, component_decl,
	component_decl_1, component_declarator, component_declarator0):
	Now all are itype rather than ttype.  Rework to add members to
	classes on the fly.
	(typesqpecqual_reserved): Use check_multiple_declarators.
	(structsp): Update class to finish_class_definition.
	(do_xref_defn): Unsplit into named_class_head.
	(access_specifier): Set current_access_specifier.
	* pt.c (set_current_access_from_decl): New function.
	(finish_member_template_decl): Don't take the parameters.
	(comp_template_args): Make more robust.
	(lookup_template_class): Don't use current_local_enum.
	(for_each_template_parm): Handle PTRMEM_CST.
	(instantiate_class_template): Use set_current_access_from_decl,
	finish_member_declaration and unreverse_member_declarations.  Set
	lineno/input_filename before generating implicit member functions.
	(type_unification_real): Don't assume back-unification happens
	only for the last argument.
	(regenerate_decl_from_template): Call pushclass a bit earlier.
	(tsubst_chain): Remove.
	(tsubst_enum): Use set_current_access_from_decl.
	(set_mangled_name_for_template_decl): Fix indentation.
	* search.c (lookup_fnfields_1): Change iteration through
	CLASSTYPE_METHOD_VEC.
	(dfs_pushdecls): Likewise.
	(dfs_compress_decls): Likewise.
	(add_conversions): Likewise.
	* semantics.c (finish_class_definition): Don't take components.
	Change call to finish_struct.
	(finish_member_declaration): New function.
	(finish_member_class_template): Don't take template parameters.
	Change call to grok_x_components.  Call finish_member_template_decl.
	(check_multiple_declarators): New function.
	* sig.c (append_signature_fields): Work from the TYPE_METHODS, not
	a passed in fieldlist.
	* tree.c (search_tree): Handle PTRMEM_CST.
	(mapcar): Likewise.
	* typeck.c (unary_complex_lvalue): Build PTRMEM_CSTs, not
	INTEGER_CSTs, for pointer-to-data members.

From-SVN: r22869
1998-10-06 14:20:30 +00:00
Anthony Green
a64c757e99 * semantics.c (finish_asm_stmt): Always permit volatile asms.
From-SVN: r22632
1998-09-28 20:23:27 +00:00
Jason Merrill
8251199e44 revert error reporting patch
From-SVN: r22310
1998-09-07 10:25:35 -04:00
Mark Mitchell
d41fbd2cb8 cp-error.def: New file.
* cp-error.def: New file.
	* Make-lang.in (cc1plus): Add dependency on it.
	* Makefile.in (CXX_TREE_H): Likewise.
	* cp-tree.h (error_code): New type.
	Include cp-error.def to get error codes.  Make it possible to
	include cp-tree.h in errfn.c.
	(enable_warning): New function.
	(flag_diag_codes): New variable.
	* errfn.c: Include cp-tree.h.
	(cp_err_msg): New type.  Include cp-error.def to define it.
	(err_msgs): New variable.
	(is_warning_enabled): New function.
	(cp_thing): Take an error_code, not a format string.  Output the
	diagnostic code if flag_diag_codes.
	(cp_error, cp_compiler_error, cp_sprintf, cp_error_at): Take
	error_codes, not format strings.
	(cp_warning, cp_pedwarn, cp_warning_at, cp_pedwarn_at): Likewise.
	Call is_warning_enabled.
	* decl2.c (flag_diag_codes): New variable.
	(lang_decode_option): Handle -fdiag-codes and -Wnumber.
	* lang-options.h: Add -fdiag-codes, -fno-diag-codes, and
	-W-number-, and -Wno-number.
	* class.c: Update all calls to error-functions.
	* cvt.c: Likewise.
	* decl.c: Likewise.
	* decl2.c: Likewise.
	* except.c: Likewise.
	* expr.c: Likewise.
	* friend.c: Likewise.
	* lex.c: Likewise.
	* parse.y: Likewise.
	* pt.c: Likewise.
	* repo.c: Likewise.
	* rtti.c: Likewise.
	* search.c: Likewise.
	* semantics.c: Likewise.
	* sig.c: Likewise.
	* tree.c: Likewise.
	* typeck.c: Likewise.
	* typeck2.c: Likewise.
	* xref.c: Likewise.

From-SVN: r22304
1998-09-06 19:45:16 +00:00
Mark Mitchell
6c30752f09 cp-tree.h (TI_PENDING_SPECIALIZATION_FLAG): Remove.
* cp-tree.h (TI_PENDING_SPECIALIZATION_FLAG): Remove.
	* class.c (finish_struct): Remove hackery to deal with explicit
	specializations in class scope.
	* decl.c (grokfndecl): Improve error-recovery.
	* decl2.c (grokfield): Likewise.
	* pt.c (check_specialization_scope): New function.
	(begin_specialization): Call it.
	(process_partial_specialization): New function, split out from
	push_template_decl.  Check partial specializations more
	stringently.
	(push_template_decl): Call it.
	(check_explicit_specialization): Don't attempt to handle explicit
	specializations in class scope.
	(template_parm_data): Document.  Add current_arg and
	arg_uses_template_parms.
	(mark_template_parm): Set it.
	(tsubst_arg_types): Remove unused variable.
	* semantics.c (begin_class_definition): Tweak.

From-SVN: r22271
1998-09-05 20:14:21 +00:00
Mark Mitchell
75d587eb19 cp-tree.h (finish_globally_qualified_member_call_expr): Rename to ...
* cp-tree.h (finish_globally_qualified_member_call_expr):
	Rename to ...
	(finish_qualified_call_expr).
	* semantics.c: Likewise.
	* parse.y (primary): Use it.
	* method.c (hack_identifier): Remove redundant code.
	* init.c (resolve_offset_ref): Call convert_from_reference to
 	handle members of reference type.  Improve error recovery.

From-SVN: r22222
1998-09-03 19:42:09 +00:00
Jason Merrill
830fcda8e7 decl.c (lookup_name_real): Also do implicit typename thing for artificial TYPE_DECLs.
* decl.c (lookup_name_real): Also do implicit typename thing for
	artificial TYPE_DECLs.
	* search.c (lookup_field): Likewise.
	(lookup_fnfields, lookup_field): Adjust for implicit typename kludge.
	* semantics.c (begin_constructor_declarator): Use enter_scope_of.
	(enter_scope_of): Extract type from implicit typename.
	(begin_class_definition): Likewise.
	* lex.c (identifier_type): Handle implicit typename when checking
	for SELFNAME.
	* cp-tree.h: Declare flag_strict_prototype.
	* lex.c (do_scoped_id, do_identifier): Don't implicitly_declare if
	-fstrict-prototype.
	* decl.c (init_decl_processing): If -f{no,-}strict-prototype wasn't
	specified, set it to the value of pedantic.

From-SVN: r22158
1998-09-01 07:51:41 -04:00
Mark Mitchell
ea6021e832 cp-tree.h (finish_base_specifier): New function.
* cp-tree.h (finish_base_specifier): New function.
	* parse.y (base_class): Use it.
	* semantics.c (finish_base_specifier): Define it.
	* parse.y (structsp): Warn on use of typename outside of template
	declarations.

From-SVN: r22055
1998-08-28 12:06:56 +00:00
Jason Merrill
56ae6d7780 lex.c (handle_cp_pragma): Remove #pragma vtable.
* lex.c (handle_cp_pragma): Remove #pragma vtable.
	* lang-options.h: Remove +e options.
	* decl2.c (lang_decode_option): Likewise.
	(import_export_vtable): Don't check write_virtuals.
	(finish_vtable_vardecl, finish_file): Likewise.
	* search.c (dfs_debug_mark): Likewise.
	* semantics.c (begin_class_definition): Likewise.
	* class.c (build_vtable, finish_vtbls, finish_struct_1): Likewise.
	* call.c (build_over_call): Check flag_elide_constructors.
	* decl2.c: flag_elide_constructors defaults to 1.
	* typeck.c (convert_arguments): Remove return_loc parm.
	(build_function_call_real): Adjust.

From-SVN: r22027
1998-08-27 15:03:59 -04:00
Mark Mitchell
648f19f647 cp-tree.h (enter_scope_of): New function.
* cp-tree.h (enter_scope_of): New function.
	* parse.y (complex_direct_notype_declarator): Use it.
	* semantics.c (enter_scope_of): New function.

From-SVN: r21812
1998-08-17 22:33:58 +00:00
Mark Mitchell
39c01e4c53 cp-tree.h (PROCESSING_REAL_TEMPLATE_DECL_P): New macro.
1998-07-31  Mark Mitchell  <mark@markmitchell.com>
	* cp-tree.h (PROCESSING_REAL_TEMPLATE_DECL_P): New macro.
	(maybe_check_template_type): New function.
	* decl.c (maybe_process_template_type_declaration): New function,
	split out from pushtag  Call maybe_check_template_type.
	(pushtag): Use it.  Use PROCESSING_REAL_TEMPLATE_DECL_P.
	(xref_tag): Use PROCESSING_REAL_TEMPLATE_DECL_P.
	* friend.c (do_friend): Use PROCESSING_REAL_TEMPLATE_DECL_P.
	* pt.c (template_class_depth_real): Generalization of ...
	(template_class_depth): Use it.
	(register_specialization): Use duplicate_decls for duplicate
	declarations of specializations.
	(maybe_check_template_type): New function.
	(push_template_decl_real): Fix comment.
	(convert_nontype_argument): Likewise.
	(lookup_template_class): Likewise.  Avoid an infinite loop on
	erroneous code.
	(tsubst_friend_function): Fix comment.
	(tsubst, case FUNCTION_DECL): Deal with a DECL_TI_TEMPLATE that is
	an IDENTIFIER_NODE.
	* semantics.c (begin_function_definition): Use
	reset_specialization to note that template headers don't apply
	directly to declarations after the opening curly for a function.

From-SVN: r21505
1998-07-31 15:01:21 +00:00
Mark Mitchell
36a117a5b3 cp-tree.h (TI_USES_TEMPLATE_PARMS): Remove.
* cp-tree.h (TI_USES_TEMPLATE_PARMS): Remove.
	(build_template_decl_overload): Remove.
	(set_mangled_name_for_decl): New function.
	(innermost_args): Remove is_spec parameter.
	(most_specialized, most_specialized_class): Remove declarations.
	(lookup_template_class): Add entering_scope parameter.
	(maybe_process_partial_specialization): New function.
	(finish_template_decl): Likewise.
	(finish_template_type): Likewise.
	* class.c (finish_struct): Clean up processing of member template
	specializations.
	* decl.c (pushtag): Fix	formatting.
	(lookup_tag): Improve handling of pseudo-global levels.
	(make_typename_type): Adjust call to lookup_template_class.
	(shadow_tag): Use maybe_process_partial_specialization.
	(xref_tag): Improve handling of member friends.
	(start_function): Call push_nested_class before
	push_template_decl.  Don't call push_template_decl for
	specializations.
	* decl2.c (grok_x_components): Don't call xref_tag for
	template instantiations.  Handle UNION_TYPEs like RECORD_TYPEs.
	(grokclassfn): Use set_mangled_name_for_decl.
	(arg_assoc_class): Adjust call to innermost_args.
	(mark_used): Don't call instantiate_decl for a TEMPLATE_DECL.
	* error.c (dump_function_name): Improve printing of template
	function names.
	* friend.c (is_friend): Don't compare types of decls to determine
	friendship, unless flag_guiding_decls.
	(make_friend_class): Partial specializations cannot be friends.
	(do_friend): Use set_mangled_name_for_decl.  Call
	push_template_decl_real instead of push_template_decl.
	* method.c (build_decl_overload_real): Remove prototype.  Give it
	external linkage.
	(build_overload_identififer): Adjust call to innermost_args.
	(build_template_decl_overload): Remove.
	(set_mangled_name_for_decl): New function.
	* parse.y (.finish_template_type): New non-terminal.
	(template_def): Use finish_template_decl.  Use template_extdef
	instead of extdef.
	(template_extdef, template_datadef): New non-terminals, containing
	only those rules for things which can be templates.
	(datadef): Tidy.
	(template_type, self_template_type): Use .finish_template_type.
	(named_class_head): Use maybe_process_partial_specialization.
	* pt.c (mangle_class_name_for_template): Remove context parameter.
	(get_class_bindings): Remove outer_args parameter.
	(complete_template_args): Remove.
	(add_outermost_template_args): New function.
	(register_specialization): Return the specialization.
	(unregister_specialization): New function.
	(tsubst_template_parms): Likewise.
	(most_specialized, most_specialized_class): Prototype here as
	static.
	(original_template): Rename to most_general_template.
	(tsubst_template_parms): New function.
	(set_mangled_name_for_template_decl): Likewise.
	(TMPL_ARGS_DEPTH): New macro.
	(TMPL_ARGS_HAVE_MULTIPLE_LEVELS): Adjust.
	(TMPL_ARGS_LEVEL): New macro.
	(SET_TMPL_ARGS_LEVEL): Likewise.
	(TMPL_ARG): Likewise.
	(SET_TMPL_ARG): Likewise.
	(TMPL_ARGS_DEPTH): Likewise.
	(finish_member_template_decl): Use finish_template_decl.
	(maybe_process_partial_specialization): New function, split out
	from tsubst.
	(inline_needs_template_parms): Use TMPL_PARMS_DEPTH.
	(maybe_begin_member_template_processing): Use new macros.
	(is_member_template): Likewise.
	(is_member_template_class): Likewise.
	(add_to_template_args): Likewise.  Deal with multiple levels of
	args.
	(maybe_process_partial_specialization): New function.
	(retrieve_specialization): Add consistency check.
	(determine_specialization): Return full argument list.
	(check_explicit_specialization): Tweak friend handling.  Use full
	argument lists.  Simplify.
	(current_template_args): Use new macros.
	(push_template_decl_real): Change ill-named mainargs to specargs.
	Check that a partial specialization actually specializes at least
	one parameter.   Improve friend handling.  Modify for full
	template arguments.
	(classtype_mangled_name): Don't mangle the names of
	specializations.
	(lookup_template_class): Add entering_scope parameter.  Use it to
	avoid finding a template type when an instantiation is required.
	Simplify.  Use full template arguments.
	(tsubst_friend_function): Use unregister_specialization.  Use new
	macros.  Use full template arguments.
	(tsubst_friend_class): Substitute, using tsubst_template_parms,
	into the template parameters before passing them to
	redeclare_class_template.
	(instantiate_class_template): Simplify.  Use full template
	arguments.  Adjust calls to get_class_bindings.  Use
	SET_IDENTIFIER_TYPE_VALUE where needed.  Improve friend handling.
	(innermost_args): Use new macros.
	(tsubst_aggr_type): New function, split out from tsubst.
	(tsubst): Use tsubst_aggr_type, tsubst_template_parms, new calling
	conventions for lookup_tmeplate_class.  Refine handling of partial
	instantiations.   Remove calls to complete_template_args.
	Simplify.  Add consistency checks.  Use set_mangled_name_for_decl
	and set_mangled_name_for_template_decl.
	(tsubst_copy): Use tsubst_aggr_type.
	(instantiate_template): Use full template arguments.
	(more_specialized): Improve formatting.
	(more_specialized_class): Adjust calls to get_class_bindings.
	(get_bindings_real): Don't call complete_template_args.
	(most_specialized): Don't overwrite input; create a new list.
	(most_specialized_class): Use most_general_template.
	(regenerate_decl_from_template): Use unregister_specialization.
	Use full template arguments.
	(instantiate_decl): Use full template arguments.
	(set_mangled_name_for_template_decl): New function.
	* semantics.c (begin_class_definition): Use
	maybe_process_partial_specialization.
	(finish_member_class_template): New function.
	(finish_template_decl): Likewise.
	(finish_template_type): Likewise.
	(typeck.c): Don't crash after issuing a compiler_error.
	* Makefile.in (CONFLICTS): Adjust; we removed a s/r conflict.

From-SVN: r21433
1998-07-28 01:03:16 +00:00
Jason Merrill
e13a41239f lex.c (do_identifier): Look for class value even if we don't have a global value.
* lex.c (do_identifier): Look for class value even if we don't
	have a global value.  Do implicit declaration if parsing is 2.
	* semantics.c (finish_call_expr): Pass 2 if we're doing Koenig
	lookup.

From-SVN: r21291
1998-07-19 19:47:18 -04:00
Mark Mitchell
8014a339af semantics.c (finish_translation_unit): Fix spelling error in comment.
* semantics.c (finish_translation_unit): Fix spelling error in
	comment.

From-SVN: r21283
1998-07-19 17:52:17 +00:00
Jason Merrill
03d8299153 parse.y (primary): Use notype_unqualified_id instead of IDENTIFIER in Koenig lookup support rules.
* parse.y (primary): Use notype_unqualified_id instead of IDENTIFIER
	in Koenig lookup support rules.
	* semantics.c (finish_call_expr): Handle the new cases.
	* typeck.c (build_x_function_call): Handle overloaded methods.
	* decl.c (grokvardecl): Don't call build_static_name for extern "C".

From-SVN: r21245
1998-07-16 22:48:08 -04:00
Mark Mitchell
c68c56f727 semantics.c (finish_object_call_expr): Revert previous change.
1998-07-16  Mark Mitchell  <mark@markmitchell.com>
	* semantics.c (finish_object_call_expr): Revert previous change.
	* call.c (build_new_method_call): Likewise.  Instead, convert
	TYPE_DECLs to IDENTIFIERs here, in the presence of templates.

From-SVN: r21240
1998-07-16 23:38:43 +00:00
Mark Mitchell
52889bc818 semantics.c (finish_object_call_expr): Move test for the function called being a TYPE_DECL to ...
1998-07-16  Mark Mitchell  <mark@markmitchell.com>
	* semantics.c (finish_object_call_expr): Move test for the
	function called being a TYPE_DECL to ...
	* call.c (build_new_method_call): Here.

From-SVN: r21213
1998-07-16 11:46:44 +00:00
Martin v. Löwis
a759e627d7 decl2.c (build_expr_from_tree): Change calls of do_identifier.
* decl2.c (build_expr_from_tree): Change calls of do_identifier.
	Do Koenig lookup in CALL_EXPR.
	(arg_assoc): Handle error_mark.
	* lex.c (is_global): New function.
	(do_identifier): Expect arguments for Koenig lookup.
	* parse.y (primary): Add rules for calls of unqualified function calls.
	(do_id): Change call of do_identifier.
	* pt.c (finish_stmt_expr): Likewise.
	* semantics.c (finish_id_expr): Likewise.
	(finish_call_expr): Add integer parameter to indicate
	argument-dependent lookup.

From-SVN: r21091
1998-07-12 12:55:29 -04:00
Jason Merrill
dc8263bc05 decl.c (xref_tag): Handle attributes between 'class' and name.
* decl.c (xref_tag): Handle attributes between 'class' and name.
	* parse.y (aggr): Likewise.
	* semantics.c (finish_class_definition): Likewise.
	* Makefile.in (EXPECTED): Adjust.
	* cp-tree.h: Declare flag_optional_diags and warn_multichar.
	* decl2.c: Define them.
	(lang_decode_option): Handle them.
	* lang-options.h: Add -foptional-diags.
	* class.c (finish_struct): Don't complain about multiple meanings of
	name if -fno-optional-diags.
	* decl.c (pushdecl_class_level): Likewise.
	* lex.c (real_yylex): Check warn_multichar.

From-SVN: r20994
1998-07-07 07:25:01 -04:00
Andrew MacLeod
5816cb14dd Have -fnew-exceptions actually use the runtime field, and not generate runtime checking code inside each handler.
Have -fnew-exceptions actually use the runtime field, and not generate
runtime checking code inside each handler.
THis works at low opt, but not with optimization at the moment.
Tue Jun 23 10:06:07 EDT 1998  Andrew MacLeod  (amacleod@cygnus.com)
	* eh-common.h (struct __eh_info): Remove coerced value field.
	* libgcc2.c (find_exception_handler): Don't set coerced_value field.
	* except.c (get_dynamic_handler_chain, get_dynamic_cleanup_chain): Use
	POINTER_SIZE instead of Pmode.
	(expand_start_all_catch): Call start_catch_handler() if we are not
	using new style exceptions.
1998-06-22  Andrew MacLeod  (amacleod@cygnus.com)
	* parse.y (function_try_block): Don't call start_catch_handler.
	* except.c (call_eh_info): Remove coerced field from declaration.
	(build_eh_type_type_ref): New function to create an address of a
	rtti function for the new style exception tables.
	(expand_start_catch_block): Split function, this contains the
	common part.
	(process_start_catch_block_old): New function to perform the rest
	of expand_start_catch_block under old style exceptions.
	(process_start_catch_block_old): New function to perform the rest
	of expand_start_catch_block under new style exceptions.
	(expand_end_catch_block): Only pop the false label off the stack under
	the old style of exceptions.
	* semantics.c (finish_try_block): Don't call start_catch_handler.
	* exception.cc (struct cp_eh_info): Add original_value field.
	(__cplus_type_matcher): Perform type matching on the original exception
	value, and if we have a match, set the current value.
	(__cp_push_exception): Set the original expcetion value.

From-SVN: r20671
1998-06-23 07:10:29 +00:00
Andrew MacLeod
0d3453dfb6 Minor tweaks.
* except.c (expand_start_catch): Rename to start_catch_handler.
	(expand_end_catch): Delete function.
	(expand_end_all_catch): Remove catch status that expand_end_catch
	use to do.
	* except.h (expand_start_catch): Rename prototype.
	(expand_end_catch): Delete prototype.
	* semantics.c (finish_try_block): Rename expand_start_catch, and delete
	expand_end_catch.
	* parse.y (function_try_block): Rename expand_start_catch, and delete
	expand_end_catch.
	* except.c (expand_end_eh_spec): Rename expand_start_catch, and delete
	expand_end_catch.

From-SVN: r20379
1998-06-09 13:28:26 +00:00
Jason Merrill
a47855649e spew.c (yylex): Also return the TYPE_DECL if got_object.
* spew.c (yylex): Also return the TYPE_DECL if got_object.
	Don't clear got_object after '~'.
	* call.c (build_scoped_method_call): Tweak destructor handling.
	(build_method_call): Likewise.
	* pt.c (tsubst_copy, case METHOD_CALL_EXPR): Don't mess with
	TYPE_MAIN_VARIANT for destructors.
	* semantics.c (finish_object_call_expr): Complain about calling a
	TYPE_DECL.

From-SVN: r20256
1998-06-05 17:57:05 -04:00
Mark Mitchell
1dcf683ec2 parse.y (xcond): Move call to condition_conversion ...
1998-05-24  Mark Mitchell  <mark@markmitchell.com>
	* parse.y (xcond): Move call to condition_conversion ...
	* semantics.c (finish_for_cond): Here.
	* parse.c: Regenerated.

From-SVN: r20036
1998-05-24 23:52:17 +00:00
Mark Mitchell
35acd3f282 class.c (delete_duplicate_fields_1): Use DECL_DECLARES_TYPE_P to look for type declarations.
* class.c (delete_duplicate_fields_1): Use DECL_DECLARES_TYPE_P
	to look for type declarations.
	(finish_struct): Deal with templates on the CLASSTYPE_TAGS list.
	* cp-tree.h (DECL_DECLARES_TYPE_P): New macro.
	(finish_member_class_template): Declare.
	* decl.c (pushtag): Put member class templates on the
	CLASSTYPE_TAGS list, just as for ordinary member classes.
	(pushdecl_class_level): Use DECL_DECLARES_TYPE_P.
	(lookup_tag): Look for IDENTIFIER_CLASS_VALUEs, just as with
	IDENTIFIER_NAMESPACE_VALUEs.
	* parse.y (component_decl): Move code to ...
	* semantics.c (finish_member_class_template): New function.
	Don't put member class templates on the list of components for a
	class.
	* pt.c (classtype_mangled_name): Don't try DECL_CONTEXT on types.
	In fact, don't use DECL_CONTEXT at all here.

From-SVN: r19918
1998-05-20 23:28:21 +00:00
Andrew MacLeod
9a0d1e1b11 First cut of changes to utilize the new exception handling model
From-SVN: r19746
1998-05-14 13:39:15 +00:00
Mark Mitchell
ce4a03916c cp-tree.h (finish_unary_op_expr): New function.
* cp-tree.h (finish_unary_op_expr): New function.
	(finish_id_expr): Likewise.
	(begin_new_placement): Likewise.
	(finish_new_placement): Likewise.
	(finish_declarator): Likewise.
	(finish_translation_unit): Likewise.
	(finish_parmlist): Likewise.
	(begin_class_definition): Likewise.
	(finish_class_definition): Likewise.
	(finish_default_args): Likewise.
	(finish_inline_definitions): Likewise.
	* parse.y (GCC_ASM_KEYWORD): Remove.
	(TYPENAME_ELLIPSIS): Likewise.
	* parse.c: Regenerated.
	Use new functions in semantics.c in the actions for many rules.
	* gxx.gperf (GCC_ASM_KEYWORD): Just use ASM_KEYWORD.
	* hash.h: Regenerated.
	* semantics.c (finish_expr_stmt): Allow NULL expr.
	(finish_unary_op_expr): New function, containing
	code previously in parse.y.
	(finish_id_expr): Likewise.
	(begin_new_placement): Likewise.
	(finish_new_placement): Likewise.
	(finish_declarator): Likewise.
	(finish_translation_unit): Likewise.
	(finish_parmlist): Likewise.
	(begin_class_definition): Likewise.
	(finish_class_definition): Likewise.
	(finish_default_args): Likewise.
	(finish_inline_definitions): Likewise.

From-SVN: r19660
1998-05-11 00:07:25 +00:00
Robert Lipe
12027a8912 call.c, [...]: Add include of toplev.h.
Wed May  6 06:36:41 1998  Robert Lipe  <robertl@dgii.com>
        * call.c, class.c, decl.c, decl2.c, errfn.c, error.c, except.c,
        expr.c, friend.c, init.c, lex.c, method.c, pt.c, repo.c, rtti.c,
        search.c, semantics.c, sig.c, tree.c, typeck.c, typeck2.c,
        xref.c: Add include of toplev.h.

From-SVN: r19567
1998-05-06 05:05:11 +00:00
Mark Mitchell
b69b1501dc semantics.c (begin_stmt_expr): Avoid duplicating the effect of the expression in templates.
* semantics.c (begin_stmt_expr): Avoid duplicating the effect of
	the expression in templates.
	(finish_stmt_expr): Likewise.

From-SVN: r19469
1998-04-28 13:24:00 +00:00
Jeffrey A Law
8d052bc70c call.c: Include system.h.
* call.c: Include system.h.  Remove includes, declarations and
        defines provided by system.h.
        * class.c, cvt.c, decl.c, decl2.c, errfn.c error.c: Likewise.
        * except.c, expr.c friend.c, g++spec.c, init.c, input.c: Likewise.
        * lex.c, parse.y, pt.c, ptree.c repo.c rtti.c, search.c: Likewise.
        * semantics.c, sig.c, spew.c, tree.c, typeck.c: Likewise.
        * typeck2.c, xref.c: Likewise.
        * Makefile.in: Dependencies updated as appropriate.
        * Make-lang.in: Likewise.
system.h cutover from the cp subdir

From-SVN: r18917
1998-03-31 06:25:46 -07:00
Mark Mitchell
b4c4a9ecbe pt.c (tsubst): Clear TREE_USED for new FUNCTION_DECLs.
* pt.c (tsubst): Clear TREE_USED for new FUNCTION_DECLs.
	* pt.c (instantiate_class_template): Make sure template
	arguments are permanent.
	* init.c (resolve_offset_ref): Don't go looking around in
	template types.
	* semantics.c: Add routines to handle expressions, and some
	declaration processing.
	* parse.y: Use them.
	(current_class_depth): Move declaration to cp-tree.h.
	* parse.c: Regenerated.
	* cp-tree.h: Use them.
	(current_class_depth): Declare.
	* pt.c (tsubst_copy): Use begin_stmt_expr and finish_stmt_expr.

From-SVN: r18882
1998-03-28 17:47:07 +00:00
Jason Merrill
e6f1275f86 pt.c (complete_template_args): Rewrite.
* pt.c (complete_template_args): Rewrite.
	(tsubst, FUNCTION_DECL): Use it.
	* semantics.c (finish_asm_stmt): Fix combine strings. Call
	c_expand_asm_operands () if output_operands, input_operands or
	clobbers is not NULL_TREE.
	* pt.c (complete_template_args): New function.
	(get_bindings): Deal with specializations of function templates
	with return type containing parameters from outer class
	templates.
	(tsubst, TEMPLATE_TEMPLATE_PARM): When reducing parameter level,
	substitute arguments and compose a new type.

From-SVN: r18724
1998-03-20 05:44:06 -05:00
Mark Mitchell
ad32129310 semantics.c: New file, containing routines to perform the semantic phase of parsing.
* semantics.c: New file, containing routines to perform the
	semantic phase of parsing.
	* parse.y: Use it.
	* pt.c (tsubst_expr): Likewise.
	* cp-tree.h: Declare the various functions in semantics.c.
	Provide macros to access _STMT tree nodes.
	* cp-tree.def: Add ASM_STMT tree node.
	* Makefile.in, Make-lang.in: Add dependencies on and for
	semantics.c.

From-SVN: r18658
1998-03-18 10:52:04 +00:00