Commit Graph

1678 Commits

Author SHA1 Message Date
Jason Merrill
08272b8528 revert accidental checkin
From-SVN: r88302
2004-09-29 16:18:49 -04:00
Jason Merrill
5cefa0d95b re PR tree-optimization/17697 (ICE: Statement marked for throw, but doesn't - verify_stmts failed)
PR tree-optimization/17697
        * decl.c (duplicate_decls): Copy TREE_NOTHROW from newdecl to olddecl.

From-SVN: r88293
2004-09-29 14:16:34 -04:00
Mark Mitchell
455f19cb1c re PR c++/17642 (internal compiler error: in invert_truthvalue, at fold-const.c:2997)
PR c++/17642
	* stor-layout.c (layout_decl): Use fold_convert, not convert.
	(bit_from_pos): Likewise.
	(byte_from_pos): Likewise.
	(pos_from_bit): Likewise.
	(normalize_offset): Likewise.
	(place_field): Likewise.
	(finalize_type_size): Likewise.
	(layout_type): Likewise.
	* tree.c (build_index_type): Likewise.

	PR c++/17642
	* cp-tree.h (fold_if_not_in_template): New function.
	* call.c (build_conditional_expr): Use fold_if_not_in_template.
	(build_cxx_call): Likewise.
	* cvt.c (convert_to_complex): Likewise.
	(ocp_convert): Likewise.
	(convert): Likewise.
	(convert_force): Likewise.
	* decl.c (compute_array_index_type): Clear
	processing_template_decl while folding array bounds.
	* pt.c (convert_nontype_argument): Clear
	processing_template_decl while processing non-type argument
	initialization.
	* tree.c (fold_if_not_in_template): New function.
	* typeck.c (build_class_member_access_expr): Use
	fold_if_not_in_template.
	(build_array_ref): Likewise.
	(build_binary_op): Likewise.  Do not try to optimize computations
	when processing templates.
	(cp_pointer_int_sum): Use fold_if_not_in_template.
	(pointer_diff): Likewise.
	(build_unary_op): Likewise.
	(build_reinterpret_cast): Likewise.
	(get_delta_difference): Likewise.
	(expand_ptrmemfunc_cst): Likewise.
	(dubious_conversion_warnings): Likewise.

	* g++.dg/template/crash23.C: New test.

From-SVN: r88217
2004-09-28 02:56:11 +00:00
Zack Weinberg
2cfe82fe43 decl.c (grokfndecl): If ::main is found not to return int, correct it after issuing a diagnostic.
gcc/cp:
	* decl.c (grokfndecl): If ::main is found not to return int,
	correct it after issuing a diagnostic.
	(grokdeclarator): If the incoming type was error_mark_node, do
	not complain about declaring something with no type.
	(start_function): Change check for ::main not returning int to
	an assertion, as grokfndecl now catches this when the user did it.
	* init.c (perform_member_init, sort_mem_initializers)
	(emit_mem_initializers): Make most diagnostics be issued on
	the line of current_function_decl, not whatever the current
	input line is.
	* parser.c (cp_lexer_peek_token_emit_debug_info): Surround
	definition and declaration with #ifdef ENABLE_CHECKING.
	Avoid unnecessary use of fprintf.
	(cp_lexer_print_token, cp_lexer_debug_stream): Adjust stub
	definitions to avoid warnings.
	(cp_lexer_new_main): Add assertion that first token is not a
	padding token.
	(cp_lexer_new_from_token_array): Fold into ...
	(cp_lexer_new_from_tokens): ... here.  Add assertion that
	first token is not a padding token.
	(cp_lexer_set_source_position_from_token): Move nearer to callers.
	Remove unused lexer argument.
	(cp_lexer_peek_token): Just print debugging report (if enabled)
	and return lexer->next_token.
	(cp_lexer_skip_purged_tokens): Delete.
	(cp_lexer_next_token_is, cp_lexer_next_token_is_not): Make
	inline, simplify bodies.
	(cp_lexer_peek_nth_token): Add debugging report a la
	cp_lexer_peek_token.
	(cp_lexer_consume_token): Correct commentary.  Advance over
	purged tokens here.  Set current source position here, from
	token to be returned.  Avoid unnecessary use of fprintf.
	(cp_lexer_purge_token): Advance next_token pointer over this and
	subsequent purged tokens.
	(cp_parser_error): Adjust source position to that of the
	peeked token.
	(cp_parser_push_lexer_for_tokens, cp_parser_pop_lexer): New functions.
	(cp_parser_string_literal): Remove some excessive cleverness.
	(cp_parser_enum_specifier): Call start_enum before consuming
	the opening brace.
	(cp_parser_member_declaration): Make the "extra semicolon"
	diagnostic consistently-worded with the other place this is
	diagnosed.  Explicitly set the diagnostic location to the
	location of the offending semicolon.
	(cp_parser_enclosed_template_argument_list): Use %</%> quoting
	in diagnostics.  Do not use cp_parser_require.  Set location
	of diagnostics about improper use of '>>' to location of
	offending token.
	(cp_parser_late_parsing_for_member):
	Use cp_parser_push_lexer_for_tokens and cp_parser_pop_lexer.
	(cp_parser_late_parsing_default_args): Likewise.  Manually
	move some logic outside the loop.

gcc/testsuite:
	* g++.dg/ext/complit1.C
	* g++.dg/other/error2.C
	* g++.dg/other/nontype-1.C
	* g++.dg/parse/crash11.C
	* g++.dg/parse/crash12.C
	* g++.dg/parse/error15.C
	* g++.dg/parse/error4.C
	* g++.dg/parse/tmpl-outside1.C
	* g++.dg/parse/too-many-tmpl-args1.C
	* g++.dg/template/dependent-expr3.C
	* g++.dg/template/error10.C
	* g++.dg/template/instantiate1.C
	* g++.dg/template/vtable2.C
	* g++.dg/warn/Wshadow-1.C
	* g++.dg/warn/weak1.C
	* g++.old-deja/g++.brendan/crash16.C
	* g++.old-deja/g++.brendan/crash18.C
	* g++.old-deja/g++.brendan/crash48.C
	* g++.old-deja/g++.brendan/crash49.C
	* g++.old-deja/g++.brendan/crash55.C
	* g++.old-deja/g++.brendan/crash56.C
	* g++.old-deja/g++.brendan/crash8.C
	* g++.old-deja/g++.brendan/enum11.C
	* g++.old-deja/g++.brendan/enum8.C
	* g++.old-deja/g++.brendan/enum9.C
	* g++.old-deja/g++.brendan/friend3.C
	* g++.old-deja/g++.brendan/misc14.C
	* g++.old-deja/g++.bugs/900402_02.C
	* g++.old-deja/g++.bugs/900404_03.C
	* g++.old-deja/g++.bugs/900404_04.C
	* g++.old-deja/g++.bugs/900428_03.C
	* g++.old-deja/g++.jason/crash4.C
	* g++.old-deja/g++.jason/overload21.C
	* g++.old-deja/g++.jason/redecl1.C
	* g++.old-deja/g++.jason/report.C
	* g++.old-deja/g++.jason/rfg10.C
	* g++.old-deja/g++.jason/template30.C
	* g++.old-deja/g++.law/arm12.C
	* g++.old-deja/g++.law/ctors5.C
	* g++.old-deja/g++.law/cvt20.C
	* g++.old-deja/g++.law/init10.C
	* g++.old-deja/g++.law/init8.C
	* g++.old-deja/g++.law/visibility17.C
	* g++.old-deja/g++.law/visibility7.C
	* g++.old-deja/g++.mike/net8.C
	* g++.old-deja/g++.mike/p646.C
	* g++.old-deja/g++.mike/p700.C
	* g++.old-deja/g++.mike/p701.C
	* g++.old-deja/g++.mike/p811.C
	* g++.old-deja/g++.ns/template13.C
	* g++.old-deja/g++.other/array3.C
	* g++.old-deja/g++.other/crash25.C
	* g++.old-deja/g++.other/dtor3.C
	* g++.old-deja/g++.other/dtor4.C
	* g++.old-deja/g++.other/main1.C
	* g++.old-deja/g++.other/warn7.C
	* g++.old-deja/g++.pt/crash11.C
	* g++.old-deja/g++.pt/crash36.C
	* g++.old-deja/g++.pt/spec22.C
	* g++.old-deja/g++.pt/spec9.C
	* g++.old-deja/g++.pt/ttp52.C
	* g++.old-deja/g++.robertl/eb103.C
	* g++.old-deja/g++.robertl/eb121.C
	* g++.old-deja/g++.robertl/eb22.C
	* g++.old-deja/g++.robertl/eb8.C:
	Update locations and/or regexps of dg-error markers.
	Remove markers for some bogus messages that are no longer issued.

libstdc++-v3:
	* testsuite/20_util/memory/auto_ptr/assign_neg.cc
	* testsuite/23_containers/map/operators/1_neg.cc
	* testsuite/23_containers/set/operators/1_neg.cc:
	Update locations and/or regexps of dg-error markers.

From-SVN: r87985
2004-09-23 21:27:25 +00:00
Fariborz Jahanian
037cc9c5dc PR c++/9844, PR c++/13989
PR c++/9844, PR c++/13989
Reviewed by Mark Mitchel.

From-SVN: r87971
2004-09-23 18:22:25 +00:00
Nathan Sidwell
98d6e9afea re PR c++/17620 (Bogus error with duplicate base class breaks boost)
cp:
	PR c++/17620
	* decl.c (xref_basetypes): Look through typedefs before checking
	for duplicate base.
testsuite:
	PR c++/17620
	* g++.dg/inherit/base2.C: New.

From-SVN: r87938
2004-09-23 10:09:09 +00:00
Nathan Sidwell
3543e114c6 cp-tree.h (struct lang_type_class): Remove marked flags, add diamond_shaped and repeated_base flags.
* cp-tree.h (struct lang_type_class): Remove marked flags, add
	diamond_shaped and repeated_base flags.  Reorder to keep 8-bit blocks.
	(TYPE_MARKED_P): New.
	(CLASSTYPE_DIAMOND_SHAPED_P, CLASSTYPE_REPEATED_BASE_P): New.
	(CLASSTYPE_MARKED_N, SET_CLASSTYPE_MARKED_N,
	CLEAR_CLASSTYPE_MARKED_N): Remove.
	(CLASSTYPE_MARKED_*, SET_CLASSTYPE_MARKED_*,
	CLEAR_CLASSTYPE_MARKED_*): Remove.
	* decl.c (xref_basetypes): Use TYPE_MARKED_P. Determine diamond
	shaped and repeated base properties.
	* lex.c (cxx_make_type): Don't clear TYPE_ALIAS_SET.
	* rtti.c (dfs_class_hint_mark, dfs_class_hint_unmark,
	class_hint_flags): Remove.
	(get_pseudo_ti_init): Use CLASSTYPE_REPEATED_BASE_P and
	CLASSTYPE_DIAMOND_SHAPED_P.

From-SVN: r87853
2004-09-22 10:55:21 +00:00
Matt Austern
6bdb98d1b0 re PR c++/15049 ([DR 278/132/216/338/389/319] global variables with anonymous types are legal)
PR c++/15049
	* cp/decl.c (grokvardecl): Accept declarations of global variables
	using anonymous types.
	* testsuite/g++.dg/other/anon3.C: New.

From-SVN: r87814
2004-09-21 17:24:44 +00:00
Nathan Sidwell
5775a06aa6 cp-tree.h (struct lang_type_header): Remove uses_multiple_inheritance field.
* cp-tree.h (struct lang_type_header): Remove
	uses_multiple_inheritance field.
	(TYPE_USES_MULTIPLE_INHERITANCE): Remove.
	(TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P): Remove.
	(TYPE_USES_VIRTUAL_BASECLASSES): Remove.
	(DECL_NEEDS_VTT_PARM_P): Use CLASSTYPE_VBASECLASSES.
	(TYPE_CONTAINS_VPTR_P): Likewise.
	* call.c (add_template_candidate_real): Use
	CLASSTYPE_VBASECLASSES.
	(build_special_member_call): Likewise.
	* class.c (finish_struct_bits): Remove
	TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P & TYPE_USES_VIRTUAL_BASECLASSES
	bookkeeping.
	(check_bases_and_members): Use TYPE_CONTAINS_VPTR_P.
	(create_vtable_ptr): Remove TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P
	bookkeeping.
	(build_vtt_inits): Use CLASSTYPE_VBASECLASSES.
	(accumulate_vtbl_inits, build_vbase_offset_vtbl_entries):
	Likewise.
	* decl.c (xref_basetypes): Remove TYPE_USES_MULTIPLE_INHERITANCE,
	TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P, TYPE_USES_VIRTUAL_BASECLASSES
	bookkeeping.
	(cxx_maybe_build_cleanup): Use CLASSTYPE_VBASECLASSES.
	* decl2.c (maybe_retrofit_in_chrg): Likewise.
	* init.c (expand_member, push_base_cleanups): Likewise.
	* pt.c (instantiate_class_template): Remove
	TYPE_USES_MULTIPLE_INHERITANCE,
	TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P, TYPE_USES_VIRTUAL_BASECLASSES
	bookkeeping.
	* ptree.c (cxx_print_type): Remove TYPE_USES_MULTIPLE_INHERITANCE
	check.
	* typeck2.c (process_init_constructor): Replace some sorrys with
	asserts.

From-SVN: r87808
2004-09-21 15:39:00 +00:00
Andreas Tobler
b6ad178e2e decl.c (reshape_init_array): Initialize max_index_cst to fix bootstrap failure.
2004-09-21  Andreas Tobler  <a.tobler@schweiz.ch>

	* decl.c (reshape_init_array): Initialize max_index_cst to fix
	bootstrap failure.

From-SVN: r87798
2004-09-21 11:22:00 +02:00
Matt Austern
c162c75e43 c-common.c (fix_string_type): Build the unqualified array type unconditionally...
2004-09-20  Matt Austern <austern@apple.com>
	    Zack Weinberg  <zack@codesourcery.com>

	* c-common.c (fix_string_type): Build the unqualified array
	type unconditionally, then use c_build_qualified_type to get
	the proper const-qualified variant, and set its
	TYPE_MAIN_VARIANT to refer to the unqualified type.
	* c-lex.c (c_lex_return_raw_string): New global.
	(c_lex_with_flags): Honor it.
	* c-pragma.h: Declare it.

cp:
	* decl.c (make_rtl_for_nonlocal_decl, start_preparsed_function):
	Apply lbasename to input_filename before passing to get_fileinfo.
	* semantics.c (begin_class_definition): Likewise.
	* lex.c (handle_pragma_interface): Apply get_fileinfo to the
	correct filename.  Rename variables to be less confusing.
	(handle_pragma_implementation): Likewise.  Disable "appears
	after file is included" diagnostic.

	* parser.c (struct cp_token): Add in_system_header fiag.
	(CP_TOKEN_BLOCK_NUM_TOKENS, struct cp_token_block)
	(CP_TOKEN_BUFFER_SIZE, cp_token_cache_push_token)
	(CPP_NONE, cp_lexer_read_token): Delete.
	(struct cp_lexer): Remove first_token, string_tokens,
	main_lexer_p fields.  Clarify comments.
	(struct cp_token_cache): Now just a pair of pointers.
	(CP_LEXER_BUFFER_SIZE): New #define.
	(CPP_PURGED): New fake token type.
	(cp_lexer_new_from_token_array, cp_lexer_destroy)
	(cp_lexer_peek_token_emit_debug_info, cp_lexer_skip_purged_tokens)
	(cp_lexer_handle_pragma, cp_token_cache_new, cp_parser_string_literal):
	New functions.
	(cp_lexer_new_from_tokens): Now a simple wrapper around
	cp_lexer_new_from_token_array.
	(cp_lexer_set_source_position_from_token): Also update
	in_system_header.
	(cp_lexer_next_token, cp_lexer_prev_token, cp_lexer_advance_token):
	Don't wrap round.
	(cp_lexer_token_difference): Dont handle wrapping round.
	(cp_lexer_new_main): Enable pragma deferral and raw strings,
	read the entire translation unit through c_lex_with_flags into
	this lexer's buffer, then turn raw strings back off again.
	(cp_lexer_grow_buffer): Adjust for buffer no longer being circular.
	(cp_lexer_get_preprocessor_token): No need to handle not being
	the main lexer.  Set token->in_system_header too.
	(cp_lexer_peek_token): Skip purged tokens.  Feed pragma tokens
	to cp_lexer_handle_pragma.  No need to call cp_lexer_read_token.
	(cp_lexer_peek_nth_token): Likewise.
	(cp_lexer_purge_token): Mark the token PURGED, don't shift all
	the other tokens down.
	(cp_lexer_purge_tokens_after): Likewise.
	(cp_lexer_save_tokens, cp_lexer_rollback_tokens): Don't worry
	about there being no tokens.
	(cp_lexer_print_token): Revise to give useful information on
	all tokens.
	(struct cp_parser): Add field translate_strings_p.
	(cp_parser_new): Initialize it.
	(cp_parser_translation_unit): Destroy the lexer when done.
	(cp_parser_parameter_declaration): Restructure saving of
	default arguments.
	(cp_parser_save_member_function_body): Likewise.
	(cp_parser_check_for_invalid_template_id)
	(cp_parser_nested_name_specifier_opt, cp_parser_template_id):
	Adjust calls to cp_lexer_advance_token.
	(cp_parser_skip_to_closing_parenthesis, cp_parser_declaration):
	No need to fiddle c_lex_string_translate.
	(cp_parser_primary_expression, cp_parser_linkage_specification)
	(cp_parser_asm_definition, cp_parser_asm_specification_opt)
	(cp_parser_asm_operand_list, cp_parser_asm_clobber_list)
	Use cp_parser_string_literal.
	(cp_parser_attribute_list): Save and restore
	parser->translate_strings_p, not c_lex_string_translate.
	(cp_parser_cache_group): Delete.
	(cp_parser_cache_group_1): Rename cp_parser_cache_group.  Do
	not take a cache argument.

From-SVN: r87786
2004-09-21 02:22:45 +00:00
Giovanni Bajo
3d142be23b re PR c++/14179 (out of memory while parsing array with many initializers)
PR c++/14179
	* decl.c (reshape_init): Extract array handling into...
	(reshape_init_array): New function. Use integers instead of trees
	for indices. Handle out-of-range designated initializers.

From-SVN: r87777
2004-09-20 23:05:40 +00:00
Nathan Sidwell
585b44d301 cp-tree.h (struct lang_type_class): Make pure_virtuals a VEC(tree).
* cp-tree.h (struct lang_type_class): Make pure_virtuals a
	VEC(tree).
	(CLASSTYPE_INLINE_FRIENDS, CLASSTYPE_PURE_VIRTUALS): Update
	comments.
	* call.c (build_new_method_call): Don't confirm a pure virtual is
	in CLASSTYPE_PURE_VIRTUALS.  Reorder checks. Make it a warning.
	* class.c (check_methods): CLASSTYPE_INLINE_FRIENDS is a VEC(tree).
	(fixup_inline_methods, finish_struct): Likewise.
	* decl.c (finish_method): Likewise.
	* search.c (dfs_get_pure_virtuals, get_pure_virtuals):
	CLASSTYPE_PURE_VIRTUALS is a VEC(tree).
	* typeck2.c (abstract_virtuals_error): Likewise. Truncate the
	vector to avoid repeating the list in error messages.

From-SVN: r87592
2004-09-16 09:53:40 +00:00
Mark Mitchell
c18a5b6cad configure.ac: Check for COMDAT support.
* configure.ac: Check for COMDAT support.  Robustify check for
	SHF_MERGE support.
	* configure: Regenerated.
	* config.in: Likewise.
	* langhooks-def.h (lhd_comdat_group): New function.
	(LANG_HOOKS_COMDAT_GROUP): New macro.
	(LANG_HOOKS_DECLS): Use it.
	* langhooks.c (lhd_comdat_group): Define.
	* langhooks.h (lang_hooks_for_decls): Add comdat_group.
	* output.h (named_section_flags): Make it a macro.
	(named_section_real): New function.
	(default_no_named_section): Add decl parameter.
	(default_elf_asm_named_section): Likewise.
	(default_coff_asm_named_section): Likewise.
	(default_pe_asm_named_section): Likewise.
	* target.h (gcc_target): Adjust type of named_section.
	* varasm.c (named_section_flags): Rename to named_section_real.
	Add decl parameter.
	(default_no_named_section): Add decl parameter.
	(default_elf_asm_named_section): Use COMDAT, if available.  Deal
	with the case that ASM_COMMENT_START is "@".
	(default_coff_asm_named_section): Add decl parameter.
	(default_pe_asm_named_section): Likewise.
	* config/alpha/alpha.c (vms_asm_named_section): Add decl
	parameter.
	(unicosmk_asm_named_section): Likewise.
	* config/arm/arm.c (arm_elf_asm_named_section): Remove.
	* config/arm/elf.h (TARGET_ASM_NAMED_SECTION): Likewise.
	* config/c4x/c4x.c (c4x_asm_named_section): Add decl parameter.
	* config/cris/cris-protos.h (cris_target_asm_named_section):
	Likewise.
	* config/cris/cris.c (cris_target_asm_named_section):
	Likewise.
	* config/h8300/h8300.c (h8300_asm_named_section): Likewise.
	* config/i386/i386-protos.h (i386_pe_asm_named_section):
	Likewise.
	* config/i386/winnt.c (i386_pe_asm_named_section): Likewise.
	* config/m68k/m68k.c (m68k_coff_asm_named_section): Likewise.
	* config/mcore/mcore.c (mcore_asm_named_section): Likewise.
	* config/rs6000/rs6000.c (rs6000_xcoff_asm_named_section):
	Likewise.
	* config/sparc/sparc.c (sparce_elf_asm_named_section): Likewise.

	* cp-objcp-common.h (LANG_HOOKS_COMDAT_GROUP): Define.
	* cp-tree.h (cxx_comdat_group): Declare.
	* decl.c (cxx_comdat_group): New function.

From-SVN: r87557
2004-09-15 17:03:22 +00:00
Nathan Sidwell
16ae29f1e6 cp-tree.h (struct lang_decl_flags): Remove needs_final_overrider.
* cp-tree.h (struct lang_decl_flags): Remove
	needs_final_overrider.
	(DECL_NEEDS_FINAL_OVERRIDER_P): Remove.
	* decl.c (duplicate_decls): Do not copy DECL_NEEDS_FINAL_OVERRIDER_P.
	* class.c (finish_struct_bits): Correct comment about
	CLASSTYPE_PURE_VIRTUALS.
	* search.c (get_pure_virtuals): Remove useless loop.

From-SVN: r87541
2004-09-15 09:43:52 +00:00
Zack Weinberg
5d709b0013 c-common.h (struct c_fileinfo): Comment moved here from cp-tree.h.
* c-common.h (struct c_fileinfo): Comment moved here from cp-tree.h.
	(extract_interface_info): Delete prototype.
	* c-decl.c (extract_interface_info): Delete stub.
	* c-lex.c (get_fileinfo): Initialize file_info_tree here, if
	it's not already been done ...
	(init_c_lex): ... not here.
	(fe_file_change): Don't call extract_interface_info.
cp:
	* cp-tree.h (interface_only, interface_unknown): Delete declarations;
	comment explaining them moved to c-common.h.
	* lex.c (interface_only, interface_unknown, extract_interface_info):
	Delete definitions.
	(cxx_finish): Don't reset interface_unknown.
	(handle_pragma_interface): Don't set interface_only and
	interface_unknown; just the like-named fields in finfo.
	(handle_pragma_implementation): Adjust comment.
	* decl2.c (cp_finish_file): Don't reset interface_only and
	interface_unknown.
	* method.c (synthesize_method): Don't reset interface_unknown or
	call extract_interface_info.
	* pt.c (pop_tinst_level): Don't call extract_interface_info.
	* decl.c (start_cleanup_fn): Don't save or restore interface_only
	and interface_unknown.
	(make_rtl_for_nonlocal_decl): Call get_fileinfo on input_filename
	and use the result instead of the interface_only/interface_unknown
	globals.
	(start_preparsed_function): Likewise.
	* lex.c (cxx_make_type): Likewise.
	* semantics.c (begin_class_definition): Likewise.
	(expand_body): Don't call extract_interface_info.

From-SVN: r87329
2004-09-10 23:56:31 +00:00
Ziemowit Laski
f749f3c20d decl.c (objc_mark_locals_volatile): Make description of routine more descriptive...
[gcc/cp/ChangeLog]
2004-09-10  Ziemowit Laski  <zlaski@apple.com>

        * decl.c (objc_mark_locals_volatile): Make description of
        routine more descriptive; only mark VAR_DECLs at each
        binding level.

From-SVN: r87323
2004-09-10 22:11:48 +00:00
Ziemowit Laski
80aa8340eb decl.c (objc_get_current_scope, [...]): New functions, to be called from ObjC++.
[gcc/cp/ChangeLog]
2004-09-10  Ziemowit Laski  <zlaski@apple.com>

        * decl.c (objc_get_current_scope, objc_mark_locals_volatile):
        New functions, to be called from ObjC++.

From-SVN: r87321
2004-09-10 20:47:34 +00:00
Kazu Hirata
77880ae492 class.c, [...]: Fix comment typos.
* class.c, cp-tree.h, decl.c, decl2.c, mangle.c,
	name-lookup.h, parser.c, search.c, semantics.c, typeck2.c: Fix
	comment typos.

From-SVN: r87292
2004-09-10 11:12:15 +00:00
Zack Weinberg
ff4eb0b5ff decl.c (build_enumerator): Use add_double and int_fits_type_p instead of cp_build_binary_op...
cp:
	* decl.c (build_enumerator): Use add_double and int_fits_type_p
	instead of cp_build_binary_op, to avoid creating short-lived trees.
	* parser.c (cp_parse_type_specifier <RID_ENUM>): Use two-token
	lookahead instead of backtracking.  Move some code to avoid a
	conditional branch.
	(cp_parser_enum_specifier): Avoid duplication of effort with caller.
	Use cp_lexer_next_token_is/cp_lexer_next_token_is_not as appropriate.
	(cp_parser_enumerator_list, cp_parser_enumerator_definition):
	Use cp_lexer_next_token_is/cp_lexer_next_token_is_not as appropriate.
testsuite:
	* g++.old-deja/g++.other/enum2.C: Move dg-error markers to
	reflect changed line numbering of diagnostics.

From-SVN: r87121
2004-09-06 17:38:18 +00:00
Kriang Lerdsuwanakij
eb1aef5308 decl.c (grok_declarator): Remove a redundant semicolon.
* decl.c (grok_declarator): Remove a redundant semicolon.

	* parser.c (cp_parser_decl_specifier_seq, cp_parser_type_specifier):
	Correct comments describing function parameters.

From-SVN: r87085
2004-09-04 12:43:27 +00:00
Jan Hubicka
37e6d6fe83 * decl.c (finish_function): Clean out pointers we no longer need.
From-SVN: r87055
2004-09-03 20:37:03 +00:00
Ziemowit Laski
11bb4b2798 Make-lang.in (CXX_AND_OBJCXX_OBJS): Add cp/cp-objcp-common.o.
2004-08-31  Ziemowit Laski  <zlaski@apple.com>

        * Make-lang.in (CXX_AND_OBJCXX_OBJS): Add cp/cp-objcp-common.o.
        (cp/cp-lang.o): Depend on debug.h, gtype-cp.h and cp/cp-objcp-common.h.
        (cp/cp-decl.c): Do not depend on gtype-cp.h.
        (cp/cp-objcp-common.o): New target.
        * cp-lang.c: Include debug.h, cp-objcp-common.h and gtype-cp.h.
        (cxx_get_alias_set, cxx_warn_unused_global_decl, cp_expr_size,
        cp_tree_size, cp_var_mod_type_p, cxx_initialize_diagnostics): Move
        prototypes and definitions to cp-objcp-common.h and cp-objcp-common.c,
        respectively.
        (LANG_HOOKS_TREE_SIZE, LANG_HOOKS_FINISH,
        LANG_HOOKS_CLEAR_BINDING_STACK, LANG_HOOKS_INIT_OPTIONS,
        LANG_HOOKS_INITIALIZE_DIAGNOSTICS, LANG_HOOKS_HANDLE_OPTION,
        LANG_HOOKS_HANDLE_FILENAME, LANG_HOOKS_MISSING_ARGUMENT,
        LANG_HOOKS_POST_OPTIONS, LANG_HOOKS_GET_ALIAS_SET,
        LANG_HOOKS_EXPAND_CONSTANT, LANG_HOOKS_EXPAND_EXPR,
        LANG_HOOKS_EXPAND_DECL, LANG_HOOKS_PARSE_FILE,
        LANG_HOOKS_DUP_LANG_SPECIFIC_DECL, LANG_HOOKS_TRUTHVALUE_CONVERSION,
        LANG_HOOKS_SET_DECL_ASSEMBLER_NAME, LANG_HOOKS_MARK_ADDRESSABLE,
        LANG_HOOKS_PRINT_STATISTICS, LANG_HOOKS_PRINT_XNODE,
        LANG_HOOKS_PRINT_DECL, LANG_HOOKS_PRINT_TYPE,
        LANG_HOOKS_PRINT_IDENTIFIER, LANG_HOOKS_PRINT_ERROR_FUNCTION,
        LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL, LANG_HOOKS_WRITE_GLOBALS,
        LANG_HOOKS_FUNCTION_INIT, LANG_HOOKS_FUNCTION_FINAL,
        LANG_HOOKS_FUNCTION_MISSING_NORETURN_OK_P,
        LANG_HOOKS_COMMON_ATTRIBUTE_TABLE, LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE,
        LANG_HOOKS_ATTRIBUTE_TABLE, LANG_HOOKS_TREE_INLINING_WALK_SUBTREES,
        LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN,
        LANG_HOOKS_TREE_INLINING_ADD_PENDING_FN_DECLS,
        LANG_HOOKS_TREE_INLINING_AUTO_VAR_IN_FN_P,
        LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P,
        LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P,
        LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN,
        LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN, LANG_HOOKS_EXPR_SIZE,
        LANG_HOOKS_CALLGRAPH_ANALYZE_EXPR,
        LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION, LANG_HOOKS_MAKE_TYPE,
        LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE,
        LANG_HOOKS_SIGNED_TYPE, LANG_HOOKS_UNSIGNED_TYPE,
        LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE, LANG_HOOKS_INCOMPLETE_TYPE_ERROR,
        LANG_HOOKS_TYPE_PROMOTES_TO, LANG_HOOKS_REGISTER_BUILTIN_TYPE,
        LANG_HOOKS_GIMPLIFY_EXPR, LANG_HOOKS_FOLD_OBJ_TYPE_REF): Move
        hooks to cp-objcp-common.h.
        (finish_file): New function.
        * cp-objcp-common.c: New file.
        * cp-objcp-common.h: New file.
        * cp-tree.h (cp_finish_file): New prototype.
        * decl.c: Do not include gtype-cp.h.
        * decl2.c (finish_file): Rename to cp_finish_file.

From-SVN: r86837
2004-08-31 18:51:08 +00:00
Mark Mitchell
19c29b2fc4 cp-tree.h (initialize_artificial_var): Declare.
* cp-tree.h (initialize_artificial_var): Declare.
	* decl.c (initialize_artifical_var): New function.
	* class.c (initialize_array): Remove.
	(initialize_vtable): Use initialize_artificial_var.
	(build_vtt): Likewise.
	(build_ctor_vtbl_group): Likewise.

From-SVN: r86809
2004-08-30 22:54:06 +00:00
Nathan Sidwell
8dc2b10365 call.c (check_dtor_name): Replace abort with gcc_assert or gcc_unreachable.
* call.c (check_dtor_name): Replace abort with gcc_assert or
	gcc_unreachable.
	(build_call, add_builtin_candidate, build_new_op,
	convert_like_real, build_over_call, in_charge_arg_for_name,
	source_type, joust): Likewise.
	* class.c (build_simple_base_path, get_vcall_index,
	finish_struct_1, instantiate_type, get_enclosing_class,
	add_vcall_offset_vtbl_entries_1, cp_fold_obj_type_ref): Likewise.
	* cp-gimplify.c (cp_genericize): Likewise.
	* cp-lang.c (cp_expr_size, cp_tree_size): Likewise.
	* cvt.c (cp_convert_to_pointer, ocp_convert): Likewise.
	* decl.c (poplevel, make_unbound_class_template, reshape_init,
	check_special_function_return_type, grokdeclarator,
	grok_op_properties, tag_name, xref_tag, start_preparsed_function,
	finish_function): Likewise.
	* decl2.c (grokfield, maybe_emit_vtables):Likewise.
	* error.c (dump_global_iord, dump_decl, dump_template_decl,
	language_to_string): Likewise.
	* except.c (choose_personality_routine): Likewise.
	* friend.c (do_friend): Likewise.
	* g++spec.c (lang_specific_driver): Likewise.
	* init.c (build_zero_init, expand_default_init, build_new_1,
	build_vec_delete_1, build_vec_init, build_dtor_call): Likewise.
	* lex.c (retrofit_lang_decl, cp_type_qual_from_rid): Likewise.
	* mangle.c (add_substitution, write_unscoped_name,
	write_template_prefix, write_identifier,
	write_special_name_destructor, write_type, write_builtin_type,
	write_expression, write_template_param,
	write_java_integer_type_codes): Likewise.
	* method.c (implicitly_declare_fn): Likewise.

From-SVN: r86778
2004-08-30 15:28:48 +00:00
Jason Merrill
b40a3a7b9e * decl.c (expand_static_init): Avoid bogus warnings.
From-SVN: r86689
2004-08-28 02:35:36 -04:00
Jason Merrill
40aac94801 re PR c++/13684 (local static object variable constructed once but ctors and dtors called multiple times on same memory when called in multiple threads)
PR c++/13684
        * cp/decl.c (expand_static_init): Use thread-safety API.
        (register_dtor_fn): Return the call, don't expand it.
        * cp/tree.c (add_stmt_to_compound): New fn.
        (stabilize_call): Use it.
        * gimplify.c (gimplify_cleanup_point_expr): Handle CLEANUP_EH_ONLY.
        (gimple_push_cleanup): Add eh_only parm.
        (gimplify_target_expr): Pass it.
        * c.opt (-fno-threadsafe-statics): New option.
        * c-opts.c (c_common_handle_option): Handle it.
        * c-common.h (flag_threadsafe_statics): Declare it.
        * c-common.c (flag_threadsafe_statics): Record it.
        * doc/invoke.texi: Document it.
        * tsystem.h (_GNU_SOURCE): Define.
        * gthr-posix.h (__gthread_recursive_mutex_t): New typedef.
        (__GTHREAD_RECURSIVE_MUTEX_INIT): New macro.
        (__GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION): New macro.
        (__gthread_recursive_mutex_init_function): New fn.
        (__gthread_recursive_mutex_lock): New fn.
        (__gthread_recursive_mutex_trylock): New fn.
        (__gthread_recursive_mutex_unlock): New fn.
        * gthr-solaris.h, gthr-single.h, gthr-dce.h: Likewise.
        * gthr-win32.h, gthr-vxworks.h: Likewise.
        * gthr.h: Document.

        * libsupc++/guard.cc (static_mutex): Internal class implementing a
        recursive mutex which controls initialization of local statics.
        (__gnu_cxx::recursive_init): New exception class.
        (__cxa_guard_acquire): Deal with locking and recursion detection.
        (acquire_1, __cxa_guard_abort, __cxa_guard_release): Likewise.

From-SVN: r86687
2004-08-27 22:33:54 -04:00
Nathan Sidwell
50bc768da1 call.c (validate_conversion_obstack): Replace my_friendly_assert with gcc_assert or gcc_unreachable.
* call.c (validate_conversion_obstack): Replace
	my_friendly_assert with gcc_assert or gcc_unreachable.
	(direct_reference_binding, merge_conversion_sequences,
	build_user_type_conversion_1, perform_overload_resolution,
	build_op_delete_call, enforce_access, call_builtin_trap,
	build_over_call, build_special_member_call, build_new_method_call,
	initialize_reference): Likewise.
	* class.c (build_base_path, build_primary_vtable, alter_access,
	check_bases, update_vtable_entry_for_fn, layout_empty_base,
	clone_function_decl, adjust_clone_args,
	type_requires_array_cookie, include_empty_classes,
	finish_struct_1, resolve_address_of_overloaded_function,
	instantiate_type, get_vtbl_decl_for_binfo, build_vtt_inits,
	dfs_build_secondary_vptr_vtt_inits, build_ctor_vtbl_group,
	accumulate_vtbl_inits, build_vtbl_initializer,
	build_vbase_offset_vtbl_entries, build_rtti_vtbl_entries): Likewise.
	* cvt.c (build_up_reference, convert_to_reference): Likewise.
	* decl.c (poplevel, duplicate_decls, make_typename_type,
	cxx_init_decl_processing, reshape_init, check_initializer,
	make_rtl_for_nonlocal_decl, initialize_local_var, cp_finish_decl,
	expand_static_init, grokfndecl, grokvardecl, build_ptrmem_type,
	grokdeclarator, copy_fn_p, grok_op_properties, xref_tag,
	xref_basetypes, start_preparsed_function, save_function_data,
	finish_function, finish_method, maybe_register_incomplete_var,
	complete_vars): Likewise.
	* decl2.c (grok_array_decl, check_member_template,
	check_classfn, finish_static_data_member_decl, coerce_new_type,
	coerce_delete_type, import_export_class, decl_needed_p,
	determine_visibility, import_export_decl, build_cleanup,
	start_static_initialization_or_destructi, do_static_destruction,
	prune_vars_needing_no_initialization,
	build_offset_ref_call_from_tree): Likewise.
	* error.c (dump_decl, dump_expr): Likewise.
	* init.c (finish_init_stmts, build_zero_init,
	expand_virtual_init, expand_default_init, expand_aggr_init_1,
	build_offset_ref, build_new_1, build_delete, build_vbase_delete):
	Likewise.
	* mangle.c (write_method_parms, write_template_args,
	write_expression, write_template_arg): Likewise.
	* method.c (make_thunk, finish_thunk, use_thunk): Likewise.
	* name-lookup.c (pop_binding, begin_scope, leave_scope,
	resume_scope, push_using_decl, validate_nonmember_using_decl,
	is_ancestor, poplevel_class, set_inherited_value_binding_p,
	push_class_level_binding, do_class_using_decl, push_namespace,
	pop_namespace, add_using_namespace, ambiguous_decl,
	lookup_namespace_name, lookup_type_current_level,
	maybe_process_template_type_declaration): Likewise.
	* parser.c (cp_lexer_peek_nth_token,
	cp_parser_parse_and_diagnose_invalid_typ,
	cp_parser_translation_unit, cp_parser_template_id,
	cp_parser_lookup_name, cp_parser_late_parsing_for_member): Likewise.
	* pt.c (push_access_scope, finish_member_template_decl,
	push_inline_template_parms_recursive, add_outermost_template_args,
	get_innermost_template_args, begin_explicit_instantiation,
	end_explicit_instantiation, retrieve_specialization,
	is_specialization_of, is_specialization_of_friend,
	register_specialization, check_explicit_specialization,
	comp_template_parms, process_template_parm,
	process_partial_specialization, convert_nontype_argument,
	coerce_template_template_parms, coerce_template_parms,
	mangle_class_name_for_template, lookup_template_function,
	lookup_template_class, instantiate_class_template, tsubst_decl,
	tsubst_function_type, tsubst, tsubst_qualified_id, tsubst_copy,
	instantiate_template, fn_type_unification, type_unification_real,
	get_template_base, regenerate_decl_from_template,
	template_for_substitution, instantiate_decl,
	get_mostly_instantiated_function_type, dependent_scope_ref_p,
	value_dependent_expression_p, resolve_typename_type): Likewise.
	* repo.c (repo_emit_p): Likewise.
	* rtti.c (build_headof, get_tinfo_decl, get_pseudo_ti_init,
	create_tinfo_types, emit_tinfo_decl): Likewise.
	* search.c (lookup_base_r, lookup_base, lookup_field_1,
	dfs_access_in_type, build_baselink, lookup_member,
	adjust_result_of_qualified_name_lookup, copied_binfo): Likewise.
	* semantics.c (perform_or_defer_access_check,
	finish_non_static_data_member, finish_stmt_expr_expr,
	finish_stmt_expr, finish_call_expr, finish_pseudo_destructor_expr,
	finish_template_template_parm, finish_member_declaration,
	emit_associated_thunks): Likewise.
	* tree.c (build_target_expr_with_type, force_target_expr,
	copy_binfo, get_first_fn, cp_tree_equal): Likewise.
	* typeck.c (type_after_usual_arithmetic_conversions, comptypes,
	cxx_sizeof_or_alignof_type, perform_integral_promotions,
	build_class_member_access_expr, finish_class_member_access_expr,
	build_ptrmemfunc_access_expr, build_unary_op,
	unary_complex_lvalue, cxx_mark_addressable, build_modify_expr,
	build_ptrmemfunc, expand_ptrmemfunc_cst, check_return_expr
	* typeck2.c (complete_type_check_abstract,
	abstract_virtuals_error, process_init_constructor,
	add_exception_specifier): Likewise.

From-SVN: r86669
2004-08-27 17:59:33 +00:00
Nathan Sidwell
ce552f75de tree.h (size_int_type): Remove.
* tree.h (size_int_type): Remove.
	* fold-const.c: Do not #include gt-fold-const.h.
	(size_htab_hash, size_htab_eq): Remove.
	(size_int_kind): Use build_int_cst.
	(new_const, size_htab): Remove.
	(size_int_type): Remove.
	(round_up): Use build_int_cst.
	(round_down): Likewise. Remove spurious constant build.

	* ada/utils2.c (build_allocator): Use ssize_int.

	* cp/class.c (build_vtbl_initializer): Use ssize_int.
	* cp/decl.c (complete_array_type): Likewise.
	* cp/method.c (finish_thunk): Likewise.
	* cp/search.c (get_dynamic_base_type): Likewise.

From-SVN: r86667
2004-08-27 16:45:20 +00:00
Roger Sayle
d0c5c9b14d re PR middle-end/16693 (Bitwise AND is lost when used within a cast to an enum of the same precision)
PR middle-end/16693
	PR tree-optimization/16372
	* decl.c (finish_enum): Make the precision of the enumerated type
	the same width as the underlying integer type.

	* g++.dg/opt/pr16372-1.C: New test case.
	* g++.dg/opt/pr16693-1.C: New test case.
	* g++.dg/opt/pr16693-2.C: New test case.

From-SVN: r86576
2004-08-25 20:51:02 +00:00
Nathan Sidwell
7d60be94d6 tree.h (build_int_cst): New, sign extended constant.
* tree.h  (build_int_cst): New, sign extended constant.
	(build_int_cstu): New, zero extended constant.
	(build_int_cst_wide): Renamed from build_int_cst.
	* tree.c (build_int_cst, build_int_cstu): New.
	(build_int_cst_wide): Renamed from build_int_cst.
	(make_vector_type, build_common_tree_nodes,
	build_common_tree_nodes_2): Adjust build_int_cst calls.
	* builtins.c (expand_builtin_prefetch, expand_builtin_strstr,
	expand_builtin_strpbrk, expand_builtin_fputs,
	build_string_literal, expand_builtin_printf,
	expand_builtin_sprintf, fold_builtin_classify_type,
	fold_builtin_lround, fold_builtin_bitop, fold_builtin_isascii,
	fold_builtin_toascii, fold_builtin_isdigit,
	simplify_builtin_strstr, simplify_builtin_strpbrk,
	fold_builtin_fputs, simplify_builtin_sprintf): Likewise.
	* c-common.c (start_fname_decls, fix_string_type, shorten_compare,
	DEF_ATTR_INT): Likewise.
	* c-decl.c (complete_array_type, check_bitfield_type_and_width):
	Likewise.
	* c-lex.c (interpret_integer, lex_charconst): Likewise.
	* c-parse.in (primary) <TYPES_COMPATIBLE_P> Likewise.
	* c-pretty-print.c (pp_c_integer_constant): Likewise.
	* c-typeck.c (really_start_incremental_init, push_init_level,
	set_nonincremental_init_from_string): Likewise.
	* calls.c (load_register_parameters): Likewise.
	convert.c (convert_to_pointer): Likewise.
	coverage.c (coverage_counter_alloc, tree_coverage_counter_ref,
	build_fn_info_type, build_fn_info_value, build_ctr_info_value,
	build_gcov_info): Likewise.
	* except.c (init_eh, assign_filter_values): Likewise.
	* expmed.c (store_fixed_bit_field, extract_bit_field,
	extract_fixed_bit_field, extract_split_bit_field, expand_shift,
	expand_mult_const, expand_mult_highpart_adjust, extract_high_half,
	expand_sdiv_pow2, expand_divmod, make_tree): Likewise.
	* expr.c (convert_move, emit_group_load, emit_group_store,
	expand_assignment, store_constructor, store_field,
	expand_expr_real_1, reduce_to_bit_field_precision): Likewise.
	fold-const.c (force_fit_type, int_const_binop, fold_convert_const,
	invert_truthvalue, optimize_bit_field_compare,
	decode_field_reference, all_ones_mask_p, constant_boolean_node,
	fold_div_compare, fold, fold_read_from_constant_string,
	fold_negate_const, fold_abs_const, fold_not_const, round_up,
	round_down): Likewise.
	* function.c (assign_parm_setup_block): Likewise.
	* stmt.c (shift_return_value, expand_case, estimate_case_costs):
	Likewise.
	* stor-layout.c (layout_type, initialize_sizetypes,
	set_min_and_max_values_for_integral_type): Likewise.
	* tree-chrec.c (chrec_fold_multiply_poly_poly,
	reset_evolution_in_loop): Likewise.
	* tree-chrec.h (build_polynomial_chrec): Likewise.
	* tree-complex.c (build_replicated_const): Likewise.
	* tree-eh.c (honor_protect_cleanup_actions,
	lower_try_finally_onedest, lower_try_finally_copy,
	lower_try_finally_switch): Likewise.
	* tree-mudflap.c (mf_build_string, mx_register_decls,
	mudflap_register_call, mudflap_enqueue_constant): Likewise.
	* tree-nested.c (get_trampoline_type, get_nl_goto_field): Likewise.
	* tree-pretty-print.c (dump_generic_node): Likewise.
	* tree-ssa-ccp.c (widen_bitfield, maybe_fold_offset_to_array_ref):
	Likewise.
	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Likewise.
	* tree-ssa-loop-niter.c (number_of_iterations_cond,
	loop_niter_by_eval, upper_bound_in_type, lower_bound_in_type):
	Likewise.
	* tree-ssa-loop-ivcanon.c (create_canonical_iv,
	canonicalize_loop_induction_variables): Likewise.
	* tree-vectorizer.c (vect_create_index_for_array_ref,
	vect_transform_loop_bound, vect_compute_data_ref_alignment):
	Likewise.

	* config/alpha/alpha.c (alpha_initialize_trampoline, alpha_va_start,
	alpha_gimplify_va_arg_1): Likewise.
	* config/arm/arm.c (arm_get_cookie_size): Likewise.
	* config/c4x/c4x.c (c4x_gimplify_va_arg_expr): Likewise.
	* config/i386/i386.c (ix86_va_start, ix86_gimplify_va_arg): Likewise.
	* config/ia64/ia64.c (ia64_gimplify_va_arg): Likewise.
	* config/mips/mips.c (mips_build_builtin_va_list, mips_va_start,
	mips_gimplify_va_arg_expr): Likewise.
	* config/pa/pa.c (hppa_gimplify_va_arg_expr): Likewise.
	* config/rs6000/rs6000.c (rs6000_va_start, rs6000_gimplify_va_arg,
	add_compiler_branch_island): Likewise.
	* config/s390/s390.c (s390_va_start): Likewise.
	* config/sh/sh.c (sh_va_start): Likewise.
	* config/stormy16/stormy16.c (xstormy16_expand_builtin_va_start):
	Likewise.
	* config/xtensa/xtensa.c (xtensa_va_start,
	xtensa_gimplify_va_arg_expr): Likewise.

	* objc/objc-act.c (build_objc_string_object,
	build_objc_symtab_template, init_def_list, init_objc_symtab,
	init_module_descriptor, generate_static_references,
	build_selector_translation_table, get_proto_encoding,
	build_typed_selector_reference, build_selector_reference,
	build_next_objc_exception_stuff,
	build_method_prototype_list_template, generate_descriptor_table,
	generate_protocols, build_protocol_initializer,
	build_ivar_list_template, build_method_list_template,
	build_ivar_list_initializer, generate_ivars_list,
	generate_dispatch_table, generate_protocol_list,
	build_category_initializer, build_shared_structure_initializer,
	generate_shared_structures, handle_impent,
	generate_objc_image_info): Likewise.

2004-04-25  Paolo Bonzini  <bonzini@gnu.org>

	* cfglayout.c (duplicate_insn_chain): Remove references to
	NOTE_INSN_LOOP_VTOP and NOTE_INSN_LOOP_CONT.
	* cfgloop.h (struct loop): Remove fields vtop, cont and cont_dominator.
	* cfgrtl.c (rtl_delete_block): Remove handling of NOTE_INSN_LOOP_CONT.
	* final.c (final_scan_insn): Remove references to NOTE_INSN_LOOP_VTOP
	and NOTE_INSN_LOOP_CONT.
	* insn-notes.def (NOTE_INSN_LOOP_VTOP, NOTE_INSN_LOOP_CONT): Remove.
	* jump.c (squeeze_notes): Remove references to NOTE_INSN_LOOP_VTOP
	and NOTE_INSN_LOOP_CONT.
	* loop.c (scan_loops, find_and_verify_loops, for_each_insn_in_loop,
	check_dbra_loop, loop_dump_aux): Remove references to removed notes
	and fields.
	* reorg.c (mostly_true_jump): Do not rely on NOTE_INSN_LOOP_VTOPs.
	* unroll.c (unroll_loop, copy_loop_body, loop_iterations): Remove
	references to removed notes and fields.
	(subtract_reg_term, ujump_to_loop_cont): Remove.

From-SVN: r86544
2004-08-25 09:52:54 +00:00
Nathan Sidwell
8c1d6d62a6 c-decl.c (c_init_decl_processing): Adjust build_common_tree_nodes call.
* c-decl.c (c_init_decl_processing): Adjust
	build_common_tree_nodes call.
	* expmed.c (const_mult_add_overflow_p): Use
	build_distinct_type_copy.
	* stor-layout.c (early_type_list): Remove.
	(layout_type): Don't append to early_type_list.
	(initialize_sizetypes): Add signed_p argument.
	(set_sizetype): Overwrite the stub type nodes directly.
	* tree.c (copy_node_stat): Clear a type's value cache here ...
	(build_distinct_type): ... not here.
	(build_common_tree_nodes): Add signed_sizetype argument. Adjust.
	* tree.h (initialize_sizetypes): Add signed_p argument.
	(build_common_tree_nodes): Likewise.

	* ada/utils.c (gnat_init_decl_processing): Adjust
	build_common_tree_nodes call.

	* cp/decl.c (cxx_init_decl_processing): Adjust
	build_common_tree_nodes call.

	* fortran/f95-lang.c (gfc_init_decl_processing): Adjust
	build_common_tree_nodes call.

	* java/decl.c (java_init_decl_processing): Adjust
	initialize_sizetypes call.

	* objc/objc-act.c (get_static_reference): Use
	build_variant_type_copy.
	(get_protocol_reference): Likewise.
	* objc/objc-act.h (TREE_STATIC_TEMPLATE): Use TREE_PRIVATE.

	* treelang/treetree.c (treelang_init_decl_processing): Adjust
	build_common_tree_nodes call.

From-SVN: r86493
2004-08-24 16:39:43 +00:00
Mark Mitchell
eba6cfb6b5 re PR c++/17121 (Link problem with function-local classes)
PR c++/17121
	* decl.c (expand_static_init): Use DECL_FUNCTION_SCOPE_P.


	PR c++/17121
	* g++.dg/inherit/local2.C: New test.

From-SVN: r86353
2004-08-21 01:31:27 +00:00
Nathan Sidwell
3224beadb4 stor-layout.c (initialize_sizetypes): Set SIZETYPE earlier, clear cache on copied sizetype.
* stor-layout.c (initialize_sizetypes): Set SIZETYPE earlier,
	clear cache on copied sizetype.

	* ada/utils2.c (build_allocator): Use build_int_cst for negative
	size types.

	* cp/class.c (build_vtbl_initializer): Use build_int_cst for
	negative size types.
	* cp/decl.c (complete_array_type): Likewise.
	* cp/method.c (finish_thunk): Likewise.

From-SVN: r86320
2004-08-20 14:17:39 +00:00
Nathan Sidwell
89b0433e3a tree.h (TYPE_CACHED_VALUES_P): New.
* tree.h (TYPE_CACHED_VALUES_P): New.
	(TYPE_CACHED_VALUES): New.
	(TYPE_ORIG_SIZE_TYPE): Adjust.
	* tree.def (INTEGER_CST): Update documentation.
	* tree.c: Inlcude params.h.
	(build_int_cst): Cache small values.
	(build_type_copy): Do not copy the value cache.
	* c-common.c (c_common_nodes_and_builtins): Add comment, remove
	unneeded zeroing.
	* c-typeck.c (build_c_cast): Add comment about OVERFLOW setting.
	* expmed.c (const_mult_add_overflow_p): Clear type copy's value
	cache.
	* fold-const.c (force_fit_type): Copy value when setting
	overflows.
	(int_const_binop): Likewise.
	* stor-layout.c: Include params.h
	(set_sizetype): Create values cache.
	(fixup_unsigned_type): Set UNSIGNED_P before caching any values.
	* params.def (PARAM_INTEGER_SHARE_LIMIT): New.
	* params.h (INTEGER_SHARE_LIMIT): New.
	* Makefile.in (tree.o, stor-layout.o): Depend on PARAMS_H.

	* cp/decl.c (finish_enum): Do not copy value node early, copy
	later.
	* cp/lex.c (cxx_init): Force null_node to be unique.

	* java/parse.h (JAVA_RADIX10_FLAG): Rename to ...
	(JAVA_NOT_RADIX10_FLAG): ... here.  Invert meaning.
	* java/lex.c (do_java_lex): Adjust.
	(error_if_numeric_overflow): Likewise.

From-SVN: r86247
2004-08-19 10:36:07 +00:00
Roger Sayle
f293ce4b0d call.c (build_vfield_ref, [...]): Replace calls to build with calls to buildN.
* call.c (build_vfield_ref, build_call, build_conditional_expr,
	convert_arg_to_ellipsis, build_x_va_arg, build_over_call,
	build_java_interface_fn_ref, build_special_member_call,
	build_new_method_call, initialize_reference): Replace calls to
	build with calls to buildN.
	* class.c (build_base_path, convert_to_base_statically,
	build_vfn_ref, instantiate_type, dfs_accumulate_vtbl_inits,
	build_vtbl_initializer): Likewise.
	* cp-gimplify.c (genericize_try_block, genericize_catch_block,
	gimplify_if_stmt, cp_genericize_r): Likewise.
	* cvt.c (convert_to_void): Likewise.
	* decl.c (check_initializer, finish_constructor_body,
	finish_destructor_body): Likewise.
	* error.c (dump_expr): Likewise.
	* except.c (build_exc_ptr, expand_start_catch_block, build_throw):
	Likewise.
	* init.c (perform_member_init, expand_virtual_init,
	expand_cleanup_for_base, build_init, expand_default_init,
	build_offset_ref, decl_constant_value, build_new, build_new_1,
	build_vec_delete_1, build_vec_init, build_delete,
	push_base_cleanups, build_vec_delete): Likewise.
	* mangle.c (write_integer_cst): Likewise.
	* method.c (thunk_adjust, do_build_copy_constructor,
	do_build_assign_ref): Likewise.
	* pt.c (lookup_template_function, tsubst, tsubst_copy_and_build,
	unify, build_non_dependent_expr): Likewise.
	* rtti.c (build_headof, build_typeid, ifnonnull,
	build_dyanmic_cast_1, tinfo_base_init): Likewise.
	* semantics.c (begin_compound_stmt, finish_call_expr,
	finish_pseudo_destructor_expr, finish_id_expression,
	simplify_aggr_init_expr, finalize_nrv_r): Likewise.
	* tree.c (build_target_expr, build_cplus_new, array_type_nelts_top,
	array_type_nelts_total, stabilize_call): Likewise.
	* typeck.c (decay_conversion, build_class_member_access_expr,
	lookup_destructor, build_ptrmemfunc_access_expr, build_array_ref,
	get_member_function_from_ptrfunc, build_binary_op, pointer_diff,
	build_x_unary_op, build_unary_op, unary_complex_lvalue,
	build_compound_expr, build_modify_expr, expand_ptrmemfunc_cst,
	check_return_expr): Likewise.
	* typeck2.c (split_nonconstant_1, split_nonconstant_init_1,
	split_nonconstant_init, store_init_value, build_m_component_ref):
	Likewise.

From-SVN: r86047
2004-08-16 02:08:06 +00:00
Nathan Sidwell
4a90aeeb51 tree.h (build_int_cst): New.
.:	* tree.h (build_int_cst): New.
	(build_int_2): Remove.
	* tree.c (build_int_2): Remove.
	(build_int_cst): New.
	(make_vector_type, build_common_tree_nodes,
	build_common_tree_nodes_2): Use build_int_cst.
	* builtins.c (expand_builtin_prefetch, expand_builtin_strstr,
	expand_builtin_strpbrk, expand_builtin_fputs,
	build_string_literal, expand_builtin_printf,
	expand_builtin_sprintf, fold_builtin_lround, fold_builtin_bitop,
	fold_builtin_bitop, fold_builtin_isascii, fold_builtin_toascii,
	fold_builtin_isdigit, simplify_builtin_strstr,
	simplify_builtin_strpbrk, fold_builtin_fputs,
	simplify_builtin_sprintf): Use build_int_cst.
	* c-common.c (start_fname_decls, fix_string_type,
	c_common_nodes_and_builtins, c_init_attributes,
	shorten_compare): Likewise.
	* c-decl.c (complete_array_type,
	check_bitfield_type_and_width): Likewise.
	* c-lex.c (interpret_integer, lex_charconst): Likewise.
	* c-parse.in (primary): <TYPES_COMPATIBLE_P> Likewise.
	* c-pretty-print.c (pp_c_integer_constant): Likewise.
	* c-typeck.c (really_start_incremental_init, push_init_level,
	set_nonincremental_init_from_string): Likewise.
	* calls.c (load_register_parameters): Likewise.
	* convert.c (convert_to_pointer): Likewise.
	* coverage.c (coverage_counter_alloc, tree_coverage_counter_ref,
	build_fn_info_type, build_ctr_info_value, build_gcov_info):
	Likewise.
	* except.c (init_eh, assign_filter_values, assign_filter_values):
	Likewise.
	* expmed.c (store_fixed_bit_field, extract_bit_field,
	extract_fixed_bit_field, extract_split_bit_field, expand_shift,
	expand_mult_const, expand_mult_highpart_adjust, extract_high_half,
	expand_sdiv_pow2, expand_divmod, make_tree): Likewise.
	* expr.c (convert_move, emit_group_load, emit_group_store,
	expand_assignment, store_constructor, store_field,
	expand_expr_real_1, reduce_to_bit_field_precision): Likewise.
	* fold-const.c (force_fit_type, int_const_binop, fold_convert_const,
	invert_truthvalue, optimize_bit_field_compare,
	decode_field_reference, all_ones_mask_p, constant_boolean_node,
	fold_div_compare, fold, fold_read_from_constant_string,
	fold_negate_const, fold_abs_const, fold_not_const): Likewise.
	* function.c (assign_parm_setup_block): Likewise.
	* stmt.c (shift_return_value, expand_end_case_type,
	estimate_case_costs): Likewise.
	* stor-layout.c (layout_type, initialize_sizetypes,
	set_min_and_max_values_for_integral_type): Likewise.
	* tree-chrec.c (chrec_fold_multiply_poly_poly,
	reset_evolution_in_loop): Likewise.
	* tree-chrec.h (build_polynomial_chrec): Likewise.
	* tree-complex.c (build_replicated_const): Likewise.
	* tree-eh.c (honor_protect_cleanup_actions,
	lower_try_finally_onedest, lower_try_finally_copy,
	lower_try_finally_switch): Likewise.
	* tree-mudflap.c (mf_build_string, mx_register_decls,
	mudflap_register_call, mudflap_enqueue_constant): Likewise.
	* tree-nested.c (get_trampoline_type, get_nl_goto_field): Likewise.
	* tree-pretty-print.c (dump_generic_node): Likewise.
	* tree-ssa-ccp.c (widen_bitfield, maybe_fold_offset_to_array_ref):
	Likewise.
	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Likewise.
	* tree-ssa-loop-niter.c (number_of_iterations_cond,
	loop_niter_by_eval, upper_bound_in_type, lower_bound_in_type):
	Likewise.

	* config/alpha/alpha.c (alpha_initialize_trampoline,
	alpha_va_start, alpha_gimplify_va_arg_1): Use build_int_cst.
	* config/arm/arm.c (arm_get_cookie_size): Likewise.
	* config/c4x/c4x.c (c4x_gimplify_va_arg_expr): Likewise.
	* config/i386/i386.c (ix86_va_start, ix86_gimplify_va_arg): Likewise.
	* config/i860/i860.c (i860_va_start): Likewise.
	* config/ia64/ia64.c (ia64_gimplify_va_arg): Likewise.
	* config/mips/mips.c (mips_build_builtin_va_list, mips_va_start,
	mips_gimplify_va_arg_expr): Likewise.
	* config/pa/pa.c (hppa_gimplify_va_arg_expr): Likewise.
	* config/rs6000/rs6000.c (rs6000_va_start, rs6000_gimplify_va_arg,
	add_compiler_branch_island): Likewise.
	* config/s390/s390.c (s390_va_start): Likewise.
	* config/sh/sh.c (sh_va_start): Likewise.
	* config/stormy16/stormy16.c (xstormy16_expand_builtin_va_start):
	Likewise.
	* config/xtensa/xtensa.c (xtensa_va_start,
	xtensa_gimplify_va_arg_expr): Likewise.

	* objc/objc-act.c (build_objc_string_object,
	build_objc_symtab_template, init_def_list, init_objc_symtab,
	init_module_descriptor, generate_static_references,
	build_selector_translation_table, get_proto_encoding,
	build_typed_selector_reference, build_selector_reference,
	build_next_objc_exception_stuff,
	build_method_prototype_list_template, generate_descriptor_table,
	generate_protocols, build_protocol_initializer,
	build_ivar_list_template, build_method_list_template,
	build_ivar_list_initializer, generate_ivars_list,
	generate_dispatch_table, generate_protocol_list,
	build_category_initializer, build_shared_structure_initializer,
	generate_shared_structures, handle_impent,
	generate_objc_image_info): Use build_int_cst.
ada:
	* cuintp.c (UI_To_gnu): Use build_int_cst..
	* trans.c (Exception_Handler_to_gnu_sjlj, gnat_to_gnu): Likewise.
	* utils.c (init_gigi_decls): Likewise.
	* utils2.c (build_call_raise): Likewise.
cp:
	* call.c (convert_class_to_reference,
	build_user_type_conversion_1, convert_like_real,
	build_java_interface_fn_ref, build_special_member_call): Use
	build_int_cst.
	* class.c (build_vtbl_initializer): Likewise.
	* cp-gimplify.c (cp_gimplify_expr): Likewise.
	* cvt.c (cp_convert_to_pointer): Likewise.
	* decl.c (cxx_init_decl_processing, complete_array_type): Likewise.
	* decl2.c (start_static_initialization_or_destruction,
	generate_ctor_or_dtor_function): Likewise.
	* except.c (build_throw): Likewise.
	* lex.c (cxx_init): Likewise.
	* mangle.c (write_integer_cst): Likewise.
	* rtti.c (build_headof, get_tinfo_decl_dynamic,
	build_dynamic_cast_1, ptr_initializer, ptm_initializer,
	get_pseudo_ti_init): Likewise.
	* search.c (get_dynamic_cast_base_type): Likewise.
	* tree.c (build_shared_int_cst): Likewise.
fortran:
	* trans-array.c (gfc_trans_array_constructor_value): Use
	build_int_cst.
	* trans-const.c (gfc_build_string_const,
	gfc_init_constants, gfc_conv_mpz_to_tree,
	gfc_conv_constant_to_tree): Likewise.
	* trans-decl.c (gfc_get_symbol_decl): Likewise.
	* trans-intrinsic.c (gfc_conv_intrinsic_ibits,
	gfc_conv_intrinsic_len, prepare_arg_info): Likewise.
	* trans-io.c (add_case, set_error_locus, build_dt,
	transfer_expr): Likewise.
	* trans-stmt.c (gfc_trans_label_assign, gfc_trans_pause,
	gfc_trans_stop, gfc_trans_character_select): Likewise.
	* trans-types.c (gfc_init_types, gfc_get_dtype): Likewise.
	* trans.c (gfc_trans_runtime_check): Likewise.
java:
	* boehm.c (get_boehm_type_descriptor): Use build_int_cst.
	* class.c (build_utf8_ref, build_static_field_ref,
	make_field_value, make_method_value, get_dispatch_table,
	make_class_data, emit_symbol_table, emit_catch_table): Likewise.
	* constants.c (get_tag_node,  build_ref_from_constant_pool,
	build_constants_constructor): Likewise.
	* decl.c (java_init_decl_processing): Likewise.
	* expr.c (build_java_array_length_access, build_newarray,
	expand_java_multianewarray, expand_java_pushc, expand_iinc,
	build_java_binop, build_field_ref, expand_java_add_case,
	expand_java_call, build_known_method_ref, build_invokevirtual,
	build_invokeinterface, build_jni_stub): Likewise.
	* java-gimplify.c (java_gimplify_new_array_init): Likewise.
	* jcf-parse.c (get_constant): Likewise.
	* lex.c (do_java_lex): Likewise.
	* parse.y (patch_binop, patch_unaryop, patch_cast,
	build_null_of_type, patch_newarray): Likewise.
	* resource.c (compile_resource_data): Likewise.
	* typeck.c (build_prim_array_type): Likewise.

From-SVN: r86022
2004-08-15 15:45:33 +00:00
Mark Mitchell
b2ca370228 tree.c (handle_dll_attribute): Move here from i383/winnt.c.
* tree.c (handle_dll_attribute): Move here from i383/winnt.c.
	Replace use of DECL_INLINE with DECL_DECLARED_INLINE_P.  Set
	DECL_VISIBLITY.  Test TARGET_DLLIMPORT_DECL_ATTRIBUTES with #if.
	* tree.h (handle_dll_attribute): Declare.  Test
	TARGET_DLLIMPORT_DECL_ATTRIBUTES with #if.
	* c-common.h (c_determine_visibility): Declare.
	* c-common.c (c_determine_visibility): New function.
	* c-decl.c (finish_decl): Use it.
	(finish_function): Likewise.
	* defaults.h (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Define it to
	zero, by default.  Use #if, not	#ifdef, to test it.
	* config/arm/arm.c (arm_attribute_table): Use
	handle_dll_attribute.  Test TARGET_DLLIMPORT_DECL_ATTRIBUTES with
	#if.
	* config/arm/pe.h (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Define to 1.
	* config/i386/cygming.h (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Define
	to 1.
	* config/i386/i386-protos.h (ix86_handle_dll_attribute): Remove.
	* config/i386/i386.c (ix86_attribute_table): Use
	handle_dll_attribute for dllimport/dllexport.  Test
	TARGET_DLLIMPORT_DECL_ATTRIBUTES with #if.
	* config/i386/winnt.c (ix86_handle_dll_attribute): Remove.
	* config/mcore/mcore.h (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Define
	it to 1.
	* config/mcore/mcore.c (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Test it
	with #if.
	* config/sh/symbian-pre.h (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Define
	it to 1.
	* doc/extend.texi (dllexport): Clarify and correct documentation.
	(dllimport): Likewise.
	* doc/tm.texi (TARGET_DLLIMPORT_DECL_ATTRIBUTES): Mention
	handle_dll_attribute.

	* decl.c (start_preparsed_function): Move determine_visibility
	call.
	* decl2.c (determine_visibility): Incorporate dllexport testing.

	* g++.dg/ext/visibility/assign1.C: Use scan-hidden and
	dg-require-visiblity.
	* g++.dg/ext/visibility/fvisibility-inlines-hidden.C: Likewise.
	* g++.dg/ext/visibility/fvisibility.C: Likewise.
	* g++.dg/ext/visibility/memfuncts.C: Likewise.
	* g++.dg/ext/visibility/new1.C: Likewise.
	* g++.dg/ext/visibility/pragma.C: Likewise.
	* g++.dg/ext/visibility/staticmemfuncts.C: Likewise.
	* g++.dg/ext/visibility/virtual.C: Likewise.
	* g++/dg/ext/visibility/visibility-1.C: Likewise.
	* g++/dg/ext/visibility/visibility-2.C: Likewise.
	* g++/dg/ext/visibility/visibility-3.C: Likewise.
	* g++/dg/ext/visibility/visibility-4.C: Likewise.
	* g++/dg/ext/visibility/visibility-5.C: Likewise.
	* g++/dg/ext/visibility/visibility-6.C: Likewise.
	* g++/dg/ext/visibility/visibility-7.C: Likewise.
	* g++/dg/ext/visibility/visibility-8.C: New test.
	* gcc.c-torture/compile/dll.x: Remove.
	* gcc.dg/dll-2.c: Use dg-require-dll
	* gcc.dg/visibility-10.c: New test.
	* lib/gcc-dg.exp (dg-require-dll): Add Symbian to list of targets
	supporting DLLs.
	* testsuite/lib/scanasm.exp (scan_hidden): New function.
	(scan_not_hidden): Likewise.

From-SVN: r85621
2004-08-06 02:03:29 +00:00
Geoffrey Keating
0e6df31e19 re PR c/14516 (-fleading-underscore does not work correctly for file static variables)
2004-08-04  Geoffrey Keating  <geoffk@apple.com>

	PR 14516
	* c-common.c (c_expand_decl): Don't special-case static VAR_DECLs.
	* c-common.h (make_rtl_for_local_static): Delete.
	* c-decl.c (shadow_tag_warned): Clean up comment.
	(finish_decl): Clean up spacing.  Use set_user_assembler_name when
	appropriate.  Don't pass asmspec to rest_of_decl_compilation.
	* c-semantics.c (make_rtl_for_local_static): Delete.
	* expr.c (init_block_move_fn): Use set_user_assembler_name.
	(init_block_clear_fn): Likewise.
	* passes.c (rest_of_decl_compilation): Remove asmspec parameter,
	expect it to be in DECL_ASSEMBLER_NAME.  Update callers in many files.
	* toplev.h (rest_of_decl_compilation): Remove asmspec parameter.
	* tree.h (make_decl_rtl): Remove second parameter.
	(set_user_assembler_name): New.
	* varasm.c (set_user_assembler_name): New.
	(make_decl_rtl): Remove second parameter.  Update callers in many
	files.

Index: cp/ChangeLog
2004-08-04  Geoffrey Keating  <geoffk@apple.com>

	* decl.c (make_rtl_for_nonlocal_decl): Set DECL_ASSEMBLER_NAME rather
	than passing it as a parameter to rest_of_decl_compilation.
	* decl2.c (grokfield): Use set_user_assembler_name.

From-SVN: r85593
2004-08-05 05:52:01 +00:00
Nathan Sidwell
26fad1af3b decl.c (complete_array_type): Don't gratuitously copy maxindex.
* decl.c (complete_array_type): Don't gratuitously copy
	maxindex. Its type is always set.

From-SVN: r85562
2004-08-04 15:59:37 +00:00
Paul Brook
44d10c1002 target-def.h (TARGET_CXX_CDTOR_RETURNS_THIS): Define.
gcc/
	* target-def.h (TARGET_CXX_CDTOR_RETURNS_THIS): Define.
	(TARGET_CXX): Use it.
	* target.h (struct gcc_target): Add cdtor_returns_this.
	* config/arm/arm.c (arm_cxx_cdtor_returns_this): New function.
	(TARGET_CXX_CDTOR_RETURNS_THIS): Define.
	* doc/tm.texi: Document TARGET_CXX_CDTOR_RETURNS_THIS.
gcc/cp/
	* Make-lang.in (cp/semantics.o, cp/optimize.o): Depend on TARGET_H.
	* cp-tree.h (struct language_function): Rename x_dtor_label to
	x_cdtor_label.
	(dtor_label): Rename ...
	(cdtor_label): ... to this.
	* decl.c (begin_constructor_body): Remove.
	(check_special_function_return_type): Maybe change the return type.
	(grokdeclarator): Pass the class type.
	(start_preparsed_function): Constructors may need a return label.
	(finish_constructor_body, finish_destructor_body): Set the return
	value.
	(begin_function_body): Don't call begin_constructor_body.
	(finish_function): Don't warn for constructors or destructors.
	(implicitly_declare_fn): Maybe change the return type.
	* optimize.c: Include target.h.
	(maybe_clone_body): Remap the function result.
	* semantics.c: Include target.h.
	(finish_return_stmt): Maybe jump to return label for constructors.

From-SVN: r85561
2004-08-04 15:33:51 +00:00
Mark Mitchell
73a8adb62e class.c (build_vtable): Do not set DECL_VISIBILITY here.
* class.c (build_vtable): Do not set DECL_VISIBILITY here.
	(check_field_decls): Or here.
	(check_methods): Or here.
	(initialize_array): Don't mess with DECL_CONTEXT.
	* cp-tree.h (start_decl): Adjust prototype.
	(determine_visibility): New function.
	* decl.c (duplicate_decls): Remove checks for hidden "operator
	new".
	(build_library_fn_1): Give all library functions default
	visibility.
	(start_decl): Add pop_scope_p parameter.  Tidy.
	(cp_finish_decl): Do not pop scopes here.  Call
	determine_visibility for variable definitions.
	(start_preparsed_function): Call determine_visibility.
	* decl2.c (determine_visibility): New function.
	* method.c (use_thunk): Fix formatting.
	* parser.c (cp_parser_condition): Adjust calls to start_decl.
	(cp_parser_init_declarator): Likewise.
	* pt.c (instantiate_decl): Always call pop_nested_class.
	* rtti.c (get_tinfo_decl): Do not set DECL_VISIBILITY.
	(tinfo_base_init): Likewise.

	* g++.dg/ext/visibility/assign1.C: New test.
	* g++.dg/ext/visibility/new1.C: Likewise.

From-SVN: r85543
2004-08-04 05:27:52 +00:00
Mark Mitchell
c30b4add62 re PR c++/16338 (ICE when throwing a compound literal)
PR c++/16338
	* cp-tree.h (DECL_INTEGRAL_CONSTANT_VAR_P): New macro.
	* call.c (null_ptr_cst_p): Handle variables with constant
	initializers.
	* pt.c (convert_nontype_argument): Use
	DECL_INTEGRAL_CONSTANT_VAR_P.
	* semantics.c (finish_id_expression): Likewise.

	PR c++~/16489
	* decl.c (duplicate_decls): Reject duplicate namespace
	declarations.

	PR c++/16810
	* typeck.c (build_ptrmemfunc): Loosen assertion.

	PR c++/16338
	* g++.dg/init/null1.C: New test.
	* g++.dg/tc1/dr76.C: Adjust error marker.

	PR c++/16489
	* g++.dg/parse/namespace10.C: New test.

	PR c++/16810
	* g++.dg/inherit/ptrmem2.C: New test.

From-SVN: r85421
2004-08-02 01:58:52 +00:00
Mark Mitchell
4684cd27fc c-common.h (lang_post_pch_load): New variable.
* c-common.h (lang_post_pch_load): New variable.
	* c-pch.c (lang_post_pch_load): Define it.
	(c_common_read_pch): Use it.
	* cgraphunit.c (record_call_1): Give the front end a chance to
	record additional needed entities when a variable is marked as
	needed.
	* tlink.c (recompile_files): Robustify.
	(scan_linker_output): If a symbol is assigned to a file,
	but after recompilation is not present there, issue an error
	message.

	* cp-tree.h (IDENTIFIER_REPO_CHOSEN): Define.
	(lang_decl_flags): Narrow the width of "languages".  Add
	repo_available_p.
	(DECL_NEEDED_P): Remove.
	(FOR_EACH_CLONE): New macro.
	(DECL_REPO_AVAILABLE_P): Likewise.
	(DECL_TINFO_P): Likewise.
	(set_linkage_according_to_type): Declare.
	(import_export_vtable): Remove.
	(import_export_tinfo): Likewise.
	(mark_needed): New function.
	(decl_needed_p): Likewise.
	(note_vauge_linkage_fn): Likewise.
	(init_repo): Change prototype.
	(repo_template_used): Remove.
	(repo_template_instantiated): Likewise.
	(repo_emit_p): New function.
	(repo_export_class_p): Likewise.
	(no_linkage_check): Change prototype.
	* class.c (set_linkage_according_to_type): New function.
	(build_vtable): Use it.  Do not call import_export_vtable.  Set
	DECL_IGNORED_P if appropriate.
	* decl.c (duplicate_decls): Preserve DECL_REPO_AVAILABLE_P.
	(make_rtL_for_nonlocal_decls): Check for template instantiations
	explicitly.
	(grokfndecl): Adjust call to no_linkage_check.
	(set_linkage_for_static_data_member): New function.
	(grokvardecl): Use it.  Adjust call to no_linkage_check.
	(grokdeclarator): Use set_linkage_for_static_data_member.
	* decl2.c (note_vague_linkage_fn): New function.
	(note_vague_linkage_var): Likewise.
	(finish_static_data_member_decl): Use it.
	(import_export_vtable): Remove.
	(import_export_class): Use repo_export_class_p.
	(var_finalized_p): Simplify.
	(maybe_emit_vtables): Simplify.
	(mark_needed): New function.
	(decl_needed_p): Likewise.
	(import_export_decl): Add documentation and consistency checks.
	Use repo_emit_p.  Handle virtual tables and RTTI information
	here.
	(import_export_tinfo): Remove.
	(write_out_vars): Call import_export_decl.
	(cxx_callgraph_analyze_expr): Ensure that all vtables are emitted
	whenever one is.
	(finish_file): Use decl_needed_p.  Do not call import_export_decl
	for undefined static data members.  Do not warn about undefined
	inlines when using a repository.
	(mark_used): Use note_vague_linkage_fn.  Always defer template
	instantiations.
	* lex.c (cxx_init): Adjust call to init_repo.  Always set
	flag_unit_at_a-time.
	* method.c (synthesize_method): Remove unncessary
	import_export_decl call.
	(implicitly_declare_fn): Use set_linkage_according_to_type.
	* optimize.c (maybe_clone_body): Use FOR_EACH_CLONE.
	* pt.c (instantiate_class_template): Don't redundantly add classes
	to keyed_classes.  Don't call repo_template_used.
	(tsubst_decl): Set DECL_INTERFACE_KNOWN for instantiations of
	templates with internal linkage.
	(check_instantiated_args): Adjust call to no_linkage_check.
	(instantiate_template): Use FOR_EACH_CLONE.
	(mark_definable): New function.
	(mark_decl_instantiated): Use it.
	(do_decl_instantiation): Adjust tests for explicit instantiation
	after "extern template".
	(instantiate_class_member): Do not use repo_template_instantiated.
	(do_type_instantiation): Simplify.
	(instantiate_decl): Use mark_definable.  Check repo_emit_p.
	Simplify.
	* repo.c (repo_get_id): Remove.
	(original_repo): Remove.
	(IDENTIFIER_REPO_USED): Remove.
	(IDENTIFIER_REPO_CHOSEN): Remove.
	Remove all #if 0'd code.
	(repo_template_used): Remove.
	(repo_template_instantiated): Remove.
	(temporary_obstack_initialized_p): New variable.
	(init_repo): Register with lang_post_pch_load.  Avoid creating
	identifiers unnecessarily.  Don't use original_repo.  Close the
	file here.
	(reopen_repo_file_for_write): Not here.
	(finish_repo): Always write out a new repository file.
	(repo_emit_p): New function.
	(repo_export_class_p): Likewise.
	* rtti.c (get_tinfo_decl): Use set_linkage_according_to_type.
	(involves_incomplete_p): New function.
	(tinfo_base_init): Use it.
	(ptr_initializer): Remove non_public_ptr parameter.
	(ptm_initializer): Likewise.
	(get_pseudo_ti_init): Likewise.
	(unemitted_tinfo_decl_p): Remove.
	(emit_tinfo_decl): Use import_export_decl.
	* semantics.c (expand_body): Move updates of static_ctors and
	static_dtors to ...
	(expand_or_defer_fn): ... here.
	* tree.c (no_linkage_check): Add relaxed_p parameter.

	* g++.dg/abi/inline1.C: New test.
	* g++.dg/abi/local1-a.cc: Likewise.
	* g++.dg/abi/local1.C: Likewise.
	* g++.dg/abi/mangle11.C: Tweak location of warnings.
	* g++.dg/abi/mangle12.C: Likewise.
	* g++.dg/abi/mangle17.C: Likewise.
	* g++.dg/abi/mangle20-2.C: Likewise.
	* g++.dg/opt/interface1.C: Likewise.
	* g++.dg/opt/interface1.h: Likewise.
	* g++.dg/opt/interface1-a.cc: New test.
	* g++.dg/parse/repo1.C: New test.
	* g++.dg/template/repo1.C: Likewise.
	* g++.dg/warn/Winline-1.C: Likewise.
	* lib/gcc-dg.exp (gcc-dg-test-1): Fix -frepo handling.

From-SVN: r85309
2004-07-29 17:59:31 +00:00
Nathan Sidwell
63d1c7b35f tree.h (BINFO_BASE_ACCESSES): Accesses are a VEC(tree).
.:	* tree.h (BINFO_BASE_ACCESSES): Accesses are a VEC(tree).
	(BINFO_BASE_ACCESS): Adjust.
	(BINFO_BASE_ACCESS_APPEND): New.
	(struct tree_binfo): Make base_accesses a VEC(tree) pointer.
	* dbxout.c (dbxout_type): Adjust binfo access accessing.
	* dwarf2out.c (gen_member_die): Likewise.
	* tree-dump.c (deque_and_dump): Likewise.
cp:
	* decl.c (xref_basetypes): Adjust base access vector creation.
	* rtti.c (get_pseudo_ti_init, get_pseudo_ti_desc): Adjust base
	access accesses.
	* search.c (dynamic_cast_base_recurse, dfs_access_in_type): Likewise.

From-SVN: r85187
2004-07-26 08:23:58 +00:00
Niall Douglas
d7afec4b07 re PR c++/9283 (__attribute__((visibility ("hidden"))) not supported for class/struct)
PR c++/9283
	PR c++/15000
	* c-common.c (c_common_attribute_table): Allow
	handle_visibility_attribute to be called for types.
	(handle_visibility_attribute) When given a type, set the visibility
	bits on the TYPE_NAME.  When given a decl, don't set no_add_attrs
	so that we can check later whether the attribute was present. Added
	warning if attribute applied to non class type.
	* c-decl.c (diagnose_mismatched_decls): Updated rules for merging
	decls and checking that they are consistent.
	* common.opt: Added -fvisibility.
	* c.opt, c-opts.c: Added -fvisibility-inlines-hidden.
	* c-pragma.h, c-pragma.c: Added handle_pragma_visibility().
	* flags.h, tree.h: Added assorted support defines for overall patch
	* opts.c: Added parsing support for -fvisibility.
	* tree.c (build_decl): Set visibility for all decls to be whatever
	is in force at that time.
	* varasm.c (default_binds_local_p_1): Reworked logic determining
	when to make a symbol locally bound.
	* doc/invoke.texi: Added documentation for -fvisibility and
	-fvisibility-inlines-hidden.

	PR c++/15000
	PR c++/9283
	* class.c (check_field_decls): Apply hidden visibility if
	-fvisibility-inlines-hidden and inlined unless otherwise specified
	(build_vtable): Set vtable visibility to class visibility.
	(check_field_decls): Default static member visibility to class
	visibility.
	(check_methods): Default method visibility to class visibility.
	* cp-tree.h: Added CLASSTYPE_VISIBILITY and
	CLASSTYPE_VISIBILITY_SPECIFIED macro.
	* decl.c (duplicate_decls): New logic for merging definition decls
	with declaration decls. Added ignore & warning when non default
	applied to global operator new or delete.
	* method.c, optimize.c, rtti.c: Added setting of VISIBILITY_SPECIFIED
	wherever VISIBILITY was changed
	* rtti.c (get_tinfo_decl): Set typeinfo visibility to class
	visibility.
	(tinfo_base_init): Set typeinfo name visibility to class visibility.

	PR c++/9283
	PR c++/15000
	* gcc.dg/visibility-9.c, gcc.dg/visibility-a.c: New tests.
	* g++.dg/ext/visibility/: New directory.
	* g++.dg/ext/visibility-1.C, g++.dg/ext/visibility-2.C
	g++.dg/ext/visibility-3.C, g++.dg/ext/visibility-4.C,
	g++.dg/ext/visibility-5.C, g++.dg/ext/visibility-6.C,
	g++.dg/ext/visibility-7.C: Move to g++.dg/ext/visibility/.
	* g++.dg/ext/visibility/fvisibility.C,
	g++.dg/ext/visibility/fvisibility-inlines-hidden.C,
	g++.dg/ext/visibility/fvisibility-override1.C
	g++.dg/ext/visibility/fvisibility-override2.C
	g++.dg/ext/visibility/memfuncts.C
	g++.dg/ext/visibility/noPLT.C
	g++.dg/ext/visibility/pragma.C
	g++.dg/ext/visibility/pragma-override1.C
	g++.dg/ext/visibility/pragma-override2.C
	g++.dg/ext/visibility/staticmemfuncts.C
	g++.dg/ext/visibility/virtual.C: New tests.

Co-Authored-By: Brian Ryner <bryner@brianryner.com>

From-SVN: r85167
2004-07-25 22:52:22 +00:00
Bernardo Innocenti
eab03d5ade decl.c: Rename all identifiers named class' to cl'.
* decl.c: Rename all identifiers named `class' to `cl'.
	* cp-tree.h: Likewise.

From-SVN: r85151
2004-07-25 19:54:02 +02:00
Gabriel Dos Reis
99dd239f3c cp-tree.h (TYPE_SET_PTRMEMFUNC_TYPE): Use GGC_CNEW.
* cp-tree.h (TYPE_SET_PTRMEMFUNC_TYPE): Use GGC_CNEW.
        * typeck2.c (abstract_virtuals_error): Use GGC_NEW.
        * name-lookup.c (binding_entry_make): Use GGC_NEW.
        (binding_table_construct): Use GGC_CNEWVEC.
        (binding_table_new): Use GGC_NEW.
        (cxx_binding_make): Likewise.
        (begin_scope): Likewise.
        (push_to_top_level): Use GCC_CNEW.
        * parser.c (cp_token_cache_new): Likewise.
        (cp_token_cache_push_token): Likewise.
        (cp_lexer_new_main): Likewise.
        (cp_lexer_new_from_tokens): Likewise.
        (cp_parser_context_new): Likewise.
        (cp_parser_new): Likewise.
        (cp_lexer_new_from_tokens): Use GGC_NEWVEC.
        * lex.c (cxx_make_type): Use GGC_CNEW.
        (retrofit_lang_decl): Use GGC_NEWVAR.
        (cxx_dup_lang_specific_decl): Likewise.
        (copy_lang_type): Likewise.
        * decl.c (use_label): Use GGC_NEW instead of ggc_alloc.
        (save_function_data): Likewise.
        (lookup_label): Use GGC_CNEW instead of ggc_alloc_cleared.
        (cxx_push_function_context): Likewise.

From-SVN: r85150
2004-07-25 17:19:39 +00:00
Richard Henderson
b785f485ec c-decl.c (start_function): Set DECL_ARTIFICIAL and DECL_IGNORED_P on the RESULT_DECL.
* c-decl.c (start_function): Set DECL_ARTIFICIAL and DECL_IGNORED_P
        on the RESULT_DECL.
        * cgraphunit.c (cgraph_build_static_cdtor): Likewise.
        * integrate.c (copy_decl_for_inlining): Copy DECL_ARTIFICIAL and
        DECL_IGNORED_P to new decl.
ada/
        * utils.c (create_subprog_decl): Set DECL_ARTIFICIAL and
        DECL_IGNORED_P on RESULT_DECL.
cp/
        * decl.c (start_preparsed_function): Set DECL_ARTIFICIAL and
        DECL_IGNORED_P on RESULT_DECL.
        * semantics.c (finalize_nrv): Copy them too.
fortran/
        * trans-decl.c (gfc_build_function_decl): Set DECL_ARTIFICIAL
        and DECL_IGNORED_P on RESULT_DECL.
        (gfc_generate_constructors): Likewise.
java/
        * decl.c (build_result_decl): Set DECL_ARTIFICIAL and DECL_IGNORED_P.

From-SVN: r85145
2004-07-25 01:10:28 -07:00
Eric Christopher
caf93cb0d5 builtins.c (expand_builtin_setjmp_receiver): Fix comment for code removal.
2004-07-21  Eric Christopher  <echristo@redhat.com>

	* builtins.c (expand_builtin_setjmp_receiver): Fix comment for code
	removal.
	* c-decl.c (pop_scope): Ditto.
	* calls.c (expand_call): Remove call to current_nesting_level,
	update comment accordingly. Remove calls to expand_start_target_temps
	and expand_end_target_temps.
	* cfgexpand.c (construct_init_block): Remove call to
	expand_start_bindings_and_block.
	(construct_exit_block): Remove call to expand_end_bindings.
	* expr.c (safe_from_p): Remove BIND_EXPR handling.
	(expand_expr_real_1): Ditto. Fix formatting.
	(expand_vars): Delete.
	* stmt.c (POPSTACK): Remove block_stack.
	(stmt_status): Remove x_block_stack.
	(block_stack): Delete.
	(expand_start_bindings_and_block): Ditto.
	(expand_start_target_temps): Ditto.
	(expand_end_target_temps): Ditto.
	(current_nesting_level): Ditto.
	(warn_about_unused_variables): Ditto.
	(expand_end_bindings): Ditto.
	* tree.h: Remove declarations for above.

2004-07-21  Eric Christopher  <echristo@redhat.com>

	* decl.c (poplevel): Inline unused variable checking.
	Change formatting.

From-SVN: r85019
2004-07-21 19:23:03 +00:00
Steven Bosscher
406d77a4bb cp-tree.def (TINST_LEVEL): Make it an 'x' node.
* cp-tree.def (TINST_LEVEL): Make it an 'x' node.
	* cp-tree.h (tinst_level_t): New tree type.
	(union lang_tree_node): Handle it.
	(TINST_LOCATION): New accessor macro.
	(make_tinst_level): New prototype.
	* cp-lang.c (cp_tree_size): Handle TINST_LEVEL.
	* decl.c (cp_tree_node_structure): Likewise.
	* error.c (print_instantiation_full_context): Use TINST_LOCATION.
	(print_instantiation_partial_context): Likewise.
	* pt.c (pop_tinst_level): Likewise.
	 (push_tinst_level): Use make_tinst_level.
	* tree.c (make_tinst_level): New function.
	(cp_walk_subtrees): Walk TINST_DECL for a TINST_LEVEL node.

From-SVN: r84977
2004-07-20 23:20:08 +00:00
Nathan Sidwell
fa743e8cda tree.h: Include vec.h
.:	* tree.h: Include vec.h
	(DEF_VEC_P(tree)): New type.
	(BINFO_BASE_BINFOS, BINFO_N_BASE_BINFOS, BINFO_BASE_BINFO): Adjust.
	(BINFO_BASE_APPEND, BINFO_BASE_ITERATE): New.
	(BINFO_LANG_SLOT): Remove.
	(BINFO_SUBVTT_INDEX, BINFO_VPTR_INDEX, BINFO_PRIMARY_BASE_OF): New.
	(struct tree_binfo): Turn base_binfos into a trailing
	VEC(tree). Add vtt_subvtt, vtt_vptr, primary fields.
	(binfo_lang_slots): Remove.
	* tree.c (binfo_lang_slots): Remove.
	(make_tree_binfo_stat): Take a base binfo count, not a
	lang slot count.  Adjust.
	* Makefile.in (TREE_H): Add vec.h
	* alias.c (record_component_aliases): Adjust BINFO access.
	* dbxout.c (dbxout_type): Likewise.
	* dwarf2out.c (gen_member_die): Likewise.
	* sdbout.c (sdbout_one_type): Likewise.
	* tree-dump.c (deque_and_dump): Likewise.
	* config/i386/i386.c (classify_argument,
	contains_128bit_aligned_vector_p): Likewise.
	* config/sh/symbian.c (symbian_export_vtable_and_rtti_p): Likewise.
	* doc/c-tree.texi (Classes): Update BINFO documentation.
cp:
	* cp-tree.h (DEF_VEC_P(tree)): Remove here.
	(BINFO_SUBVTT_INDEX, BINFO_VPTR_INDEX, BINFO_PRIMARY_BASE_OF):
	Moved to common.
	(BINFO_LANG_SLOTS): Remove.
	* tree.c (copy_binfo): Adjust BINFO creation and accessors.
	* decl.c (xref_basetypes): Adjust BINFO creation and accessors.
	* class.c (check_bases): Adjust BINFO accessors.
	(determine_primary_base, finish_struct_bits,
	maybe_warn_about_overly_private_class, warn_hidden,
	walk_subobject_offsets, propagate_binfo_offsets, end_of_class,
	warn_about_ambiguous_bases, get_vfield_name,
	dump_class_hierarchy_r, build_vtt_inits, accumulate_vtbl_inits,
	add_vcall_offset_vtbl_entries_r): Likewise.
	* dump.c (cp_dump_tree): Likewise.
	* init.c (sort_mem_initializers, expand_member_init, build_delete,
	push_base_cleanups): Likewise.
	* method.c (do_build_copy_constructor, do_build_assign_ref,
	synthesize_exception_spec): Likewise.
	name-lookup.c (arg_assoc_class): Likewise.
	* pt.c (instantiate_class_template,
	get_template_base_recursive): Likewise.
	* rtti.c (get_pseudo_ti_init, get_pseudo_ti_desc): Likewise.
	* typeck2.c (process_init_constructor): Likewise.
	* search.c (lookup_base_r, dynamic_cast_base_recurse,
	dfs_access_in_type, dfs_walk_real, look_for_overrides,
	types_overlap_p, copied_binfo, original_binfo): Likewise.
	(binfo_for_vtable): Remove
java:
	* class.c (add_interface_do): Remove.
	(set_super_info, interface_of_p, maybe_add_interface,
	add_interface, make_class_data, layout_class,
	add_miranda_methods): Adjust BINFO accessors and addition.
	* expr.c (can_widen_reference_to, lookup_field): Adjust BINFO
	accessors.
	* jcf-write.c (generate_classfile): Likewise.
	* parse.y (patch_anonymous_class, check_inner_circular_reference,
	check_circular_reference, java_complete_class,
	check_abstract_method_definitions,
	java_check_abstract_method_definitions,
	check_interface_throws_clauses, java_check_abstract_methods,
	lookup_java_interface_method2,
	find_applicable_accessible_methods_list): Adjust BINFO accessors
	and addition.
	* typeck.c (find_method_in_interfaces): Adjust BINFO accessors.

From-SVN: r84949
2004-07-20 12:26:02 +00:00
Steven Bosscher
a6c0a76c5f c-common.h (check_case_value): Remove prototype.
* c-common.h (check_case_value): Remove prototype.
        (c_add_case_label): Adjust prototype.
        * c-common.c (check_case_value): Make static.
        (check_case_bounds): New function.
        (c_add_case_label): Use it.  Take new argument orig_type.
        * c-typeck.c (struct c_switch): New orig_type field.
        (c_start_case): Set it.
        (do_case): Pass it to c_add_case_label.
        * expr.c (expand_expr_real_1): Don't warn for out-of-bounds
        cases from here.  Add the labels in reverse order.
        * stmt.c (struct case_node): Adjust comment.  Remove balance field.
        (add_case_node): Return nothing, don't check for duplicate cases.
        Insert new case nodes in a list, not in an AVL tree.
        (expand_end_case_type): Don't turn a case tree into a case list.
        (case_tree2list): Remove.
        * tree.h (add_case_node): Adjust prototype.

cp/
        * cp-tree.h (struct lang_decl_flags): Unify the template_info and
        thunk_alias, and the access and virtual_offset fields.
        (THUNK_VIRTUAL_OFFSET, THUNK_ALIAS): Adjust.
        * decl.c (finish_case_label): Update c_add_case_node call.

testsuite/
	* testsuite/gcc.dg/switch-warn-1.c: New test.
	* testsuite/gcc.dg/switch-warn-2.c: New test.
        * gcc.c-torture/compile/pr14730.c: Update

From-SVN: r84947
2004-07-20 09:57:13 +00:00
Jason Merrill
d8472c75e8 re PR tree-optimization/16115 (double-destruction problem with argument passing via temporary (breaks auto_ptr))
PR c++/16115
        * stor-layout.c (relayout_decl): New fn.
        * tree.h: Declare it.
        (DECL_BY_REFERENCE): New macro.
        * cp/call.c (type_passed_as): Make the invisible reference type
        __restrict.
        * cp/cp-gimplify.c (gimplify_cleanup_stmt): Rename to
        cp_genericize_r.  Handle invisible reference lowering.
        (is_invisiref_parm): New fn.
        (cp_genericize): Adjust the types of invisible reference parms.
        Don't repeat the walk for clones.
        * cp/decl.c (store_parm_decls): Don't generate any code for clones.

From-SVN: r84887
2004-07-18 01:44:18 -04:00
Richard Henderson
7740f00d54 langhooks-def.h (LANG_HOOKS_TREE_INLINING_COPY_RES_DECL_FOR_INLINING, [...]): Remove.
* langhooks-def.h (LANG_HOOKS_TREE_INLINING_COPY_RES_DECL_FOR_INLINING,
        lhd_tree_inlining_copy_res_decl_for_inlining): Remove.
        * langhooks.c (lhd_tree_inlining_copy_res_decl_for_inlining): Remove.
        * langhooks.h (struct lang_hooks_for_tree_inlining): Remove
        copy_res_decl_for_inlining.

        * tree-inline.c (declare_return_variable): New modify_dest argument.
        Use it as the return value, when possible or manditory.  Handle
        TREE_ADDRESSABLE types.
        (expand_call_inline): Extract MODIFY_EXPR lhs for call.  Simplify
        replacement of CALL_EXPR.

cp/
        * cp-lang.c (LANG_HOOKS_TREE_INLINING_COPY_RES_DECL_FOR_INLINING): Die.
        * cp-tree.h (cp_copy_res_decl_for_inlining): Remove.
        * tree.c (cp_copy_res_decl_for_inlining): Remove.

From-SVN: r84831
2004-07-16 13:51:31 -07:00
Mark Mitchell
aaaa46d2b0 vec.h (VEC_address): New function.
* vec.h (VEC_address): New function.

	* cp-tree.h (lang_type_class): Remove has_real_assign_ref and
	has_abstract_assign_ref.  Make methods a VEC(tree) *.
	(TYPE_HAS_CONST_ASSIGN_REF): Add documentation.
	(CLASSTYPE_CONSTRUCTORS): Adjust for changes to CLASSTYPE_METHOD_VEC.
	(CLASSTYPE_DESTRUCTORS): Likewise.
	(TYPE_HAS_REAL_ASSIGN_REF): Remove.
	(TYPE_HAS_ABSTRACT_ASSIGN_REF): Likewise.
	(add_method): Change prototoype.
	* class.c (add_method): Remove error_p parameter.  Adjust for
	changes to CLASSTYPE_METHOD_VEC.
	(handle_using_decl): Adjust call to add_method.
	(maybe_warn_about_overly_private_class): Adjust for
	changes to CLASSTYPE_METHOD_VEC.
	(resort_type_method_vec): Likewise.
	(finish_struct_methods): Likewise.
	(check_for_override): Likewise.
	(warn_hidden): Likewise.
	(add_implicitly_declared_members): Defer creation of assignment
	operators.  Adjust call to add_method.
	(clone_function_decl): Adjust call to add_method.
	(check_bases_and_members): Don't set TYPE_HAS_REAL_ASSIGN_REF.
	(finish_struct_1): Use CLASSTYPE_DESTRUCTORS.
	* decl.c (grok_special_member_properties): Don't set
	TYPE_HAS_ABSTRACT_ASSIGN_REF.
	* decl2.c (check_classfn): Adjust for
	changes to CLASSTYPE_METHOD_VEC.
	* method.c (locate_dtor): Use CLASSTYPE_DESTRUCTORS.
	(locate_ctor): Use CLASSTYPE_CONSTRUCTORS.
	(locate_copy): Adjust for changes to CLASSTYPE_METHOD_VEC.
	(implicitly_declare_fn): Set DECL_SOURCE_LOCATION.  Do not call
	cp_finish_decl.
	* pt.c (check_explicit_specialization): Adjust for
	changes to CLASSTYPE_METHOD_VEC.
	(instantiate_class_template): Do not set
	TYPE_HAS_ABSTRACT_ASSIGN_REF.
	* ptree.c (cxx_print_type): Don't try to print
	CLASSTYPE_METHOD_VEC.
	* rtti.c (emit_support_tinfos): Use CLASSTYPE_DESTRUCTORS.
	* search.c (lookup_field_r): Adjust for
	changes to CLASSTYPE_METHOD_VEC.
	(lookup_fnfields): Likewise.
	(lookup_conversion_operator): Likewise.
	(lookup_fnfields_1): Likewise.  Create assignment operators
	lazily.
	(look_for_overrides_here): Adjust for
	changes to CLASSTYPE_METHOD_VEC.
	(add_conversions): Likewise.
	* semantics.c (finish_member_declaration): Adjust call to add_method.

From-SVN: r84796
2004-07-16 01:15:43 +00:00
Nathan Sidwell
48b456474c decl.c (xref_basetypes): Refactor.
* decl.c (xref_basetypes): Refactor.
	* tree.c (copy_base_binfos): Replace with ...
	(copy_binfo): ... this. Deep copy the given binfo, (not the just
	bases of the given base).
	* cp-tree.h (copy_base_binfo): Remove.
	(copy_binfo): Declare.

From-SVN: r84758
2004-07-15 16:15:52 +00:00
Nathan Sidwell
132c7dd3d9 class.c (finish_struct_bits): Don't set TYPE_HAS_CONVERSION here.
* class.c(finish_struct_bits): Don't set TYPE_HAS_CONVERSION here.
	* decl.c (xref_basetypes): Set it here.

From-SVN: r84756
2004-07-15 15:06:26 +00:00
Nathan Sidwell
37a247a0a0 class.c (check_bases): Don't set CLASSTYPE_NON_AGGREGATE here.
* class.c (check_bases): Don't set CLASSTYPE_NON_AGGREGATE here.
	Don't check for incomplete base.
	(get_vfield_name): Simplify while loop.
	* decl.c (xref_basetypes): Set CLASSTYPE_NON_AGGREGATE here.

From-SVN: r84747
2004-07-15 08:33:27 +00:00
Mark Mitchell
90ea9897a0 cp-tree.h (IDENTIFIER_VALUE): Remove.
* cp-tree.h (IDENTIFIER_VALUE): Remove.
	(BINFO_PUSHDECLS_MARKED): Likewise.
	(maybe_inject_for_scope_var): Likewise.
	(push_class_decls): Likewise.
	* name-lookup.h (push_class_binding): Remove.
	(innermost_non_namespace_value): New function.
	(outer_binding): Likewise.
	* class.c (add_method): Push bindings before adding to
	TYPE_METHODS.
	(restore_class_cache): Do not restore class_shadowed.
	(pushclass): Do not add USING_DECLs.  Do not call
	push_class_decls.
	* config-lang.in (gtfiles): Remove $(srcdir)/cp/search.c.
	* decl.c (pushdecl): Use outer_binding.
	(poplevel): Set the scope for an out-of-scope for-loop declaration
	appropriately.
	(cp_finish_decl): Don't call maybe_inject_for_scope_var.
	* name-lookup.c (new_class_binding): New function.
	(push_binding): Use it.
	(pushdecl): Use innermost_non_namespace_value.
	(maybe_inject_for_scope_var): Remove.
	(push_class_binding): Remove.
	(set_inherited_value_binding_p): New function.
	(get_class_binding): New function.
	(push_class_level_binding): Assert that the current_class_type is
	being defined.
	(outer_binding): New function.
	(innermost_non_namespace_value): Likewise.
	(lookup_name_real): Use outer_binding.
	(lookup_name_current_level): Ignore out-of-scope variables.
	* pt.c (check_template_shadow): Use innermost_non_namespace_value.
	(lookup_template_class): Likewise.
	* search.c (dfs_push_type_decls): Remove.
	(dfs_push_decls): Likewise.
	(setup_class_bindings): Likewise.
	(lookup_field_1): Handle USING_DECLs from dependent scopes.
	(marked_pushdecls_p): Remove.
	(unmarked_pushdecls_p): Remove.
	(marked_identifiers): Remove.
	(setup_class_bindings): Remove.
	(dfs_push_type_decls): Remove.
	(dfs_push_decls): Remove.
	(push_class_decls): Remove.

From-SVN: r84689
2004-07-14 15:34:30 +00:00
Mark Mitchell
1ff3c0761f re PR c++/16518 (mutable specifier only applies to first item in declaration list)
PR c++/16518
	PR c++/16337
	* decl.c (grokvardecl): Make declspecs parameter const.
	(grokdeclarator): Likewise.  Adjust accordingly.
	* decl.h (grokdeclarator): Adjust declaration.
	* parser.c (cp_parser_init_declarator): Do not clear
	decl_specifiers->attributes.

	PR c++/16518
	* g++.dg/parse/mutable1.C: New test.

From-SVN: r84646
2004-07-13 21:11:52 +00:00
Mark Mitchell
39fb05d071 cp-tree.h (lang_identifier): Remove class_value.
* cp-tree.h (lang_identifier): Remove class_value.
	(IDENTIFIER_CLASS_VALUE): Remove.
	(pop_class_decls): Likewise.
	(init_search_processing): Likewise.
	* class.c (handle_using_decl): Use lookup_member, not
	IDENTIFIER_CLASS_VALUE.
	(restore_class_cache): New function, split out from ...
	(pushclass): ... here.  Do not call clear_identifier_class_values.
	(invalidate_class_lookup_cache): Do not clear
	IDENTIFIER_CLASS_VALUE.
	(popclass): Do not call pop_class_decls.
	(maybe_note_name_used_in_class): Do not save names looked up after
	the class is complete.  Use lookup_member, not
	IDENTIFIER_CLASS_VALUE.
	* config-lang.in (gtfiles): Add $(srcdir)/cp/search.c.
	* decl.c (cxx_init_decl_processing): Do not call
	init_search_processing.
	* method.c (do_build_copy_constructor): Remove unnecessary code.
	(do_build_assign_ref): Likewise.
	* name-lookup.c (pushdecl): Use lookup_member, not
	IDENTIFIER_CLASS_VALUE.
	(set_identifier_type_value_with_scope): Set TREE_TYPE on the
	type_shadowed list.
	(poplevel_class): Do not restore IDENTIFIER_CLASS_VALUE.
	(push_class_binding): Do not set it.
	(clear_identifier_class_values): Remove.
	(push_class_level_binding): Do not set IDENTIFIER_CLASS_VALUE.
	(store_binding): Do not save it.
	(pop_from_top_level): Do not restore it.
	* name-lookup.h (cxx_saved_binding): Remove class_value.
	(clear_identifier_class_values): Remove.
	* ptree.c (cxx_print_identifier): Do not print
	IDENTIFIER_CLASS_VALUE.
	* search.c (search_obstack): Remove.
	(push_stack_level): Remove.
	(pop_stack_level): Remove.
	(search_level): Remove.
	(search_stack): Remove.
	(lookup_member): Don't check IDENTIFIER_CLASS_VALUE.
	(setup_class_bindings): Use IDENTIFIER_MARKED, not
	IDENTIFIER_CLASS_VALUE.
	(marked_identifiers): New variable.
	(push_class_decls): Clear IDENTIFIER_MARKED.
	(pop_class_decls): Don't call pop_search_level.
	(init_search_processing): Remove.

From-SVN: r84629
2004-07-13 16:22:06 +00:00
Giovanni Bajo
3143d517e4 decl.c (grok_op_properties): Reject [de-]allocation functions declared in a namespace, or declared as static.
* decl.c (grok_op_properties): Reject [de-]allocation functions
	declared in a namespace, or declared as static.

	* g++.dg/lookup/new2.C: New test.
	* g++.old-deja/g++.ns/new1.C: Remove (ill-formed).

From-SVN: r84567
2004-07-12 17:54:49 +00:00
Nathan Sidwell
2176cbb5b3 cp-tree.h (make_binfo): Remove.
* cp-tree.h (make_binfo): Remove.
	* decl.c (xref_basetypes): Use make_tree_binfo directly.
	* tree.h (copy_base_binfos): Likewise.
	(make_binfo): Remove.

From-SVN: r84566
2004-07-12 17:11:35 +00:00
Nathan Sidwell
cad7e87b11 call.c (build_user_type_conversion_1, [...]): Pass type directly to lookup_fnfields & build_special_member_call.
* call.c (build_user_type_conversion_1, build_new_op,
	check_constructor_callable, build_temp,
	perform_direct_initialization_of_possible): Pass type directly to
	lookup_fnfields & build_special_member_call.
	(build_special_member_call): Accept a type, and complete it.
	* class.c (finish_stuct_bits): Copy the BINFOs here.
	* cvt.c (ocp_convert): Pass type directly to
	build_special_member_call.
	* decl.c (build_ptrmemfunc_type): Call xref_bastypes here.
	(xref_basetypes): Allocate the binfo here. Adjust.
	* init.c (build_init, build_new_1): Pass type directly to
	build_special_member_call.
	* lex.c (cxx_make_type): Do not allocate binfo here.
	* name-lookup.c (arg_assoc_class): Incomplete types have no binfo.
	* parser.c (cp_parser_class_head): Always call xref_basetypes.
	* pt.c (instantiate_class_template): Likewise. Inhibit access
	checking for template friends.
	* ptree.c (cxx_print_type): Adjust record printing.
	* search.c (lookup_base): When taking a type, complete it before
	looking for a binfo.
	(lookup_member): Delay completing a type.
	(push_class_decls): Don't walk an incomplete type.
	(lookup_conversions): Likewise.
	* semantics.c (finish_stmt_expr_expr): Pass type directly to
	build_special_member_call.
	* tree.c (copy_base_binfos): Adjust.
	(make_binfo): Likewise.
	* typeck.c (build_modify_expr): Pass type directly to
	build_special_member_call.
	* typeck2.c (process_init_constructor): Check a binfo exists.
	(build_m_component_ref): Allow accessing an incomplete type.
	(build_functional_cast): Pass type directly to
	build_special_member_call.

From-SVN: r84562
2004-07-12 16:06:40 +00:00
Giovanni Bajo
7fb213d8e9 re PR c++/2204 (G++ doesn't check (member) function parameter for abstract-ness.)
PR c++/2204
	* config-lang.in (gtfiles): Add typeck2.c.
	* Make-lang.in: Tweak typeck2.c dependencies, and add rule for
	gt-cp-typeck2.h.
	* cp-tree.h: Declare complete_type_check_abstract.
	* typeck2.c (pat_calc_hash, pat_compare,
	complete_type_check_abstract): New functions.
	(abstract_virtuals_error): If the type is abstract, register the
	declaration within abstract_pending_vars for further checks.
	Inspect also dependent types. Handle IDENTIFIER_NODEs as decl.
	* decl.c (cp_finish_decl): Do not strip array types.
	(create_array_type_for_decl): Check for abstractness of the element
	type.
	(complete_vars): Call complete_type_check_abstract.
	* class.c (finish_struct): Prepare a list of virtual functions for
	template types, and call complete_vars on it to check for abstractness.

	PR c++/2204
	* g++.dg/other/abstract2.C: New test.

From-SVN: r84552
2004-07-12 10:07:30 +00:00
Paolo Bonzini
55e99d5226 re PR tree-optimization/14107 (Return warnings don't work without optimizations enabled)
gcc/ChangeLog:
2004-06-29  Paolo Bonzini  <bonzini@gnu.org>

	PR tree-optimization/14107
	* gimplify.c (gimplify_return_expr): Accept a
	RETURN_EXPR with an error argument.
	* tree-optimize.c (init_tree_optimization_passes):
	Run pass_warn_function_return at -O0.

gcc/cp/ChangeLog:
2004-06-29  Paolo Bonzini  <bonzini@gnu.org>

	PR tree-optimization/14107
	* decl.c (finish_function): Remove temporary band-aid.

From-SVN: r84550
2004-07-12 06:56:45 +00:00
Joseph Myers
9dcf6e7366 langhooks.h (estimate_num_insns, [...]): Remove hooks.
* langhooks.h (estimate_num_insns, pushlevel, poplevel, set_block,
	maybe_build_cleanup, update_decl_after_saving): Remove hooks.
	* langhooks.c (lhd_clear_binding_stack): Remove.
	* langhooks-def.h (lhd_clear_binding_stack,
	LANG_HOOKS_MAYBE_BUILD_CLEANUP,
	LANG_HOOKS_UPDATE_DECL_AFTER_SAVING,
	LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS, LANG_HOOKS_PUSHLEVEL,
	LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK): Remove.
	(LANG_HOOKS_CLEAR_BINDING_STACK): Define to lhd_do_nothing.
	* system.h (LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS,
	LANG_HOOKS_PUSHLEVEL, LANG_HOOKS_SET_BLOCK,
	LANG_HOOKS_MAYBE_BUILD_CLEANUP,
	LANG_HOOKS_UPDATE_DECL_AFTER_SAVING, LANG_HOOKS_POPLEVEL): Poison.
	* tree.h (poplevel): Don't declare.
	* c-lang.c (LANG_HOOKS_CLEAR_BINDING_STACK, LANG_HOOKS_PUSHLEVEL,
	LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK): Remove.
	* objc/objc-lang.c (LANG_HOOKS_CLEAR_BINDING_STACK,
	LANG_HOOKS_PUSHLEVEL, LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK):
	Remove.

ada:
	* misc.c (LANG_HOOKS_CLEAR_BINDING_STACK, LANG_HOOKS_PUSHLEVEL,
	LANG_HOOKS_POPLEVEL, LANG_HOOKS_SET_BLOCK): Remove.

cp:
	* cp-lang.c (LANG_HOOKS_MAYBE_BUILD_CLEANUP, LANG_HOOKS_PUSHLEVEL,
	LANG_HOOKS_POPLEVEL, LANG_HOOKS_UPDATE_DECL_AFTER_SAVING): Remove.
	* cp-tree.h (poplevel): Declare.
	(set_block): Remove.
	* decl.c (set_block): Remove.

fortran:
	* f95-lang.c (set_block): Remove.
	(gfc_clear_binding_stack): New.
	(LANG_HOOKS_CLEAR_BINDING_STACK): Define.
	(struct binding_level): Remove block_created_by_back_end.
	(clear_binding_level): Likewise.
	(poplevel): Don't handle block_created_by_back_end.

java:
	* java-tree.h (set_block): Remove.
	* lang.c (java_clear_binding_stack): New.
	(LANG_HOOKS_CLEAR_BINDING_STACK): Define.
	* decl.c (struct binding_level): Remove this_block.
	(clear_binding_level): Likewise.
	(poplevel): Don't handle this_block.
	(set_block): Remove.

treelang:
	* treetree.c (set_block): Remove.
	(struct binding_level): Remove block_created_by_back_end.
	(clear_binding_level): Likewise.
	(tree_code_create_function_initial,
	tree_code_create_function_wrapup): Call pushlevel and poplevel
	directly rather than through hooks.
	(poplevel): Don't handle block_created_by_back_end.

From-SVN: r84499
2004-07-11 10:53:06 +01:00
Mark Mitchell
89b578be68 cp-tree.h (saved_scope): Remove x_previous_class_type and x_previous_class_values...
* cp-tree.h (saved_scope): Remove x_previous_class_type and
	x_previous_class_values; add x_previous_class_level.
	(previous_class_type): Remove.
	(previous_class_values): Remove.
	(previous_class_level): New macro.
	* class.c (pushclass): Restore the identifier cache more
	expeditiously.
	(invalidate_class_lookup_cache): Use vector for class_shadowed and
	previous_class_values.
	* decl.c (poplevel): Likewise.
	* name-lookup.c (cxx_binding_init): New function.
	(cxx_binding_make): Use it.
	(push_binding): For a binding in a class level, use a vector of
	cp_class_binding nodes.
	(push_binding_level): New function.
	(begin_scope): Use it.
	(leave_scope): Do not put class binding levels on the free list.
	(print_binding_level): Adjust for the fact that class_shadowed is
	a vector.
	(poplevel_class): Likewise.
	(clear_identifier_class_values): Likewise.
	(push_class_level_binding): Likewise.
	(set_class_shadows): Remove.
	(store_binding): New function.
	(store_class_bindings): New function.
	(push_to_top_level): Use store_class_bindings as appropriate.
	(pop_from_top_level): Use previous_class_level, not
	previous_class_type.
	* name-lookup.h (cp_class_binding): New type.
	(cp_binding_level): Use a vector object for class_shadowed.
	(push_binding_level): Declare.
	(set_class_shadows): Remove.

From-SVN: r84259
2004-07-08 04:32:27 +00:00
Nathan Sidwell
604a320594 tree.h (TYPE_BINFO_OFFSET, [...]): Remove.
* tree.h (TYPE_BINFO_OFFSET, TYPE_BINFO_VTABLE,
	TYPE_BINFO_VIRTUALS, TYPE_BINFO_BASETYPES,
	TYPE_BINFO_BASETYPE): Remove.
	(BINFO_BASETYPES, BINFO_N_BASETYPES, BINFO_BASETYPE): Rename
	to ...
	(BINFO_BASE_BINFOS, BINFO_N_BASE_BINFOS, BINFO_BASE_BINFO): ...
	here.
	(BINFO_BASEACCESSES, BINFO_BASEACCESS): Rename to ...
	(BINFO_BASE_ACCESSES, BINFO_BASE_ACCESS): ... here.
	(BINFO_INHERITANCE_CHAIN): Redocument as it is actually used.
	(struct tree_binfo): Rename base_types to base_binfos.
	* alias.c (record_component_aliases): Adjust BINFO macros.
	* dbxout.c (dbxout_type): Likewise.
	* dwarf2out.c (gen_member_die): Likewise.
	* sdbout.c (sdbout_one_type): Likewise.
	* tree-dump.c (deque_and_dump): Likewise.
	* config/i386/i386.c (classify_argument,
	contains_128bit_aligned_vector_p): Likewise.

	* cp/cp-tree.h (CLASSTYPE_N_BASECLASSES): Remove.
	* cp/class.c (build_primary_vtable, check_bases,
	determine_primary_base, finish_struct_bits,
	maybe_warn_about_overly_private_class, dfs_find_final_overrider_q,
	get_basefndecls, warn_hidden, walk_subobject_offsets,
	build_base_fields, create_vtable_ptr, propagate_binfo_offsets,
	layout_virtual_bases, end_of_class, warn_about_ambiguous_bases,
	finish_struct_1, get_vfield_name, contains_empty_class_p,
	dump_class_hierarchy_r, finish_vtbls, build_vtt_inits,
	dfs_ctor_vtable_bases_queue_p, accumulate_vtbl_inits,
	add_vcall_offset_vtbl_entries_r, cp_fold_obj_type_ref): Adjust
	BINFO macros.
	* cp/decl.c (xref_basetypes): Likewise.
	* cp/dump.c (cp_dump_tree): Likewise.
	* cp/error.c (dump_expr): Likewise.
	* cp/init.c (sort_mem_initializers, expand_member_init,
	push_base_cleanups): Likewise.
	* cp/method.c (do_build_copy_constructor, do_build_assign_reg,
	synthesize_exception_spec): Likewise.
	* cp/name-lookup.c (arg_assoc_class):
	* cp/pt.c (instantiate_class_template, tsubst,
	get_template_base_recursive):
	* cp/ptree.c (cxx_print_type):
	* cp/rtti.c (get_psuedo_ti_init, get_pseudo_ti_desc): Likewise.
	* cp/search.c (lookup_base_r, dynamic_cast_base_recurse,
	dfs_access_in_type, access_in_type, lookup_field_queue_p,
	bfs_walk, dfs_walk_real, look_for_overrides, markedp, unmarkedp,
	marked_pushdecls_p, unmarked_pushdecls_p, dfs_debug_markedp,
	dfs_debug_unmarkedp, dfs_check_overlap, dfs_no_overlap_yet,
	binfo_for_vtable, copied_binfo, original_binfo): Likewise
	* cp/tree.c (copy_base_binfos, make_binfo): Likewise.
	* cp/typeck.c (commmon_base_type): Likewise
	* cp/typeck2.c (process_init_constructor): Likewise

	* java/java-tree.h (CLASSTYPE_SPUER): Adjust BINFO macros.
	(TYPE_NVIRTUALS, TYPE_VTABLE): Likewise.
	* java/class.c (set_super_info, class_depth, interface_of_p,
	maybe_add_interface, add_interface, make_class_data,
	layout_class, add_miranda_methods): Adjust BINFO macros.
	* java/expr.c (can_widen_reference_to, lookup_field): Likewise.
	* java/jcf-write.c (generate_classfile): Likewise.
	* java/parse.y (patch_anonymous_class,
	check_inner_circular_reference, check_circular_reference,
	java_complete_class, check_abstract_method_definitions,
	java_check_abstract_method_definitions,
	check_interface_throws_clauses, java_check_abstract_methods,
	lookup_java_interface_method2,
	find_applicable_accessible_methods_list): Likewise.
	* java/typeck.c (find_method_in_interface): Likewise.
	* java/verify.c (merge_types): Likewise.

From-SVN: r84198
2004-07-07 10:21:04 +00:00
Joseph Myers
82b5e52a9e toplev.h (NO_FRONT_END_DIAG, [...]): Define.
* toplev.h (NO_FRONT_END_DIAG, ATTRIBUTE_GCC_FE_DIAG): Define.
	(warning, error, pedwarn, sorry): Use ATTRIBUTE_GCC_FE_DIAG.

cp:
	* decl.c (check_tag_decl): Name redeclared type in diagnostic.

From-SVN: r84174
2004-07-06 23:42:45 +01:00
Nathan Sidwell
809e3e7fec tree.h (TREE_VIA_VIRTUAL): Rename to ...
* tree.h (TREE_VIA_VIRTUAL): Rename to ...
	(BINFO_VIRTUAL_P): ... here. Require TREE_BINFO only.
	(BINFO_MARKED, BINFO_FLAG_[16]): New binfo flags.
	* dbxout.c (dbxout_type): Use BINFO_VIRTUAL_P.
	* dwarf2out.c (add_data_member_location_attribute): Likewise.
	(gen_inheritance_die): Likewise.
	* tree-dump.c (deque_and_dump): Likewise.
	* doc/c-tree.texi (Binfos): Add under reconstruction note.

	* cp/cp-tree.h (BINFO_MARKED): Remove.
	(BINFO_VTABLE_PATH_MARKED, BINFO_NEW_VTABLE_MARKED,
	BINFO_DEPENDENT_BASE_P, BINFO_LOST_PRIMARY_P,
	BINFO_INDIRECT_PRIMARY_P): Use appropriate BINFO_FLAG_n.
	(SET_BINFO_NEW_VTABLE_MARKED): Use BINFO_VIRTUAL_P.
	* cp/class.c (build_base_path): Use BINFO_VIRTUAL_P.
	(mark_primary_bases, determine_primary_base, base_derived_from,
	dfs_find_final_overrider, dfs_find_final_overrider_q,
	dfs_find_inal_overrider_post, update_vtable_entry_for_fn,
	dfs_modify_vtables, walk_subobject_offsets,
	layout_nonempty_base_or_field, build_base_field,
	build_base_fields, propagate_binfo_offsets, layout_virtual_bases,
	end_of_class, get_vfield_name, dump_class_hierarchy, dump_vtable,
	finish_vtbls, build_vtt_inits, dfs_build_secondary_vptr_vtt_inits,
	build_ctor_vtbl_group, accumulate_vtble_inits,
	dfs_accumulate_vtbls_inits, build_vbase_offset_vtbl_entries,
	build_vcall_offset_vtbl_entries, add_vcall_offset_vtbl_entries_r,
	add_vcall_offset_vtbl_entries_1): Likewise.
	* cp/decl.c (xref_basetypes): Incomming virtual base indicated by
	TREE_TYPE. Adjust.
	* cp/dump.c (cp_dump_tree): Use BINFO_VIRTUAL_P.
	* cp/init.c (finish_init_stmts, sort_mem_initializers,
	emit_mem_initializers, build_vtble_address, expand_member_init,
	push_base_cleanups): Likewise.
	* cp/method.c (do_build_copy_constructor): Likewise.
	* cp/pt.c (instantiate_class_template,
	get_template_base_recursive): Likewise.
	* cp/rtti.c (dfs_class_hint_mark, get_pseudo_ti_init,
	get_pseudo_ti_desc): Likewise.
	* cp/search.c (lookup_base_r, dynamic_cast_base_recurse,
	binfo_from_vbase, binfo_via_virtual, copied_binfo,
	original_binfo): Likewise.
	* cp/semantics.c (finish_base_specifier): Virtualness is indicated
	by TREE_TYPE.
	* cp/tree.c (copy_base_binfos): Use BINFO_VIRTUAL_P.

	* java/java-tree.h (CLASS_HAS_SUPER_FLAG): Use BINFO_FLAG_1.
	* java/class.c (add_interface_do): Use BINFO_VIRTUAL_P.

From-SVN: r84148
2004-07-06 08:51:32 +00:00
Mark Mitchell
a95d27c83b revert: re PR tree-optimization/16115 (double-destruction problem with argument passing via temporary (breaks auto_ptr))
Revert:
	2004-06-24  Jason Merrill  <jason@redhat.com>
	PR c++/16115
	* decl.c (grokparms): Give the PARM_DECL reference type if the
	parameter is passed by invisible reference.

From-SVN: r84147
2004-07-06 07:16:32 +00:00
Richard Kenner
5377d5ba39 langhooks-def.h (LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P): Extra arg.
* langhooks-def.h (LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P): Extra arg.
	* langhooks.h (var_mod_type_p): Likewise.
	* c-decl.c (finish_decl): Add extra arg to variably_modified_type_p.
	* expr.c (count_type_elements): Properly handle return from
	array_type_nelts and properly test for overflow.
	* gimplify.c (gimplify_init_constructor): Properly handle return
	from array_type_nelts.
	(gimplify_addr_expr): Remove redundant clear of TREE_SIDE_EFFECTS.
	* integrate.c (copy_decl_for_inlining): Correct comments.
	* tree-inline.c (remap_decl): Update comments, remove dead code,
	and copy DECL_FIELD_OFFSET and DECL_QUALIFIER, if they exist.
	(remap_type): Only remap if variably modified by vars in function
	being inlined.
	(copy_body_r): Use compatible_type langhooks to see when can fold.
	(setup_one_parameter): Don't remap type.
	(inline_forbidden_p_1): Add arg to variably_modified_type_p.
	* tree.c (recompute_tree_invarant_for_addr_expr): Properly
	compute TREE_INVARIANT for decl case.
	(find_var_from_fn): New function.
	(variably_modified_type_p): Add arg and call new function.
	* tree.h (variably_modified_type_p): Add extra arg.

	* cp/cp-lang.c (cp_var_mod_type_p): Add extra arg.
	* cp/decl.c (grokdeclarator): Extra arg to variably_modified_type_p.
	* cp/pt.c (check_instantiated_args, unify): Likewise.

From-SVN: r84144
2004-07-05 22:20:16 -04:00
Zack Weinberg
6de6668085 langhooks.c: Don't include gt-langhooks.h.
* langhooks.c: Don't include gt-langhooks.h.
	(var_labelno): Delete.
	(lhd_set_decl_assembler_name): Do not append a distinguishing
	number to file-scope internal-linkage declarations for the first
	input file, even if they have DECL_CONTEXT set.  Use DECL_UID of
	the declaration itself (if at block scope), or its containing
	TRANSLATION_UNIT_DECL (if at file scope) for the distinguishing
	number.

	* opts.c (cur_in_fname): New global.
	* opts.h: Declare it.
	* tree.c: Include opts.h.
	(make_node_stat): If creating a TRANSLATION_UNIT_DECL, give it
	DECL_UID equal to cur_in_fname.
	(copy_node_stat): Do not change DECL_UID when copying a
	TRANSLATION_UNIT_DECL.
	(build_common_tree_nodes): Adjust next_decl_uid to reserve the
	range 0 .. num_in_fnames-1 for TRANSLATION_UNIT_DECLs.

	* c-decl.c (c_static_assembler_name): Delete.
	* c-tree.h (c_static_assembler_name): Delete prototype.
	* c-lang.c, objc/objc-lang.c: Don't override
	LANG_HOOKS_SET_DECL_ASSEMBLER_NAME.

	* Makefile.in (tree.o): Update dependencies.
	(GTFILES): Remove langhooks.c.

cp:
	* decl.c (cxx_init_decl_processing): Call
	build_common_tree_nodes before creating the global NAMESPACE_DECL.

From-SVN: r84123
2004-07-05 17:28:37 +00:00
Mark Mitchell
717733d453 re PR c++/16270 (ICE on inner member template)
PR c++/16270
	* decl.c (grokdeclarator): Robustify.

From-SVN: r84029
2004-07-02 21:59:42 +00:00
Richard Henderson
6a0bec2ce1 tree.h (immediate_size_expand): Delete.
* tree.h (immediate_size_expand): Delete.
        * stor-layout.c (immediate_size_expand): Delete.
        (variable_size): Don't look at it.
        * c-decl.c (push_parm_decl): Don't frob immediate_size_expand.
        (start_function): Likewise.
        * cfgexpand.c (construct_exit_block): Likewise.
        * function.c (init_function_start, expand_function_end): Likewise.
        * tree-optimize.c (tree_rest_of_compilation): Likewise.
cp/
        * decl.c (start_preparsed_function): Don't set immediate_size_expand.
        * method.c (use_thunk): Likewise.
fortran/
        * trans-decl.c (gfc_generate_function_code): Don't set
        immediate_size_expand.
        (gfc_generate_constructors): Likewise.

From-SVN: r83946
2004-06-30 17:38:38 -07:00
Per Bothner
93409b8c45 Conditionally compile support for --enable-mapped_location.
* decl.c (pop_label):  Handle (imperfectly) USE_MAPPED_LOCATION case.
	* decl2.c:  If USE_MAPPED_LOCATION, don't do some line number
	adjustments - which I don't understand.
	* error.c (dump_decl):  Rename "<interrnal>" to "<built-in>".
	* error.c:  Use LOCATION_FILE and EXPR_LOCATION macros.
	(print_instantiation_partial_context):  Use expand_location.
	* decl.c (duplicate_decl):  Use new DECL_IS_BUILTIN macro.
	* name-lookup.c:  Likewise.
	* lex.c (cxx_init):  Likewise.  Also use BUILTINS_LOCATION.
	* name-lookup.c:  Use input_line macro.
	* parser.c (cp_lexer_get_preprocessor_token):  Use UNKNOWN_LOCATION.
	(cp_parser_statement):  Rename locaal variable statement_locus to
	statement_location and use SET_EXPR_LOCATION macro.
	* pt.c:  Handle USE_MAPPED_LOCATION case.  Use new macros.
	* tree.c (cp_walk_subtrees):  Likewise.

From-SVN: r83923
2004-06-30 11:23:35 -07:00
Nathan Sidwell
58c42dc283 Use vector API for vbase list.
* cp-tree.h: Include vec.h
	(DEF_VEC_P (tree)): New type.
	(struct lang_type_class): Change vbase's member type.
	(binfo_for_vbase): Declare.
	* class.c (determine_primary_base, base_derived_from,
	update_vtable_entry_for_fn, walk_subobject_offsets, end_of_class,
	warn_about_ambiguous_bases, dfs_accumulate_vtbl_inits,
	build_vtbl_initializer): Adjust.
	* decl.c (xref_basetypes): Adjust, accumulate upper bound of
	vbases.
	* init.c (sort_mem_initializers, expand_member_init,
	push_base_cleanups): Adjust.
	* method.c (do_build_copy_constructor): Adjust.
	* search.c (get_pure_virtuals, copied_binfo, original_binfo): Adjust.
	(binfo_for_vbase): New.
	* tree.c (copy_base_binfos): Adjust.

From-SVN: r83770
2004-06-28 10:34:42 +00:00
Mark Mitchell
3c01e5dffb cp-tree.h (cp_cv_quals): New type.
* cp-tree.h (cp_cv_quals): New type.
	(cp_declarator): Use it instead of "tree" as appropriate.
	(grok_method_quals): Adjust prototype.
	(grokclassfn): Likewise.
	(do_friend): Likewise.
	* decl.c (grokfndecl): Use cp_cv_quals, not tree.
	(grokdeclarator): Likewise.
	* decl2.c (grok_method_quals): Likewise.
	(grokclassfn): Likewise.
	* friend.c (do_friend): Likewise.
	* method.c (implicitly_declare_fn): Adjust call to grokclassfn.
	* parser.c (make_call_declarator): Use cp_cv_quals, not tree.
	(make_pointer_declarator): Likewise.
	(make_reference_declarator): Likewise.
	(make_ptrmem_declarator): Likewise.
	(cp_parser_ptr_operator): Likewise.
	(cp_parser_cv_qualifier_seq_opt): Likewise.
	(cp_parser_cv_qualifier_opt): Remove.
	(cp_parser_new_declarator_opt): Adjust call to
	cp_parser_ptr_operator.
	(cp_parser_conversion_declaration_opt): Likewise.
	(cp_parser_declarator): Use cp_cv_quals, not tree.
	(cp_parser_direct_declarator): Likewise.

From-SVN: r83729
2004-06-27 03:03:55 +00:00
Richard Kenner
350fae6628 c-common.c (c_safe_from_p, [...]): Deleted.
2004-06-26  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

        * c-common.c (c_safe_from_p, c_walk_subtrees): Deleted.
        * c-common.def (DECL_STMT): Remove.
        * c-common.h (DECL_STMT_DECL): Deleted.
        (COMPOUNT_LITERAL_EXPR_DECL): Use DECL_EXPR_DECL.
        (c_safe_from_p, c_walk_subtrees): Deleted.
        * c-decl.c, c-parse.in, c-pretty-print.c: DECL_STMT now DECL_EXPR.
        * c-dump.c (c_dump_tree, case DECL_STMT): Deleted.
        * c-gimplify.c (gimplify_decl_stmt): Deleted.
        (gimplify_compound_literal_expr): Use DECL_EXPR_DECL
        and gimplify_and_add.
        (c_gimplify_expr, case DECL_EXPR): New case.
        (c_gimplify_expr, case DECL_STMT): Deleted.
        * c-lang.c (LANG_HOOKS_SAFE_FROM_P): Likewise.
        (LANG_HOOKS_TREE_INLINING_WALK_SUBTREES): Likewise.
        * expr.c (safe_from_p, case 's'): New case.
        * gimplify.c (gimplify_decl_expr): New function.
        (gimplify_expr, case DECL_EXPR): New case.
        * tree-inline.c (walk_tree): Walk into all fields of a type and
        decl only if they are in a DECL_EXPR.
        (mark_local_for_remap_r): Minor code cleanup.
        * tree-outof-ssa.c (discover_nonconstant_array_refs_r): Add else.
        * tree.c (has_cleanups, case DECL_EXPR): New case.
        * tree.def (DECL_EXPR): New code.
        * tree.h (DECL_EXPR_DECL): New macro.

        * objc/objc-lang.c (LANG_HOOKS_SAFE_FROM_P): Deleted.

From-SVN: r83721
2004-06-26 17:11:23 -04:00
Mark Mitchell
f1b90a04e0 decl.c (grokdeclarator): Restore error messages about __thread.
* decl.c (grokdeclarator): Restore error messages about __thread.
	* parser.c (cp_parser_decl_specifier_seq): Likewise.

From-SVN: r83636
2004-06-25 04:48:53 +00:00
Jason Merrill
3db4a9b428 re PR tree-optimization/16115 (double-destruction problem with argument passing via temporary (breaks auto_ptr))
PR c++/16115
        * decl.c (grokparms): Give the PARM_DECL reference type if the
        parameter is passed by invisible reference.

From-SVN: r83609
2004-06-24 16:07:23 -04:00
Mark Mitchell
62d1db179e Make-lang.in (cp/lex.o): Do not depend on cp/lex.h.
* Make-lang.in (cp/lex.o): Do not depend on cp/lex.h.
	(cp/decl.o): Likewise.
	(cp/decl2.o): Likewise.
	(cp/pt.o): Likewise.
	(cp/semantics.o): Likewise.
	* config-lang.in (gtfiles): Do not reference cp/lex.h.
	* class.c: Do not include lex.h.
	(add_implicitly_declared_members): Do not use
	adding_implicit_members.
	(check_bases_and_members): Do not talk about grok_x_components.
	* cp/cp-tree.h (adding_implicit_members): Remove.
	(cp_storage_class): New type.
	(cp_decl_spec): Likewise.
	(cp_decl_specifier_seq): Likewise.
	(cp_parameter_declarator): Use it for the decl_specifiers field.
	(check_tag_decl): Adjust prototype.
	(shadow_tag): Likewise.
	(groktypename): Likewise.
	(start_decl): Likewise.
	(start_function): Likewise.
	(start_method): Likewise.
	(grok_x_components): Remove.
	(grokfield): Adjust prototype.
	(grokbitfield): Likewise.
	(finish_member_class_template): Remove.
	* decl.c: Do not include lex.h.
	(adding_implicit_members): Do not define.
	(check_tag_decl): Do not use trees to represent decl-specifiers.
	(shadow_tag): Likewise.
	(groktypename): Likewise.
	(start_decl): Likewise.
	(grokvardecl): Likewise.
	(grokdeclarator): Likewise.
	(grokparms): Likewise.
	(start_function): Likewise.
	(start_method): Likewise.
	* decl.h (grokdeclarator): Adjust prototype.
	* decl2.c: Do not include lex.h.
	(grok_x_components): Remove.
	(grokfield): Do not use trees to represent decl-specifiers.
	(grokbitfield): Likewise.
	* lex.c: Do not include lex.h.
	* lex.h: Remove.
	* parser.c: Include target.h.
	(clear_decl_specs): New function.
	(cp_parser_translation_unit): Do not use trees to represent
	decl-specifiers.
	(cp_parser_postfix_expression): Likewise.
	(cp_parser_new_type_id): Likewise.
	(cp_parser_condition): Likewise.
	(cp_parser_simple_declaration): Likewise.
	(cp_parser_decl_specifier_seq): Likewise.
	(cp_parser_function_specifier_opt): Likewise.
	(cp_parser_conversion_type_id): Likewise.
	(cp_parser_template_parameter): Likewise.
	(cp_parser_explicit_instantiation): Likewise.
	(cp_parser_type_specifier): Likewise.
	(cp_parser_simple_type_specifier): Likewise.
	(cp_parser_init_declarator): Likewise.
	(cp_parser_type_id): Likewise.
	(cp_parser_type_specifier_seq): Likewise.
	(cp_parser_parameter_declaration): Likewise.
	(cp_parser_member_declaration): Likewise.
	(cp_parser_exception_declaration): Likewise.
	(cp_parser_function_definition_from_specifiers_and_declarator):
	Likewise.
	(cp_parser_single_declaration): Likewise.
	(cp_parser_save_member_function_body): Likewise.
	(cp_parser_friend_p): Likewise.
	(cp_parser_set_storage_class): New function.
	(cp_parser_set_decl_spec_type): Likewise.
	* pt.c: Do not include lex.h.
	* semantics.c: Likewise.
	(finish_member_class_template): Remove.

From-SVN: r83584
2004-06-24 06:48:44 +00:00
Mark Mitchell
058b15c1dc cp-tree.def (NEW_EXPR): Add a fourth slot.
* cp-tree.def (NEW_EXPR): Add a fourth slot.
	* cp-tree.h (PARMLIST_ELLIPSIS_P): Remove.
	(TREE_PARMLIST): Likewise.
	(CALL_DECLARATOR_PARMS): Likewise.
	(CALL_DECLARATOR_QUALS): Likewise.
	(CALL_DECLARATOR_EXCEPTION_SPEC): Likewise.
	(cp_declarator_kind): New type.
	(cp_parameter_declarator): Likewise.
	(cp_declarator): Likewise.
	(cp_error_declarator): Likewise.
	(no_parameters): Likewise.
	(groktypename): Change prototype.
	(start_decl): Likewise.
	(start_handler_parms): Likewise.
	(get_scope_of_declarator): Likewise.
	(start_function): Likewise.
	(start_preparsed_function): New function.
	(start_function): Change prototype.
	(start_method): Likewise.
	(grokfield): Likewise.
	(grokbitfield): Likewise.
	(build_new): Likewise.
	(make_pointer_declarator): Remove.
	(make_reference_declarator): Likewise.
	(make_call_declarator): Likewise.
	(set_quals_and_spec): Likewise.
	(process_template_parm): Change prototype.
	(begin_function_definition): Remove.
	(finish_parmlist): Remove.
	* decl.c (groktypename): Do not use trees to represent
	declarators.
	(start_decl): Likewise.
	(start_handler_parms): Remove.
	(get_scope_of_declarator): Reimplement.
	(grokdeclarator): Do not use trees to represent	declarators.
	(grokparms): Likewise.
	(start_function): Likewise.
	(start_method): Likewise.
	(build_void_list_mode): Do not use TREE_PARMLIST.
	* decl.h (grokdeclarator): Change prototype.
	* decl2.c (grok_method_quals): Robustify.
	(grok_x_components): Do not use trees to represent declarators.
	(grokfield): Likewise.
	(grokbitfield): Likewise.
	(start_objects): Build FUNCTION_DECLs, not declarators.
	(start_static_storage_duration_function): Likewise.
	* init.c (build_new): Simplify.
	* lex.c (make_pointer_declarator): Remove.
	(make_reference_declarator): Likewise.
	(make_call_declarator): Likewise.
	(set_quals_and_spec): Likewise.
	* method.c (use_thunk): Use start_preparsed_function.
	(synthesize_method): Likewise.
	(implicitly_declare_fn): Build FUNCTION_DECLs, not declarators.
	* optimize.c (maybe_clone_body): Use start_preparsed_function.
	* parser.c (cp_error_declarator): New variable.
	(declarator_obstack): Likewise.
	(alloc_declarator): New function.
	(make_declarator): Likewise.
	(make_id_declarator): Likewise.
	(make_pointer_declarator): Likewise.
	(make_reference_declarator): Likewise.
	(make_ptrmem_declarator): Likewise.
	(make_call_declarator): Likewise.
	(make_array_declarator): Likewise.
	(no_parameters): New variable.
	(make_parameter_declarator): Likewise.
	(cp_parser_check_for_definition_in_return_type): Do not use trees
	to represent declarators.
	(cp_parser_translation_unit): Likewise.
	(cp_parser_new_expression): Likewise.
	(cp_parser_new_type_id): Likewise.
	(cp_parser_new_declarator_opt): Likewise.
	(cp_parser_direct_new_declarator): Likewise.
	(cp_parser_condition): Likewise.
	(cp_parser_declaration_statement): Likewise.
	(cp_parser_declaration): Likewise.
	(cp_parser_conversion_type_id): Likewise.
	(cp_parser_conversion_declarator_opt): Likewise.
	(cp_parser_template_parameter_list): Likewise.
	(cp_parser_template_parameter): Likewise.
	(cp_parser_explicit_instantiation): Likewise.
	(cp_parser_init_declarator): Likewise.
	(cp_parser_declarator): Likewise.
	(cp_parser_direct_declarator): Likewise.
	(cp_parser_type_id): Likewise.
	(cp_parser_parameter_declaration_clause): Likewise.
	(cp_parser_parameter_declaration_list): Likewise.
	(cp_parser_parameter_declaration): Likewise.
	(cp_parser_member_declaration): Likewise.
	(cp_parser_exception_declaration): Likewise.
	(cp_parser_check_declarator_template_parameters): Likewise.
	(cp_parser_function_definition_from_specifiers_and_declarator):
	Likewise.
	(cp_parser_save_member_function_body): Likewise.
	* pt.c (process_template_parm): Add is_non_type parameter.
	(convert_template_argument): Adjust call to groktypename.
	(tsubst_call_declarator_parms): Remove use of TREE_PARMLIST.
	(tsubst): Do not expect declarators.
	(tsubst_copy_and_build): Adjust NEW_EXPR case to handle additional
	argument.
	(instantiate_decl): Use start_preparsed_function.
	* semantics.c (begin_function_definition): Remove.
	(finish_parmlist): Remove.
	* cp-mudflap.c (mflang_flush_calls): Build FUNCTION_DECLs, not
	declarators.

From-SVN: r83482
2004-06-22 07:18:38 +00:00
Richard Kenner
44de5aeb00 alias.c (adjust_offset_for_component_ref): Use component_ref_field_offset.
* alias.c (adjust_offset_for_component_ref): Use
	component_ref_field_offset.
	* c-decl.c (build_array_declarator): Add news args for ARRAY_REF.
	* c-gimplify.c (gimplify_expr_stmt): Use alloc_stmt_list.
	(gimplify_decl_stmt): Call gimplify_type_sizes for type.
	For decl, call gimplify_one_sizepos and use statement list.
	(gimplify_compound_literal_expr): New arg PRE_P.
	Add statement to PRE_P list and return DECL.
	(c_gimplify_expr, case COMPOUND_LITERAL_EXPR): Add arg to
	gimplify_compound_literal_expr.
	* c-tree.h (getdecls): Deleted.
	* c-typeck.c (build_component_ref): Add operand for COMPONENT_REF.
	(build_array_ref): Add two operands for ARRAY_REF.
	(build_unary_op): Set TREE_INVARIANT and TREE_CONSTANT for
	COMPOUND_LITERAL_EXPR.
	* coverage.c (tree_coverage_counter_ref): Add new operands
	for ARRAY_REF.
	* emit-rtl.c (component_ref_for_mem_expr): Add new operand
	for COMPONENT_REF.
	(set_mem_attributes_minus_bitpos): Use array_ref_low_bound
	and array_ref_element_size.
	(widen_memory_access):Use component_ref_field_offset.
	* explow.c (update_nonlocal_goto_save_area): Add two operands
	for ARRAY_REF.
	* expr.c (array_ref_element_size, array_ref_low_bound): New functions.
	(component_ref_field_offset): Likewise.
	(get_inner_reference): Use them.
	(expand_expr_real_1, case ARRAY_REF): Use array_ref_low_bound.
	* fold-const.c (fold, case EQ_EXPR): Properly handle DECL_SIZE.
	(fold_read_from_constant_string): Use array_ref_low_bound.
	Verify that result is a character type.
	(build_fold_indirect_ref): Add two operands for ARRAY_REF.
	* function.c (expand_function_start): Likewise.
	* gimple-low.c (expand_var_p): Delete duplicated line.
	* gimplify.c: Add static decls for local functions.
	(cgraph.h): Now included.
	(create_tmp_var): Remove check for ARRAY_TYPE.
	(copy_if_shared_r): Look at bounds and sizes of types.
	(build_and_jump): Return alloc_stmt_list instead of build_empty_stmt.
	(gimplify_exit_expr, shortcut_cond_expr): Likewise.
	(gimplify_save_expr, gimple_push_cleanup): Likewise.
	(gimplify_init_constructor): Likewise.
	WANT_VALUE now bool.
	If empty list with no result wanted, return GS_UNHANDLED.
	Add additional operands for ARRAY_REF and COMPONENT_REF.
	(canonicalize_component_ref): Convert to &array[L].
	(gimplify_array_ref_to_plus): Use array_ref_element_size and
	array_ref_lower_bound.
	(build_addr_expr_with_type, build_addr_expr): New functions.
	(gimplify_compound_lval): WANT_LVALUE now bool.
	Major rework to allow handle_component_p and initialize and
	gimplify new operands for ARRAY_REF, ARRAY_RANGE_REF, and
	COMPONENT_REF.
	(gimplify_array_ref): Deleted.
	(gimplify_self_mod_expr): WANT_VALUE now bool.
	(gimplify_modify_expr): Gimplify to_p and from_p later.
	Factor out code into gimplify_modify_expr_rhs and call twice.
	Move variable-size code earlier and handle PLACEHOLDER_EXPR.
	(gimplify_modify_expr_rhs, gimplify_variable_sized_compare): New fns.
	(gimplify_addr_expr, case VIEW_CONVERT_EXPR): New case.
	(gimplify_expr, case ARRAY_REF): Delete special case.
	Instead handle like COMPONENT_REF; also do ARRAY_RANGE_REF,
	IMAGPART, and REALPART the same way.
	(gimplify_expr, case VIEW_CONVERT_EXPR): New case.
	(gimplify_expr): Call gimplify_variable_sized_compare if applicable.
	Call alloc_stmt_list instead of build_empty_stmt.
	Deal with _REF that's volatile.
	(gimplify_type_sizes, gimplify_one_sizepos): New functions.
	(unshare_body, unvisit_body): New functions.
	(gimplify_body): Call them.
	* stmt.c (expand_stack_alloc): Don't expand TYPE_MAX_VALUE.
	* stor-layout.c (get_pending_sizes): Don't change SAVE_EXPR_CONTEXT.
	* tree-alias-common.c (get_alias_var): Also skip ARRAY_RANGE_REF.
	* tree-cfg.c (tree_node_can_be_shared): Treat ARRAY_RANGE_REF
	like ARRAY_REF.
	(verify_expr, case ADDR_EXPR): Use handled_component_p.
	* tree-dfa.c (get_virtual_var): Likewise.
	* tree-dump.c (dequeue_and_dump, case COMPONENT_REF, ARRAY_REF):
	New cases to dump new operands; likewise for ARRAY_RANGE_REF.
	* tree-eh.c (tree_could_trap, case ARRAY_RANGE_REF): Like ARRAY_REF.
	* tree-gimple.c (is_gimple_addr_expr_arg): Add ARRAY_RANGE_REF
	and INDIRECT_REF.
	(get_base_address): Use handled_component_p.
	* tree-gimple.h (gimplify_type_sizes, gimplify_one_sizepos): New.
	* tree-line.c (walk_tree): Walk more things for types and decls.
	* tree-mudflap.c (mf_build_check_statement_for): Add new operands
	for ARRAY_REF and COMPONENT_REF.
	(mx_xform_derefs_1): Clean up usage of decl sizes.
	* tree-nested.c (build_addr): Use handled_component_p.
	(walk_stmts, case CATCH_EXPR): Add missing "break".
	(get_static_chain, get_frame_field): Add new operand for COMPONENT_REF.
	(finalize_nesting_tree_1): Likewise.
	(convert_nonlocal_reference, case ARRAY_RANGE_REF): Like ARRAY_REF
	and process additional operands.
	(convert_local_reference): Likewise.
	* tree-outof-ssa.c (discover_nonconstant_array_refs_r): Treat
	ARRAY_RANGE_REF similarly to ARRAY_REF.
	* tree-pretty-print.c (dump_generic_node, case QUAL_UNION_TYPE): Handle
	like RECORD_TYPE.
	(dump_generic_node, case COMPONENT_REF): Print offset operand.
	(dump_generic_node, case ARRAY_RANGE_REF): Treat like ARRAY_REF
	and print lower bound and element size for both.
	(op_prio, case ARRAY_RANGE_REF): Like ARRAY_REF.
	* tree-sra.c (csc_build_component_ref): Add new operand.
	(scalarize_call_expr): Use get_base_address.
	* tree-ssa-ccp.c (widen_bitfield): Clean up size handling.
	(maybe_fold_offset_to_array_ref): Rework to handle input having an
	ARRAY_REF, refine handling of lower bound, and add new operands
	for ARRAY_REF.
	(maybe_fold_to_component_ref): Add new operand for COMPONENT_REF.
	(maybe_fold_stmt_indirect): Only fold *&B to B if types match.
	(maybe_fold_stmt_addition): Only handle constant lower bound.
	* tree-ssa-operands.c (get_expr_operands): Minor rearrangements.
	Treat ARRAY_REF and ARRAY_RANGE_REF the same; look at extra operands.
	Look at new offset operand of COMPONENT_REF.
	* tree-ssa.c (set_is_used): Use handled_component_p.
	* tree.c (substitute_in_expr, case COMPONENT_REF): Add new operand.
	(stabilize_reference, case COMPONENT_REF): Likewise.
	(stabilize_reference, case ARRAY_RANGE_REF, ARRAY_REF): Similarly.
	(recompute_tree_invariant_for_addr_expr): Completely rework to
	be more precise.  Also set TREE_SIDE_EFFECTS.
	(build1_stat, case ARRAY_EXPR): Don't handle TREE_SIDE_EFFECTS here.
	(build2_stat, build3_stat, build4_stat): For references,
	propagate TREE_THIS_VOLATILE.
	(get_unwidened): Add new operand for COMPONENT_REF.
	(get_narrower): Likewise; use host_integerp for DECL_SIZE.
	* tree.def (COMPONENT_REF): Add new operand.
	(ARRAY_REF, ARRAY_RANGE_REF): Add two new operands.
	* tree.h (array_ref_element_size, array_ref_low_bound): New decls.
	(component_ref_field_offset): Likewise.
	* config/alpha/alpha.c (alpha_va_start): Add new op for COMPONENT_REF.
	(alpha_gimplify_va_arg): Likewise.
	* config/i386/i386.c (ix86_va_start, ix86_gimplify_va_arg): Likewise.
	* config/i860/i860.c (i860_va_start, i860_va_arg): Likewise.
	* config/iq2000/iq2000.c (iq2000_va_arg): Likewise.
	* config/mips/mips.c (mips_va_start, mips_va_arg): Likewise.
	* config/rs6000/rs6000.c (rs6000_va_start, rs6000_gimplify_va_arg):
	Likewise.
	* config/s390/s390.c (s390_va_start, s390_gimplify_va_arg): Likewise.
	* config/sh/sh.c (sh_va_start, sh_va_arg): Likewise.
	* config/stormy16/stormy16.c (xstormy1_expand_builin_va_start):
	Likewise.
	(xstormy16_expand_builtin_va_arg): Likewise.
	* config/xtensa/xtensa.c (xtensa_va_start, xtensa_va_arg): Likewise.

	* cp/call.c (build_vfield_ref): Add new operand for COMPONENT_REF.
	(build_new_method_call): Likewise.
	* cp/decl.c (local_variable_p_walkfn): Don't walk into types.
	* cp/decl2.c (grok_array_decl): Add new operands for ARRAY_REF.
	(build_anon_union_vars): Add new operand for COMPONENT_REF.
	* cp/init.c (buld_new): Add new operand for ARRAY_REF.
	* cp/method.c (do_build_copy_constructor): New op for COMPONENT_REF.
	(do_build_assign_ref): Likewise.
	* cp/parser.c (cp_parser_direct_new_declarator): Add new operands
	for ARRAY_REF.
	(cp_parser_direct_declarator): Likewise.
	* cp/pt.c (tsubst): Likewise.
	(tsubst_copy, tsubst_copy_and_build): Likewise; also add new operand
 	for COMPONENT_REF.
	* cp/semantics.c (finish_non_static_data_member): Add new operand
	for COMPONENT_REF.
	* cp/typeck.c (build_class_member_access_expr): Likewise.
	(build_class_member_access_expr, finish_class_member_access_expr):
	Likewise.
	(build_ptrmemfunc_access_expr): Likewise.
	(build_array_ref): Add new operands for ARRAY_REF.
	* cp/typeck2.c (split_nonconstant_init_1): Likewise; COMPONENT_REF too.
	* cp/tree.c (count_trees_r, no_linkage_helper): Don't walk in types.

	* fortran/f95-lang.c (LANG_HOOKS_GIMPLE_BEFORE_INLINING): Deleted.
	* fortran/trans-array.c (gfc_conv_descriptor_data): Add operand
	for COMPONENT_REF.
	(gfc_conv_descriptor_offset, gfc_conv_descriptor_dtype): Likewise.
	(gfc_conv_descriptor_dimension, gfc_conv_descriptor_stride): Likewise.
	(gfc_conv_descriptor_lbound, gfc_conv_descriptor_ubound): Likewise.
	* fortran/trans-common.c (create_common): Likewise.
	* fortran/trans-expr.c (gfc_conv_component_ref): Likewise.
	* fortran/trans-io.c (set_parameter_value): Likewise.
	(set_parameter_ref, set_string, set_flag, io_result): Likewise.
	(transfer_expr): Likewise.
	* fortran/trans-decl.c (gfc_trans_auto_character_variable):
	Set up to get DECL_SIZE and DECL_SIZE_UNIT gimplified.
	(gfc_simplify_function): New function.
	(gfc_generate_function-code): Properly handle nested functions.
	* fortran/trans.c (gfc_build_array_ref): Add two new operands
	for ARRAY_REF.

	* java/class.c (build_class_ref): Add new operand for COMPONENT_REF.
	(build_static_field_ref): Likewise and add new operands for ARRAY_REF.
	* java/constants.c (build_ref_from_constant_pool): Likewise.
	* java/expr.c (build_java_array_length_access): Likewise.
	(build_get_class, build_field_ref, build_known_method_ref): Likewise.
	(invoke_build_dtable, build_invokevirtual): Likewise.
	(build_invokeinterface, java_expand_expr): Likewise.
	(emit_init_test_initialization): Likewise.
	* java/java-gimplify.c (java_gimplify_new_array_init): Likewise.
	* java/parse.y (make_qualifed_name, build_array_ref): Likewise.

	* objc/ojbc-act.c (generate_static_references): Add additional
	operands to ARRAY_REF.
	(generate_strings, build_method_prototype_list_template): Likewise.
	(generate_protocol_list): Likewise.

From-SVN: r83474
2004-06-21 23:07:05 -04:00
Richard Henderson
5a5086621e c-common.def (IF_STMT, [...]): Move to cp-tree.def.
* c-common.def (IF_STMT, CLEANUP_STMT): Move to cp-tree.def.
        * c-common.h (IF_COND, THEN_CLAUSE, ELSE_CLAUSE, CLEANUP_BODY,
        CLEANUP_EXPR, CLEANUP_DECL): Move to cp-tree.h.
        (c_common_stmt_codes): Remove IF_STMT, CLEANUP_STMT.
        * c-dump.c (c_dump_tree): Move IF_STMT, CLEANUP_STMT to cp_dump_tree.
        * c-pretty-print.c (pp_c_statement): Similarly.
        * c-gimplify.c (gimplify_cleanup_stmt, gimplify_cleanup_stmts,
        gimplify_if_stmt): Move to cp-gimplify.c.
        (c_genericize, c_gimplify_expr): Don't call them.
        * c-semantics.c (push_cleanup): Move to cp/semantics.c.
        * c-typeck.c (push_cleanup): New.
        (c_begin_if_stmt, c_finish_if_cond, c_finish_then, c_finish_else,
        c_finish_if_stmt): Use COND_EXPR.
        * tree.h (CLEANUP_EH_ONLY): Update documentation.
cp/
        * cp-tree.def (CLEANUP_STMT, IF_STMT): Move from c-common.def.
        * cp-gimplify.c (gimplify_if_stmt): Move from c-gimplify.c.
        (cp_gimplify_expr): Call it.
        (gimplify_cleanup_stmt): Move from c-gimplify.c.
        (cp_genericize): New.
        * decl.c (finish_function): Call it.
        * cp-tree.h (cp_stmt_codes): Add CLEANUP_STMT, IF_STMT.
        (CLEANUP_BODY, CLEANUP_EXPR, CLEANUP_DECL): Move from c-common.h.
        (IF_COND, THEN_CLAUSE, ELSE_CLAUSE): Likewise.
        (cp_genericize): Declare.
        * cxx-pretty-print.c (pp_cxx_statement): Add CLEANUP_STMT, IF_STMT.
        * dump.c (cp_dump_tree): Likewise.
        * semantics.c (push_cleanup): Move from c-semantics.c.

From-SVN: r83407
2004-06-20 02:18:13 -07:00
Zack Weinberg
84b8b0e04d c-common.h (has_c_linkage): New interface.
* c-common.h (has_c_linkage): New interface.
	* c-cppbuiltin.c: Include target.h.
	(c_cpp_builtins): Define __PRAGMA_REDEFINE_EXTNAME and
	__PRAGMA_EXTERN_PREFIX when appropriate.
	* c-pragma.c: Include target.h.
	Document clarified semantics of symbol-renaming #pragmas.
	(handle_pragma_redefine_extname, handle_pragma_extern_prefix)
	(maybe_apply_renaming_pragma): Rewrite according to clarified
	semantics.  Always recognize, but do not necessarily execute.
	(init_pragma): Unconditionally register symbol-renaming pragmas.
	* system.h: Poison HANDLE_PRAGMA_REDEFINE_EXTNAME
	and HANDLE_PRAGMA_EXTERN_PREFIX.
	* target.h (struct gcc_target): Add handle_pragma_redefine_extname
	and handle_pragma_extern_prefix flags.
	* target-def.h: Add defaults for TARGET_HANDLE_PRAGMA_REDEFINE_EXTNAME
	and TARGET_HANDLE_PRAGMA_EXTERN_PREFIX.
	* Makefile.in (c-pragma.o, c-cppbuiltin.o): Update dependencies.
	* config/sol2.h: Define TARGET_HANDLE_PRAGMA_REDEFINE_EXTNAME,
	not HANDLE_PRAGMA_REDEFINE_EXTNAME.
	(TARGET_OS_CPP_BUILTINS): No need to define __PRAGMA_REDEFINE_EXTNAME.
	(TRANSFER_FROM_TRAMPOLINE): Prototype mprotect.
	* config/alpha/osf.h: Define TARGET_HANDLE_PRAGMA_EXTERN_PREFIX,
	not HANDLE_PRAGMA_EXTERN_PREFIX.
	(TARGET_OS_CPP_BUILTINS): No need to define __PRAGMA_EXTERN_PREFIX.
	* doc/extend.texi (Solaris Pragmas, Tru64 Pragmas): Combine
	into one section "Symbol-Renaming Pragmas"; clarify; document
	adjusted semantics.

	* builtins.c (expand_builtin): Do not issue error for a builtin
	with no special case code and no DECL_ASSEMBLER_NAME; just do the
	library call.
	* c-decl.c (builtin_function): Don't call make_decl_rtl.
	* c-objc-common.c (has_c_linkage): Stub implementation.
	* cgraphunit.c (cgraph_expand_function)
	(cgraph_remove_unreachable_nodes): Don't clear DECL_ARGUMENTS.

cp:
	* cp-lang.c (has_c_linkage): Implement.

	* cp-tree.h (set_mangled_name_for_decl): Don't prototype.
	* decl.c (duplicate_decls): Use COPY_DECL_RTL.
	(builtin_function_1): Don't call make_decl_rtl.
	(build_cp_library_fn): Don't call set_mangled_name_for_decl.
	(grokvardecl): Don't call mangle_decl.
	* except.c (nothrow_libfn_p): Look at DECL_NAME, not
	DECL_ASSEMBLER_NAME.
	* method.c (set_mangled_name_for_decl): Delete.
	* name-lookup.c (pushdecl): When a local extern shadows a
	file-scope declaration of the same object, give both DECLs the
	same DECL_UID.
	* typeck.c (cxx_mark_addressable): Don't set TREE_ADDRESSABLE
	on DECL_ASSEMBLER_NAME.

testsuite:
	* g++.dg/expr/enum1.C, g++.dg/opt/const3.C: Declare abort with
	extern "C".
	* g++.dg/other/pragma-re-1.C: Add comments.

From-SVN: r83405
2004-06-20 08:34:54 +00:00
Richard Henderson
5882f0f31a c-common.def (COMPOUND_STMT): Remove.
* c-common.def (COMPOUND_STMT): Remove.
        * c-common.c (finish_fname_decls): Don't look through it.
        * c-typeck.c (c_tree_expr_nonnegative_p): Likewise.
        * c-common.h (COMPOUND_BODY): Remove.
        (c_common_stmt_codes): Remove COMPOUND_STMT.
        * c-dump.c (c_dump_tree): Likewise.
        * c-gimplify.c (c_gimplify_stmt): Likewise.
        * c-pretty-print.c (pp_c_statement): Likewise.
        * tree.h (DECL_SAVED_TREE): Update commentary.
        * doc/c-tree.texi (ASM_EXPR): Rename from ASM_STMT.
        (CASE_LABEL_EXPR): Rename from CASE_LABEL.
        (GOTO_EXPR): Rename from GOTO_STMT.
        (GOTO_FAKE_P): Remove.
        (COMPOUND_STMT): Remove.
        (HANDLER): Update wrt COMPOUND_STMT.
        (STMT_EXPR): Likewise.
        (LABEL_EXPR): Rename from LABEL_STMT.
        (SCOPE_STMT): Remove.
        * objc/objc-act.c (objc_build_try_catch_finally_stmt): Don't look
        through COMPOUND_STMT.
cp/
        * cp-tree.h (COMPOUND_STMT_TRY_BLOCK, COMPOUND_STMT_BODY_BLOCK): Kill.
        (BIND_EXPR_TRY_BLOCK, BIND_EXPR_BODY_BLOCK): New.
        * cxx-pretty-print.c (pp_cxx_function_definition): Move handling
        of CTOR_INITIALIZER ...
        (pp_cxx_statement): ... here.
        * decl.c (begin_function_body): Don't set COMPOUND_STMT_BODY_BLOCK.
        (finish_function): Use alloc_stmt_list to zap entire function.
        * parser.c (cp_parser_compound_statement): Update commentary.
        * pt.c (tsubst_expr): Use BIND_EXPR instead of COMPOUND_STMT.
        * semantics.c (begin_compound_stmt, finish_compound_stmt): Likewise.
        (finish_stmt_expr): Don't look through COMPOUND_STMT.

From-SVN: r83281
2004-06-16 18:24:06 -07:00
Richard Henderson
9e14e18fd1 c-common.def (GOTO_STMT, LABEL_STMT): Remove.
* c-common.def (GOTO_STMT, LABEL_STMT): Remove.
        * c-common.c (c_add_case_label): Use LABEL_EXPR.
        * c-common.h (GOTO_FAKE_P, LABEL_STMT_LABEL): Remove.
        (c_common_stmt_codes): Remove GOTO_STMT, LABEL_STMT.
        * c-dump.c (c_dump_tree): Likewise.
        * c-gimplify.c (c_gimplify_stmt): Likewise.
        * c-pretty-print.c (pp_c_statement): Likewise.
        * c-parse.in (stmt): Use GOTO_EXPR.
        (label): Use LABEL_EXPR.
        * c-semantics.c (build_stmt): Set TREE_TYPE to void.
        * tree-inline.c (copy_body_r): Don't build empty BLOCKs.
cp/
        * decl.c (finish_destructor_body): Use LABEL_EXPR.
        * parser.c (cp_parser_statement): Update commentary.
        * pt.c (tsubst_expr): Use LABEL_EXPR, GOTO_EXPR.
        * semantics.c (finish_goto_stmt, finish_label_stmt): Likewise.
        * tree.c (mark_local_for_remap_r): Likewise.

From-SVN: r83255
2004-06-16 11:21:20 -07:00
Richard Henderson
325c369115 c-common.c (lang_gimplify_stmt): Remove next_p argument.
* c-common.c (lang_gimplify_stmt): Remove next_p argument.
	(if_elt, if_stack, if_stack_space, c_expand_start_cond, c_finish_then,
	c_expand_end_cond, c_expand_start_else, c_finish_else, c_begin_if_stmt,
	c_begin_while_stmt, c_finish_while_stmt_cond): Move to c-typeck.c.
	(finish_fname_decls, fname_decl): Use statement_lists.
	(c_expand_expr_stmt): Don't set last_expr_type.
	(c_type_hash): Fix indentation.
	(c_safe_from_p): Don't follow TREE_CHAIN.
	(c_tree_chain_matters_p): Remove.
	* c-common.def (SCOPE_STMT): Remove.
	(CLEANUP_STMT): Redefine to contain its own body.
	* c-common.h (struct stmt_tree_s): Remove x_last_stmt,
	x_last_expr_type, x_last_expr_filename, x_scope_stmt_stack.
	Add x_cur_stmt_list.
	(last_tree, last_expr_type, last_expr_filename, RECHAIN_STMTS): Remove.
	(cur_stmt_list): New.
	(STATEMENT_LIST_STMT_EXPR): New.
	(SCOPE_BEGIN_P, SCOPE_END_P, SCOPE_STMT_BLOCK, SCOPE_NULLIFIED_P,
	SCOPE_NO_CLEANUPS_P, SCOPE_PARTIAL_P, NEW_FOR_SCOPE_P): Remove.
	(CLEANUP_BODY): New.
	(CLEANUP_DECL): Move to operand 2.
	(c_common_stmt_codes): Remove SCOPE_STMT.
	(COMPOUND_STMT_NO_SCOPE, COMPOUND_STMT_BODY_BLOCK): Remove.
	* c-decl.c (c_scope_stmt_stack, current_scope_stmt_stack): Remove.
	(c_push_function_context, c_pop_function_context): Don't save it.
	(finish_decl): Set TREE_USED on the decl for a cleanup.
	Use push_cleanup.
	(store_parm_decls): Use statement lists.
	(finish_function): Remove compstmt rule workaround.  Use statement
	lists.  Call finish_fname_decls after finalizing the body.
	(c_begin_compound_stmt): Move to c-typeck.c.
	* c-dump.c (c_dump_tree): Remove SCOPE_STMT.
	* c-gimplify.c (gimplify_cleanup_stmt, gimplify_cleanup_stmts): New.
	(c_genericize): Invoke them.
	(c_gimplify_stmt): Don't look through TREE_CHAIN.  Kill SCOPE_STMT.
	(c_build_bind_expr): Export.
	(gimplify_block, gimplify_cleanup): Remove.
	(gimplify_condition): Use gimplify_stmt.
	(gimplify_for_stmt): Remove FOR_INIT_STMT chaining hack.
	(gimplify_if_stmt): Remove recursion hack.
	(c_gimplify_expr): Remove STMT_EXPR handling.
	(stmt_expr_last_stmt, gimplify_stmt_expr): Remove.
	(is_last_stmt_of_scope): Remove.
	* c-lang.c (LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P): Remove.
	* c-mudflap.c (mflang_flush_calls): Use c_begin_compound_stmt,
	c_end_compound_stmt.
	* c-objc-common.c (build_cdtor): Likewise.
	* c-parse.in (primary): Use c_finish_stmt_expr.
	(push_scope, pop_scope): Remove.
	(c99_block_start, compstmt_start): Use c_begin_compound_stmt.
	(c99_block_end, compstmt): Use c_end_compound_stmt.
	(c99_block_lineno_labeled_stmt): Likewise.
	(compstmt_primary_start): Use c_begin_stmt_expr.
	(simple_if, select_or_iter_stmt): Update calls to stmt builders.
	(do_stmt_start): Fill in body directly.
	(lineno_stmt): Avoid setting lineno on constants.
	* c-pretty-print.c (pp_c_statement): Handle STATEMENT_LIST.
	Remove SCOPE_STMT.
	* c-semantics.c (begin_stmt_tree): Remove.
	(push_stmt_list, re_push_stmt_list, pop_stmt_list): New.
	(add_stmt): Use statement lists.
	(add_scope_stmt, finish_stmt_tree): Remove.
	(push_cleanup): New.
	* c-tree.h: Move some decls from c-common.h.
	* c-typeck.c (c_tree_expr_nonnegative_p): Simplify for statement lists.
	(do_case, c_finish_case): Likewise.
	(c_finish_then): Take body for then as argument.
	(c_finish_else): Similarly.
	(c_begin_for_stmt, c_finish_for_stmt_init, c_finish_for_stmt_cond,
	c_finish_for_stmt_incr, c_finish_for_stmt): New.
	(c_begin_stmt_expr, c_finish_stmt_expr): New.
	(c_begin_compound_stmt): Do scope management.
	(c_end_compound_stmt): New.
	* fold-const.c (tree_expr_nonnegative_p): Fix BIND_EXPR.
	* gimplify.c (voidify_wrapper_expr): Accept temporary argument.
	Look through exception handling constructs.
	(gimplify_bind_expr): Accept temporary argument.
	(gimplify_target_expr): Special case BIND_EXPR bodies.
	(gimplify_expr): Handle fallback == fb_none like a statement.
	* langhooks-def.h (LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P): Kill.
	* langhooks.c (lhd_tree_inlining_tree_chain_matters_p): Remove.
	* langhooks.h (tree_chain_matters_p): Remove.
	* stub-objc.c (objc_clear_super_receiver): New.
	* tree-gimple.h (voidify_wrapper_expr): Update decl.
	(append_to_statement_list, append_to_statement_list_force): Move
	to tree-iterator.h.
	* tree-inline.c (expand_call_inline): Update call.
	(clone_body): Use statement lists.
	(walk_tree): Don't check tree_chain_matters_p.
	(copy_tree_r): Likewise.
	* tree-iterator.c (alloc_stmt_list): Clear lang bits.
	(tsi_link_before, tsi_link_after): Set TREE_SIDE_EFFECTS properly.
	* tree-iterator.h (append_to_statement_list,
	append_to_statement_list_force): Moved from tree-gimple.h.
	* tree-pretty-print.c (dump_generic_node): Clean up TARGET_EXPR dump.
	* objc/objc-act.c (build_module_descriptor): Use c_begin_compound_stmt.
	(objc_enter_block): Likewise.
	(objc_exit_block): Use c_end_compound_stmt.
	(objc_build_try_enter_fragment): Add #error and comment for
	rewriting for OBJCPLUS.
	(objc_build_extract_fragment, objc_build_try_epilogue,
	objc_build_catch_stmt, objc_build_finally_prologue,
	objc_build_finally_epilogue): Update for C statement builders.
	* objc/objc-lang.c (LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P):
	Remove.
cp/
	* call.c (initialize_reference): Don't build CLEANUP_STMT here.
	* cp-gimplify.c (cp_gimplify_stmt): Remove next_p argument.
	(genericize_try_block): Use gimplify_stmt.
	(genericize_catch_block, genericize_eh_spec_block): Likewise.
	(cp_gimplify_init_expr): Remove STMT_EXPR special case.
	(gimplify_must_not_throw_expr): Update voidify_wrapper_expr call.
	* cp-lang.c (LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P): Remove.
	(cp_tree_chain_matters_p): Remove.
	* cp-tree.h (COMPOUND_STMT_TRY_BLOCK): New.
	(COMPOUND_STMT_BODY_BLOCK): New.
	(STATEMENT_LIST_NO_SCOPE, STATEMENT_LIST_TRY_BLOCK): New.
	(EXPR_STMT_STMT_EXPR_RESULT): New.
	(building_stmt_tree): Check cur_stmt_list.
	(tf_stmt_expr_cmpd, tf_stmt_expr_body): Remove.
	(BCS_NO_SCOPE, BCS_TRY_BLOCK, BCS_FN_BODY): New.
	* decl.c (poplevel): Use pop_stmt_list for minding cleanups.
	(cp_finish_decl): Use push_cleanup.
	(start_function, finish_function): Use statement lists.
	(finish_stmt): Do nothing.
	* except.c (begin_eh_spec_block): Use statement lists.
	(check_handlers_1, check_handlers): Likewise.
	* init.c (construct_virtual_base): Don't add extra compound stmts.
	(build_vec_init): Likewise.
	* name-lookup.c (maybe_push_cleanup_level): Use statement lists.
	* name-lookup.h (struct cp_binding_level): Add statement_list.
	* parser.c (cp_parser_statement): Take the STMT_EXPR node, not a bool.
	(cp_parser_labeled_statement, cp_parser_expression_statement,
	cp_parser_statement_seq_opt): Likewise.
	(cp_parser_compound_statement): Likewise.  Take bool for try block.
	(cp_parser_selection_statement): Tidy if processing.
	(cp_parser_already_scoped_statement): Rewrite to do what it says.
	* pt.c (tsubst_copy): Move STMT_EXPR to tsubst_expr.
	(tsubst_expr): Rewrite STMT_EXPR processing.  Handle STATEMENT_LIST.
	Mind COMPOUND_STMT_TRY_BLOCK, EXPR_STMT_STMT_EXPR_RESULT.
	* semantics.c (do_poplevel, do_pushlevel): Use statement lists.
	(finish_cond): New, rewritten from FINISH_COND.
	(simplify_loop_decl_cond): New.
	(finish_expr_stmt): Avoid nested EXPR_STMTs.
	(begin_if_stmt, finish_if_stmt_cond, finish_then_clause,
	begin_else_clause, finish_else_clause, finish_if_stmt,
	begin_while_stmt, finish_while_stmt_cond, finish_while_stmt,
	begin_do_stmt, finish_do_body, begin_for_stmt, finish_for_init_stmt,
	finish_for_cond, finish_for_stmt, begin_switch_stmt,
	finish_switch_cond, finish_switch_stmt, begin_try_block,
	finish_try_block, finish_cleanup_try_block, finish_function_try_block,
	finish_handler_sequence, finish_function_handler_sequence,
	begin_handler, finish_handler_parms, finish_handler,
	begin_stmt_expr, finish_stmt_expr_expr, finish_stmt_expr): Rewrite
	using statement lists.
	(begin_compound_stmt): Replace has_no_scope argument with flags.
	Update all callers.  Use statement lists.
	(finish_compound_stmt): Likewise.
	(finish_decl_cleanup, finish_eh_cleanup): Use push_cleanup.
	(current_scope_stmt_stack): Remove.
	(simplify_aggr_init_expr): Don't muck with TREE_CHAIN.
	* typeck2.c (split_nonconstant_init_1, split_nonconstant_init):
	Rewrite with statement lists.
testsuite/
	* g++.dg/ext/stmtexpr1.C: XFAIL.
	* gcc.dg/20030612-1.c: XFAIL.

From-SVN: r83221
2004-06-15 18:21:38 -07:00
Jason Merrill
eae29fe1dc re PR tree-optimization/14107 (Return warnings don't work without optimizations enabled)
PR tree-optimization/14107
        * decl.c (finish_function): Warn about no return in all functions.

From-SVN: r83198
2004-06-15 16:38:40 -04:00
Paolo Bonzini
096f22f424 function.h (struct function): Remove cannot_inline field.
gcc/ChangeLog:
2004-06-15  Paolo Bonzini  <bonzini@gnu.org>

	* function.h (struct function): Remove cannot_inline field.
	(current_function_cannot_inline): Remove.
	* passes.c (rest_of_compilation): Reset DECL_DEFER_OUTPUT.
	Simplify conditionals to ignore warn_return_type.
	* tree-optimize.c (tree_rest_of_compilation): Do not reset
	DECL_DEFER_OUTPUT.
	* objc/objc-act.c (build_module_descriptor, finish_method_def):
	Do not set current_function_cannot_inline.

gcc/java/ChangeLog:
2004-06-15  Paolo Bonzini  <bonzini@gnu.org>

	* class.c (emit_register_classes): Make the function uninlinable,
	do not set current_function_cannot_inline.
	* resource.c (write_resource_constructor): Do not reset
	flag_inline_functions around rest_of_compilation.

gcc/cp/ChangeLog:
2004-06-15  Paolo Bonzini  <bonzini@gnu.org>

	* cp-tree.h (struct language_function): Remove cannot_inline.
	* decl.c (save_function_data): cannot_inline is no more.
	(cxx_push_function_context): Likewise.
	* decl2.c (start_objects, start_static_storage_duration_function):
	Reset DECL_INLINE, set DECL_UNINLINABLE.

From-SVN: r83181
2004-06-15 12:46:07 +00:00
Mark Mitchell
7c82a41e7f re PR c++/15096 (parse error with templates and pointer to const member)
PR c++/15096
	* decl.c (grokdeclarator): Ignore pointer-to-members when
	computing template depth.

	PR c++/14930
	* name-lookup.c (pushtag): Do not try to put class declarations in
	explicit specialization scopes.

	PR c++/15096
	* g++.dg/template/ptrmem10.C: New test.

	PR c++/14930
	* g++.dg/template/friend30.C: New test.

From-SVN: r83112
2004-06-14 15:58:54 +00:00
Andrew Pinski
d29647a46c decl.c (grokdeclarator): Do not depend on C99's _Bool's behavior.
2004-06-11  Andrew Pinski  <pinskia@physics.uc.edu>

        * decl.c (grokdeclarator): Do not depend on C99's _Bool's behavior.

From-SVN: r83066
2004-06-13 14:41:45 -07:00
Jakub Jelinek
498c0f2757 re PR c++/14791 (13070 does not fix -Wformat with fprintf)
PR c++/14791
	* tree.h (enum tree_index): Add TI_FILEPTR_TYPE.
	(fileptr_type_node): Define.
	* tree.c (build_common_tree_nodes_2): Initialize
	fileptr_type_node to ptr_type_node.
	* c-common.c (c_common_nodes_and_builtins): For C++, make
	fileptr_type_node a distinct type copy.
	* builtin-types.def (BT_FILEPTR, BT_FN_INT_CONST_STRING_FILEPTR,
	BT_FN_INT_INT_FILEPTR, BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG,
	BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR,
	BT_FN_INT_FILEPTR_CONST_STRING_VAR): Add.
	(BT_FN_INT_CONST_STRING_PTR, BT_FN_INT_INT_PTR,
	BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR, BT_FN_INT_PTR_CONST_STRING_VAR,
	BT_FN_INT_PTR_CONST_STRING_VALIST_ARG): Remove.
	* builtins.def (BUILT_IN_FPRINTF, BUILT_IN_FPRINTF_UNLOCKED,
	BUILT_IN_FPUTC, BUILT_IN_FPUTC_UNLOCKED, BUILT_IN_FPUTS,
	BUILT_IN_FPUTS_UNLOCKED, BUILT_IN_FSCANF, BUILT_IN_FWRITE,
	BUILT_IN_FWRITE_UNLOCKED, BUILT_IN_VFPRINTF, BUILT_IN_VFSCANF): Use
	the above *FILEPTR* types instead of *PTR*.

	* decl.c (duplicate_decls): Handle fileptr_type_node arguments
	specially.

	* g++.dg/opt/builtins1.C: New test.

From-SVN: r82902
2004-06-10 10:08:02 +02:00
Aldy Hernandez
9e6f2e7dca decl.c (cp_make_fname_decl): Free return value from fname_as_string.
* decl.c (cp_make_fname_decl): Free return value from
	fname_as_string.

From-SVN: r82382
2004-05-28 21:58:15 +00:00
Adam Nemet
81b4398d1e re PR c++/12883 (destructor of array object not called if no prior instantiation of the template has happened)
PR c++/12883
	* decl.c (complete_array_type): Set TYPE_NEEDS_CONSTRUCTING and
	TYPE_HAS_NONTRIVIAL_DESTRUCTOR based on the underlying type.

From-SVN: r82333
2004-05-27 19:08:57 +00:00
Mark Mitchell
9ce1594a3e re PR c++/15025 (accepts redeclaration of template as non-template)
PR c++/15025
	* decl.c (xref_tag): Issue errors about redeclaring template
	classes as non-template classes.

	PR c++/15025
	* g++.dg/template/redecl1.C: New test.

From-SVN: r82172
2004-05-23 21:06:56 +00:00
Gabriel Dos Reis
4460cef225 class.c (alter_access): Use %E format specifier to print an identifier node.
* class.c (alter_access): Use %E format specifier to print an
	identifier node.  Avoid looking at the IDENTIFIER_POINTER.
	(push_lang_context): Likewise.
	* decl.c (lookup_label): Likewise.
	(grokdeclarator): Likewise.
	* parser.c (cp_parser_check_for_invalid_template_id):Likewise.
	* pt.c (do_type_instantiation): Likewise.
	* tree.c (handle_java_interface_attribute): Likewise.
	(handle_com_interface_attribute): Likewise.
	(handle_init_priority_attribute): Likewise.

From-SVN: r82161
2004-05-23 10:51:45 +00:00
Andrew Pinski
98d784a90b optimize.c (calls_setjmp_r): Remove.
2005-05-20  Andrew Pinski  <pinskia@physics.uc.edu>

        * optimize.c (calls_setjmp_r): Remove.
        (calls_setjmp_p): Remove.
        * cp-tree.c (calls_setjmp_p): Remove.
        * decl.c (finish_function): Do not call calls_setjmp_p.

From-SVN: r82049
2004-05-20 04:36:14 -07:00
Zack Weinberg
bb9a388dad * cgraph.c (hash_node, eq_node, cgraph_node, cgraph_remove_node)
(cgraph_varpool_hash_node, eq_cgraph_varpool_node)
	(cgraph_varpool_node):
	Use DECL_UID for the key, not DECL_ASSEMBLER_NAME.
	(cgraph_function_possibly_inlined_p): Use the decl itself for
	the key, not DECL_ASSEMBLER_NAME.
	(change_decl_assembler_name): No need to muck with the hash tables.
	(cgraph_node_for_identifier, cgraph_varpool_node_for_identifier):
	Delete.
	* cgraphunit.c (cgraph_mark_inline_edge): Use the decl itself
	for the key, not DECL_ASSEMBLER_NAME.
	* cgraph.h: Remove prototypes of deleted functions.
	* varasm.c (mark_referenced): Just set TREE_SYMBOL_REFERENCED.
	(mark_decl_referenced): New function.
	* tree.h: Prototype mark_decl_referenced.
	* final.c (output_addr_const) <case SYMBOL_REF>: Call
	mark_decl_referenced before assemble_name.
	* c-decl.c (finish_decl): Use mark_decl_referenced.
cp:
	* decl.c (cp_finish_decl): Use mark_decl_referenced.
	* decl2.c (maybe_make_one_only): Likewise.
	* method.c (use_thunk): Likewise.

From-SVN: r82015
2004-05-19 01:28:56 +00:00
Diego Novillo
6de9cd9a88 Merge tree-ssa-20020619-branch into mainline.
From-SVN: r81764
2004-05-13 02:41:07 -04:00
Giovanni Bajo
4402147197 re PR c++/14389 (Out-of-line of overloaded template rejected)
PR c++/14389
	* decl2.c (check_classfn): For member templates, compare also the
	template parameters to match the declaration.
	* cp-tree.h: Adjust declaration of check_classfn.
	* decl.c (start_decl, grokfndecl): Adjust callers of check_classfn.
	* friend.c (do_friend): Likewise.
	* pt.c (tsubst_friend_function): Likewise.

	PR c++/14389
	* g++.dg/template/member5.C: New test.

From-SVN: r81426
2004-05-03 10:11:19 +00:00
Zack Weinberg
f8e7a389e9 decl.c (reshape_init): Do not apply TYPE_DOMAIN to a VECTOR_TYPE.
* decl.c (reshape_init): Do not apply TYPE_DOMAIN to a VECTOR_TYPE.
	Instead, dig into the representation type to find the array bound.

From-SVN: r81393
2004-05-01 19:12:46 +00:00
Kazu Hirata
a692ad2ece class.c, [...]: Fix comment typos.
* class.c, cp-tree.h, decl.c, decl2.c, pt.c, rtti.c: Fix
	comment typos.

From-SVN: r81344
2004-04-30 15:51:53 +00:00
Mark Mitchell
92a62aad85 class.c (initialize_array): Don't set TREE_HAS_CONSTRUCTOR on braced initializer.
* class.c (initialize_array): Don't set TREE_HAS_CONSTRUCTOR on
	braced initializer.
	* cp-tree.h (BRACE_ENCLOSED_INITIALIZER_P): New macro.
	* decl.c (reshape_init): Use it.
	* init.c (perform_member_init): Remove redundant condition.
	(build_aggr_init): Adjust to handle brace-enclosed initializers
	correctly.
	(expand_default_init): Use BRACE_ENCLOSED_INITIALIZER_P.
	* parser.c (cp_parser_initializer_clause): Do not set
	TREE_HAS_CONSTRUCTOR on the initializer.
	* rtti.c (tinfo_base_init): Likewise.
	(generic_initializer): Likewise.
	(ptr_initializer): Likewise.
	(ptm_initializer): Likewise.
	(class_initializer): Likewise.
	(get_pseudo_ti_init): Likewise.
	* typeck2.c (digest_init): Use BRACE_ENCLOSED_INITIALIZER_P.

	* g++.dg/ext/complit3.C: New test.

From-SVN: r81052
2004-04-22 21:29:35 +00:00
Richard Henderson
6407bc6703 re PR c++/14804 ([unit-at-a-time] initializing const data with reinterpret_cast-ed pointer-to-member function crashes)
PR c++/14804
        * decl.c (cp_finish_decl): Preserve TREE_READONLY more often.
        * typeck2.c (split_nonconstant_init): Clear TREE_READONLY.

From-SVN: r80318
2004-04-01 12:45:02 -08:00
Richard Kenner
8df83eae1e builtins.c, [...]: Change most occurrences of TREE_UNSIGNED to TYPE_UNSIGNED.
* builtins.c, c-aux-info.c, c-common.c, c-cppbuiltin.c, c-decl.c:
	Change most occurrences of TREE_UNSIGNED to TYPE_UNSIGNED.
	* c-format.c, c-opts.c, c-pretty-print.c, c-typeck.c: Likewise.
	* calls.c, convert.c, dbxout.c, dojump.c, dwarf2out.c: Likewise.
	* expmed.c, expr.c, fold-const.c, function.c, integrate.c: Likewise.
	* optabs.c, sdbout.c, stmt.c, stor-layout.c, tree-dump.c: Likewise.
	* tree.c, config/iq2000/iq2000.c, config/m32r/m32r.c: Likewise.
	* config/mips/mips.c, config/rs6000/rs6000.c: Likewise.
	* config/s390/s390.c, config/sparc/sparc.c, objc/objc-act.c: Likewise.
	* stor-layout.c (layout_type, case COMPLEX_TYPE): Test for
	REAL_TYPE, not INTEGER_TYPE.
	(layout_type, case VECTOR_TYPE): Simplify code.
	* tree.c (build_vector_type_for_mode): Remove dup unsigned setting.
	* tree.h: Update comments.
	(STRIP_NOPS): Use TYPE_UNSIGNED.
	(TYPE_UNSIGNED): New macro.
	(TYPE_TRAP_SIGNED): Remove now redundant check.
	(SAVE_EXPR_NOPLACEHOLDER): Don't use TREE_UNSIGNED.

	* cp/call.c (joust): Use TYPE_UNSIGNED, not TREE_UNSIGNED.
	* cp/class.c (check_bitfield_decl): Likewise.
	* cp/cvt.c (type_promotes_to): Likewise.
	* cp/decl.c (finish_enum): Likewise.
	* cp/mangle.c (write_builtin_type): Likewise.
	* cp/semantics.c (finish_switch_cond, finish_unary_op_expr): Likewise.
	* cp/typeck.c (type_after_usual_arithmetic_conversions): Likewise.
	(build_binary_op): Likewise.

	* f/com.c (ffecom_arrayref_): Use TYPE_UNSIGNED, not TREE_UNSIGNED.
	(ffecom_expr_): Likewise.

	* java/jcf-write.c (generate_bytecode_insns): Use TYPE_UNSIGNED.

	* treelang/treetree.c (tree_lang_signed_or_unsigned_type):
	Use TYPE_UNSIGNED, not TREE_UNSIGNED.

	* ada/decl.c (gnat_to_gnu_entity, make_type_from_size):
	Use TYPE_UNSIGNED, not TREE_UNSIGNED.
	* ada/trans.c (tree_transform, convert_with_check): Likewise.
	* ada/utils.c (gnat_signed_or_unsigned_type): Likewise.
	(build_vms_descriptor, unchecked_convert): Likewise.
	* ada/utils2.c (nonbinary_modular_operation): Likewise.

From-SVN: r80287
2004-03-31 22:50:43 -05:00
Mark Mitchell
c6671cbbbc re PR c++/14724 (Destructor not called on backwards goto past initialization)
PR c++/14724
	* decl.c (start_decl_1): Do not decide whether or not to create a
	new cleanup level until after the type has been completed.

	PR c++/14763
	* pt.c (tsubst_default_argument): Clear current_function_decl.

	PR c++/14724
	* g++.dg/init/goto1.C: New test.

	PR c++/14763
	* g++.dg/template/defarg4.C: New test.

From-SVN: r80101
2004-03-30 23:45:00 +00:00
Mark Mitchell
fc5fccdee9 re PR c++/14616 (disjoint_set_test.cpp from boost does not compile (sizeof))
PR c++/14616
	* decl.c (cp_finish_decl): Compute the size of arrays declared in
	templates, if their type is non-dependent.

	PR c++/14616
	* g++.dg/init/array13.C: New test.

From-SVN: r79788
2004-03-21 17:48:39 +00:00
Mark Mitchell
4546865e5b call.c (build_op_delete_call): Do not forget the placement arguments when iterating through mutiple delete...
* call.c (build_op_delete_call): Do not forget the placement
	arguments when iterating through mutiple delete operators.

	* cp-tree.h (svaed_scope): Remove last_parms.
	(NEW_DELETE_OPNAME_P): New macro.
	(last_function_parms): Remove.
	(do_friend): Adjust prototype.
	* decl.c (grokparms): Return the PARM_DECLs directly, rather than
	using last_function_parms.
	(grokfndecl): Take the PARM_DECLs as an argument, rather than
	using last_function_parms.
	(grokdeclarator): Adjust accordingly.  Do not form METHOD_TYPEs
	for class-specific operator new and operator delete.
	(grok_op_properties): Do not look for allocation functions with
	METHOD_TYPEs.
	(start_function): Use DECL_ARGUMENTS instead of
	last_function_parms.
	* decl.h (last_function_parms): Do not declare.
	* decl2.c (grokclassfn): Do not use last_function_parms.
	* friend.c (do_friend): Remove parmdecls parameter.
	* name-lookup.c (push_to_top_level): Do not save last_function_parms.
	(pop_from_top_level): Do not restore it.
	* pt.c (check_explicit_specialization): Do not adjust
	last_function_parms.

	* name-lookup.c (do_local_using_decl): Create a local binding for
	types brought in via using declarations.

	* name-lookup.c (lookup_arg_dependent): Handle block-scope
	function declarations correctly.

	* semantics.c (finish_id_expression): Correct handling of
	conversion operators to dependent types.

	* typeck.c (lookup_destructor): Allow the use of destructors from
	base classes.

	* g++.dg/init/placement3.C: New test.

	* g++.dg/template/spec13.C: New test.

	* g++.dg/lookup/using11.C: New test.

	* g++.dg/lookup/koenig3.C: New test.

	* g++.dg/template/operator2.C: New test.

	* g++.dg/expr/dtor3.C: New test.
	* g++.old-deja/g++.brendan/crash15.C: Remove incorrect dg-error
	marker.
	* g++.old-deja/g++.law/visibility28.C: Likewise.

From-SVN: r79722
2004-03-20 00:18:24 +00:00
Mark Mitchell
26bcf8fc16 semantics.c (finish_pseudo_destructor_expr): Allow differing cv-qualification between the type named by the...
* semantics.c (finish_pseudo_destructor_expr): Allow differing
	cv-qualification between the type named by the
	pseudo-destructor-name and the object-type.

	* search.c (accessible_base_p): Handle non-proper bases.

	* name-lookup.c (do_nonmember_using_decl): If a using declaration
	refers to a single overloaded function, set the type of the
	function.
	* tree.c (lvalue_type): Simplify.
	* typeck.c (type_unknown_p): Do not assume all OVERLOADs have an
	unknown type.
	(build_unary_op): Handle OVERLOADs with known types.

	* decl.c (duplicate_decls): Do not destroy DECL_ARGUMENTS for
	function templates.

	* parser.c (cp_parser_postfix_expression): Handle the use of
	"typename" in non-dependent contexts.  Convert appropriately when
	when using a qualified name after "->" or ".".

	* call.c (conditional_conversion): Honor the requirement that some
	conversions refer to the original object.

	* g++.dg/expr/dtor2.C: New test.

	* g++.dg/lookup/anon4.C: New test.

	* g++.dg/overload/using1.C: New test.

	* g++.dg/template/lookup7.C: New test.

	* g++.dg/template/typename6.C: New test.

	* g++.dg/expr/cond6.C: New test.

From-SVN: r79671
2004-03-19 07:27:30 +00:00
Mark Mitchell
30fc3df7fc re PR c++/14476 (ICE after error about enum not being defined when using it as a bit field)
PR c++/14476
	* decl.c (xref_tag): Do not create dummy ENUMERAL_TYPEs.

	PR c++/14476
	* g++.dg/lookup/enum1.C: New test.

From-SVN: r79312
2004-03-11 08:40:08 +00:00
Mark Mitchell
e46e9f822e re PR c++/14510 (Lookup error between function name and struct name)
PR c++/14510
	* decl.c (xref_tag): Disregard non-type declarations when
	looking up a tagged type.

	PR c++/14510
	* g++.dg/lookup/struct2.C: New test.

From-SVN: r79298
2004-03-11 04:25:38 +00:00
Mark Mitchell
58ec3cc5c0 re PR c++/14401 (Uninitialized reference error not reported.)
PR c++/14401
	* class.c (check_field_decls): Complain about non-static data
	members of reference type in unions.  Propagate
	CLASSTYPE_REF_FIELDS_NEED_INIT and
	CLASSTYPE_READONLY_FIELDS_NEED_INIT from the types of non-static
	data members.
	* init.c (perform_member_init): Complain about mbmers with const
	type that are not explicitly initialized.

	PR c++/14401
	* g++.dg/init/ctor3.C: New test.
	* g++.dg/init/union1.C: New test.
	* g++.dg/ext/anon-struct4.C: New test.

From-SVN: r79158
2004-03-09 08:16:49 +00:00
Jason Merrill
38b305d0a3 re PR c++/13170 (ICE in build_base_path)
PR c++/13170
        * decl.c (xref_tag): Remove attribute handling.
        * cp-tree.h: Adjust prototype.
        * decl.c, parser.c, rtti.c: Adjust callers.
        * parser.c (cp_parser_class_head): Pass back attributes in the
        class head.
        (cp_parser_class_specifier): Adjust.

From-SVN: r79129
2004-03-08 17:24:45 -05:00
Geoffrey Keating
9fc444cc61 Index: cp/ChangeLog
2004-03-04  Geoffrey Keating  <geoffk@apple.com>

	* decl.c (grokfndecl): Update old incorrect comment.
	(grokvardecl): Diagnose C++ variables of type with no linkage.

Index: testsuite/ChangeLog
2004-03-04  Geoffrey Keating  <geoffk@apple.com>

	* g++.old-deja/g++.other/linkage1.C: Expect errors about
	global variables of a type with no linkage.
	* g++.old-deja/g++.other/qual1.C: Name class for 'action'.
	* g++.old-deja/g++.mike/misc13.C: Name enum for 'want'.
	* g++.old-deja/g++.bugs/900210_01.C: Name enum for 'ep'.
	* g++.old-deja/g++.bugs/900210_02.C: Likewise.
	* g++.old-deja/g++.bugs/900210_03.C: Likewise.
	* g++.old-deja/g++.brendan/bit-fields2.C: Name structure for 's'.
	* g++.old-deja/g++.brendan/init10.C: Name structure for 'a'.
	* g++.dg/warn/deprecated.C: Name enum Color.
	* g++.dg/overload/VLA.C: Name structure for 'b'.
	* g++.dg/lookup/anon2.C: Expect diagnostic about type linkage.

From-SVN: r78939
2004-03-04 22:43:03 +00:00
Mark Mitchell
91b004e5ec re PR c++/14138 (100x -O0 C++ Compile Time Regression {3.2,3.3} -> {3.4,4.0})
PR c++/14138
	* name-lookup.h (push_scope): Change prototype.
	* name-lookup.c (push_scope): Do not reenter the current class
	scope.
	* decl.c (grokfndecl): Check return code from push_scope before
	calling pop_scope.
	* decl2.c (check_classfn): Likewise.
	* parser.c (cp_parser_conversion_function_id): Likewise.
	(cp_parser_init_declarator): Likewise.
	(cp_parser_direct_declarator): Likewise.
	(cp_parser_class_specifier): Likewise.
	(cp_parser_class_head): Likewise.
	(cp_parser_lookup_name): Likewise.
	(cp_parser_constructor_declarator_p): Likewise.
	* pt.c (instantiate_class_template): Likewise.
	(resolve_typename_type): Likewise.

From-SVN: r78696
2004-03-01 06:23:38 +00:00
Zack Weinberg
3521b33c2f Remove -fwritable-strings.
gcc/
	Remove -fwritable-strings.
	* c-common.c (fix_string_type): Don't check
	flag_writable_strings.
	(fix_string_type): Likewise.
	* c-opts.c (set_std_c89): Don't initialize
	flag_writable_strings.
	(set_std_c99): Likewise.
	* common.opt (fwritable-strings): Remove.
	* flags.h: Remove the external declaration of
	flag_writable_strings.
	* opts.c (common_handle_option) <OPT_fwritable_strings>:
	Remove.
	* toplev.c (flag_writable_strings): Remove.
	(f_options): Remove an entry for writable-strings.
	* varasm.c (const_hash_1) <STRING_CST>: Don't check
	flag_writable_strings.
	(compare_constant) <STRING_CST>: Likewise.
	(build_constant_desc): Likewise.
	* config/darwin.c (machopic_select_section): Likewise.
	* config/arm/arm.c (AOF_ASSEMBLER): Likewise.
	* config/arm/pe.c (arm_pe_encode_section_info): Likewise.
	* config/iq2000/iq2000.c (iq2000_select_section): Likewise.
	* config/mips/mips.c (mips_select_section): Likewise.
	(mips_encode_section_info): Likewise.
	* config/pa/pa.c (pa_select_section): Likewise.
	* config/pa/pa.h (TEXT_SPACE_P): Likewise.
	* config/v850/v850.c (v850_select_section): Likewise.
	* doc/invoke.texi (-fwritable-strings): Remove.
	(-fno-const-strings): Don't mention -fwritable-strings.
	* doc/trouble.texi: Don't mention -fwritable-strings.

gcc/cp/
	* decl.c (cxx_init_decl_processing): Don't check
	flag_writable_strings.

gcc/testsuite/
	* gcc.dg/fwritable-strings-1.c: Remove.

Co-Authored-By: Kazu Hirata <kazu@cs.umass.edu>

From-SVN: r78333
2004-02-23 21:43:18 +00:00
Mark Mitchell
c0694c4b78 re PR c++/14199 (Unjustified warning about unused variable)
PR c++/14199
	* pt.c (tsubst_copy): Call mark_used for a PARM_DECL.

	PR c++/14173
	* semantics.c (begin_class_definition): Set TYPE_PACKED correctly
	for all type variants.

	PR c++/14173
	* g++.dg/ext/packed5.C: New test.

	PR c++/14199
	* g++.dg/warn/Wunused-5.C: New test.

	PR c++/13927
	* decl.c (duplicate_decls): Return error_mark_node for invalid
	redeclarations.
	* name-lookup.c (push_namespace): Ignore the return value from
	pushdecl.
	* pt.c (push_template_decl_real): Robustify.

	PR c++/13927
	* g++.dg/other/error8.C: Remove XFAIL markers.

From-SVN: r78159
2004-02-20 08:57:33 +00:00
Steven Bosscher
1da326c335 (c-decl.c, [...]): Replace DECL_SAVED_INSNS with DECL_STRUCT_FUNCTION.
* (c-decl.c, c-semantics.c, calls.c, cgraph.c, cgraphunit.c,
        function.c, integrate.c, print-tree.c, toplev.c, tree-optimize.c,
        tree.h): Replace DECL_SAVED_INSNS with DECL_STRUCT_FUNCTION.
        * ada/utils.c: Likewise.
        * cp/decl.c: Likewise.
        * f/com.c: Likewise.
        * java/class.c: Likewise.

From-SVN: r77985
2004-02-17 21:33:43 +00:00
Mark Mitchell
d2f2c87b4c re PR c++/13971 (ICE when compiling koffice-cvs (in build_conditional_expr, at cp/call.c:3068))
PR c++/13971
	* call.c (build_conditional_expr): Handle conversions between
	class types which result in differently cv-qualified type
	variants.

	PR c++/14086
	* class.c (delete_duplicate_fields_1): Remove.
	(delete_duplicate_fields): Likewise.
	(finish_struct_anon): Remove check for members with the same name
	as their enclosing class.
	(check_field_decls): Do not call duplicate_fields.
	* decl.c (grokdeclarator): Remove check for static data members
	with the same name as their enclosing class.
	* name-lookup.c (push_class_level_binding): Check for members with
	the same name as their enclosing class.

From-SVN: r77869
2004-02-16 02:35:50 +00:00
Mark Mitchell
5bd61841e4 call.c (conversion_kind): New type.
* call.c (conversion_kind): New type.
	(conversion_rank): Likewise.
	(conversion): Likewise.
	(CONVERSION_RANK): New macro.
	(conversion_obstack): New variable.
	(obstack_initialized): Likewise.
	(z_candidate): Change type of convs and second_conv.
	(candidate_warning): New type.
	(IDENTITY_RANK): Remove.
	(EXACT_RANK): Likewise.
	(PROMO_RANK): Likewise.
	(STD_RANK): Likewise.
	(PBOOL_RANK): Likewise.
	(USER_RANK): Likewise.
	(ELLIPSIS_RANK): Likewise.
	(BAD_RANK): Likewise.
	(ICS_RANK): Likewise.
	(ICS_STD_RANK): Likewise.
	(ICS_USER_FLAG): Likewise.
	(ICS_ELLIPSIS_FLAG): Likewise.
	(ICS_THIS_FLAG): Likewise.
	(ICS_BAD_FLAG): Likewise.
	(NEED_TEMPORARY_P): Likewise.
	(CHECK_COPY_CONSTRUCTOR_P): Likewise.
	(USER_CONV_CAND): Likewise.
	(USER_CONV_FN): Likewise.
	(conversion_obstack_alloc): New function.
	(alloc_conversion): Likewise.
	(validate_conversion_obstack): Likewise.
	(alloc_conversions): Likewise.
	(build_conv): Adjust to deal with new conversion data structures.
	(build_identity_conv): New function.
	(build_ambiguous_conv): Likewise.
	(standard_conversion): Adjust to deal with new conversion data
	structures.
	(convert_class_to_reference): Likewise.
	(direct_reference_binding): Likewise.
	(reference_binding): Likewise.
	(implicit_conversion): Likewise.
	(add_candidate): Likewise.
	(add_function_candidate): Likewise.
	(add_conv_candidate): Likewise.
	(build_builtin_candidate): Likewise.
	(print_z_candidate): Likewise.
	(merge_conversion_sequences): Likewise.
	(build_user_type_conversion_1): Likewise.
	(build_user_type_conversion): Likewise.
	(build_new_function_call): Likewise.
	(build_object_call): Likewise.
	(conditional_conversion): Likewise.
	(build_conditional_expr): Likewise.
	(build_new_op): Likewise.
	(build_op_delete_call): Likewise.
	(convert_like_real): Likewise.
	(build_over_call): Likewise.
	(build_new_method_call): Likewise.
	(is_subseq): Likewise.
	(maybe_handle_implicit_object): Likewise.
	(maybe_handle_ref_bind): Likewise.
	(compare_ics): Likewise.
	(source_type): Likewise.
	(add_warning): Likewise.
	(joust): Likewise.
	(can_convert_arg): Likewise.
	(can_convert_arg_bad): Likewise.
	(perform_implicit_conversion): Likewise.
	(perform_direct_initialization_if_possible): Likewise.
	(initialize_reference): Likewise.
	* cp-lang.c (cp_tree_size): Do not handle WRAPPER.
	* cp-tree.def (WRAPPER): Likewise.
	(IDENTITY_CONV): Remove.
	(LVALUE_CONV): Likewise.
	(QUAL_CONV): Likewise.
	(STD_CONV): Likewise.
	(PTR_CONV): Likewise.
	(PMEM_CONV): Likewise.
	(BASE_CONV): Likewise.
	(REF_BIND): Likewise.
	(USER_CONV): Likewise.
	(AMBIG_CONV): Likewise.
	(RVALUE_CONV): Likewise.
	* cp-tree.h (tree_wrapper): Remove.
	(WRAPPER_ZC): Remove.
	(lang_tree_node): Remove wrapper.
	(LOOKUP_SPECULATIVELY): Remove.
	(build_op_delete_call): Adjust prototype.
	(validate_conversion_obstack): Declare.
	(build_zc_wrapper): Remove.
	* cvt.c (convert_to_reference): Remove dead code.
	(ocp_convert): Likewise.
	* decl.c (redeclaration_error_message): Correct handling of
	templates.
	(finish_destructor_body): Do not use LOOKUP_SPECULATIVELY.
	(cp_tree_node_structure): Remove WRAPPER case.
	* decl2.c (finish_file): Call validate_conversion_obstack.
	* init.c (build_new_1): Remove use of LOOKUP_SPECULATIVELY.
	(build_op_delete_call): Likewise.
	(build_x_delete): Likewise.
	(build_delete): Adjust call to build_op_delete_call.
	* pt.c (tsubst_friend_declaration): Adjust code to determine
	whether or not a friend template is a definition.
	(tsubst_decl): Clear DECL_INITIAL for new FUNCTION_DECLs.
	* tree.c (build_zc_wrapper): Remove.

From-SVN: r77752
2004-02-13 07:19:25 +00:00
Zack Weinberg
21d13d8372 debug.h (struct gcc_debug_hooks): Add type_decl field.
* debug.h (struct gcc_debug_hooks): Add type_decl field.
	(debug_nothing_tree_int): Prototype.
	(dwarf_debug_hooks): Delete, unused.
	* debug.c (do_nothing_debug_hooks): Update.
	(debug_nothing_tree_int): New function.
	* langhooks.h (struct lang_hooks_for_decls):
	Remove builtin_type_decls field.
	* langhooks-def.h (LANG_HOOKS_BUILTIN_TYPE_DECLS): Delete.
	(LANG_HOOKS_DECLS): Update.
	* toplev.c (rest_of_decl_compilation, rest_of_type_compilation):
	Use debug_hooks->type_decl.
	* dbxout.c (preinit_symbols): New static.
	(dbx_debug_hooks, xcoff_debug_hooks): Update.
	(dbxout_init): Don't call DBX_OUTPUT_STANDARD_TYPES or
	lang_hooks.decls.builtin_type_decls.  Do scan preinit_symbols
	for symbols to output.
	(dbxout_type_decl): New function.
	(dbxout_symbol): If called before dbxout_init has run, queue
	the symbol for later.  Apply DBX_ASSIGN_FUNDAMENTAL_TYPE_NUMBER
	to TYPE_DECLs before emitting them.
	* xcoffout.c (assign_type_number): Delete.
	(xcoff_type_numbers): New static table.
	(xcoff_assign_fundamental_type_number): New function.
	* xcoffout.h: Define DBX_ASSIGN_FUNDAMENTAL_TYPE_NUMBER, not
	DBX_OUTPUT_STANDARD_TYPES.  Remove unnecessary #ifdefs.
	* sdbout.c: Include varray.h.
	(deferred_global_decls): New static.
	(sdb_debug_hooks): Update.
	(sdbout_global_decl): If we can't emit something right now,
	remember it in deferred_global_decls.
	(sdbout_finish): Just scan deferred_global_decls; don't call getdecls.
	(sdbout_init): Initialize deferred_global_decls.
	* Makefile.in: Update dependencies of sdbout.o.
	* dwarf2out.c (dwarf2out_type_decl): New function.
	(dwarf2_debug_hooks): Update.
	* vmsdbgout.c (vmsdbg_debug_hooks): Update.
	* c-decl.c (getdecls): Just return 0.
	(check_for_loop_decls): Don't use getdecls.
	(record_builtin_type): Call debug_hooks->type_decl on the TYPE_DECL.
	* c-objc-common.c (c_objc_common_finish_file): Don't use getdecls.
cp:
	* cp-lang.c: Don't define LANG_HOOKS_BUILTIN_TYPE_DECLS.
	* cp-tree.h: Don't declare cxx_builtin_type_decls.
	* decl.c (builtin_type_decls, cxx_builtin_type_decls): Delete.
	(record_builtin_type): Call debug_hooks->type_decl on the TYPE_DECL.

From-SVN: r77730
2004-02-12 21:42:28 +00:00
Zack Weinberg
a6f78652f3 c-common.c (shadow_warning): Delete.
* c-common.c (shadow_warning): Delete.
	* c-common.h (free_parser_stacks, shadow_warning, sw_kind): Delete.
	* c-decl.c (warn_if_shadowing): Issue shadow warnings directly.
	* c-opts.c (c_common_parse_file): Don't call free_parser_stacks.
	* c-parse.in (free_parser_stacks): Delete.
cp:
	* name-lookup.c (pushdecl): Issue shadow warnings directly.
	* parser.c (free_parser_stacks): Delete.
testsuite:
	* gcc.c-torture/execute/string-opt-15.c: Define memcmp with void *
	arguments.
	* gcc.dg/fwritable-strings-1.c: Expect the deprecation notice.
------
	Bug 13856
	* c-decl.c (diagnose_mismatched_decls): Only give special
	treatment when olddecl is DECL_BUILT_IN, if C_DECL_INVISIBLE
	is also true.
	(merge_decls): Don't clear DECL_BUILT_IN_CLASS and
	DECL_FUNCTION_CODE when defining a built-in function.
	Don't update DECL_ESTIMATED_INSNS.
	* dwarf2out.c (dwarf2out_decl): Don't ignore built-in
	FUNCTION_DECLs.
	* tree.h: Delete DECL_ESTIMATED_INSNS.
	* tree-inline.c (struct inline_data): Delete inlined_insns field.
	(expand_call_inline, optimize_inline_calls): Don't update
	DECL_ESTIMATED_INSNS nor inlined_insns.
	* cgraphunit.c (cgraph_analyze_function): Don't update
	DECL_ESTIMATED_INSNS.
cp:
	* optimize.c (maybe_clone_body): Don't update DECL_ESTIMATED_INSNS.
	* decl.c (duplicate_decls, start_function): Likewise.
testsuite:
	* gcc.dg/visibility-8.c: New testcase.

From-SVN: r77475
2004-02-08 01:59:11 +00:00
Giovanni Bajo
2500bbb69d re PR c++/14033 (tree check: expected class 't', have 'x' (error_mark) in initialize_inlined_parameters, at tree-inline.c:829)
PR c++/14033
	* decl.c (require_complete_types_for_parms): Do not insert
	error_mark_node in the parameter list.

From-SVN: r77436
2004-02-07 02:08:36 +00:00
Mark Mitchell
dd292d0ad8 calls.c (initialize_argument_information): Add CALL_FROM_THUNK_P parameter.
* calls.c (initialize_argument_information): Add CALL_FROM_THUNK_P
	parameter.  Use it instead of current_function_is_thunk.
	* function.h (struct function): Update documentation for is_thunk.
	* tree.h (CALL_FROM_THUNK_P): New macro.
	* config/alpha/alpha.c (alpha_sa_mask): Do not check
	no_new_pseudos when testing current_function_is_thunk.
	* config/rs6000/rs6000.c (rs6000_ra_ever_killed): Likeiwse.

	* decl.c (cxx_push_function_context): Do not set
	current_function_is_thunk.
	* method.c (use_thunk): Set CALL_FROM_THUNK on the call to the
	actual function.

From-SVN: r77244
2004-02-04 12:22:42 +00:00
Mark Mitchell
18f5be99b4 re PR c++/13925 (Bug while befriending specializations)
PR c++/13925
	* decl.c (start_function): Do not call pushdecl for any
	instantiation or specialization of a primary template.

	PR c++/13925
	* g++.dg/template/lookup5.C: New test.

From-SVN: r77187
2004-02-03 20:01:59 +00:00
Mark Mitchell
e9525111c9 re PR c++/13113 (Nice warning about &(X::m) lost)
PR c++/13113
	* init.c (build_offset_ref): Improve error recovery for invalid
	uses of non-static member functions.

	PR c++/13854
	* cp-tree.h (cp_build_type_attribute_variant): New function.
	* class.c (build_clone): Use cp_build_type_attribute_variant.
	* decl.c (duplicate_decls): Likewise.
	* pt.c (copy_default_args_to_explicit_spec): Likewise.
	(tsubst_function_type): Likewise.
	* tree.c (build_exception_variant): Check attributes before
	concluding that two types are the same.
	(cp_build_type-attribute_variant): New method.
	* typeck.c (merge_types): Use cp_build_type_attribute_variant.

	PR c++/13907
	* call.c (convert_class_to_reference): Keep better track of
	pedantically invalid user-defined conversions.

	PR c++/13113
	* g++.old-deja/g++.mike/net36.C: Adjust error messages.

	PR c++/13854
	* g++.dg/ext/attrib13.C: New test.

	PR c++/13907
	* g++.dg/conversion/op2.C: New test.

From-SVN: r77127
2004-02-02 16:53:17 +00:00
Kazu Hirata
852dcbdd78 class.c: Fix comment typos.
* class.c: Fix comment typos.
	* decl.c: Likewise.
	* error.c: Likewise.
	* parser.c: Likewise.
	* pt.c: Likewise.
	* search.c: Likewise.
	* typeck.c: Likewise.

From-SVN: r77045
2004-01-31 17:58:53 +00:00
Giovanni Bajo
a9f46cbbe4 re PR c++/13813 ([DR206] Incomplete member variables in a template.)
DR206
	PR c++/13813
	* decl.c (grokdeclarator): Check immediatly type completeness for
	non-dependent types.

From-SVN: r76970
2004-01-30 16:35:03 +00:00
Andrew Pinski
279883ed03 re PR c++/13701 (g++.old-deja/g++.eh/cleanup2.C ICEs)
2004-01-23  Andrew Pinski  <pinskia@physics.uc.edu>

        PR c++/13701
        * decl.c (finish_function): Move the call to
        finish_fname_decls below the call to
        finish_eh_spec_block.

From-SVN: r76464
2004-01-23 14:57:07 -08:00
Andrew Pinski
6f27961ac0 [multiple changes]
2004-01-16  Andrew Pinski  <pinskia@physics.uc.edu>

        PR c++/11895
        * g++.dg/ext/vector1.C: New test.

2003-08-26  Fred Fish  <fnf@intrinsity.com>

        PR c++/11895
        * decl.c (reshape_init): Handle VECTOR_TYPE like ARRAY_TYPE,
        except don't call array_type_nelts() with a VECTOR_TYPE.

From-SVN: r76038
2004-01-17 10:59:46 -08:00
Mark Mitchell
a8e6c82ab0 re PR c++/13574 (array default initializer in class lets gcc consume all memory and die)
PR c++/13574
	* decl.c (compute_array_index_type): Fix grammar in comment.
	* init.c (build_zero_init): Handle zero-sized arrays correctly.

	PR c++/13574
	* g++.dg/ext/array1.C: New test.

From-SVN: r75991
2004-01-16 19:28:11 +00:00
Danny Smith
e0fed25b88 re PR c++/9021 ([win32] No exports possible when using a class pointer in an union)
PR c++/9021
  	PR c++/11005
	* parser.c (cp_parser_elaborated_type_specifier): Warn about
	attributes and discard.
	* decl.c (xref_tag): Don't overwite existing attributes with
	NULL_TREE.

From-SVN: r75846
2004-01-14 07:27:07 +00:00
Richard Henderson
25ebb82a64 re PR rtl-optimization/10776 (Large aggregate initializers with a single relocated entry causes excessive compile time regression)
PR opt/10776
        * typeck2.c (split_nonconstant_init_1, split_nonconstant_init): New.
        (store_init_value): Use it.
        * decl.c (check_initializer): Expect full initialization code
        from store_init_value.
        * init.c (expand_aggr_init_1): Likewise.
        * decl2.c (maybe_emit_vtables): Abort if runtime init needed.

From-SVN: r75763
2004-01-12 13:38:04 -08:00
Giovanni Bajo
cfb91b67b8 DR 337 PR c++/9256
DR 337
	PR c++/9256
	* pt.c (tsubst): Substitution must fail if we are attempting to
	create an array with element type that is an abstract class type.
	* decl.c (cp_finish_decl): Strip pointers and array types recursively
	before calling abstract_virtuals_error.

From-SVN: r75618
2004-01-10 01:18:08 +00:00
Nathan Sidwell
74869a8523 re PR c++/13507 (spurious printf format warning)
cp:
	PR c++/13507
	* decl.c (duplicate_decls): Use build_type_attribute_variant to
	merge attributes.
testsuite:
	PR c++/13507
	* g++.dg/ext/attrib11.C: New test.

From-SVN: r75229
2003-12-30 12:18:28 +00:00
Mark Mitchell
c11889cef5 re PR c++/13081 (forward template declarations in <complex> let inlining fail)
PR c++/13081
	* decl.c (duplicate_decls): Preserve inline-ness when redeclaring
	a function template.

	PR c++/12613
	* decl.c (reshape_init): Reject GNU colon-style designated
	initializers in arrays.

	PR c++/13081
	* g++.dg/opt/inline6.C: New test.

	PR c++/12613
	* g++.dg/parse/error9.C: New test.

From-SVN: r75192
2003-12-29 02:42:17 +00:00
Roger Sayle
7072018ecf re PR c++/13070 (-Wformat option ignored in g++)
PR c++/13070
	* decl.c (duplicate_decls): When setting the type of an anticipated
	declaration, merge the existing type attributes.

	* g++.dg/warn/format3.C: New test case.

From-SVN: r75185
2003-12-28 22:22:13 +00:00
Mark Mitchell
7813d14ccc re PR c++/12862 (Conflicts Between typedefs/enums and Namespace Member Declarations)
* c-common.c (flag_external_templates): Remove.
	(flag_alt_external_templates): Likewise.
	* c-common.h (flag_external_templates): Remove.
	(flag_alt_external_templates): Likewise.
	* c-opts.c (c_common_handle_option): Unsupport
	-falt-external-templates and -ftemplates.
	* doc/invoke.texi: Remove mention of -fexternal-templates and
	-falt-external-templates.

	* decl.c (start_function): Do not check
	flag_alt_external_templates or flag_external_templates.
	* decl2.c (warn_if_unknown_interface): Likewise.
	* lex.c (extract_interface_info): Likewise.
	* pt.c (lookup_template_class): Likewise.

	PR c++/12862
	* name-lookup.c (pushdecl): Look up all namespace-scope entities
	in their corresponding namespace.

	* g++.old-deja/g++.jason/template18.C: Remove.
	* g++.old-deja/g++.jason/template37.C: Likewise.

	PR c++/12862
	* g++.dg/lookup/ns1.C: New test.

From-SVN: r74954
2003-12-22 23:57:08 +00:00
Mark Mitchell
9e62871ee9 re PR c++/13438 (internal compiler error: tree check: expected identifier_node, have integer_cst in c_parse_error at c-common.c:5921)
PR c++/13438
	* cp-tree.h (cp_tree_index): Remove CPTI_RECORD_TYPE,
	CPTI_UNION_TYPE, CPTI_ENUM_TYPE.
	(record_type_node): Remove.
	(union_type_node): Likewise.
	(enum_type_node): Likewise.
	* decl.c: Remove mention of above tree nodes in comment.
	* lex.c (cxx_init): Do not assign to record_type_node,
	union_type_node, or enum_type_node.  Simplify handling of
	class_type_node.

	PR c++/13438
	* g++.dg/parse/error8.C: New test.

From-SVN: r74931
2003-12-22 08:03:15 +00:00
Kazu Hirata
f4f206f46f call.c: Fix comment formatting.
* call.c: Fix comment formatting.
	* class.c: Likewise.
	* cp-tree.h: Likewise.
	* cvt.c: Likewise.
	* cxx-pretty-print.c: Likewise.
	* decl.c: Likewise.
	* decl2.c: Likewise.
	* error.c: Likewise.
	* except.c: Likewise.
	* init.c: Likewise.
	* name-lookup.c: Likewise.
	* parser.c: Likewise.
	* pt.c: Likewise.
	* rtti.c: Likewise.
	* semantics.c: Likewise.
	* typeck.c: Likewise.
	* typeck2.c: Likewise.

From-SVN: r74916
2003-12-21 21:07:32 +00:00
Kazu Hirata
926ce8bd97 cvt.c: Remove uses of "register" specifier in declarations of arguments and local...
* cvt.c: Remove uses of "register" specifier in
	declarations of arguments and local variables.
	* decl.c: Likewise.
	* decl2.c: Likewise.
	* expr.c: Likewise.
	* friend.c: Likewise.
	* lex.c: Likewise.
	* name-lookup.c: Likewise.
	* repo.c: Likewise.
	* search.c: Likewise.
	* tree.c: Likewise.
	* typeck.c: Likewise.
	* typeck2.c: Likewise.

From-SVN: r74855
2003-12-19 23:28:11 +00:00
Mark Mitchell
0dff37fb92 re PR c++/12218 (runtime segfault when initializing global variable with pointer-to-member)
PR c++/12218
	* varasm.c (initializer_constant_valid_p): Allow a conversion from
	an integral constant to an OFFSET_TYPE.

	PR c++/12696
	* decl.c (reshape_init): Recover quickly from errors.

	PR c++/12218
	* g++.dg/init/pm3.C: New test.

	PR c++/12696
	* g++.dg/init/error1.C: New test.

From-SVN: r74731
2003-12-17 04:45:53 +00:00
Nathan Sidwell
d63b5e9f25 re PR c++/9043 ([ABI] incorrect name mangling for array dimension in template function)
cp:
	PR c++/9043
	C++ ABI change: Mangling array indices in templates.
	* decl.c (compute_array_index_type): Reorganize for earlier
	template errors. Use value_dependent_expression_p for abi-2.
	* mangle.c (write_array_type): Check broken mangling for
	expression indices on abi-1
testsuite:
	PR c++/9043
	* g++.dg/abi/mangle20-1.C: New test.
	* g++.dg/abi/mangle20-2.C: New test.

From-SVN: r74707
2003-12-16 19:50:54 +00:00
Nathan Sidwell
f5c28a158b class.c (add_method): Disallow destructor for java classes.
cp:
	* class.c (add_method): Disallow destructor for java classes.
	* decl.c (xref_basetypes): Check java class inheritance.
	* decl2.c (check_java_method): Skip artificial params.
testsuite:
	* g++.dg/other/java1.C: New test.

From-SVN: r74629
2003-12-15 14:19:10 +00:00
Kriang Lerdsuwanakij
c1b83cc99b re PR c++/13106 (Wrong warning "no return statement ..." for void template function)
PR c++/13106
	* decl.c (finish_function): Check if return type is dependent before
	issuing no return statement warning.

	* g++.dg/warn/noreturn-3.C: New test.

From-SVN: r74616
2003-12-14 11:06:35 +00:00
Matt Austern
facef326df re PR c/13134 (Visibility attribute is ignored)
PR c/13134
* c--decl.c (duplicate_decls): Copy visibility flag when appropriate.
* cp/decl.c (duplicate_decls): Copy visibility flag when appropriate.
* testsuite/lib/gcc-dg.exp (dg-require-visibility): Define.
* testsuite/lib/target-supports (check_visibility_available): Define.
* testsuite/gcc.dg/visibility-1.c: New test.
* testsuite/gcc.dg/visibility-2.c: Likewise.
* testsuite/gcc.dg/visibility-3.c: Likewise.
* testsuite/gcc.dg/visibility-4.c: Likewise.
* testsuite/gcc.dg/visibility-5.c: Likewise.
* testsuite/gcc.dg/visibility-6.c: Likewise.
* testsuite/g++.dg/ext/visibility-1.C: Likewise.
* testsuite/g++.dg/ext/visibility-2.C: Likewise.
* testsuite/g++.dg/ext/visibility-3.C: Likewise.
* testsuite/g++.dg/ext/visibility-4.C: Likewise.
* testsuite/g++.dg/ext/visibility-5.C: Likewise.
* testsuite/g++.dg/ext/visibility-6.C: Likewise.

From-SVN: r74487
2003-12-10 06:34:46 +00:00
Jason Merrill
ed36980c22 Give the anonymous namespace a null DECL_NAME.
* cp-tree.h: Don't declare anonymous_namespace_name.
        * decl.c: Don't define it.
        * dump.c (cp_dump_tree): Don't check for it.
        * cxx-pretty-print.c (pp_cxx_original_namespace_definition): Likewise.
        * error.c (dump_decl): Likewise.
        * name-lookup.c: Define it here.
        (push_namespace): Put it in DECL_ASSEMBLER_NAME instead.
        * mangle.c (write_unqualified_name): Adjust.

From-SVN: r74433
2003-12-08 15:29:15 -05:00
Kriang Lerdsuwanakij
d43f603d85 re PR c++/5369 (template member friend declaration not honored)
PR c++/5369
	* friend.c (is_friend): Handle member function of a class
	template as template friend.
	(do_friend): Likewise.
	* decl2.c (check_classfn): Add template_header_p parameter.
	* decl.c (start_decl): Adjust check_classfn call.
	(grokfndecl): Likewise.
	* pt.c (is_specialization_of_friend): New function.
	(uses_template_parms_level): Likewise.
	(push_template_decl_real): Use uses_template_parms_level.
	(tsubst_friend_function): Adjust check_classfn call.
	* cp-tree.h (check_classfn): Adjust declaration.
	(uses_template_parms_level): Add declaration.
	(is_specialization_of_friend): Likewise.

	* g++.dg/template/memfriend1.C: New test.
	* g++.dg/template/memfriend2.C: Likewise.
	* g++.dg/template/memfriend3.C: Likewise.
	* g++.dg/template/memfriend4.C: Likewise.
	* g++.dg/template/memfriend5.C: Likewise.
	* g++.dg/template/memfriend6.C: Likewise.
	* g++.dg/template/memfriend7.C: Likewise.
	* g++.dg/template/memfriend8.C: Likewise.
	* g++.old-deja/g++.pt/friend44.C: Remove a bogus error.

From-SVN: r73833
2003-11-22 06:49:21 +00:00
Richard Earnshaw
79ae853c64 * decl.c (grokfndecl): Change OK to type tree.
From-SVN: r73549
2003-11-13 16:34:42 +00:00
Jan Hubicka
fccc4eb240 re PR rtl-optimization/12275 ([unit-at-a-time] ICE in htab_clear_slot)
PR opt/12275
	* c-decl.c (finish_decl): Use change_decl_assembler_name.
	* c-pragma.c (handle_pragma_redefine_extname): Likewise.
	* varasm.c (make_decl_rtl): Likewise.
	* cgraph.c (change_decl_assembler_name): New function.
	* tree.h (set_decl_assembler_name): Kill dead declaration.
	(change_decl_assembler_name): Declare.

	* decl.c (make_rtl_for_nonlocal_decl): Use change_decl_assembler_name.
	* decl2.c (make_rtl_for_nonlocal_decl): Use change_decl_assembler_name.

From-SVN: r73532
2003-11-13 02:07:57 +00:00
Mark Mitchell
ad16ae7f12 decl.c (cp_make_fname_decl): When creating a top-level __FUNCTION__-like symbol, do register it with pushdecl.
* decl.c (cp_make_fname_decl): When creating a top-level
	__FUNCTION__-like symbol, do register it with pushdecl.

From-SVN: r73515
2003-11-12 22:20:34 +00:00
Mark Mitchell
0e59b3fb64 decl.c (finish_case_label): Do not check that we are within a switch statement here.
* decl.c (finish_case_label): Do not check that we are within a
	switch statement here.
	* parser.c (struct cp_parser): Add in_iteration_statement_p and
	in_switch_statement_p.
	(cp_parser_new): Initialize them.
	(cp_parser_labeled_statement): Check validity of case labels
	here.
	(cp_parser_selection_statement): Set in_switch_statement_p.
	(cp_parser_iteration_statement): Set in_iteration_statement_p.
	(cp_parser_jump_statement): Check validity of break/continue
	statements here.

From-SVN: r73508
2003-11-12 19:57:56 +00:00
Mark Mitchell
b1a19c7cea re PR c++/12735 (duplicate error messages for redeclaration errors)
PR c++/12735
	* cp-tree.h (duplicate_decls): Return a tree.
	* decl.c (duplicate_decls): Clarify documentation.  Return
	error_mark_node to indicate a failed redeclaration.
	* friend.c (do_friend): Handle that case.
	* name-lookup.c (pushdecl): Likewise.

From-SVN: r73503
2003-11-12 18:15:02 +00:00
Matt Austern
968b41a166 c-common.c (handle_visibility_attribute): Set DECL_VISIBILITY field instead of hanging an attribute object off the decl.
* c-common.c (handle_visibility_attribute): Set DECL_VISIBILITY
	field instead of hanging an attribute object off the decl.
	* tree.h (DECL_VISIBLITY): New accessor macro for
	symbol_visibility field in struct tree_decl.
	(enum symbol_visibility): Move definition to before tree_decl.
	(struct tree_decl): Define new two-bit field, symbol_visibility.
	(decl_visibility): Remove declaration.
	* varasm.c (maybe_assemble_visibility): Use DECL_VISIBILITY
	instead of decl_visibility.
	(default_binds_local_p_1):  Use DECL_VISIBILITY	instead of
	decl_visibility.
	(decl_visibility): Remove.
	* cp/decl.c (duplicate_decls): copy DECL_VISIBILITY field.
	* cp/method.c (use_thunk): give thunk same visibility as function.
	* cp/optimize.c (maybe_clone_body): copy DECL_VISIBILITY field.

From-SVN: r73320
2003-11-06 22:08:26 +00:00
Nathan Sidwell
bb88593883 PR c++/12698, c++/12699, c++/12700, c++/12566
cp:
	PR c++/12698, c++/12699, c++/12700, c++/12566
	* cp-tree.h (THUNK_ALIAS_P, THUNK_ALIAS): New.
	(debug_class, debug_thunks): New.
	* class.c (dump_class_hierarchy_1): New break out from ...
	(dump_class_hierarchy): ... here.
	(dump_thunk, debug_thunks, debug_class): New.
	(update_vtable_entry_for_fn): Add ssizetype casts. Correct
	continued search for primary binfo via virtual.
	(build_vtbl_initializer): Follow covariant thunk alias.
	* method.c (make_thunk): Clear DECL_THUNKS of the thunk.
	(finish_thunk): Look for an alias of the covariant thunk and point
	to it.
	(use_thunk): We should never use an alias.
	* semantics.c (emit_associated_thunks): Do not emit aliases.

	PR c++/12566
	* cp-tree.h (cp_fname_init): Add TYPE pointer param.
	* decl.c (cp_fname_init): Add TYPE pointer param. Set it. Don't
	create an ad-hoc ERROR_MARK.
	(cp_make_fname_decl): Adjust.
	* pt.c (tsubst_expr): Adjust.
testsuite:
	PR c++/12698, c++/12699, c++/12700, c++/12566
	* g++.dg/inherit/covariant9.C: New test.
	* g++.dg/inherit/covariant10.C: New test.
	* g++.dg/inherit/covariant11.C: New test.

From-SVN: r72882
2003-10-24 07:59:41 +00:00
Robert Bowdidge
437081d7f5 decl.c (cp_finish_decl): Remove clause intended for asm directives in struct or class fields...
* cp/decl.c (cp_finish_decl): Remove clause intended for asm
  directives in struct or class fields: this code is never executed.

From-SVN: r72775
2003-10-21 16:41:53 -07:00
Kriang Lerdsuwanakij
156fc2bbdc decl.c (start_decl): Exit if push_template_decl returns error_mark_node.
* decl.c (start_decl): Exit if push_template_decl returns
	error_mark_node.

From-SVN: r72760
2003-10-21 17:05:47 +00:00
Kazu Hirata
cd0be382c9 ChangeLog: Fix typos.
* ChangeLog: Fix typos.
	* call.c: Fix comment typos.
	* class.c: Likewise.
	* cp-tree.h: Likewise.
	* cvt.c: Likewise.
	* cxx-pretty-print.c: Likewise.
	* decl.c: Likewise.
	* decl2.c: Likewise.
	* init.c: Likewise.
	* mangle.c: Likewise.
	* name-lookup.c: Likewise.
	* parser.c: Likewise.
	* search.c: Likewise.
	* semantics.c: Likewise.
	* tree.c: Likewise.
	* typeck.c: Likewise.

From-SVN: r72737
2003-10-21 02:16:17 +00:00
Jan Hubicka
d4d1ebc191 toplev.c (rest_of_compilation): Fix webizer pass ordering.
* toplev.c (rest_of_compilation): Fix webizer pass ordering.

	* cgraphunit.c (decide_is_function_needed):  Fix test dealing
	with functions implicitly made inline.

	* cgraphunit.c (cgraph_decide_inlining_incrementally):  New function.
	(cgraph_finalize_function): Use it.
	(cgraph_mark_inline): Allow incrmental decisions
	* invoke.texi (max-inline-slope, min-inline-insns): Kill.
	* params.def (PARAM_MAX_INLINE_SLOPE, PARAM_MIN_INLINE_INSNS): Kill.
	* tree-inline.c (limits_allow_inlining): Kill.
	(expand_call_inline): Always use unit-at-a-time path.

	* decl.c (start_cleanup_fn):  Set DECL_DECLARED_INLINE_P to deffer
	the expansion.

	* testsuite/g++.dg/opt/inline4.C: Do not use min-inline-insns
	parameter.
	* testsuite/gcc.dg/inline-2.c: Likewise.

From-SVN: r72721
2003-10-20 21:46:55 +00:00
Kriang Lerdsuwanakij
11325dcdbd PR c++/9781, c++/10583, c++/11862
PR c++/9781, c++/10583, c++/11862
	* decl.c (cp_finish_decl): Exit immediately if decl is an
	error_mark_node.
	* pt.c (push_template_decl_real): Return error_mark_node for
	invalid template declaration of variable.

	* g++.dg/parse/crash13.C: New test.

From-SVN: r72701
2003-10-20 12:42:37 +00:00
Kriang Lerdsuwanakij
9579624e72 re PR c++/2513 (internal template template parameter causes ICE)
PR c++/2513
	* decl.c (make_typename_type): Use dependent_type_p.
	(make_unbound_class_template): Likewise.
	* pt.c (instantiate_class_template): Increment
	processing_template_decl during substitution of template friend
	function.  Preincrement processing_template_decl rather than
	postincrement.
	(get_mostly_instantiated_function_type): Increment
	processing_template_decl during partial substitution of function
	type.

	* g++.dg/template/typename5.C: New test.

From-SVN: r72611
2003-10-17 15:41:46 +00:00
Gabriel Dos Reis
a5e6b29b07 Breack out decl.c (3/n)
Breack out decl.c (3/n)
	* name-lookup.c: Include flags.h
	(lookup_name_current_level): Make static.
	(add_decl_to_level): Likewise.
	(push_local_binding): Likewise.
	(push_overloaded_decl): Likewise.
	(lookup_using_namespace): Likewise.
	(qualified_lookup_using_namespace): Likewise.
	(lookup_type_current_level): Likewise.
	(unqualified_namespace_lookup): Likewise.
	(namespace_ancestor): Likewise.
	(push_using_directive): Likewise.
	* decl.c (pushdecl): Move to name-lookup.c.
	(pushdecl_top_level_1): Likewise.
	(pushdecl_top_level): Likewise.
	(pushdecl_top_level_and_finish): Likewise.
	(maybe_push_decl): Likewise.
	(push_using_decl): Likewise.
	(push_overloaded_decl): Likewise.
	(make_anon_name): Likewise.
	(anon_cnt): Likewise.
	(clear_anon_tags): Likewise.
	(maybe_inject_for_scope_var): Likewise.
	(check_for_out_of_scope_variable): Likewise.
	* Make-lang.in (cp/name-lookup.o): Depend on flags.h.
	* decl.c (warn_extern_redeclared_static): Export.
	* cp-tree.h (warn_extern_redeclared_static): Declare.

From-SVN: r72492
2003-10-14 20:34:41 +00:00
Gabriel Dos Reis
00e8de680e Break out decl.c (2/n)
Break out decl.c (2/n)
	* name-lookup.c: Include diagnostic.h
	(cxx_binding_free): Make static.
	(cxx_binding_make): Likewise.
	(binding_table_new): Likewise
	(binding_table_free): Likewise.
	(binding_table_insert): Likewise.
	(binding_table_find_anon_type): Likewise.
	(binding_table_reverse_maybe_remap): Likewise.
	(supplement_binding): Likewise.
	* name-lookup.h (global_scope_name): Declare extern.
	(global_type_node): Likewise.
	(cxx_binding_free): Don't export.
	(cxx_binding_make): Likewise.
	(binding_table_new): Likewise.
	(binding_table_free): Likewise.
	(binding_table_insert): Likewise.
	(binding_table_find_anon_type): Likewise.
	(binding_table_reverse_maybe_remap): Likewise.
	* Make-lang.in (cp/name-lookup.o): Depend on $(DIAGNOSTIC_H)
	* decl.c (lookup_namespace_name): Move to name-lookup.c
	(select_decl): Likewise.
	(unqualified_namespace_lookup): Likewise.
	(lookup_qualified_name): Likewise.
	(lookup_name_real): Likewise.
	(lookup_name_nonclass): Likewise.
	(lookup_function_nonclass): Likewise.
	(lookup_name): Likewise.
	(lookup_name_current_level): Likewise.
	(lookup_type_current_level): Likewise.
	(lookup_flags): Likewise.
	(qualify_lookup): Likewise.
	(lookup_tag): Likewise.
	(lookup_tag_reverse): Likewise.
	(getdecls): Likewise.
	(storedecls): Remove.
	(cxx_remember_type_decls): Likewise.
	(global_bindings_p): Likewise.
	(innermost_nonclass_level): Likewise.
	(toplevel_bindings_p): Likewise.
	(namespace_bindings_p): Likewise.
	(kept_level_p): Likewise.
	(innermost_scope_kind): Likewise.
	(template_parm_scope_p): Likewise.
	(push_binding): Likewise.
	(push_local_binding): Likewise.
	(add_decl_to_level): Likewise.  Make extern.
	(push_class_binding): Move to name-lookup.c.
	(resume_level): Likewise.  Rename to resume_scope.
	(begin_scope): Likewise.
	(indent): Likewise.
	(binding_depth): Likewise.
	(is_class_level): Likewise.
	(cxx_scope_descriptor): Likewise.
	(cxx_scope_debug): Likewise.
	(namespace_scope_ht_size): Likewise.
	(leave_scope): Likewise.
	(pushlevel_class): Likewise.
	(poplevel_class): Likewise.
	(clear_identifier_class_values): Likewise.
	(pushdecl_with_scope): Likewise.
	(pushdecl_namespace_level): Likewise.
	(pushdecl_class_level): Likewise.
	(push_class_level_binding): Likewise.
	(push_using_directive): Likewise.
	(identifier_global_value): Likewise.
	(keep_next_level_flag): Likewise.
	(keep_next_level): Likewise.
	(free_binding_level): Likewise.
	(set_class_shadows): Likewise.
	(maybe_push_cleanup_level): Likewise.
	(cp_namespace_decls): Likewise.
	(bt_print_entry): Likewise.
	(print_binding_level): Likewise.
	(print_other_binding_stack): Likewise.
	(print_binding_stack): Likewise.
	(push_namespace): Likewise.
	(pop_namespace): Likewise.
	(push_nested_namespace): Likewise.
	(pop_nested_namespace): Likewise.
	(cxx_saved_binding_make): Likewise.
	(struct cxx_saved_binding_make): Likewise.
	(store_bindings): Likewise.
	(maybe_push_to_top_level): Likewise.
	(push_to_top_level): Likewise.
	(pop_from_top_level): Likewise.
	(identifier_type_value): Likewise.
	(set_identifier_type_value): Likewise.
	(set_identifier_type_value_with_scope): Likewise.
	(pop_everything): Likewise.
	(pushtag): Likewise.
	(follow_tag_typedef): Likewise.
	(maybe_process_template_type_declaration): Likewise.
	(pop_binding): Likewise.
	* cp-tree.h: Move corresponding declarations to name-lookup.h

From-SVN: r72426
2003-10-13 10:26:36 +00:00
Jason Merrill
e913996db1 tweak whitespace
From-SVN: r72256
2003-10-09 03:16:14 -04:00
Mark Mitchell
d04a575f62 re PR c++/10147 (Confusing error message for invalid template function argument)
PR c++/10147
	* call.c (initialize_reference): Tweak error message.

	PR c++/12337
	* init.c (build_new_1): Make sure that the expression returned is
	not an lvalue.

	PR c++/12344, c++/12236, c++/8656
	* decl.c (start_function): Do not ignore attributes embedded in a
	function declarator.

	PR c++/12337
	* g++.dg/init/new9.C: New test.

	PR c++/12334, c++/12236, c++/8656
	* g++.dg/ext/attrib8.C: New test.

From-SVN: r72183
2003-10-07 07:07:07 +00:00
Gabriel Dos Reis
1ec57cf03b decl.c (struct cp_binding_level): Move to name-lookup.h
* decl.c (struct cp_binding_level): Move to name-lookup.h
	(current_binding_level): Likewise.
	(class_binding_level): Likewise.
	* cp-tree.h (enum scope_kind): Likewise.

From-SVN: r72076
2003-10-03 20:27:05 +00:00
Richard Henderson
69ee808667 * decl.c (duplicate_decls): Copy DECL_SAVED_INSNS too.
From-SVN: r71959
2003-09-30 15:58:39 -07:00
Gabriel Dos Reis
daafa301e4 decl.c (pop_binding): Don't mess with nullifying binding->scope here.
* decl.c (pop_binding): Don't mess with nullifying binding->scope
	here.
	* name-lookup.c: Re-format.
	(cxx_binding_free): Nullify binding->scope.

From-SVN: r71942
2003-09-30 11:56:25 +00:00
Andreas Jaeger
edaf3e0357 c-decl.c (finish_function): Convert definition to ISO C90.
* c-decl.c (finish_function): Convert definition to ISO C90.
	* ifcvt.c (mark_loop_exit_edges): Likewise.
	* ra-rewrite.c (emit_colors): Likewise.

For cp:

	* decl.c (cxx_builtin_type_decls): Convert to ISO C90 function
	definition.
	* init.c (push_base_cleanups): Likewise.
	* decl2.c (finish_file): Likewise.
	* mangle.c (init_mangle): Likewise.
	(dump_substitution_candidates): Likewise.
	* search.c: Likewise.

From-SVN: r71872
2003-09-28 06:37:41 +02:00
Gabriel Dos Reis
c003e212ea name-lookup.h (get_global_value_if_present): New function.
* name-lookup.h (get_global_value_if_present): New function.
	(is_typename_at_global_scope): Likewise.
	* except.c (do_begin_catch): Use get_global_value_if_present.
	(do_end_catch): Likewise.
	(do_allocate_exception): Likewise.
	(do_free_exception): Likewise.
	(build_throw): Likewise.
	* parser.c (cp_parser_member_declaration): Likewise.
	* rtti.c (throw_bad_cast): Likewise.
	(throw_bad_typeid): Likewise.
	* decl.c (check_tag_decl): Use is_typename_at_global_scope.
	(grokdeclarator): Likewise.
	* cp-tree.h (global_namespace): Move to name-lookup.h
	* call.c (call_builtin_trap): Tidy.

From-SVN: r71858
2003-09-27 16:44:05 +00:00
Gabriel Dos Reis
147135cc00 cp-tree.h, [...]: Remove reference to macros BINDING_SCOPE, BINDING_VALUE and BINDING_TYPE.
* cp-tree.h, name-lookup.h, decl.c, decl2.c: Remove reference to
	macros 	BINDING_SCOPE, BINDING_VALUE and BINDING_TYPE.

From-SVN: r71848
2003-09-27 01:55:13 +00:00
Gabriel Dos Reis
1a6daf15e2 decl.c (pop_binding_level, [...]): Merge into leave_scope.
* decl.c (pop_binding_level, suspend_binding_level,
        find_class_binding_level): Merge into leave_scope.  Remove.
        (leave_scope):  New function.
        (poplevel): Update.
        (poplevel_class): Likewise.
        (pop_namespace): Likewise.

From-SVN: r71821
2003-09-26 15:21:30 +00:00
Gabriel Dos Reis
ac20c67af1 cp-tree.h (scope_kind): Add new enumerator.
* cp-tree.h (scope_kind): Add new enumerator.
	(keep_next_level): Change parameter type to bool.
	(begin_scope):  Change prototype.
	(pushlevel): Remove declaration.
	* decl.c (push_binding_level): Fold in begin_scope.  Remove.
	(struct cp_binding_level): Remove tag_tranparent field.  Make keep
	of bitsize one.
	(keep_next_level_flag): Make a bool.
	(cxx_scope_descriptor): Update scope names table
	(make_cxx_scope): Fold in begin_scope.  Remove..
	(namespace_scope_ht_size): New function.
	(begin_scope): Change prototype.  Return a scope.  Tidy.
	(kept_level_p): Update.
	(pushlevel): Remove.
	(maybe_push_cleanup_level): Simplify.
	(poplevel): Update for sk_cleanup and keep change.
	(print_binding_level): Likewise.
	(initial_push_namespace_scope): Fold in begin_scope.  Remove.
	(push_namespace): Update.
	(pushtag): Likewise.
	(lookup_tag): Likewise.
	(lookup_name_current_level): Likewise.
	(lookup_type_current_level): Likewise.
	(cxx_init_decl_processing): Likewise.
	(start_function): Likewise.
	(begin_function_body): Likewise.
	(start_method): Likewise.
	* pt.c (push_inline_template_parms_recursive): Likewise.
	(begin_template_parm_list): Likewise.
	(begin_specialization): Likewise.
	* semantics.c (do_pushlevel): Likewise.
	(begin_compound_stmt): Likewise.
	(begin_stmt_expr): Likewise.

From-SVN: r71683
2003-09-23 15:42:21 +00:00
Richard Henderson
f31686a322 Revert DECL_SOURCE_LOCATION -> TREE_LOCUS change.
From-SVN: r71641
2003-09-21 22:09:32 -07:00
Richard Henderson
7e2af53a14 tree.h (TREE_LOCUS): Rename from DECL_SOURCE_LOCATION; make const.
* tree.h (TREE_LOCUS): Rename from DECL_SOURCE_LOCATION; make const.
	(TREE_FILENAME, TREE_LINENO): Likewise.
	(set_tree_locus, copy_tree_locus, set_tree_file_line): New.
	(TREE_LOCUS_SET_P): New.
	* c-aux-info.c, c-decl.c, c-parse.in, coverage.c, dbxout.c,
	diagnostic.c, dwarf2out.c, dwarfout.c, function.c, integrate.c,
	print-tree.c, stmt.c, toplev.c, tree-dump.c, tree-inline.c,
	tree-optimize.c, tree.c, tree.def, xcoffout.c, config/alpha/alpha.c,
	config/mips/mips.c, doc/c-tree.texi, objc/objc-act.c: Update to match.

ada/
	* trans.c, utils.c: Update for DECL_SOURCE_LOCATION rename and
	change to const.

cp/
	* class.c, cp-tree.h, decl.c, decl2.c, error.c, init.c,
	method.c, optimize.c, pt.c, semantics.c, tree.c: Update for
	DECL_SOURCE_LOCATION rename and change to const.

f/
	* com.c, ste.c: Update for DECL_SOURCE_LOCATION rename and
	change to const.

java/
	* class.c, decl.c, jcf-parse.c, jcf-write.c, parse.y,
	resource.c: Update for DECL_SOURCE_LOCATION rename and change to const.

treelang/
	* treetree.c: Update for DECL_SOURCE_LOCATION rename and
	change to const.

From-SVN: r71636
2003-09-21 16:39:40 -07:00
Richard Henderson
ddd2d57e72 c-format.c (gcc_diag_char_table): Add %J.
* c-format.c (gcc_diag_char_table): Add %J.
        (gcc_cdiag_char_table, gcc_cxxdiag_char_table): Likewise.
        (check_format_types): Fix wanted_type name lookup.
        (init_dynamic_diag_info): Setup %J.
        * diagnostic.c (text_specifies_location): Implement %J.
        * c-common.c, c-decl.c, c-objc-common.c, c-pragma.c, calls.c,
        dwarfout.c, expr.c, function.c, stmt.c, stor-layout.c, toplev.c,
        tree-inline.c, tree-optimize.c, varasm.c, config/arm/pe.c,
        config/i386/winnt.c, config/ia64/ia64.c, config/mcore/mcore.c,
        config/v850/v850.c, objc/objc-act.c: Use %J in diagnostics.

        * tree-inline.c: Include intl.h
        (inline_forbidden_p_1): Fix i18n of inline_forbidden_reason.
        * Makefile.in (tree-inline.o): Update.
cp/
        * decl.c, decl2.c, pt.c: Use %J in diagnostics.
java/
        * check-init.c, class.c, decl.c, expr.c: Use %J in diagnostics.
testsuite/
        * gcc.dg/format/gcc_diag-1.c: Add tests for %J.

From-SVN: r71619
2003-09-20 22:07:20 -07:00
Gabriel Dos Reis
e7ab53ea69 decl.c (cxx_scope_descriptor): Fix thinko.
* decl.c (cxx_scope_descriptor): Fix thinko.
        (struct cp_binding_level): Adjust type of binding_depth field.

From-SVN: r71557
2003-09-19 03:12:31 +00:00
Mark Mitchell
47aa0df475 re PR debug/12066 (g++ generates stabs for "char *" that gdb cannot read)
PR debug/12066
	* dbxout.c (dbxout_init): Use a langhook to find builtin types.
	* langhooks-def.h (lhd_return_null_tree_v): New function.
	(LANG_HOOKS_BUILTIN_TYPE_DECLS): New macro.
	(LANG_HOOKS_DECLS): Add it to the intializer.
	* langhooks.c (lhd_return_null_tree_v): New function.
	* langhooks.h (lang_hooks_for_decls): Add builtin_type_decls.


	PR debug/12066
	* cp-lang.c (LANG_HOOKS_BUILTIN_TYPE_DECLS): Define.
	* cp-tree.h (cxx_builtin_type_decls): Declare.
	* decl.c (builtin_type_decls): New variables.
	(cxx_builtin_type_decls): New function.
	(record_builtin_type): Add to builtin_type_decls.

From-SVN: r71478
2003-09-17 20:52:41 +00:00
Mark Mitchell
a7e8c268ed re PR c++/3907 (nested template parm collides with member name)
* coverage.c (create_coverage): Do not call pushlevel/poplevel.
	* langhooks-def.h (lhd_do_nothing_iii_return_null_tree): New
	function.
	* langhooks.c (lhd_do_nothing_iii_return_null_tree): Define it.

	PR c++/3907
	* class.c (maybe_note_name_used_in_class): Refine test for whether
	or not we are in a class scope.

	* cp-tree.h (language_function): Remove x_expanding_p.
	(expanding_p): Remove.
	(doing_semantic_analysis_p): Remove.
	(scope_kind): Add sk_function_parms, sk_class,
	sk_namespace.
	(innermost_scope_kind): New method.
	* call.c (cxx_type_promotes_to): Use type_decays_to.
	* cp-lang.c (LANG_HOOKS_PUSHLEVEL): Redefine.
	(LANG_HOOKS_POPLEVEL): Likewise.
	* decl.c (cp_binding_level): Remove parm_flag, template_parms_p,
	template_spec_p, namespace_p, is_for_scope, is_try_scope, and
	is_catch_scope.  Add kind and explicit_spec_p.
	(cxx_scope_descriptor): Use a lookup table.
	(find_class_binding_level): Use "kind" field in binding_level, not
	the various flags.
	(pop_binding_level): Likewise.
	(innermost_nonclass_level): Likewise.
	(toplevel_bindings_p): Likewise.
	(namespace_bindings_p): Likewise.
	(template_parm_scope_p): Likewise.
	(innermost_scope_kind): New method.
	(current_tmpl_spec_kind): Use "kind" field in binding_level, not
	the various flags.
	(pushlevel): Remove check for doing_semantic_analysis_p.
	(begin_scope): Simplify.
	(add_decl_to_level): Use "kind" field in binding_level, not
	the various flags.
	(push_local_binding): Likewise.
	(pop_label): Remove check for doing_semantic_analysis_p.
	(poplevel): Use "kind" field in binding_level, not
	the various flags.
	(set_block): Remove check for doing_semantic_analysis_p.
	(pushlevel_class): Use "kind" field in binding_level, not
	the various flags.
	(poplevel_class): Likewise.
	(initial_push_namespace_scope): Likewise.
	(maybe_push_to_top_level): Likewise.
	(set_identifier_type_value_with_scope): Likewise.
	(pop_everything): Likewise.
	(maybe_process_template_type_declaration): Likewise.
	(pushtag): Likewise.
	(pushdecl): Likewise.
	(pushdecl_with_scope): Likewise.
	(check_previous_goto_1): Likewise.
	(define_label): Likewise.
	(finish_case_label): Likewise.
	(lookup_tag): Likewise.
	(unqualified_namespace_lookup): Likewise.
	(lookup_name_real): Likewise.
	(lookup_name_current_level): Likewise.
	(lookup_type_current_level): Likewise.
	(record_builtin_type): Likewise.
	(cp_make_fname_decl): Likewise.
	(maybe_inject_for_scope_var): Likewise.
	(cp_finish_decl): Remove check for doing_semantic_analysis_p.
	(start_function): Use begin_scope, not pushlevel.
	(finish_function): Use "kind" field in binding_level, not
	the various flags.
	(start_method): Use begin_scope, not pushlevel.
	(make_label_decl): Do not check expanding_p.
	(save_function-data): Do not set expanding_p.
	(cxx_push_function_context): Do not clear expanding_p.
	* semantics.c (cxx_expand_function_start): Do not set expanding_p.

	PR c++/3907
	* g++.dg/parse/template12.C: New test.

	* g++.dg/abi/bitfield11.C: New test.
	* g++.dg/abi/bitfield12.C: Likewise.

From-SVN: r71393
2003-09-15 00:59:28 +00:00
Richard Henderson
c1f927e84e c-decl.c (c_expand_body_1): Push and pop function context here.
gcc/
        * c-decl.c (c_expand_body_1): Push and pop function context here.
        * tree-optimize.c (tree_rest_of_compilation): ... not here.  Take
        nested argument instead of computing nesting ourselves.

gcc/cp/
        * decl.c (finish_function): Clear current_function_decl.
        * decl2.c (mark_used): Don't push/pop gc context.
        * optimize.c (optimize_function): Likewise.
        * tree.c (cp_cannot_inline_tree_fn): Likewise.
        * pt.c (instantiate_decl): Inc/dec function_depth instead.
        * semantics.c (expand_body): Update for tree_rest_of_compilation
        nested argument.

From-SVN: r71208
2003-09-08 08:56:27 -07:00
Gabriel Dos Reis
a2a9e21c33 re PR c++/11762 (namespace aliasing ICE in warn_extern_redeclared_static)
* c-pretty-print.h (pp_c_left_brace): Declare.
	(pp_c_right_brace): Likewise.
	* c-pretty-print.c (pp_c_left_brace): Now a function
	(pp_c_right_brace): Likewise.

cp/
	PR c++/11762
	* error.c (dump_decl): Handle namespace-alias-definition.
	* decl.c (warn_extern_redeclared_static): There is no point in
	checking changes in storage class specifier for a namespace
	declaration.
	(duplicate_decls): Tidy diagnostic message.
	* cxx-pretty-print.c (pp_cxx_left_brace): New macro.
	(pp_cxx_right_brace): Likewise.
	(pp_cxx_original_namespace_definition): New function.
	(pp_cxx_namespace_alias_definition): Likewise.
	(pp_cxx_declaration): Use them.  Handle NAMESPACE_DECLs.

From-SVN: r71175
2003-09-07 18:52:53 +00:00
Gabriel Dos Reis
c87ceb139f cp-tree.h (add_binding): Remove declaration.
* cp-tree.h (add_binding): Remove declaration.
        * name-lookup.h (supplement_binding): Declare.
        * decl.c (add_binding): Move to name-lookup.c.
        (push_local_binding): Adjust.
        (push_class_binding): Likewise.
        (set_identifier_type_value_with_scope): Likewise.
        * name-lookup.c (supplement_binding): Rename from add_binding.
        Return a bool.  Improve documentation.
        (set_namespace_binding): Adjust.
        * Make-lang.in (cp/name-lookup.o): Depend on toplev.h

From-SVN: r71144
2003-09-06 19:03:44 +00:00
Steven Bosscher
b9c87401ae re PR c++/11595 (crash on duplicate label definition)
PR c++/11595
	* decl.c (define_label): Remove unreachable timevar pop.
	Always return the decl, even if the definition is invalid.

From-SVN: r71138
2003-09-06 15:44:34 +00:00
DJ Delorie
61f71b3447 targhooks.c: New file.
* targhooks.c: New file.
	* targhooks.h: New file.
	* Makefile.in: Add targhooks.o support.
	(function.o): Depend on$(TARGET_H).
	(stmt.o): Likewise.
	(combine.o): Depend on $(TREE_H) and $(TARGET_H).
	* builtins.c (apply_args_size, expand_builtin_apply_args_1,
	expand_builtin_apply): Convert to calls.struct_value_rtx hook.
	(expand_builtin_saveregs): Convert to
	calls.expand_builtin_saveregs hook.
	* c-decl.c (start_decl): Handle new calls.promote_prototypes hook
	here, instead of ...
	(get_parm_info) ... here.
	(store_parm_decls_oldstyle): Convert to calls.promote_prototypes
	hook.
	(finish_function): Handle calls.promote_prototypes hook here too.
	* c-typeck.c (convert_arguments): Convert to
	calls.promote_prototypes hook.
	(c_convert_parm_for_inlining): Likewise.
	* calls.c (initialize_argument_information): Convert to
	calls.promote_function_args hook.
	(expand_call): Convert to calls.struct_value_rtx,
	calls.strict_argument_naming,
	calls.pretend_outgoing_varargs_named, and
	calls.promote_function_return hooks.  Pass fndecl to
	aggregate_value_p.  Initialize CUMULATIVE_ARGS before calling
	hooks, so they can use that.
	(emit_library_call_value_1): Likewise.
	* combine.c (setup_incoming_promotions): Convert to
	calls.promote_function_args hook.
	* emit-rtl.c: Convert to calls.struct_value_rtx hook.
	* expr.c (expand_assignment): Pass call to aggregate_value_p.
	(expand_expr): Likewise.
	* expr.h: Remove support for SETUP_INCOMING_VARARGS,
	STRICT_ARGUMENT_NAMING, PRETEND_OUTGOING_VARARGS_NAMED,
	RETURN_IN_MEMORY macro defaults.
	* final.c (profile_function): Convert to calls.struct_value_rtx
	hook.
	* function.c (aggregate_value_p): Accept function type tree as
	second parameter; try to deduce fntype from it.  Convert to
	calls.return_in_memory hook.
	(assign_parms): Convert to calls.setup_incoming_varargs,
	calls.strict_argument_naming, calls.promote_function_args,
	calls.pretend_outgoing_varargs_named hooks.  Pass fndecl to
	aggregate_value_p.
	(expand_function_start): Likewise.  Convert to
	calls.struct_value_rtx hook.
	(expand_function_end): Convert to calls.promote_function_return hook.
	(allocate_struct_function): Pass fndecl to aggregate_value_p.
	* hard-reg-set.h: Update comments to new hook names.
	* integrate.c (expand_inline_function): Pass fndecl to aggregate_value_p.
	* reg-stack.c (stack_result): Likewise.
	* rtl.h (struct_value_rtx, struct_value_incoming_rtx): Delete.
	* stmt.c (expand_value_return): Convert to
	calls.promote_function_return hook.
	* target-def.h: Add TARGET_PROMOTE_FUNCTION_ARGS,
	TARGET_PROMOTE_FUNCTION_RETURN, TARGET_PROMOTE_PROTOTYPES,
	TARGET_STRUCT_VALUE_RTX, TARGET_RETURN_IN_MEMORY,
	TARGET_EXPAND_BUILTIN_SAVEREGS, TARGET_SETUP_INCOMING_VARARGS,
	TARGET_STRICT_ARGUMENT_NAMING,
	TARGET_PRETEND_OUTGOING_VARARGS_NAMED, and TARGET_CALLS.
	* target.h: Likewise.
	* tree.h (aggregate_value_p): Also takes a tree to deduce function
	attributes from (for target hooks).
	* doc/tm.texi (PROMOTE_FUNCTION_ARGS, PROMOTE_FUNCTION_RETURN,
	PROMOTE_PROTOTYPES, RETURN_IN_MEMORY, STRUCT_VALUE_REGNUM,
	STRUCT_VALUE, STRUCT_VALUE_INCOMING_REGNUM, STRUCT_VALUE_INCOMING,
	EXPAND_BUILTIN_SAVEREGS, SETUP_INCOMING_VARARGS,
	STRICT_ARGUMENT_NAMING, PRETEND_OUTGOING_VARARGS_NAMED): Convert
	to hooks.

	* config/alpha/alpha.c (alpha_output_mi_thunk_osf): Pass function
	to aggregate_value_p.
	* config/arm/arm.c (arm_init_cumulative_args,
	arm_output_mi_thunk): Likewise.
	* config/i386/i386.c (ix86_return_pops_args, x86_this_parameter):
	Likewise.
	* config/mips/mips.c (mips_save_reg_p, mips_expand_prologue,
	mips_can_use_return_insn): Likewise.
	* config/rs6000/rs6000.c (rs6000_output_mi_thunk): Likewise.
	* config/s390/s390.c (s390_output_mi_thunk): Likewise.
	* config/sparc/sparc.c (sparc_output_mi_thunk): Pass function to
	aggregate_value_p.
	* config/story16/stormy16.c (xstormy16_asm_output_mi_thunk): Pass
	function to aggregate_value_p.
	* objc/objc-act.c (generate_struct_by_value_array): Pass NULL to
	aggregate_value_p.

	* config/sh/sh-protos.h (sh_builtin_saveregs): Remove.
	(sh_attr_renesas_p, sh_cfun_attr_renesas_p, sh_function_arg,
	sh_function_arg_advance, sh_pass_in_reg_p): New.  * config/sh/sh.c
	(sh_handle_renesas_attribute, sh_promote_prototypes,
	sh_struct_value_rtx, sh_return_in_memory, sh_builtin_saveregs,
	sh_setup_incoming_varargs, sh_strict_argument_naming,
	sh_pretend_outgoing_varargs_named): New decls.
	(targetm): Add new hooks.
	(calc_live_regs): Save MACL and MACH if the function has the
	renesas attribute.
	(sh_expand_prologue): Support renesas attribute.
	(sh_builtin_saveregs): Make static.
	(sh_build_va_list): Support renesas attribute.
	(sh_va_start): Likewise.
	(sh_va_arg): Likewise.
	(sh_promote_prototypes): New.
	(sh_function_arg): New, moved from sh.h.  Support renesas
	attribute.
	(sh_function_arg_advance): Likewise.
	(sh_return_in_memory): Likewise.
	(sh_strict_argument_naming): Likewise.
	(sh_pretend_outgoing_varargs_named): Likewise.
	(sh_struct_value_rtx): New.
	(sh_attribute): Add renesas attribute.
	(sh_handle_renesas_attribute): New.
	(sh_attr_renesas_p, sh_cfun_attr_renesas_p): New.
	(sh_ms_bitfield_layout_p): Support renesas attribute also.
	(sh_output_mi_thunk): Pass function to aggregate_value_p.  *
	config/sh/sh.h (TARGET_SWITCHES): Add -mrenesas as an alias for
	-mhitachi.
	(STRUCT_VALUE_REGNUM, STRUCT_VALUE, RETURN_IN_MEMORY): Moved to
	target hooks.
	(sh_args): Add renesas_abi flag.
	(INIT_CUMULATIVE_ARGS): Set it.  Pass fndecl to aggregate_value_p.
	(FUNCTION_ARG_ADVANCE, FUNCTION_ARG): Move to sh.c.
	(PASS_IN_REG_P): Support renesas attribute.  Pass DF and TF on the
	stack for the renesas abi.
	(STRICT_ARGUMENT_NAMING, PRETEND_OUTGOING_VARARGS_NAMED,
	SETUP_INCOMING_VARARGS, EXPAND_BUILTIN_SAVEREGS,
	PROMOTE_PROTOTYPES): Moved to sh.c.  * config/sh/sh.md (call): Set
	call cookie to indicate renesas calls.

	* decl.c (finish_function): Pass fndecl to aggregate_value_p.

	* misc.c (default_pass_by_ref): Convert to calls.return_in_memory
	hook.

From-SVN: r71048
2003-09-03 23:18:05 -04:00
Mark Mitchell
7e99327dbc re PR c++/12114 ([3.3.2] Uninitialized memory accessed in dtor)
PR c++/12114
	* g++.dg/init/ref9.C: New test.

	PR c++/11972
	* g++.dg/template/nested4.C: New test.

	PR c++/12114
	* cp-tree.h (initialize_reference): Change prototype.
	* call.c (initialize_reference): Add cleanup parameter.
	* decl.c (grok_reference_init): Likewise.
	(check_initializer): Likewise.
	(cp_finish_decl): Insert a CLEANUP_STMT if necessary.
	(duplicate_decls): When replacing an anticipated builtin, do not
	honor TREE_NOTHROW.
	* typeck.c (convert_for_initialization): Correct call to
	initialize_reference.

	PR c++/11972
	* pt.c (dependent_type_p_r): Pass only the innermost template
	arguments to any_dependent_template_arguments_p.

From-SVN: r70981
2003-09-01 19:18:03 +00:00
Richard Henderson
4985cde3ef tree-optimize.c: New file.
gcc/
        * tree-optimize.c: New file.
        * Makefile.in (OBJS-archive): Add tree-optimize.o.
        (tree-optimize.o): New.
        * c-decl.c (store_parm_decls): Use allocate_struct_function.
        (finish_function): Don't free_after_parsing or free_after_compilation.
        (set_save_expr_context): Move to tree-optimize.c.
        (c_expand_body_1): Use tree_rest_of_compilation.
        * c-lang.c (LANG_HOOKS_RTL_EXPAND_STMT): New.
        * objc/objc-lang.c (LANG_HOOKS_RTL_EXPAND_STMT): New.
        * c-objc-common.c (expand_deferred_fns): Don't emit unused inlines;
        iterate until closure.
        * langhooks-def.h (LANG_HOOKS_RTL_EXPAND_START,
        LANG_HOOKS_RTL_EXPAND_STMT, LANG_HOOKS_RTL_EXPAND_END): New.
        (LANG_HOOKS_RTL_EXPAND_INITIALIZER): New.
        * langhooks.h (struct lang_hooks_for_rtl_expansion): New.
        * toplev.h (tree_rest_of_compilation): Declare it.

gcc/cp/
        * cp-lang.c (LANG_HOOKS_RTL_EXPAND_START): New.
        (LANG_HOOKS_RTL_EXPAND_STMT): New.
        * cp-tree.h (cxx_expand_function_start): Declare.
        * decl.c (start_function): Use allocate_struct_function.
        Move stmts_are_full_exprs_p assertion from expand_body.
        Do not free_after_parsing or free_after_compilation.
        (cxx_push_function_context): Move code to set struct function
        data from genrtl_start_function.
        * optimize.c (optimize_function): Don't inc/dec function_depth.
        * semantics.c (expand_body): Use tree_rest_of_compilation.
        (cxx_expand_function_start): Rename from genrtl_start_function,
        omit bits done by tree_rest_of_compilation.
        (genrtl_finish_function): Remove.
        (clear_decl_rtl): Move to ../tree-optimize.c.

Co-Authored-By: Jason Merrill <jason@redhat.com>

From-SVN: r70933
2003-08-29 16:21:13 -07:00
Nathan Sidwell
6d9a0a36e5 re PR c++/11871 (Koenig lookup regression)
cp:
	PR c++/11871
	* decl.c (push_class_level_binding): Correct old_decl value from
	my 2003-07-29 reorganization.
testsuite:
	PR c++/11871
	* c++.dg/lookup/crash1.C: New test.

From-SVN: r70803
2003-08-26 09:16:16 +00:00
Mark Mitchell
43dc123f52 re PR target/8795 ([PPC] Altivec related bugs concerning gcc 3.3 and mainline)
PR c++/8795
	* tree.h (build_method_type_directly): Declare.
	* c-common.c (handle_vector_size_attributes): Handle METHOD_TYPEs.
	(vector_size_helper): Likewise.
	* tree.c (build_method_type_directly): New function.
	(build_method_type): Use it.

	PR c++/8795
	* cp-tree.h (build_cplus_method_type): Remove.
	* call.c (standard_conversion): Use build_method_type_directly
	instead of build_cplus_method_type.
	* class.c (build_clone): Likewise.
	(adjust_clone_args): Likewise.
	* decl.c (build_ptrmem_type): Likewise.
	(grokdeclarator): Likewise.
	(check_function_type): Likewise.
	* decl2.c (grok_method_quals): Likewise.
	(maybe_retrofit_in_chrg): Likewise.
	* pt.c (copy_default_args_to_explicit_spec): Likewise.
	(tsubst_function_type): Likewise.
	(tsubst): Likewise.
	* tree.c (build_cplus_method_type): Remove.
	* typeck.c (merge_types): Use build_method_type_directly.

	PR c++/8795
	* g++.dg/ext/altivec-1.C: New test.

From-SVN: r70773
2003-08-25 15:47:43 +00:00
Kriang Lerdsuwanakij
19db77cefe PR c++/641, c++/11876
PR c++/641, c++/11876
	* friend.c (add_friend): Add complain parameter.
	(make_friend_class): Likewise.
	(do_friend): Adjust add_friend call.
	* decl.c (grokdeclarator): Adjust make_friend_class call.
	* parser.c (cp_parser_member_declaration): Likewise.
	(cp_parser_template_declaration_after_exp): Likewise.
	* pt.c (instantiate_class_template): Adjust make_friend_class
	and add_friend call.
	* cp-tree.h (make_friend_class): Adjust declaration.
	(add_friend): Likewise.

	* g++.dg/template/friend22.C: New test.
	* g++.dg/template/friend23.C: Likewise.

From-SVN: r70732
2003-08-23 12:53:48 +00:00
Jason Merrill
01bf0f3e3a re PR c++/11614 (Incorrect handling of pointers to arrays)
PR c++/11614
        * decl.c (grokdeclarator): Recognize a flexible array based on the
        type, not the form of the declarator.

From-SVN: r70636
2003-08-21 01:24:02 -04:00
Mark Mitchell
4b0d3cbe3e re PR c++/11946 (fun and merriment with enums as function arguments)
PR c++/11946
	* convert.c (convert_to_integer): Use CONVERT_EXPR (instead of
	NOP_EXPR) when necessary.
	* c-common.c (c_common_signed_or_unsigned_type): Correctly handle
	types with precisions other than those given by native machine
	modes.

	PR c++/11684
	* cp-tree.h (grok_op_properties): Change prototype.
	* decl.c (grok_op_properties): Add complain parameter.
	(grokfndecl): Pass it.
	* pt.c (tsubst_decl): Adjust accordingly.

	PR c++/10926
	* decl.c (start_method): Return immediately if push_template_decl
	does not like the declaration.
	* pt.c (push_template_decl_real): Disallow member template
	destructors.

	PR c++/11036.C
	* cp-tree.h (add_binding): Add prototype.
	* class.c (add_method): Set TYPE_HAS_DESTRUCTOR if appropriate.
	(maybe_warn_about_overly_private_class): Use
	CLASSTYPE_DESTRUCTORS.
	(pushclass): Adjust call to set_identifier_type_value.
	* decl.c (add_binding): Give it external linkage.
	(push_local_binding): Adjust call to add_binding.
	(push_class_binding): Likewise.
	(set_identifier_type_value_with_scope): Change prototype.  Use
	add_binding for global bindings.
	(set_identifier_type_value): Adjust accordingly.
	(pushtag): Likewise.
	(pushdecl): Use set_identifier_type_value, not
	set_identifier_type_value_with_scope.
	(pushdecl_namespace_level): Adjust calls to
	SET_IDENTIFIER_TYPE_VALUE to pass a DECL.
	(pushdecl_class_level): Likewise.
	(lookup_tag): Use select_decl.
	(select_decl): Improve comment.
	(record_builtin_type): Do not call pushdecl.
	(cxx_init_decl_processing): Do not call xref_tag for bad_alloc.
	(cp_finish_decl): Adjust call to set_identifier_type_value.
	(check_elaborated_type_specifier): Improve checks for invalid uses
	of typedefs.
	(xref_tag): Adjust call to check_elaborated_type_specifier.
	* decl2.c (grokclassfn): Do not set TYPE_HAS_DESTRUCTOR.
	* name-lookup.c (set_namespace_binding): Use add_binding.
	* parser.c (cp_parser_simple_type_specifier): Return a TYPE_DECL,
	rather than an IDENTIFIER_NODE, to represent built-in types, if
	requested by the caller.
	(cp_parser_postfix_expression): Adjust call.
	(cp_parser_type_specifier): Likewise.
	(cp_parser_elaborated_type_specifier): Adjust call to
	check_elaborated_type_specifier.
	* typeck2.c (build_functional_cast): Do not perform name lookups.

	PR c++/10717
	* decl.c (expand_static_init): Remove unncessary code.

	PR c++/10926
	* g++.dg/template/dtor2.C: New test.

	PR c++/11684
	* g++.dg/template/operator1.C: New test.
	* g++.dg/parse/operator4.C: New test.

	PR c++/11946.C
	* g++.dg/expr/enum1.C: New test.
	* gcc.dg/c99-bool-1.c: Remove bogus warning.

	PR c++/11036.C
	* g++.dg/parse/elab2.C: New test.
	* g++.dg/parse/typedef4.C: Change error message.
	* g++.old-deja/g++.robertl/eb133.C: Remove bogus error markers.
	* g++.old-deja/g++.robertl/eb133a.C: Remove bogus error markers.
	* g++.old-deja/g++.robertl/eb133b.C: Remove bogus error markers.

From-SVN: r70593
2003-08-20 07:06:47 +00:00
Nathan Sidwell
5d87256426 apparently missing part of 2003-08-15 checkin
apparently missing part of 2003-08-15 checkin
	* decl.c (make_typename_type): Use my_friendly_assert.

From-SVN: r70539
2003-08-18 12:38:04 +00:00
Mark Mitchell
560ad596bd re PR c++/11703 (Problem with using enum in placement delete)
PR c++/11703
	* call.c (type_passed_as): Use TYPE_SIZE, not TYPE_PRECISION to
	determine whether or not to promote types.
	(convert_for_arg_passing): Likewise.
	* decl2.c (cp_build_parm_decl): Do not set DECL_ARG_TYPE in
	templates.
	* pt.c (tsubst_decl): Do not expect it to be set.

	PR c++/9512
	PR c++/10923
	* cp-tree.h (check_elaborated_type_specifier): Declare.
	(handle_class_head): Remove.
	(note_got_semicolon): Likewise.
	(note_list_got_semicolon): Likewise.
	(finish_class_definition): Likewise.
	* decl.c (check_elaborated_type_specifier): Make it public.
	Robustify.
	(handle_class_head): Remove.
	* parser.c (cp_parser_elaborated_type_specifier): Use
	check_elaborated_type_specifier.
	(cp_parser_class_specifier): Do not call finish_class_definition.
	(cp_parser_class_head): Or handle_class_head.  Check for
	over-qualified names.
	* semantics.c (finish_class_definition): Remove.

	* parser.c (cp_parser_check_for_definition_in_return_type): New
	function.
	(cp_parser_simple_declaration): Adjust call to
	cp_parser_init_declarator.
	(cp_parser_decl_specifier_seq): Change type of
	declares_class_or_enum parameter.
	(cp_parser_explicit_instantiation): Adjust accordingly.
	(cp_parser_type_specifier): Change type of
	declares_class_or_enum parameter.
	(cp_parser_init_declarator): Add declares_class_or_enum
	parameter.
	(cp_parser_parameter_declaration): Adjust call to
	cp_parser_decl_specifier_seq.
	(cp_parser_function_definition): Likewise.
	(cp_parser_member_declaration): Likewise.
	(cp_parser_single_declaration): Likewise.

	* cp-tree.h (lang_type_class): Remove has_call_overloaded,
	has_array_ref_overloaded, has_arrow_overloaded, and got_semicolon.
	(TYPE_OVERLOADS_CALL_EXPR): Remove.
	(TYPE_OVERLOADS_ARRAY_REF): Likewise.
	(TYPE_OVERLOADS_ARROW): Likewise.
	(CLASSTYPE_GOT_SEMICOLON): Likewise.
	* class.c (check_bases): Do not set them.
	(finish_struct_1): Likewise.
	* decl.c (cp_finish_decl): Do not set CLASSTYPE_GOT_SEMICOLON.
	(build_ptrmemfunc_type): Likewise.
	(grok_op_properties): Do not set TYPE_OVERLOADS_*.
	(start_function): Do not check CLASSTYPE_GOT_SEMICOLON.
	* decl2.c (grokfield): Do not set CLASSTYPE_GOT_SEMICOLON.
	* lex.c (note_got_semicolon): Remove.
	(note_list_got_semicolon): Likewise.
	* parser.c (cp_parser_simple_declaration): Do not call
	note_list_got_semicolon.
	* pt.c (list_eq): Remove.
	(lookup_template_class): Do not set CLASSTYPE_GOT_SEMICOLON.
	(instantiate_class_template): Do not set TYPE_OVERLOADS*.
	(instantiate_class_template): Do not set CLASSTYPE_GOT_SEMICOLON.
	* ptree.c (cxx_print_type): Do not print them.
	* semantics.c (finish_member_class_template): Do not call
	note_list_got_semicolon.

	* g++.dg/parse/ret-type2.C: New test.

	PR c++/11703
	* g++.dg/init/new8.C: New test.

	PR c++/10923
	* g++.dg/parse/typedef5.C: New test.

	PR c++/9512
	* g++.dg/parse/qualified2.C: New test.
	* g++.old-deja/g++.other/decl5.C: Mark one more instance of
	invalid code.

From-SVN: r70391
2003-08-12 22:26:25 +00:00
Aldy Hernandez
79a1a73608 decl.c (grokparms): Use cp_build_qualified_type instead TYPE_MAIN_VARIANT.
2003-08-06  Aldy Hernandez  <aldyh@redhat.com>

	* decl.c (grokparms): Use cp_build_qualified_type instead
	TYPE_MAIN_VARIANT.

[[Split portion of a mixed commit.]]

From-SVN: r70211.2
2003-08-07 00:10:03 +00:00
Steven Bosscher
b3c3af2f63 tree.h (DID_INLINE_FUNC): Remove macro.
2003-08-05  Steven Bosscher  <steven@gcc.gnu.org>

	* tree.h (DID_INLINE_FUNC): Remove macro.
	(DECL_DECLARED_INLINE_P): Move from c-tree.h and cp/cp-tree.h,
	add tree check for FUNCTION_DECL.
	(DECL_ESTIMATED_INSNS): Move from c-common.h and java/java-tree.h.
	(struct tree_decl): Rename inlined_function_flag to
	declared_inline_flag.
	* c-common.h (c_lang_decl): Remove.
	(DECL_ESTIMATED_INSNS): Remove.
	* c-tree.h (struct lang_decl): Don't include c_lang_decl.
	(DECL_DECLARED_INLINE_P): Remove.
	* c-decl.c (grokdeclarator): Update comment.  With -finline-functions,
	do not reset DECL_DECLARED_INLINE_P.  Don't use DID_INLINE_FUNC.
	(finish_function): Make uninlinable a bool.  Fixup call to
	tree_inlinable_function_p() and fix some code style issues.
	* cgraph.h (disgread_inline_limits): Fix spelling: `disregard'.
	* cgraph.c (dump_cgraph): Likewise.
	* cgraphunit.c (cgraph_decide_inlining): Likewise
	(cgraph_finalize_compilation_unit): Likewise.
	Also update call to tree_inlinable_function_p().
	(cgraph_default_inline_p): Don't use DID_INLINE_FUNC.  Instead
	look at DECL_DECLARED_INLINE and reverse logic.
	* print-tree.c (print_node): Likewise.
	* toplev.c (rest_of_handle_inlining): Don't use DID_INLINE_FUNC.
	* tree-inline.h (tree_inlinable_function_p): Make a bool.  Update
	prototype.
	* tree-inline.c (inlinable_function_p): Split up in this function to
	check for basic inlining inhibiting conditions, and new
	limits_allow_inlining() function.  Warn if inlining is impossible
	because the inline candidate calls alloca or uses sjlj exceptions.
	(limits_allow_inlining): this new function to check if the inlining
	limits are satisfied.  Throttle from currfn_max_inline_insns, not from
	MAX_INLINE_INSNS_SINGLE.  The latter only makes sense if
	MAX_INLINE_INSNS_AUTO and MAX_INLINE_INSNS_SINGLE are equal.
	Update prototypes.
	(tree_inlinable_function_p): Make a bool.  Update call to
	inlinable_function_p
	(expand_call_inline): Use limits_allow_inlining() when not in
	unit-at-a-time mode to decide on inlining.  Don't use DID_INLINE_FUNC,
	instead see if the function was declared `inline'.

cp/
	* cp-tree.h (struct lang_decl): Don't include c_lang_decl.
	(DECL_DECLARED_INLINE_P): Remove.
	* decl2.c (import_export_decl): Only look at DECL_DECLARED_INLINE_P
	if decl is a FUNCTION_DECL.  This never made sense, but now it is
	required to avoid a tree check failure.
	* decl.c (grokfndecl): Don't touch DID_INLINE_FUNC.
	* optimize.c (maybe_clone_body): Likewise.

java/
	* java-tree.h (DECL_ESTIMATED_INSNS): Remove.

From-SVN: r70174
2003-08-05 14:11:53 +00:00
Roger Sayle
03aa99d49f c-common.c (flag_noniso_default_format_attributes): Delete.
* c-common.c (flag_noniso_default_format_attributes): Delete.
	(built_in_attribute): Don't define/undefine DEF_FN_ATTR.
	(c_attrs_initialized): Delete.
	(c_common_nodes_and_builtins): Don't test c_attrs_initialized,
	always call c_init_attributes.
	(c_init_attributes): Don't define/undefine DEF_FN_ATTR.  Don't
	set c_attrs_initialized when done.
	(c_common_insert_default_attributes): Delete.
	* c-common.h (flag_noniso_default_format_attributes): Delete.
	(c_coomon_insert_default_attributes): Delete prototype.
	* c-opts.c (set_std_c89, set_std_c99, set_std_cxx98): Dont set
	flag_noniso_default_format_attributes.

	* c-decl.c (c_insert_default_attributes): Delete.
	* c-tree.h (c_insert_default_attributes): Delete prototype.

	* attribs.c (decl_attributes): Don't call insert_default_attributes
	langhook.  Update function description comment.
	* langhooks.h (lang_hooks): Remove insert_default_attributes field.
	* langhooks-def.h (LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES): Delete.
	* c-lang.c (LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES): Don't define.
	* system.h: Poison LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES macro.

cp/
	* decl.c (cxx_insert_default_attributes): Delete.
	* cp-tree.h (cxx_insert_default_attributes): Don't prototype.
	* cp-lang.c (LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES): Don't define.

objc/
	* objc-lang.c (LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES): Don't define.

From-SVN: r70155
2003-08-04 20:44:20 +00:00
Nathan Sidwell
fd9aef9d18 re PR c++/9447 (using Base<T>::member does not work)
cp:
	PR c++/9447
	* cp-tree.def (USING_DECL): Document its type.
	* class.c (pushclass): If we're entering a template, push any
	dependent using decls it has.
	* decl2.c (do_class_using_decl): Refactor. Type is NULL iff it is
	a dependent scope.
	* pt.c (tsubst_decl) <USING_DECL case>: Set type.
	(tsubst): Remove USING_DECL checks.
	(type_dependent_expression_p): Remove USING_DECL case.
	* semantics.c (finish_member_declaration): A USING_DECL's type
	indicates whether it is dependent.
testsuite:
	PR c++/9447
	* g++.dg/template/using7.C: New test.

From-SVN: r70107
2003-08-02 18:52:16 +00:00
Mark Mitchell
ee935db4b6 re PR c++/11697 (Failure to diagnose class template redeclaration via using declaration)
PR c++/11697
	* decl.c (decls_match): Don't ignore the types of template
	classes.

	PR c++/11744
	* pt.c (tsubst_copy_and_build): Refine Koenig lookup logic.

	PR c++/11697
	* g++.dg/template/using6.C: New test.

	PR c++/11744
	* g++.dg/template/koenig2.C: New test.

From-SVN: r70062
2003-08-01 18:48:50 +00:00
Kriang Lerdsuwanakij
cbd63935d8 PR c++/8442, c++/8806
PR c++/8442, c++/8806
	* decl.c (qualify_lookup): Accept TEMPLATE_DECL if types are
	preferred.
	(check_elaborated_type_specifier): Add allow_template_p
	parameter.  Check tag mismatch and class template.
	(xref_tag): Add template_header_p parameter.  Add assertion
	that name is an IDENTIFIER_NODE.  Remove implicit typename
	warning.  Simplify lookup process if globalize is true.
	(cxx_init_decl_processing): Adjust call to xref_tag.
	(xref_tag_from_type): Likewise.
	* decl2.c (handle_class_head): Likewise.
	* parser.c (cp_parser_elaborated_type_specifier,
	cp_parser_class_head): Likewise.
	* rtti.c (init_rtti_processing, build_dynamic_cast1,
	tinfo_base_init, emit_support_tinfos): Likewise.
	* class.c (is_base_of_enclosing_class): Remove.
	* pt.c (convert_template_argument): Don't accept RECORD_TYPE as
	template template argument.
	* cp-tree.h (xref_tag): Adjust declaration.
	(is_base_of_enclosing_class): Remove.
	* NEWS: Document template template argument change.

	* g++.dg/template/elab1.C: Likewise.
	* g++.dg/template/type2.C: Likewise.
	* g++.dg/template/ttp3.C: Adjust expected error message.
	* g++.old-deja/g++.law/visibility13.C: Likewise.
	* g++.old-deja/g++.niklas/t135.C: Likewise.
	* g++.old-deja/g++.pt/ttp41.C: Likewise.
	* g++.old-deja/g++.pt/ttp43.C: Use qualified name for template
	template argument.
	* g++.old-deja/g++.pt/ttp44.C: Likewise.

From-SVN: r70048
2003-08-01 15:06:02 +00:00
Rainer Orth
ad96995ba1 * decl.c (finish_enum): Initialize underlying_type.
From-SVN: r69941
2003-07-29 22:15:28 +00:00
Nathan Sidwell
399dedb996 re PR c++/9447 (using Base<T>::member does not work)
cp:
	PR c++/9447
	* decl.c (add_binding): Add bval local variable.
	(push_class_level_binding): Likewise. Allow a USING_DECL to be
	pushed.
	* decl2.c (do_class_using_decl):  The type of a using decl is
	unknown.
	* parser.c (cp_parser_postfix_expression): Refactor unqualified-id
	function call lookup code.
	* pt.c (tsubst): A USING_DECL will have unknown type.
	(tsubst_copy_and_build): Allow a using decl.
	(type_dependent_expression_p): A USING_DECL will make it
	dependent.
	* semantics.c (finish_member_declaration): Push a dependent using
	declaration.
testsuite:
	PR c++/9447
	* g++.dg/template/using1.C: New test.
	* g++.dg/template/using2.C: New test.
	* g++.dg/template/using3.C: New test.
	* g++.dg/template/using4.C: New test.

From-SVN: r69921
2003-07-29 11:16:50 +00:00
Mark Mitchell
7b6d72fcfb re PR c++/11667 (wider-than-int enums never compare equal to 0)
PR c++/11667
	* c-common.c (shorten_compare): Take into account differences
	between C and C++ representation for enumeration types.
	* tree.h (set_min_and_max_values_for_integral_type): Declare.
	* stor-layout.c (set_min_and_max_values_for_integral_type): New
	function, broken out from ...
	(fixup_signed_type): ... here and ...
	(fixup_unsigned_type): ... here.

	PR c++/11667
	* call.c (standard_conversion): Allow all integral->enumeral
	conversions, after marking them as bad.
	* decl.c (finish_enum): Make sure that all enumerators are
	properly converted to the underlying type.
	(build_enumerator): Set DECL_CONTEXT for namespace-scope
	enumeration types.
	* pt.c (tsubst_copy): Adjust handling of CONST_DECLs accordingly.
	(tsubst_enum): Tidy.

	* Make-lang.in (typeck.o): Depend on convert.h.
	(class.o): Likewise.
	(rtti.o): Likewise.
	* call.c: Include convert.h.
	(convert_arg_to_ellipsis): Use convert_to_real.
	* class.c: Include convert.h.
	(build_base_path): Use convert_to_integer.
	* rtti.c: Include convert.h.
	(build_headof): Use convert_to_integer.
	* typeck.c: Include convert.h.
	(decay_conversion): Use convert_to_integer.
	(build_unary_op): Use build_nop.
	(get_delta_difference): Use convert_to_integer.
	(build_ptrmemfunc): Avoid unncessary conversions.

From-SVN: r69909
2003-07-29 01:14:24 +00:00
Nathan Sidwell
7a3397c739 cp-tree.h (begin_compound_stmt): No scope arg is a bool.
* cp-tree.h (begin_compound_stmt): No scope arg is a bool.
	(finish_compound_stmt): Remove no scope arg.
	* decl.c (register_dtor_fn): Adjust begin_compound_stmt and
	end_compound_stmt calls.
	(expand_static_init, begin_destructor_body, begin_function_body,
	finish_function_body): Likewise.
	* decl2.c (start_objects, finish_objects,
	start_static_storage_duration_function,
	finish_static_storage_duration_function): Likewise.
	* init.c (begin_init_stmts, finish_init_stmts,
	construct_virtual_base, build_vec_init): Likewise.
	* method.c (do_build_assign_ref, synthesize_method): Likewise.
	* parser.c (cp_parser_compound_statement,
	cp_parser_implicitly_scoped_statement,
	cp_parser_already_scoped_statement): Likewise.
	* pt.c (tsubst_expr): Likewise.
	* semantics.c (begin_compound_stmt): No scope arg is a bool.
	(finish_compound_stmt): Remove no scope arg.

	* error.c (dump_expr) <COMPOUND_EXPR case>: A compound expr is
	always dyadic.

From-SVN: r69882
2003-07-28 11:06:31 +00:00
Nathan Sidwell
c7b62f1472 cp-tree.h (build_compound_expr): Take LHS & RHS args.
* cp-tree.h (build_compound_expr): Take LHS & RHS args.
	(build_x_compound_expr_from_list): Declare.
	* typeck.c (build_x_compound_expr_from_list): New.
	(build_x_compound_expr): Adjust.
	(build_compound_expr): Remove unreachable code. Take two
	parameters, adjust.
	* decl.c (grok_reference_init): Use
	build_x_compound_expr_from_list.
	(expand_static_init): Adjust build_compound_expr call.
	(cxx_maybe_build_cleanup): Likewise.
	* init.c (perform_member_init): Use
	build_x_compound_expr_from_list.
	(build_new_1): Likewise.
	(build_vec_delete): Adjust build_compound_expr calls.
	(build_vbase_delete): Likewise.
	* typeck2.c (store_init_value): Use
	build_x_compound_expr_from_list.
	(build_functional_cast): Likewise.

From-SVN: r69794
2003-07-25 16:52:47 +00:00
Nathan Sidwell
42eaed4985 cp-tree.h (enum tsubst_flags_t): Add tf_user.
* cp-tree.h (enum tsubst_flags_t): Add tf_user.
	* decl.c (make_typename_type): Pass it.
	* pt.c (lookup_template_class): Use it.
	(resolve_typename_type): Pass it.
	* semantics.c (finish_template_type): Pass it.

From-SVN: r69793
2003-07-25 16:45:34 +00:00
Per Bothner
b3179b0d51 decl.c (pushdecl_class_level): Don't use push_srcloc/pop_srcloc which causes errors messages to incorrectly...
* decl.c (pushdecl_class_level):   Don't use push_srcloc/pop_srcloc
	which causes errors messages to incorrectly mention included files.

From-SVN: r69771
2003-07-24 21:04:30 -07:00
Jason Merrill
de7df9ebdc tree.h (boolean_type_node): Move from C/C++/Java frontends.
* tree.h (boolean_type_node): Move from C/C++/Java frontends.
        (boolean_true_node, boolean_false_node): Likewise.
        (enum tree_index): Add TI_BOOLEAN_{TYPE,FALSE,TRUE}.
        * tree.c (build_common_tree_nodes): Init boolean_type_node.
        (build_common_tree_nodes_2): Init boolean_{true,false}_node.
        * stor-layout.c (set_sizetype): Handle an early BOOLEAN_TYPE.
        * c-common.h (truthvalue_type_node): Renamed from boolean_type_node.
        (truthvalue_true_node): Renamed from boolean_true_node.
        (truthvalue_false_node): Renamed from boolean_false_node.
        * c-decl.c: Just set truthvalue_* to integer_*.
        * c-*.[ch]: s/boolean/truthvalue/.  s/c_bool/boolean/.
        * cp/decl.c: Just set truthvalue_* to boolean_*.
        * java/java-tree.h: Move boolean_type_node et al to the back end.

From-SVN: r69758
2003-07-24 16:48:13 -04:00
Nathan Sidwell
ee20f4ee2b * decl.c (reshape_init): Remove unreachable code.
From-SVN: r69741
2003-07-24 12:56:34 +00:00
Mark Mitchell
a5ac359a6d fold-const.c (force_fit_type): Handle OFFSET_TYPE.
* fold-const.c (force_fit_type): Handle OFFSET_TYPE.
	* varasam.c (output_constant): Likewise.

2003-07-22  Mark Mitchell  <mark@codesourcery.com>

	Eliminate use of POINTER_TYPE for pointers-to-members.
	* call.c (standard_conversion): Rework pointer-to-member handling.
	Add comments.
	(add_builtin_candidate): Likewise.
	(resolve_scoped_fn_name): Remove.
	(build_conditional_expr): Rework pointer-to-member handling.
	(compare_ics): Likewise.
	* class.c (check_field_decls): Use TYPE_PTR_P.
	* cp-lang.c (cp_var_mod_type_p): Rework pointer-to-member
	handling.
	* cp-tree.h (SCALAR_TYPE_P): Use TYPE_PTR_TO_MEMBER_P.
	(TYPE_PTRMEM_P): Add comment.
	(TYPE_PTR_P): Simplify.
	(TYPE_PTROB_P): Correct definition.
	(TYPE_PTR_TO_MEMBER_P): New macro.
	(TYPE_PTRMEM_CLASS_TYPE): Adjust.
	(TYPE_PTRMEM_POINTED_TO_TYPE): Likewise.
	(resolved_scoped_fn_name): Remove declaration.
	(build_offset_ref): Change prototype.
	(resolve_offset_ref): Remove.
	(comp_target_types): Remove.
	* cvt.c (cp_convert_to_pointer): Rework pointer-to-member
	handling.
	(convert_to_reference): Use can_convert.
	(ocp_convert): Improve error handling.  Rework pointer-to-member
	handling.
	(perform_qualification_conversions): Rework pointer-to-member
	handling.
	* decl.c (build_ptrmem_type): Handle functions too.
	(create_array_type_for_decl): Remove OFFSET_TYPE error message.
	(grokdeclarator): Use OFFSET_TYPE for pointers to data members.
	(grokparms): Remove OFFSET_TYPE error message.
	* dump.c (cp_dump_tree): Rework pointer-to-member handling.
	* error.c (dump_type_prefix): Likewise.
	* expr.c (cplus_expand_constant): Use build_nop.
	* init.c (build_offset_ref): Add address_p parameter.  Fold in
	necessary bits from resolve_offset_ref.
	(resolve_offset_ref): Remove.
	* parser.c (cp_parser_postfix_expression): Remove special case
	code for OFFSET_TYPE.
	* pt.c (convert_nontype_argument): Rework pointer-to-member
	handling.
	(convert_template_argument): Likewise.
	(unify): Likewise.
	(invalid_nontype_parm_type_p): Likewise.
	(dependent_type_p_r): Likewise.
	* rtti.c (get_tinfo_decl): Remove OFFSET_TYPE special case.
	(target_incomplete_p_): Rework pointer-to-member
	handling.
	(get_pseudo_ti_init): Likewise.
	(get_pseudo_ti_desc): Likewise.
	* semantics.c (finish_qualified_id_expr): Adjust call to
	build_offset_ref.  Remove use of resolve_offset_ref.
	* tree.c (pod_type_p): Use TYPE_PTR_TO_MEMBER_P.
	* typeck.c (target_type): Use TYPE_PTRMEM_P.
	(type_unknown_p): Remove obsolete code about the time before
	non-dependent expressions were handled correctly.
	(qualify_type_recursive): Remove.
	(composite_pointer_type_r): New function.
	(composite_pointer_type): Use it.
	(merge_types): Remove dead comments.
	(comp_cv_target_types): Remove.
	(comp_target_types): Likewise.
	(comp_target_parms): Likewise.
	(cxx_sizeof_or_alignof_type): Remove OFFSET_TYPE error.
	(build_indirect_ref): Use TYPE_PTR_TO_MEMBER_P.
	(build_binary_op): Do not use of comp_target_types.
	(pointer_diff): Remove OFFSET_TYPE case.
	(build_unary_op): Adjust pointer-to-member handling.
	(unary_complex_lvalue): Likewise.
	(check_for_casting_away_constness): Add description parameter.
	(build_static_cast): Pass it.
	(build_reinterpret_cast): Use check_for_casting_away_constness.
	(build_const_cast): Adjust pointer-to-member handling.
	(build_c_cast): Likewise.
	(convert_for_assignment): Remove OFFSET_TYPE error message.
	(comp_ptr_ttypes_real): Adjust pointer-to-member handling.
	(comp_ptr_ttypes_reinterpret): Remove.
	(casts_away_constness_r): Adjust pointer-to-member handling.
	(casts_away_constness): Liekwise.
	(strip_all_pointer_quals): Remove.
	* typeck2.c (digest_init): Adjust pointer-to-member handling.
	(build_m_component_ref): Likewise.

From-SVN: r69691
2003-07-22 23:30:22 +00:00
Nathan Sidwell
817aed6fc3 re PR c++/11614 (Incorrect handling of pointers to arrays)
cp:
	PR c++/11614
	* decl.c (grokdeclarator): An array member is only a flexible
	array member if the field itself is the array.
testsuite:
	* g++.dg/ext/flexary1.C: New test.

From-SVN: r69673
2003-07-22 16:49:48 +00:00
Kriang Lerdsuwanakij
bef89e9e09 re PR c++/10793 (ICE (treecheck) when partial-specializing with an invalid type and a base class, in xref_basetypes, at cp/decl.c:12834)
PR c++/10793
	* decl.c (xref_basetypes): Handle error_mark_node.

	* g++.dg/template/crash9.C: New test.

From-SVN: r69671
2003-07-22 14:36:00 +00:00
Kaveh R. Ghazi
c68b0a8425 fixfixes.c [...]: Remove unnecessary casts.
gcc:
	* fixinc/fixfixes.c fixinc/fixincl.c fixinc/fixlib.c
	fixinc/server.c objc/objc-act.c: Remove unnecessary casts.

f:
	* com.c data.c expr.c fini.c g77spec.c global.c lab.c lex.c name.c
	sta.c stc.c std.c storag.c stt.c stw.c symbol.c target.c type.c:
	Remove unnecessary casts.

cp:
	* call.c class.c decl.c decl2.c g++spec.c lex.c parser.c pt.c rtti.c
	semantics.c typeck.c: Remove unnecessary casts.

java:
	* class.c java-tree.h jcf-write.c jvspec.c: Remove unnecessary
	casts.

treelang:
	* treetree.c: Remove unnecessary casts.

From-SVN: r69593
2003-07-19 16:09:51 +00:00
Mark Mitchell
39703eb9e2 re PR c++/11547 (ICE with const temporaries)
PR c++/11547
	* cp-tree.h (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P): New
	macro.
	(DECL_PRETTY_FUNCTION_P): Use VAR_DECL_CHECK.
	* decl.c (duplicate_decls): Merge
	DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P.
	* parser.c (cp_parser_postfix_expression): Adjust call to
	cp_parser_initializer_list and
	cp_parser_parenthesized_expression_list.
	(cp_parser_parenthesized_expression_list): Add non_constant_p.
	(cp_parser_new_placement): Adjust call to
	cp_parser_parenthesized_expression_list.
	(cp_parser_direct_new_declarator): Likewise.
	(cp_parser_conditional_expression): Remove.
	(cp_parser_constant_expression): Parse an assignment-expression,
	not a conditional-expression.
	(cp_parser_simple_declaration): Resolve expression/declaration
	ambiguity more quickly.
	(cp_parser_mem_initializer): Adjust call to
	cp_parser_parenthesized_expression_list.
	(cp_parser_init_declarator): Keep track of whether or not the
	initializer is a constant-expression.
	(cp_parser_initializer): Add non_constant_p parameter.
	(cp_parser_initializer_clause): Likewise.
	(cp_parser_initializer_list): Likewise.
	(cp_parser_attribute_list): Adjust call to
	cp_parser_parenthesized_expression_list.
	(cp_parser_functional_cast): Likewise.
	* pt.c (tsubst_decl): Copy
	DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P.
	(tsubst_expr): Tweak use of DECL_PRETTY_FUNCTION_P.
	* semantics.c (finish_id_expression): Use
	DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P.

	PR c++/11547
	* g++.dg/parse/constant3.C: New test.
	* g++.dg/parse/crash7.C: Likewise.

From-SVN: r69493
2003-07-17 04:31:42 +00:00
Kriang Lerdsuwanakij
866eb556c2 re PR c++/5421 (friends+templates: ICE: expected identifier_node, have template_id_expr in grokfndecl, at cp/decl.c:8835)
PR c++/5421
	* decl.c (grokdeclarator): Handle TEMPLATE_ID_EXPR if friend
	is a member of other class.
	* friend.c (do_friend): Don't build TEMPLATE_DECL if friend
	is a specialization of function template.

	* g++.dg/template/friend21.C: New test.

From-SVN: r69457
2003-07-16 15:42:15 +00:00
Mark Mitchell
10b1d5e751 cp-tree.def (LOOKUP_EXPR): Remove.
* cp-tree.def (LOOKUP_EXPR): Remove.
	* cp-tree.h (cp_id_kind): Add CP_ID_KIND_UNQUALIFIED_DEPENDENT.
	(LOOKUP_EXPR_GLOBAL): Remove.
	(get_bindings): Remove.
	(is_aggr_type_2): Remove.
	* call.c (resolved_scoped_fn_name): Remove support for
	LOOKUP_EXPR.
	* decl.c (grokfndecl): Likewise.
	(grokdeclarator): Likewise.
	* error.c (dump_decl): Likewise.
	(dump_expr): Likewise.
	* friend.c (do_friend): Likewise.
	* init.c (build_offset_ref): Likewise.
	* lex.c (unqualified_fn_lookup_error): Use pedwarn.  Do not create
	LOOKUP_EXPRs
	* mangle.c (write_expression): Remove support for LOOKUP_EXPR.
	* parser.c (cp_parser_postfix_expression): Modify Koenig lookup
	test.
	* pt.c (get_bindings): Give it internal linkage.
	(check_explicit_specialization): Remove support for LOOKUP_EXPR.
	(lookup_template_function): Likewise.
	(for_each_tempalte_parm_r): Likewise.
	(tsubst_decl): Likewise.
	(tsubst_qualified_id): Handle template template parameters.
	(tsubst_copy): Remove support for LOOKUP_EXPR.
	(tsubst_copy_and_build): Likewise.
	(most_general_template): Likewise.
	(value_dependent_expression_p): Likewise.
	(type_dependent_expression_p): Note that IDENTIFIER_NODEs are
	always dependent.
	* semantics.c (perform_koenig_lookup): Do not create
	IDENTIFIER_NODEs.
	(finish_fname): Likewise.
	(finish_id_expression): Likewise.
	* tree.c (is_aggr_type_2): Remove.

From-SVN: r69427
2003-07-16 00:09:45 +00:00
Mark Mitchell
5e08432ed0 re PR c++/7019 ([3.3 only] SFINAE does not work with explicitally specified template arguments)
PR c++/7019
	* cp-tree.h (lookup_qualified_name): Adjust prototype.
	* decl.c (lookup_qualified_name): Add complain parameter.  Adjust
	call to is_aggr_type.
	* parser.c (cp_parser_lookup_name): Adjust call to
	lookup_qualified_name.
	* pt.c (tsubst_qualified_id): Likewise.
	(tsubst_copy_and_build): Likewise.
	* semantics.c (finish_qualified_id_expr): Deal with erroneous
	expressions.

	PR c++/7019
	* g++.dg/template/overload2.C: New test.

From-SVN: r69342
2003-07-14 19:05:05 +00:00
Mark Mitchell
b34459943b re PR c++/11493 (tree check ICE in error.c)
* cp-tree.h (cp_id_kind): New type.
	(unqualified_name_lookup_error): Change prototype.
	(unqualified_fn_lookup_error): New function.
	(do_identifier): Remove.
	(do_scoped_id): Likewise.
	(tsubst_copy_and_build): Change prototype.
	(reregister_specialization): New function.
	(perform_koenig_lookup): Likewise.
	(finish_id_expression): Likewise.
	* call.c (build_method_call): Adjust call to
	unqualified_name_lookup_error.
	* decl.c (duplicate_decls): Use reregister_specialization.
	* lex.c (is_global): Remove.
	(unqualified_name_lookup_error): Return a value.
	(do_identifier): Remove.
	(do_scoped_id): Likewise.
	(identifier_typedecl_value): Remove.
	(unqualified_fn_lookup_error): New function.
	* parser.c (cp_parser_id_kind): Remove.
	(cp_parser_non_constant_id_expression): Remove.
	(cp_parser_primary_expression): Use finish_id_expression.
	(cp_parser_class_or_namespace_name): Use cp_id_kind, not
	cp_parser_id_kind.
	(cp_parser_postfix_expression): Use perform_koenig_lookup.
	(cp_parser_template_argument): Use cp_id_kind.
	(cp_parser_fold_non_dependent_expr): Adjust call to
	tsubst_copy_and_build.
	* pt.c (unregister_specialization): Rename to ...
	(reregister_specialization): This.
	(tsubst_friend_function): Use it.
	(maybe_fold_nontype_arg): Adjust call to tsubst_copy_and_build.
	(tsubst_qualified_id): Likewise.
	(tsubst_expr): Likewise.
	(tsubst_copy_and_build): Add function_p parameter.  Use
	finish_id_expression.  Introduce RECUR macro.
	(tsubst_non_call_postfix_expression): New function.
	(regenerate_decl_from_template): Use reregister_specialization.
	* semantics.c (perform_koenig_lookup): New function.
	(finish_id_expression): Likewise.

	PR c++/11493
	PR c++/11495
	* g++.dg/parse/template9.C: Likewise.
	* g++.dg/template/crash4.C: New test.
	* g++.dg/template/koenig1.C: Likewise.
	* g++.old-deja/g++.benjamin/tem03.C: Adjust error markers.
	* g++.old-deja/g++.benjamin/tem06.C: Declare "x".
	* g++.old-deja/g++.jason/overload33.C: Use this-> when calling
	functions.
	* g++.old-deja/g++.jason/template36.C: Likewise.
	* g++.old-deja/g++.mike/p1989.C: Likewise.
	* g++.old-deja/g++.pt/lookup2.C: Use -fpermissive when compiling.
	* g++.old-deja/g++.pt/ttp20.C: Use this->.
	* g++.old-deja/g++.pt/ttp21.C: Use this->.
	* g++.old-deja/g++.pt/typename13.C: Use -fpermissive when
	compiling.
	* g++.old-deja/g++.pt/union2.C: Use this->.

From-SVN: r69316
2003-07-14 03:04:29 +00:00
Geoffrey Keating
d1bd0ded61 Index: ChangeLog
2003-07-10  Geoffrey Keating  <geoffk@apple.com>

	* c-decl.c (finish_decl): Handle 'used' here...
	* cgraphunit.c (cgraph_finalize_function): ... and here ...
	* c-common.c: (handle_used_attribute): ... not here.

	* configure.in (onstep): Support --enable-intermodule.
	* Makefile.in (OBJS-common): New.
	(OBJS-md): New.
	(OBJS-archive): New.
	(OBJS): Build from OBJS-common, OBJS-md, OBJS-archive.
	(OBJS-onestep): New.
	(libbackend.a): Support @onestep@.
	(libbackend.o): New.
	* configure: Regenerate.

	* c-common.h (c_reset_state): New prototype.
	(c_parse_file): New prototype.
	(finish_file): Move prototype from c-tree.h.
	* c-decl.c: Include <hashtab.h>.
	(builtin_decls): New.
	(current_file_decl): New.
	(duplicate_decls): Add extra parameter. Change all callers.  Don't
	output duplicate common symbols.
	(link_hash_hash): New.
	(link_hash_eq): New.
	(poplevel): Handle popping of the top level.
	(warn_if_shadowing): Handle TRANSLATION_UNIT_DECL.
	(pushdecl): Set DECL_CONTEXT to TRANSLATION_UNIT_DECL if appropriate.
	(pushdecl_top_level): Likewise.
	(redeclaration_error_message): Handle TRANSLATION_UNIT_DECL.
	(c_init_decl_processing): Create TRANSLATION_UNIT_DECL.
	(finish_decl): Handle TRANSLATION_UNIT_DECL.
	(merge_translation_unit_decls): New.
	(c_write_global_declarations): New.
	(c_reset_state): New.
	(implicitly_declare): Handle TRANSLATION_UNIT_DECL.
	* c-lang.c (LANG_HOOKS_WRITE_GLOBALS): New.
	* c-objc-common.c (c_cannot_inline_tree_fn): Handle
	TRANSLATION_UNIT_DECL.
	(c_objc_common_finish_file): Call merge_translation_unit_decls.
	* c-opts.c (in_fnames): Rename from in_fname.
	(c_common_decode_option): Handle multiple input filenames.
	(c_common_post_options): Likewise.
	(c_common_parse_file): Likewise; also, call c_parse_file rather than
	yyparse.
	* c-parse.in: Move cleanup code to c_parse_file.
	(free_parser_stacks): Move contents to c_parse_file.
	(c_parse_file): New.
	* c-tree.h (union lang_tree_node): Chain along TYPE_NEXT_VARIANT
	for integer types.
	(C_DECL_FILE_SCOPE): New.
	(finish_file): Move prototype to c-common.h.
	(merge_translation_unit_decls): New prototype.
	(comptypes): Add extra parameter to prototype.
	(c_write_global_declarations): New prototype.
	* c-typeck.c (tagged_types_tu_compatible_p): New.
	(function_types_compatible_p): Add extra parameter, change all callers.
	(type_lists_compatible_p): Likewise.
	(comptypes): Likewise.
	(struct tagged_tu_seen): New.
	(tagged_tu_seen_base): New.
	(build_unary_op): Handle TRANSLATION_UNIT_DECL.
	(c_mark_addressable): Remove #if 0 code.
	* calls.c (special_function_p): Handle TRANSLATION_UNIT_DECL, add
	comment explaining why it shouldn't have to.
	* cgraph.h (struct cgraph_node): Add chain_next and chain_prev GTY
	options.
	* cppinit.c (cpp_read_next_file): New.
	(cpp_read_main_file): Use it.
	* cpplib.c (undefine_macros): New.
	(cpp_undef_all): New.
	* cpplib.h (cpp_read_next_file): Prototype.
	(cpp_undef_all): Prototype.
	* langhooks-def.h (write_global_declarations): Remove prototype.
	* toplev.h (write_global_declarations): Add prototype.
	* tree.c (decl_type_context): Use switch statement, handle
	TRANSLATION_UNIT_DECL.
	* tree.def: Update documentation for TRANSLATION_UNIT_DECL.
	(TRANSLATION_UNIT_DECL): New kind of tree.
	* tree.h: Update documentation for TRANSLATION_UNIT_DECL.
	* Makefile.in (c-decl.o): Add $(HASHTAB_H) to dependencies.
	* doc/invoke.texi: Make attempt to document new functionality.

	2003-05-19  Per Bothner <bothner@apple.com>

	* gcc.c (combine_inputs): New.
	(process_command): Set combine_inputs.
	(do_spec_1): Handle combine_inputs.
	(main): Likewise.

Index: cp/ChangeLog
2003-07-10  Geoffrey Keating  <geoffk@apple.com>

	* decl.c (cp_finish_decl): Handle 'used' attribute.

	* cp-lang.c (c_reset_state): New dummy routine.
	* cp-tree.h (finish_file): Move prototype to c-common.h.
	* parser.c (c_parse_file): Rename from yyparse; don't call finish_file.

From-SVN: r69224
2003-07-11 08:33:21 +00:00
Mark Mitchell
4a3864984c re PR c++/10032 (-pedantic converts some errors to warnings)
PR c++/10032
	* doc/invoke.texi (C++ Dialect Options): Change documentation of
	-fpermissive.

	PR c++/10032
	* decl.c (cxx_init_decl_processing): With -pedantic, pedwarns are
	still errors.

	PR c++/10527
	* error.c (decl_to_string): Do not print default argument
	expressions.

	* cp-tree.h (break_out_calls): Remove declaration.
	* tree.c (break_out_calls): Remove.
	* typeck.c (build_modify_expr): Avoid invalid sharing of trees.

	PR c++/10032
	* g++.dg/warn/pedantic1.C: New test.

From-SVN: r69191
2003-07-10 16:47:52 +00:00
Nathan Sidwell
633221dbab PR c++ 9483
cp:
	PR c++ 9483
	* class.c (check_field_decls): Pass DECL_NAME to constructor_name_p.
	* decl2.c (constructor_name_p): Avoid repeated constructor_name
	calls.
	* decl.c (grokdeclarator): Refactor ctor/dtor detection.
testsuite:
	PR c++ 9483
	* g++.dg/other/field1.C: New test.

From-SVN: r69180
2003-07-10 09:02:06 +00:00
Jan Hubicka
084c177908 java-tree.h (DECL_NUM_STMTS): Rename to...
* java-tree.h (DECL_NUM_STMTS): Rename to...
	(DECL_ESTIMATED_INSNS): ... this.
	* lang.c (java_estimate_num_insns, java_estimate_num_insns_1):
	New static functions.
	(LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS): Define.
	* parser.y (add_stmt_to_compound): Do not account statements.

	* cp-lang.c (LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS): New.
	* decl.c (duplicate_decls): Use DECL_ESTIMATED_INSNS.
	(start_function): Use DECL_ESTIMATED_INSNS.
	* optimize.c (maybe_clone_body): Use DECL_ESTIMATED_INSNS.

	* decl2.c (maybe_emit_vtables): Fix marking vtables as needed in
	unit-at-a-time

	* c-common.c (c_estimate_num_insns_1): New static function.
	(c_estimate_num_insns): New global function.
	* c-common.h (DECL_NUM_STMTS): Rename to...
	(DECL_ESTIMATED_INSNS): ... this.
	(c_estimate_num_insns): Declare.
	* c-decl.c (duplicate_decls): Use DECL_ESTIMATED_INSNS.
	* c-lang.c (LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS): New.
	* c-semantics.c (add_stmt): Do not account statements.
	* langhooks-def.h (LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS):
	New.
	* langhooks.h (lang_hooks_for_tree_inlining): Add
	estimate_num_insns
	* params.def (max-inline-insns-auto, max-inline-insns-auto): set
	to 100.
	(max-inline-insns): set to 300.
	(min-inline-insns): set to 10.
	* tree-inline.c (struct inline_data): Rename inlined_stmts to
	inlined-insns.
	(INSNS_PER_STMT): Kill.
	(inlinable_function_p): Compute and store body size.
	(expand_call_inline): Likewise.
	(optimize_inline_calls): Likewise.

From-SVN: r69113
2003-07-09 00:31:20 +00:00
Mark Mitchell
ee76b9314b cp-tree.h (build_scoped_method_call): Remove.
* cp-tree.h (build_scoped_method_call): Remove.
	(lookup_qualified_name): Remove parameter.
	(tsubst_copy_and_build): Declare.
	(finish_qualified_object_call_expr): Remove.
	(check_accessibility_of_qualified_id): New function.
	(finish_qualified_id_expr): Likewise.
	(non_reference): Likewise.
	(build_expr_from-tree): Remove.
	* call.c (non_reference): Remove.
	(build_scoped_method_call): Likewise.
	(build_method_call): Use error_operand_p.  Assert that we are not
	processing a template.
	(standard_conversion): Use non_reference.
	* class.c (build_vtbl_entry_ref): Likewise.
	(build_vtbl_ref_1): Likewise.
	* cvt.c (build_expr_type_conversion): Use non_reference.
	* decl.c (lookup_qualified_name): Remove flags parameter.
	(grok_op_properties): Use non_reference.
	* decl2.c (grok_array_decl): Likewise.
	(build_expr_from_tree): Remove.
	(build_offset_ref_call_from_tree): Update comment.
	* error.c (parm_to_string): Call reinit_global_formatting_buffer.
	* except.c (prepare_eh_types): Use non_reference.
	(can_convert_eh): Likewise.
	* init.c (build_dtor_call): Avoid using build_method_call.
	* mangle.c (write_template_param): Remove misleading comment.
	* method.c (locate_copy): Use non_reference.
	* parser.c (cp_parser_scope_through_which_access_occurs): Remove.
	(cp_parser_primary_expression): Do not create SCOPE_REFs is
	non-dependent contexts.
	(cp_parser_postfix_expression): Use finish_qualified_id_expr.
	(cp_parser_direct_declarator): Use tsubst_copy_and_build, not
	build_expr_from_tree.
	(cp_parser_lookup_name): Adjust call to lookup_qualified_name.
	Use check_accessibility_of_qualified_id.
	* pt.c (maybe_fold_nontype_arg): Use tsubst_copy_and_build, not
	build_expr_from_tree.
	(tsubst_baselink): New function.
	(tsubst_qualified_id): Likewise.
	(tsubst_copy): Use them.  Remove support for METHOD_CALL_EXPR.
	(tsubst_expr): Adjust call to lookup_qualified_name.
	(tsubst_copy_and_build): Handle SCOPE_REFs specially.  Adjust
	handling of CALL_EXPRs.
	(value_dependent_expression_p): Use INTEGRAL_OR_ENUMERATION_TYPE_P.
	* rtti.c (get_tinfo_decl_dynamic): Use non_reference.
	* search.c (check_final_overrider): Likewise.
	* semantics.c (check_accessibility_of_qualified_id): New function.
	(finish_qualified_object_call_expr): Remove.
	* typeck.c (target_type): Use non_reference.
	(cxx_sizeof_or_alignof_type): Likewise.
	(dubious_conversion_warnings): Likewise.
	(convert_for_initialization): Likewise.
	(non_reference): New function.

From-SVN: r69063
2003-07-08 01:38:44 +00:00
Kaveh R. Ghazi
75b6f3fd3a bitmap.c (debug_bitmap_file): Merge uses of HOST_PTR_PRINTF with adjacent stdio calls.
gcc:
	* bitmap.c (debug_bitmap_file): Merge uses of HOST_PTR_PRINTF with
	adjacent stdio calls.
	* c-decl.c (c_print_identifier): Likewise.
	* mips-tfile.c (write_varray, write_object, allocate_cluster): Likewise.
	* print-rtl.c (print_rtx): Likewise.
	* print-tree.c (print_node_brief, print_node): Likewise.
	* system.h (HOST_PTR_PRINTF): Ensure we have a literal string.

	* configure.in (AC_COMPILE_CHECK_SIZEOF): Check for `void *'.
	* config.in, configure: Regenerated.

cp:
	* decl.c (print_binding_level, print_other_binding_stack,
	print_binding_stack): Merge uses of HOST_PTR_PRINTF with adjacent
	stdio calls.
	* ptree.c (cxx_print_decl, cxx_print_binding): Likewise.

From-SVN: r69061
2003-07-08 00:35:52 +00:00
Kazu Hirata
9bcb9aae27 call.c: Fix comment formatting.
* call.c: Fix comment formatting.
	* class.c: Likewise.
	* cp-tree.h: Likewise.
	* decl.c: Likewise.
	* decl2.c: Likewise.
	* error.c: Likewise.
	* method.c: Likewise.
	* name-lookup.c: Likewise.
	* parser.c: Likewise.
	* pt.c: Likewise.
	* rtti.c: Likewise.
	* search.c: Likewise.
	* typeck.c: Likewise.

From-SVN: r69022
2003-07-06 23:23:46 +00:00
Mark Mitchell
0a72704b04 re PR c++/11431 (static_cast behavior with subclasses when default constructor available)
PR c++/11431
	* typeck.c (build_static_cast): Check for reference conversions
	earlier.

	* cp-tree.h (perform_integral_promotions): Declare.
	* call.c (build_addr_func): Use decay_conversion.
	(convert_arg_to_ellipsis): Likewise.  Remove misleading comment.
	(convert_for_arg_passing): Use perform_integral_promotions.
	* cvt.c (build_expr_type_conversion): Use decay_conversion.
	(type_promotes_to): Do not return a cv-qualified type.
	* decl.c (grok_reference_init): Fix formatting.
	(get_atexit_node): Use decay_conversion.
	(build_enumerator): Use perform_integral_promotions.
	* init.c (build_vec_init): Use decay_conversion.
	* semantics.c (finish_expr_stmt): Likewise.
	(finish_switch_cond): Use perform_integral_promotions.
	* typeck.c (default_conversion): Likewise.
	(perform_integral_promotions): New function.
	(build_indirect_ref): Use decay_conversion.
	(build_array_ref): Use perform_integral_promotions.
	(convert_arguments): Use decay_conversion.
	(build_unary_op): Use perform_integral_promotions.
	(build_c_cast): Use decay_conversion.
	(build_modify_expr): Likewise.
	(convert_for_initialization): Likewise.
	* typeck2.c (build_x_arrow): Likewise.

	* g++.old-deja/g++.jason/typeid1.C: Make it a compile test, not a
	run test.

	PR c++/11431
	* g++.dg/expr/static_cast3.C: New test.

From-SVN: r68989
2003-07-06 03:30:57 +00:00
Kazu Hirata
34cd5ae762 call.c: Fix comment typos.
* call.c: Fix comment typos.
	* class.c: Likewise.
	* cp-tree.h: Likewise.
	* cvt.c: Likewise.
	* decl2.c: Likewise.
	* decl.c: Likewise.
	* init.c: Likewise.
	* mangle.c: Likewise.
	* parser.c: Likewise.
	* pt.c: Likewise.
	* search.c: Likewise.
	* semantics.c: Likewise.
	* tree.c: Likewise.
	* typeck.c: Likewise

From-SVN: r68956
2003-07-05 03:02:05 +00:00
Nathan Sidwell
8db1028eba re PR c++/9162 ([New parser] Problem with default argument in a friend function)
cp:
	PR c++/9162
	* decl.c (grokdeclarator): Return friend decls, not
	void_type_node.
	* decl2.c (grokfield): Alter friend decl check.
	* parser.c (struct cp_parser): Document default_arg chain on
	unparsed_functions_queue.
	(cp_parser_save_default_args): New.
	(cp_parser_init_declarator, cp_parser_function_definition,
	cp_parser_member_declaration): Call it.
	(cp_parser_class_specifier): Remove unused variable. Alter
	processing of unparsed_functions_queue.
testsuite:
	PR c++/9162
	* g++.dg/parse/defarg4.C: New.

From-SVN: r68886
2003-07-03 16:10:52 +00:00
Kaveh R. Ghazi
04d6ccbd2d class.c (add_method, [...]): Fix format specifier.
* class.c (add_method, check_field_decl): Fix format specifier.
	* decl.c (duplicate_decls, pushdecl, check_goto,
	fixup_anonymous_aggr, maybe_commonize_var, grokdeclarator,
	start_enum): Likewise.
	* decl2.c (ambiguous_decl): Likewise.
	* pt.c (redeclare_class_template): Likewise.

From-SVN: r68878
2003-07-03 13:16:01 +00:00
Jan Hubicka
8cd2462c1b decl2.c (defer_fn): Set DECL_DEFER_OUTPUT.
* decl2.c (defer_fn): Set DECL_DEFER_OUTPUT.
	(finish-file): Do not process function with DECL_DEFER_OUTPUT clear;
	clear DECL_DEFER_OUTPUT once function is processed; avoid flags
	massaging.

	* cp-tree.h (DECL_NEEDED_P): Support unit-at-a-time
	(expand_or_defer_fn): Declare.
	(lower_function): Declare.
	* decl.c (start_cleanup_fn): Use expand_or_defer_fn.
	* decl2.c: Include cgraph.h and varpool.h
	(maybe_emit_vtables):  Make explicit instantations as needed.
	(mark_member_pointers, lower_function): New functions.
	(finish_file): Do unit-at-a-time.
	* method.c (synthesize_method): Use expand_or_defer_fn.
	* optimize.c (maybe_clone_body): Use expand_or_defer_fn.
	* parser.c (cp_parser_function_definition_after_decl): Use
	expand_or_defer_fn.
	* pt.c (instantiate_decl): Likewise.
	* semantics.c: Include cgraph.h
	(expand_or_defer_fn): Break out from ...
	(expand_body): ... here; deal with unit-at-a-time.
	* cp-lang.c (LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION,
	LANG_HOOKS_CALLGRAPH_LOWER_FUNCTION): Define.

From-SVN: r68801
2003-07-02 00:12:10 +00:00
Nathan Sidwell
5b030314af c-tree.h (define_label): Replace filename and lineno arguments with a location_t.
* c-tree.h (define_label): Replace filename and lineno arguments
	with a location_t.
	* c-decl.c (poplevel): Adjust define_label call.
	(pop_label_level): Likewise.
	(define_label): Replace filename and lineno arguments with a
	location_t.
	(store_parm_decls): Use DECL_SOURCE_LOCATION.
	* c-parse.in (label): Adjust define_label call.

	* cp/cp-tree.h (define_label): Replace filename and lineno
	arguments with a location_t.
	* cp/decl.c (pop_label): Adjust define_label call.
	(define_label): Replace filename and lineno arguments with a
	location_t.
	* cp/semantics.c (finish_label): Adjust define_label call.

	* java/decl.c (poplevel): Adjust define_label call.

From-SVN: r68766
2003-07-01 09:00:45 +00:00
Zack Weinberg
8ce332308c * c-format.c (check_format_string, get_constant)
* cfgrtl.c (rtl_split_edge):
	Mark the definition static, matching the forward declaration.
cp:
	* decl.c (build_typename_type)
	* mangle.c (write_template_template_arg)
	* parser.c (cp_parser_scope_through_which_access_occurs)
	* pt.c (push_access_scope_real, push_access_scope, pop_access_scope)
	* repo.c (get_base_filename)
	* semantics.c (maybe_convert_cond):
	Mark the definition static, matching the forward declaration.
java:
	* class.c (build_method_symbols_entry)
	* expr.c (get_offset_table_index)
	* jcf-parse.c (jcf_parse):
	Mark the definition static, matching the forward declaration.

From-SVN: r68622
2003-06-28 00:30:31 +00:00
Mark Mitchell
e455bc273e re PR c++/10796 (ICE (segfault) when defining an enum with two values: -1 and MAX_INT_64BIT)
PR c++/10796
	* decl.c (finish_enum): Implement DR377.

	* decl.c (cp_finish_decl): Don't make variables with reference
	type readonly while they are being initialized.

	PR c++/10796
	* g++.dg/init/enum1.C: New test.

From-SVN: r68610
2003-06-27 21:21:08 +00:00
Nathan Sidwell
6df5158a36 call.c (enforce_access): Assert we get a binfo.
* call.c (enforce_access): Assert we get a binfo.
	(build_op_delete_call): Pass a binfo to
	perform_or_defer_access_check.
	* class.c (alter_access): Likewise.
	* decl.c (make_typename_type): Likewise.
	(make_unbound_class_template): Likewise.
	* lex.c (do_identifier): Likewise.
	* method.c (hack_identifier): Likewise.
	* parser.c (cp_parser_lookup_name): Likewise.
	* search.c (lookup_member): Likewise. Move IDENTIFIER_CLASS_VALUE
	test.
	* semantics.c (finish_non_static_data_member): Likewise.
	(perform_or_defer_access_check): Expect a binfo.
	* typeck.c (comptypes): Expect types.

	* mangle.c (find_substitution): Don't pass a non-type to same_type_p
	* friend.c (make_friend_class): Likewise.
	* pt.c (check_default_tmpl_args): Likewise.
	(lookup_template_class): Likewise.

From-SVN: r68424
2003-06-24 15:40:06 +00:00
Jan Hubicka
bb4f6e6bb7 decl.c (register_dtor_fn): Mark cleanup as used.
* decl.c (register_dtor_fn): Mark cleanup as used.
	* decl2.c (mark_vtable_entries): Skip nops.
	* rtti.c (get_tinfo_ptr): Mark tinfo as used.
	(build_dynamic_cast_1): Likewise.
	(tinfo_base_init): Likewise.
	(emit_tinfo_decl): Likewise.

From-SVN: r68377
2003-06-23 17:46:26 +00:00
Gabriel Dos Reis
dfbeb0610e re PR c++/10915 (a not-useful non-avoidable warning: conversion to a reference to the same type will never use a type conversion operator)
testsuite/
        * g++.old-deja/g++.jason/conversion5.C: Adjust option.
        * g++.old-deja/g++.bugs/900215_01.C: Likewise.

cp/
        PR c++/10915
        * decl.c (grok_op_properties): Warn possible confusing conversion
        only if -Wconversion.

From-SVN: r68303
2003-06-21 13:09:05 +00:00
Mark Mitchell
f139561cce re PR c++/9649 (ICE in finish_member_declaration at cp/semantics.c:1850 when redeclaring a static member variable)
PR c++/9649
	* cp-tree.h (pushdecl_class_level): Change prototype.
	(push_class_level_binding): Likewise.
	* decl.c (add_binding): Reject duplicate static data members.
	(pushdecl_class_level): Return a value indicating whether or not
	the binding was valid.
	(push_class_level_binding): Likewise.
	* semantics.c (finish_member_declaration): Don't keep invalid
	declarations.

	PR c++/9649
	* g++.dg/template/static4.C: New test.
	* g++.old-deja/g++.other/anon7.C: Remove spurious error messages.

From-SVN: r68240
2003-06-20 02:40:37 +00:00
Mark Mitchell
170b020fe4 re PR middle-end/11041 (ICE: const myclass &x = *x; (when operator*() defined))
PR c++/11041
	* call.c (initialize_reference): Do not use cp_finish_decl to emit
	temporary variables.
	* cp-tree.h (static_aggregates): Declare.
	(pushdecl_top_level_and_finish): Likewise.
	* decl.c (pushdecl_top_level_1): New function.
	(pushdecl_top_level): Use it.
	(pushdecl_top_level_and_finish): New function.
	(initialize_local_var): Remove redundant code.
	(cp_finish_decl): Remove support for RESULT_DECLs.  Don't check
	building_stmt_tree.
	* decl.h (static_aggregates): Remove.
	* decl2.c (get_guard): Use pushdecl_top_level_and_finish.
	* rtti.c (get_tinfo_decl): Use pushdecl_top_level_and_finish.
	(tinfo_base_init): Likewise.

	PR c++/11041
	* g++.dg/init/ref7.C: New test.

From-SVN: r68236
2003-06-20 00:48:44 +00:00
Jason Merrill
9da32fe151 re PR c++/10929 (-Winline warns about functions for which no definition is visible)
PR c++/10929
        * tree-inline.c (expand_call_inline): Don't warn about failing to
        inline a function which was made inline by -finline-functions.
        * cp/decl.c (grokfndecl): Don't mark a function inline for
        -finline-functions if it isn't defined.

From-SVN: r68122
2003-06-17 19:00:16 -04:00
Kaveh R. Ghazi
fad205ffba decl.c, [...]: Don't use the PTR macro.
cp:
	* cp/decl.c, cp/pt.c, cp/search.c, cp/tree.c: Don't use the PTR
	macro.

gcc:
	* bitmap.c, builtins.c, c-incpath.c, cgraph.c, config/frv/frv.c,
	config/mips/mips.c, cppfiles.c, cpphash.c, cppinit.c, cpplib.c,
	dwarf2out.c, dwarfout.c, except.c, expr.c, expr.h, fold-const.c,
	function.c, gcc.c, genoutput.c, gensupport.c, global.c,
	haifa-sched.c, hashtable.c, ifcvt.c, integrate.c, local-alloc.c,
	loop.c, mips-tdump.c, mips-tfile.c, mkdeps.c, protoize.c,
	read-rtl.c, recog.h, reload1.c, sbitmap.c, ssa-dce.c,
	stringpool.c, tlink.c, tree.c, varasm.c, varray.c: Don't use
	the PTR macro.

From-SVN: r68043
2003-06-16 21:41:10 +00:00
Nathan Sidwell
ee6b0296b8 tree.h (init_function_start): Remove filename and line paramters.
* tree.h (init_function_start): Remove filename and line paramters.
	* function.c (init_function_start): Remove filename and line
	parameters. Use DECL_SOURCE_LOCATION.
	* c-decl.c (store_parm_decls): Adjust init_function_start call.
	(c_expand_body_1): Likewise.
	* coverage.c (create_coverage): Likewise.

	* ada/utils.c (begin_subprog_body): Adjust init_function_start
	call.

	* cp/decl.c (start_function): Adjust init_function_start call.
	* cp/method.c (use_thunk): Likewise.
	* cp/semantics.c (genrtl_start_function): Likewise.

	* f/com.c (stor_parm_decls): Adjust init_function_start call.

	* java/class.c (emit_register_classes): Adjust init_function_start
	call.
	* java/decl.c (complete_start_java_method): Likewise.
	* java/resource.c (write_resource_constructor): Likewise.

	* objc/objc-act.c (build_tmp_function_decl): Set line number to
	zero.
	(hack_method_prototype): Adjust init_function_start call.

	* treelang/treetree.c (tree_code_create_function_initial): Adjust
	init_function_start call.

From-SVN: r67953
2003-06-14 17:33:32 +00:00
Mark Mitchell
df7f7b9c76 re PR c++/10432 (ICE in poplevel, at cp/decl.c:1230)
PR c++/10432
	* cp-tree.h (finish_declarator): Remove.
	* decl.c (cp_finish_decl): Make sure to pop_nested_class even for
	erroneous declarations.
	* semantics.c (finish_declarator): Remove.

	PR c++/10432
	* g++.dg/parse/error1.C: New test.

From-SVN: r67804
2003-06-12 00:10:26 +00:00
Geoffrey Keating
d192828ab6 [multiple changes]
2003-06-10  Andrew Pinski  <pinskia@physics.uc.edu>

	* decl.c (start_cleanup_fn): Move static 'counter' out, mark with GTY.
	(start_cleanup_cnt): New.

2003-06-10  Geoffrey Keating  <geoffk@apple.com>

	* g++.dg/pch/static-1.C: New file.
	* g++.dg/pch/static-1.Hs: New file.

From-SVN: r67719
2003-06-10 18:32:57 +00:00
Andreas Jaeger
55c6e1a6dd * cp/decl.c (xref_tag): Remove undefined macro NONNESTED_CLASSES.
From-SVN: r67592
2003-06-07 19:28:01 +02:00
J"orn Rennecke
88d5a16e0b decl.c (grokdeclarator): Error_mark_node in, error_mark_node out.
gcc/cp:
	* decl.c (grokdeclarator): Error_mark_node in, error_mark_node out.

gcc/testsuite/g++.old-deja/g++.oliva:
	* template1.C (bar): Remove xfail marker.

From-SVN: r67465
2003-06-04 23:00:22 +01:00
Jason Merrill
dbe85b8010 cp-tree.h (CP_AGGREGATE_TYPE_P): Accept vectors.
2003-06-03  Jason Merrill  <jason@redhat.com>

	* cp/cp-tree.h (CP_AGGREGATE_TYPE_P): Accept vectors.

	* cp/decl.c (reshape_init): Handle vectors.

	* testsuite/g++.dg/init/array10.C: New.

From-SVN: r67414
2003-06-04 01:06:09 +00:00
Gabriel Dos Reis
82a2669ea7 decl.c (cp_binding_level::this_entity): Rename from this_class.
* decl.c (cp_binding_level::this_entity): Rename from this_class.
	(cxx_scope_descriptor): New function.
	(cxx_scope_debug): Likewise.
	(push_binding_level): Use it.
	(pop_binding_level): Likewise.
	(suspend_binding_level): Likewise.
	(resume_binding_level): Likewise.
	(pushlevel_class): Adjust use of this_class.
	(pushtag): Likewise.
	(lookup_name_real): Likewise.
	(global_scope_name): New variable.
	(initialize_predefined_identifiers): Initialize it.
	(push_namespace): Use it.
	(make_cxx_scope): New function.
	(pushlevel): Use it.
	(pushlevel_class): Likewise.
	(push_binding_level): Simplify.  Loose the last two arguments.
	(make_binding_level): Remove.
	(initial_push__namespace_scope): New function.
	(push_namespace): Use it.  Simplify.
	(cxx_init_decl_processing): Likewise.
	(declare_namespace_level): Remove.

From-SVN: r67269
2003-05-31 12:53:41 +00:00
Gabriel Dos Reis
f37e2274d0 decl.c (ENABLE_SCOPE_CHECKING): Rename from DEBUG_BINDING_LEVELS.
* decl.c (ENABLE_SCOPE_CHECKING): Rename from DEBUG_BINDING_LEVELS.
        (binding_depth): Unconditionally define.
        (is_class_level): Likewise.
        (indent): Likewise.  Take an indenting parameter.
        (push_binding_level): Remove conditional definittion.
        (pop_binding_level): Likewise.
        (suspend_binding_level): Likewise.
        (resume_binding_level): Likewise.
        (pushlevel): Likewise.
        (pushlevel_class): Likewise.
        (poplevel_class): Likewise.
        (pop_everything): Likewise.

From-SVN: r67226
2003-05-29 17:25:04 +00:00
Gabriel Dos Reis
5f52c0e090 name-lookup.h (global_scope_p): New macro.
* name-lookup.h (global_scope_p): New macro.
        * decl.c (pop_binding_level): Use it.  Don't refer directly to
        global_binding_level.
        (suspend_binding_level): Likewise.
        (global_bindings_p): Likewise.
        (print_other_binding_stack): Likewise.
        (print_binding_stack): Likewise.
        (maybe_push_to_top_level): Likewise.
        (pushdecl_namespace_level): Likewise.
        (cxx_init_decl_processing): Likewise.
        (start_decl): Likewise.
        (cp_finish_decl): Likewise.
        (start_function): Likewise.
        (global_binding_level): Remove.

From-SVN: r67221
2003-05-29 11:04:10 +00:00
Danny Smith
16e3196411 re PR c++/9738 ([mingw] Internal compiler error in rest_of_compilation, at toplev.c: 3491)
PR c++/9738

	* config/i386/winnt.c (i386_pe_encode_section_info): Enable
	even if not first.

	* cp/decl.c (duplicate_decls): Re-invoke make_decl_rtl
	if the old decl had instantiated DECL_RTL.
	(Base on Richard Henderson 2003-05-13 patch to c-decl.c).

	* testsuite/g++.dg/ext/dllimport2.C: New file.
	* testsuite/g++.dg/ext/dllimport3.C: New file.

From-SVN: r67049
2003-05-21 00:33:27 +00:00
Gabriel Dos Reis
5e0c54e514 hashtable.h (struct ht_identifier): Add data member "hash_value".
* hashtable.h (struct ht_identifier): Add data member "hash_value".
	* hashtable.c (ht_lookup): Use it when searching, remember.
	(ht_expand): Do not recompute.
	* tree.h (IDENTIFIER_HASH_VALUE): New macro.

cp/
	* cp-tree.h (struct lang_type_class): Replace data member tags
	with hash-table nested_udts.
	(CLASSTYPE_NESTED_UTDS): Rename from CLASSTYPE_TAGS.
	* class.c (unreverse_member_declarations): Don't touch
	CLASSTYPE_TAGS.
	(pushclass): Use cxx_remember_type_decls.
	* decl.c (struct cp_binding_level): Replace data member tags with
	hash-table type_decls.
	(pop_binding_level): Handle level->type_decls.
	(kept_level_p): Adjust.
	(poplevel): Remove unused local variable.
	(bt_print_entry): New function.
	(print_binding_level): Use it.
	(push_namespace): Build current_binding_level->type_decls.
	(maybe_process_template_type_declaration): Adjust.
	(pushtag): Likewise.
	(clear_anon_tags): Use binding_table_remove_anonymous_types.
	(gettags): Remove.
	(cxx_remember_type_decls):  Rename from storetags.  Adjust.
	(lookup_tag): Use binding_table_find_anon_type.  Tidy.
	(lookup_tag_reverse): Use binding_table_reverse_maybe_remap.
	(cxx_init_decl_processing): Build global_binding_level->type_decls.
	(store_parm_decls): Remove pointless code.
	* name-lookup.c (free_binding_entry): New variable.
	(ENTRY_INDEX): New macro.
	(struct binding_table_s): New datatype.
	(binding_entry_make): New function.
	(binding_entry_free): Likewise.
	(binding_table_construct): Likewise.
	(binding_table_free): Likewise.
	(binding_table_new): Likewise.
	(binding_table_expand): Likewise.
	(binding_table_insert): Likewise.
	(binding_table_find): Likewise.
	(binding_table_find_anon_type): Likewise.
	(binding_table_reverse_maybe_remap): Likewise.
	(binding_table_remove_anonymous_types): Likewise.
	(binding_table_foreach): Likewise.
	* name-lookup.h (binding_table): New type.
	(binding_entry): Likewise.
	(bt_foreach_proc): Likewise.
	(struct binding_entry_s): New datatype.
	(SCOPE_DEFAULT_HT_SIZE): New macro.
	(CLASS_SCOPE_HT_SIZE): Likewise.
	(NAMESPACE_ORDINARY_HT_SIZE): Likewise.
	(NAMESPACE_STD_HT_SIZE): Likewise.
	(GLOBAL_SCOPE_HT_SIZE): Likewise.
	(binding_table_new): Declare.
	(binding_table_free): Likewise.
	(binding_table_insert): Likewise.
	(binding_table_find_anon_type): Likewise.
	(binding_table_reverse_maybe_remap): Likewise.
	(binding_table_remove_anonymous_types): Likewise.
	(binding_table_foreach): Likewise.
	(binding_table_find): Likewise.
	(cxx_remember_type_decls): Likewise.
	* pt.c (bt_instantiate_type_proc): New function.
	(do_type_instantiation): Use it.
	* search.c (lookup_field_r): Use binding_table_find.

From-SVN: r66930
2003-05-18 13:40:54 +00:00
Kriang Lerdsuwanakij
78757caa17 re PR c++/9252 ([New parser] Errors due to legally used "typename")
PR c++/9252
	* cp-tree.h (saved_scope): Remove check_access field.
	(tsubst_flags_t): Remove tf_parsing.
	* decl.c (maybe_push_to_top_level): Don't initialize
	scope_chain->check_access.
	(make_typename_type, make_unbound_class_template): Don't use
	tf_parsing.
	(register_dtor_fn): Use push/pop_deferring_access_checks
	instead of scope_chain->check_access.
	* method.c (use_thunk): Likewise.
	* parser.c (cp_parser_explicit_instantiation
	(cp_parser_constructor_declarator_p): Don't call
	push/pop_deferring_access_checks here.
	(cp_parser_template_argument, cp_parser_class_name): Don't use
	tf_parsing.
	(yyparse): Check flag_access_control.
	* pt.c (instantiate_class_template): Call
	push/pop_deferring_access_checks.
	* semantics.c (push_deferring_access_checks): Propagate
	dk_no_check.
	(perform_or_defer_access_check): Make sure basetype_path is
	a type before comparison.
	* call.c (build_op_delete_call, build_over_call): Use
	perform_or_defer_access_check.
	* class.c (alter_access): Likewise.
	* init.c (build_offset_ref): Likewise.
	* lex.c (do_identifier): Likewise.
	* method.c (hack_identifier): Likewise.
	* search.c (lookup_member): Likewise.
	* semantics.c (finish_non_static_data_member): Likewise.
	(simplify_aggr_init_exprs_r): Use push/pop_deferring_access_checks
	instead of flag_access_control.

	* g++.dg/parse/access8.C: New test.
	* g++.dg/parse/access9.C: New test.

From-SVN: r66660
2003-05-10 11:29:53 +00:00
Jason Merrill
50b97e0f2b tweak comment
From-SVN: r66494
2003-05-05 15:16:07 -04:00
Kriang Lerdsuwanakij
517f33152b Fix a typo overlooked in the previous commit.
From-SVN: r66484
2003-05-05 14:46:00 +00:00
Kriang Lerdsuwanakij
7df878256c * decl.c: Fix typos.
From-SVN: r66477
2003-05-05 13:26:50 +00:00
Kriang Lerdsuwanakij
4b41d9ebe1 re PR c++/4494 (Possible problem with compiler warnings on main())
PR c++/4494
	* decl.c (start_function): Use same_type_p to check return type
	of main.

	* g++.dg/warn/main.C: New test.

From-SVN: r66476
2003-05-05 12:19:12 +00:00
Kriang Lerdsuwanakij
5dc5d13c70 PR c++/9364, c++/10553, c++/10586
PR c++/9364, c++/10553, c++/10586
	* decl.c (make_typename_type): Don't crash on illegal code.

	* g++.dg/parse/typename4.C: New test.
	* g++.dg/parse/typename5.C: Likewise.

From-SVN: r66424
2003-05-03 11:58:17 +00:00
Nathan Sidwell
82a98427a9 class.c (finish_struct): Use location_t and input_location directly.
* class.c (finish_struct): Use location_t and input_location
	directly.
	* decl.c (make_label_decl): Likewise.
	(use_label): Likewise.
	* decl2.c (warn_if_unknown_interface): Likewise.
	(start_static_initialization_or_destruction): Likewise.
	(generate_ctor_or_dtor_function): Likewise.
	(finish_file): Likewise.
	* error.c (print_instantiation_full_context): Likewise.
	* init.c (create_temporary_var): Likewise.
	* method.c (synthesize_method): Likewise.
	* parser.c (cp_token): Likewise.
	(cp_lexer_set_source_position_from_token): Likewise.
	(cp_lexer_get_preprocessor_token): Likewise.
	(cp_parser_statement): Likewise.
	* pt.c (tsubst_friend_function): Likewise.
	(instantiate_class_template): Likewise.
	(tsubst_decl): Likewise.
	(tsubst): Likewise.
	(instantiate_decl): Likewise.
	* semantics.c (begin_class_definition): Likewise.
	(expand_body): Likewise.

From-SVN: r66423
2003-05-03 11:37:22 +00:00
Nathan Sidwell
d479d37f5e input.h (lineno): Rename to ...
* input.h (lineno): Rename to ...
	(input_line): ... here.
	* tree.h (lineno): Rename to ...
	(input_line): ... here.
	* scan.h (lineno): Rename to ...
	(input_line): ... here.
	* toplev.c (lineno): Rename to ...
	(input_line): ... here.
	(push_srcloc, pop_srcloc):  Rename lineno to input_line.
	* c-common.c (c_expand_start_cond, fname_decl): Likewise.
	* c-decl.c (poplevel, pop_label_level, lookup_label, lookup_tag,
	store_parm_decls, c_expand_body_1): Likewise.
	* c-errors.c (pedwarn_c99): Likewise.
	* c-format.c (status_warning): Likewise.
	* c-lex.c (fe_file_change, cb_def_pragma, c_lex): Likewise.
	* c-opts.c (c_common_post_options, c_common_parse_file): Likewise.
	* c-parse.in (save_filename, maybe_type_qual, ifc): Likwise.
	* c-semantics.c (finish_stmt_tree, build_stmt, emit_local_var,
	gentrtl_goto_stmt, genrtl_expr_stmt_value, genrtl_decl_stmt,
	genrtl_if_stmt, genrtl_while_stmt, genrtl_do_stmt,
	genrtl_return_stmt, genrtl_for_stmt, build_break_stmt,
	build_continue_stmt, genrtl_switch_stmt, genrtl_asm_stmt,
	prep_stmt, find_reachable_label, expand_unreachable_stmt): Likewise.
	* coverage.c (create_coverage): Likewise.
	* diagnostic.c (pedwarn, sorry, error, fatal_error,
	internal_error, warning, diagnostic_report_current_module,
	inform): Likewise.
	* expr.c (expand_expr): Likewise.
	* integrate.c (expand_inline_function,
	output_inline_function): Likewise.
	* rtl-error.c (file_and_line_for_asm): Likewise.
	* tree-inline.c (find_alloca_call, find_builtin_longjmp_call,
	walk_tree): Likewise.
	* tree.c (make_node): Likewise.
	* ada, cp, f, java, objc, treelang: Likewise.

	ada
	* trans.c (build_unit_elab, set_lineno): Rename lineno to
	input_line.
	* utils.c (pushdecl, create_label_decl, begin_subprog_body,
	end_subprog_body): Likewise.
	* utils2.c (build_call_raise): Likewise.

	cp
	* class.c (finish_struct): Rename lineno to input_line.
	* decl.c (push_binding_level, pop_binding_level,
	suspend_binding_level, resume_binding_level, make_label_decl,
	use_label, start_function): Likewise.
	* decl2.c (warn_if_unknown_interface,
	start_static_initialization_or_destruction,
	generate_ctor_or_dtor_function, finish_file): Likewise.
	* error.c (cp_line_of, print_instantiation_full_context,
	print_instantiation_context): Likewise.
	* except.c (check_handlers_1, check_handlers): Likewise.
	* init.c (create_temporary_var): Likewise.
	* method.c (use_thunk, synthesize_method): Likewise.
	* parser.c (cp_lexer_set_source_position_from_token,
	cp_lexer_get_preprocessor_token): Likewise.
	* pt.c (push_tinst_level, pop_tinst_level,
	tsubst_friend_function, instantiate_class_template, tsubst_decl,
	tsubst, tsubst_expr, instantiate_decl): Likewise.
	* semantics.c (genrtl_try_block, finish_label_stmt,
	begin_class_definition, expand_body,
	genrtl_finish_function): Likewise.
	* tree.c (build_min_nt, build_min): Likewise.

	f
	* ansify.c (die_unless): Rename lineno to input_line.
	* com.c (ffecom_subscript_check_, ffecom_do_entry_,
	ffecom_gen_sfuncdef_, ffecom_start_progunit_,
	ffecom_sym_transform_, ffecom_sym_transform_assign_,
	bison_rule_pushlevel_, bison_rule_compstmt_, finish_function,
	store_parm_decls): Likewise.
	* intrin.c (ffeintrin_fulfill_generic): Likewise.
	* lex.c (ffelex_hash_, ffelex_include_, ffelex_next_line_,
	ffelex_file_fixed, ffelex_file_free): Likewise.
	* std.c (ffestd_exec_end): Likewise.
	* ste.c (ffeste_emit_line_note_, ffeste_start_block_,
	ffeste_start_stmt_): Likewise.
	* ste.h (ffeste_filelinenum, ffeste_set_line): Likewise.

	java
	* lex.h (lineno): Rename to ...
	(input_line): ... here
	* parse-scan.y (lineno): Rename to ...
	(input_line): ... here.
	(reset_report): Rename lineno to input_line.
	* check-init.c (check_init): Likewise.
	* class.c (push_class): Likewise.
	* decl.c (complete_start_java_method, end_java_method): Likewise.
	* expr.c (expand_byte_code): Likewise.
	* jcf-parse.c (give_name_to_class, parse_class_file): Likewise.
	* jcf-write.c (generate_bytecode_insns): Likewise.
	* lex.c (java_init_lex, java_allocate_new_line,
	do_java_lex): Likewise.
	* parse.h (YYNOT_TWICE): Likewise.
	* parse.y (empty_statement, expression_statement,
	java_pop_parser_context, java_parser_context_save_global,
	yyerror, register_fields, method_header, safe_layout_class,
	find_in_imports_on_demand, create_artificial_method,
	source_end_java_method, start_complete_expand_method,
	build_thisn_assign, java_complete_lhs,
	maybe_absorb_scoping_block): Likewise.

	objc
	* objc-act.c (objc_init): Rename lineno to input_line.
	(build_module_descriptor, build_selector_translation_table,
	build_protocol_template, build_method_prototype_list_template,
	build_category_template, build_selector_table,
	build_class_template, build_super_template, build_ivar_template,
	build_ivar_list_template, build_method_list_template,
	build_method_template, add_instance_variable): Likewise.

	treelang
	* tree1.c (treelang_init): Rename lineno to input_line.

From-SVN: r66333
2003-05-01 16:13:36 +00:00
Gabriel Dos Reis
152c16a9ac decl.c (check_previous_goto_1): Adjust prototype.
* decl.c (check_previous_goto_1): Adjust prototype.
        (check_previous_goto): Adjust use.
        (check_switch_goto): Likewise.
        (use_label): Adjust.
        (check_previous_goto_1): Don't use pedwarn_with_file_and_line.
        (struct named_label_use_list): Use location_t datatype.

From-SVN: r66290
2003-04-30 13:45:40 +00:00
Mark Mitchell
446d5e4776 re PR c++/10515 (problem when initializing a field in a union)
PR c++/10515
	* cp-tree.h (lookup_field_1): Declare it.
	* search.c (lookup_field_1): Make it public.
	* decl.c (reshape_init): Handle designated initializers.

From-SVN: r66236
2003-04-29 18:26:47 +00:00
Mark Mitchell
29f4feceaa Remove accidental commit
From-SVN: r66206
2003-04-29 07:35:47 +00:00
Mark Mitchell
0dbc5cd368 decl.c (maybe_commonize_var): Further tweak support for systems without weak symbols.
* decl.c (maybe_commonize_var): Further tweak support for systems
	without weak symbols.

	* g++.old-deja/g++.pt/deduct5.C: Remove unnecessary initializer.

From-SVN: r66205
2003-04-29 07:13:33 +00:00
Mark Mitchell
9e6aaf5ea5 * decl.c (maybe_commonize_var): Fix thinko in last patch.
From-SVN: r66154
2003-04-28 06:13:23 +00:00
Mark Mitchell
0b50d7f182 decl.c (maybe_commonize_var): Make the code match the comments.
* decl.c (maybe_commonize_var): Make the code match the comments.
	* pt.c (instantiate_decl): Move call to import_export_decl.

From-SVN: r66135
2003-04-27 19:33:38 +00:00
Mark Mitchell
4223f82fbc re PR c++/9847 (ICE on :?-operator with double class definition in expand_expr)
PR c++/9847
	* cp-tree.h (duplicate_tag_error): Remove.
	* class.c (duplicate_tag_error): Remove.
	* semantics.c (begin_class_definition): Return immediately for a
	duplicate class definition.

	PR c++/10451
	* decl.c (grokdeclarator): Correct logic for "mutable" errors.

From-SVN: r65998
2003-04-23 16:27:27 +00:00
Mark Mitchell
befcd99bcb re PR c++/10428 (struct <typedef'ed name> causes ICE in write_unscoped_name)
PR c++/10428
	* g++.dg/parse/elab1.C: New test.

	PR c++/10428
	* decl.c (check_elaborated_type_specifier): New function, split
	out from ...
	(xref_tag): ... here.  Use the new function in more places.

From-SVN: r65956
2003-04-22 21:05:58 +00:00
Mark Mitchell
b2dd096b0c Makefile.in (calls.o): Depend on except.h.
* Makefile.in (calls.o): Depend on except.h.
	* calls.c: Include except.h.
	(emit_call_1): Call note_eh_region_may_contain_throw if
	appropriate.
	* except.c (eh_region): Add may_contain_throw.
	(expand_eh_region_end_cleanup): Do not include handler code when
	it cannot be reached.
	(note_eh_region_may_contain_throw): New function.
	* except.h (note_eh_region_may_contain_throw): New function.

	* call.c (build_over_call): Use build_cxx_call.
	(build_cxx_call): New method, split out of build_over_call.
	* cp-tree.h (language_function): Add can_throw.
	(build_cxx_call): Declare it.
	* decl.c (finish_function): If a function does not contain any
	calls to functions that can throw an exception, indicate that
	fact.
	* decl2.c (mark_used): Do not defer the instantiation of
	functions, if the current function does not throw.
	* optimize.c (maybe_clone_body): Copy TREE_NOTHROW to the clones.
	* pt.c (instantiate_decl): Make sure import_export_decl is called
	before emitting things.
	* rtti.c (throw_bad_cast): Use build_cxx_call.
	(build_dynamic_cast_1): Likewise.
	* typeck.c (build_function_call): Likewise.

	* g++.dg/template/recurse.C: Adjust location of error messages.

From-SVN: r65929
2003-04-22 05:44:12 +00:00
Roger Sayle
220a35cc8e re PR c/10375 (Function-local external decls of builtins don't get attributes)
2003-04-17  Roger Sayle  <roger@eyesopen.com>

	PR c/10375
	* c-decl.c (duplicate_decls): Preserve "const" and "noreturn"
	function attributes.

	* cp/decl.c (duplicate_decls): Preserve "const", "noreturn"
	and "nothrow" function attributes.

	* f/com.c (duplicate_decls): Preserve "const" and "noreturn"
	function attributes.

From-SVN: r65753
2003-04-17 21:27:37 +00:00
Roger Sayle
1331d16fd4 builtin-types.def (BT_FN_STRING_CONST_STRING): New builtin type.
* builtin-types.def (BT_FN_STRING_CONST_STRING): New builtin type.
	(BT_FN_PTR_SIZE_SIZE): Likewise.
	* builtins.def (BUILT_IN_MALLOC, BUILT_IN_CALLOC, BUILT_IN_STRDUP):
	New built-in functions for malloc, calloc and strdup respectively.
	* calls.c (special_function_p): No need to handle malloc-like
	functions any longer.  ECF_MALLOC is set via built-in attributes.

	* c-decl.c (duplicate_decls): Preserve pure and malloc attributes.
	* cp/decl.c (duplicate_decls): Preserve pure and malloc attributes.
	* f/com.c (duplicate_decls): Preserve pure and malloc attributes.

	* doc/extend.texi: Document these new built-in functions.

	* gcc.dg/builtins-13.c: New test case.
	* gcc.dg/builtins-14.c: New test case.

From-SVN: r65560
2003-04-14 02:55:31 +00:00
Zack Weinberg
dcf92453c8 tree.c (build_constructor): New function.
* tree.c (build_constructor): New function.
	* tree.h: Prototype it.

	* c-typeck.c (build_c_cast, pop_init_level)
	* profile.c (build_function_info_value, build_gcov_info_value)
	(create_profiler):
	Use build_constructor.

	* builtins.c (expand_builtin_args_info): Remove #if 0 blocks.

	* objc/objc-act.c (build_constructor):
	Rename objc_build_constructor. Use build_constructor.
	(build_objc_string_object, objc_add_static_instance)
	(init_def_list, init_objc_symtab, init_module_descriptor)
	(generate_static_references, build_selector_translation_table)
	(build_descriptor_table_initializer, generate_descriptor_table)
	(build_protocol_initializer, build_ivar_list_initializer)
	(generate_ivars_list, build_dispatch_table_initializer)
	(generate_dispatch_table, generate_protocol_list)
	(build_category_initializer, build_shared_structure_initializer):
	Update to match.

ada:
	* gigi.h, utils2.c (build_constructor):
	Rename gnat_build_constructor. Use build_constructor.
	* decl.c (gnat_to_gnu_entity)
	* trans.c (tree_transform, pos_to_constructor, extract_values)
	* ada/utils.c (build_template, convert_to_fat_pointer, convert)
	(unchecked_convert)
	* ada/utils2.c (build_binary_op, build_call_raise, build_allocator)
	(fill_vms_descriptor):
	Update to match.

cp:
	* class.c (initialize_array)
	* decl.c (reshape_init)
	* decl2.c (build_expr_from_tree)
	* init.c (build_zero_init)
	* pt.c (tsubst_copy, tsubst_copy_and_build)
	* rtti.c (tinfo_base_init, generic_initializer, ptr_initializer)
	(ptm_initializer, class_initializer, get_pseudo_ti_init)
	* semantics.c (finish_compound_literal)
	* typeck.c (build_ptrmemfunc1)
	* typeck2.c (store_init_value, process_init_constructor)
	(build_functional_cast): Use build_constructor.

f:
	* com.c (ffecom_build_complex_constant_, ffecom_expr_)
	(ffecom_init_zero_, ffecom_transform_namelist_, ffecom_vardesc_)
	(ffecom_vardesc_array_, ffecom_vardesc_dims_, ffecom_2)
	* ste.c (ffeste_io_ialist_, ffeste_io_cilist_, ffeste_io_cllist_)
	(ffeste_io_icilist_, ffeste_io_inlist_, ffeste_io_olist_):
	Use build_constructor.

java:
	* class.c (make_field_value, make_method_value, get_dispatch_table)
	(make_class_data, emit_offset_symbol_table)
	* constants.c (build_constants_constructor)
	* java-tree.h (START_RECORD_CONSTRUCTOR)
	* parse.y (maybe_build_array_element_wfl):
	Use build_constructor.

From-SVN: r65539
2003-04-13 01:45:35 +00:00
Zack Weinberg
339a28b96a c-decl.c (struct binding_level): Add shadowed_tags and function_body...
2003-04-10  Zack Weinberg  <zack@codesourcery.com>

	* c-decl.c (struct binding_level): Add shadowed_tags and
	function_body; remove this_block, tag_transparent, and
	subblocks_tag_transparent; update comments.
	(clear_binding_level, lookup_tag_reverse): Kill.
	(make_binding_level): Use ggc_alloc_cleared or memset.
	(lookup_tag): Remove struct binding_level* parameter.  All
	callers changed. Just look at IDENTIFIER_TAG_VALUE, and
	current_binding_level->tags if asked for thislevel_only or if
	we might have to diagnose "struct foo; union foo;"
	(pushlevel): Ignore argument.  Do not push another binding
	level on the transition from the parameters to the top level
	of the function body; just tweak the flags and proceed.
	(poplevel): Overhaul.  Clear IDENTIFIER_TAG_VALUEs; on exiting
	a function body, separate the parameter list from the
	top-level local variables.
	(set_block): Do nothing.
	(pushtag): Set IDENTIFIER_TAG_VALUE and add an entry to
	shadowed_tags if necessary.
	(warn_if_shadowing): Nuke the special case for local shadowing
	parameter.
	(pushdecl): Do not create a shadow entry if we are replacing
	an older decl in the same binding level.
	(pushdecl_function_level): Tweak for new way of indicating
	function scope.
	(shadow_tag_warned): Use TYPE_NAME, not	lookup_tag_reverse.
	(start_function): Don't set subblocks_tag_transparent.
	(finish_function): Fix up the binding_level stack for totally
	empty functions.  Otherwise, don't call poplevel.

	* c-common.c (shadow_warning): MANDATORY argument is no longer
	necessary.  Always use plain warning.
	* c-common.h: Update to match.

	* cfglayout.c (scope_to_insns_initialize): Clear block when we
	hit the FUNCTION_DECL.
	* function.c: Do not create cyclic tree structure.

2003-04-10  Zack Weinberg  <zack@codesourcery.com>

	* c-tree.h (struct lang_identifier): Replace global_value,
	local_value members with symbol_value, tag_value.  Kill
	implicit_decl and limbo_value.
	(IDENTIFIER_GLOBAL_VALUE, IDENTIFIER_LOCAL_VALUE,
	IDENTIFIER_LIMBO_VALUE, IDENTIFIER_IMPLICIT_DECL,
	C_MISSING_PROTOTYPE_WARNED): Kill.
	(IDENTIFIER_SYMBOL_VALUE, IDENTIFIER_TAG_VALUE,
	C_DECL_IMPLICIT, C_DECL_ISNT_PROTOTYPE): New.
	(C_DECL_ANTICIPATED): Rename to C_DECL_INVISIBLE.
	(implicit_decl_warning, lookup_name_current_level,
	record_function_scope_shadow): Don't prototype.
	(pushdecl_function_level): Prototype.

	* c-decl.c (truly_local_externals): New variable.
	(struct binding_level): Adjust commentary.
	(get_function_binding_level, clear_limbo_values,
	record_function_scope_shadow): Kill.
	(lookup_name_current_level, implicit_decl_warning): Are	now static.
	(any_external_decl, record_external_decl): New static functions.
	(clone_underlying type): Split out of pushdecl.
	(c_print_identifier): Update to match changes to struct
	lang_identifier.
	(poplevel): Delete #if 0 block.  Make externals invisible
	instead of clearing their IDENTIFIER_SYMBOL_VALUEs.  Don't
	call clear_limbo_values.  Refer to IDENTIFIER_SYMBOL_VALUE not
	IDENTIFIER_GLOBAL_VALUE or IDENTIFIER_LOCAL_VALUE.
	(duplicate-decls): For real parm decl after a forward decl,
	set TREE_ASM_WRITTEN here.  Allow void foo(...) followed by
	foo(...) { } with only a warning.  Say whether a previous
	declaration was implicit.
	(warn_if_shadowing): Now handles all shadowing, not just
	local-over-local.  Clarify comments.
	(pushdecl): Rewritten.  There is no longer a distinction
	between global and local symbol values; they're all
	IDENTIFIER_SYMBOL_VALUE.  Call record_external_decl on all
	DECL_EXTERNAL decls, and use any_external_decl to check
	against previous externals.  Kill #if 0 blocks.  Don't
	tolerate error_mark_node being NULL.
	(pushdecl_top_level): Handle only those cases which
	Objective C (the only user) needs.
	(pushdecl_function_level): New function.
	(implicitly_declare): Create ordinary decls with
	C_DECL_IMPLICIT set.  Recycle old decls, however they got
	created.
	(lookup_name): It's always IDENTIFIER_SYMBOL_VALUE. Return 0
	for C_DECL_INVISIBLE symbols.
	(lookup_name_current_level): Likewise.  Use chain_member.
	(c_make_fname_decl): Don't muck with DECL_CONTEXT.
	Use pushdecl_function_level.
	(builtin_function): Use C_DECL_INVISIBLE.
	(start_function): Don't muck with IDENTIFIER_IMPLICIT_DECL.
	Use C_DECL_ISNT_PROTOTYPE and C_DECL_IMPLICIT.
	(store_parm_decls): It's IDENTIFIER_SYMBOL_VALUE now.
	(identifier_global_value): Same.  Must scan
	global_binding_level in extremis.

	* c-typeck.c (undeclared_variable): New static function, split
	from build_external_ref.
	(build_external_ref): Use DECL_CONTEXT, not
	IDENTIFIER_LOCAL_VALUE, to decide whether a local hides
	an instance variable.  Restructure for clarity.
	* objc/objc-act.c: Use identifier_global_value, not
	IDENTIFIER_GLOBAL_VALUE.

cp:
	* decl.c: Update all calls to shadow_warning.

testsuite:
	* gcc.c-torture/execute/builtin-noret-2.c: New.
	* gcc.c-torture/execute/builtin-noret-2.x: New.
	XFAIL builtin-noret-2.c at -O1 and above.
	* gcc.dg/redecl.c: New.
	* gcc.dg/Wshadow-1.c: Update error regexps.

From-SVN: r65460
2003-04-11 04:26:55 +00:00
Zack Weinberg
d78e771d46 tree.c (tree_size): For all 'c' and 'x' nodes...
* tree.c (tree_size): For all 'c' and 'x' nodes, look directly
        at the sizes of the relevant structures, rather than relying
        on TREE_CODE_LENGTH.  Call lang_hooks.tree_size to get the
        sizes of any such we don't know about.  Use
        lang_hooks.identifier_size for IDENTIFIER_NODE.

        (initializer_zerop): Use CONSTRUCTOR_ELTS.
        * tree.def: Update commentary.  Make fourth element of
        the definition for all 'c' and 'x' nodes zero.

        * langhooks.h: New hook, tree_size / LANG_HOOKS_TREE_SIZE.
        * langhooks-def.h: Update to match.
        * langhooks.c: New default, lhd_tree_size.

        * c-common.def (SRCLOC): Kill.
        * c-pretty-print.c (pp_c_postfix_expression [case SRCLOC]):
        Remove entirely - was already #if-ed out.

ada:
        * ada-tree.def: Make fourth element for GNAT_LOOP_ID zero.
        * misc.c (gnat_tree_size): New function.
        (LANG_HOOKS_TREE_SIZE): Override.
cp:
        * cp-tree.def: Make fourth element for all 'c' and 'x' nodes zero.
        * cp-lang.c (cp_tree_size): New function.
        (LANG_HOOKS_TREE_SIZE): Override.

        * cp-tree.h (SOURCE_LOCUS, SRCLOC_FILE, SRCLOC_LINE, struct
        tree_srcloc, TS_CP_COMMON, TS_CP_SRCLOC): Kill.
        (union lang_tree_node): Remove common and srcloc members.
        (build_srcloc_here): Don't prototype.
        * decl.c (cp_tree_node_structure): Kill SRCLOC case.
        * pt.c (pending_templates): Correct comment.
        * tree.c (build_srcloc, build_srcloc_here): Kill.

From-SVN: r65323
2003-04-07 06:03:17 +00:00
Kaveh R. Ghazi
ff95551244 decl.c (set_current_binding_level): Delete, revert last change.
* decl.c (set_current_binding_level): Delete, revert last change.
	(current_binding_level): Modify to allow it as as lvalue.

From-SVN: r65273
2003-04-05 16:48:31 +00:00
Kaveh R. Ghazi
de94b46c5c gengtype-lex.l (IWORD): Add CHAR_BITFIELD.
gcc:
	* gengtype-lex.l (IWORD): Add CHAR_BITFIELD.
	* system.h (CHAR_BITFIELD): New.
cp:
	* operators.def (DEF_SIMPLE_OPERATOR, DEF_ASSN_OPERATOR,
	DEF_ASSN_OPERATOR): Delete spurious semi-colon.
	* rtti.c (dfs_class_hint_mark): Likewise.

	* decl.c (push_local_name, push_class_level_binding,
	maybe_inject_for_scope_var): Don't use POP_TIMEVAR_AND_RETURN in
	functions returning void.
	* decl2.c (add_using_namespace): Likewise.

	* decl.c (print_binding_level, print_other_binding_stack,
	print_binding_stack): Cast argument of %p specifier to void*.
	* ptree.c (cxx_print_decl): Likewise.

	* cp-tree.h (VAR_OR_FUNCTION_DECL_CHECK,
	VAR_FUNCTION_OR_PARM_DECL_CHECK,
	VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK, RECORD_OR_UNION_TYPE_CHECK,
	BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK, LANG_TYPE_CLASS_CHECK,
	LANG_TYPE_PTRMEM_CHECK, LANG_DECL_U2_CHECK): Add __extension__.

	* decl.c (set_current_binding_level): New macro.  Use throughout
	when setting the current binding level.

	* cp-tree.h (cp_lvalue_kind, base_access): Delete trailing comma
	in enum.
	* method.c (mangling_flags): Likewise.

	* cp-tree.h (lang_type_header): Add __extension__ and use
	CHAR_BITFIELD for members.

From-SVN: r65201
2003-04-03 15:42:16 +00:00
Mark Mitchell
c717c5af27 re PR c++/7647 (ICE when data member has the name of the enclosing class)
PR c++/7647
	* decl.c (grokdeclarator): Tidy, slightly.
	* search.c (lookup_field_1): Add want_type parameter.
	(lookup_field_r): Adjust call to lookup_field_1.

	PR c++/7647
	* g++.dg/lookup-class-member-2.C: New test.

From-SVN: r65057
2003-03-30 22:30:54 +00:00
Gabriel Dos Reis
ed3cf9539b cp-tree.h (binding_for_name): Move to name-lookup.h Adjust prototype.
* cp-tree.h (binding_for_name: Move to name-lookup.h  Adjust
	prototype.
	(cxx_scope_find_binding_for_name): Likewise.
	* decl.c (find_binding: Move to name-lookup.c.
	(binding_for_name): Likewise.
	(cxx_scope_find_binding_for_name): Likewise.
	(BINDING_LEVEL):  Remove.
	(push_binding): Tidy.
	(push_class_binding): Likewise.
	(pop_binding): Likewise.
	(poplevel): Likewise.
	(poplevel_class): Likewise.
	(set_identifier_type_value_with_scope): Likewise.
	(push_overloaded_decl): Likewise.
	(lookup_tag): Likewise.
	(unqualified_namespace_lookup): Likewise.
	(lookup_name_current_level): Likewise.
	(maybe_inject_for_scope_var): Likewise.
	(namespace_binding): Move to name-lookup.c.
	(set_namespace_binding): Likewise.
	* decl2.c (lookup_using_namespace): Tidy.
	(qualified_lookup_using_namespace): Likewise.
	(do_toplevel_using_decl): Likewise.
	* name-lookup.c: Include "timevar.h"
	* name-lookup.h (cxx_scope):  Declare.
	(struct cxx_binding): Lose member "has_level".  Adjust "scope"
	member declaration.
	(BINDING_SCOPE): Adjust definition.
	(BINDING_HAS_LEVEL_P): Remove.

From-SVN: r65044
2003-03-30 16:00:39 +00:00
Gabriel Dos Reis
aed81407a6 name-lookup.c: New file.
* name-lookup.c: New file.
	* name-lookup.h: Likewise..
	* decl.c (push_binding): Adjust use cxx_binding_make.
	(free_bindings): Move to name-lookup.c
	(pop_binding): Use cxx_binding_free.
	(binding_for_name): Tidy.
	* cp-tree.h: Include "name-lookup.h"
	(cxx_binding_make): Move to name-lookup.h
	(cxx_binding_clear): Likewise.
	(struct cxx_binding): Likewise.
	(LOCAL_BINDING_P): Likewise.
	(INHERITED_VALUE_BINDING_P): Likewise.
	(BINDING_SCOPE): Likewise.
	(BINDING_HAS_LEVEL_P): Likewise.
	(BINDING_VALUE): Likewise.
	(BINDING_TYPE): Likewise.
	* config-lang.in (gtfiles): Add cp/name-lookup.h
	* Make-lang.in (cp/name-lookup.o): New rule.
	(CXX_OBJS): Add cp/name-lookup.o
	(CXX_TREE_H): Add cp/name-lookup.h

From-SVN: r65040
2003-03-30 13:18:18 +00:00
Mark Mitchell
316a245627 re PR c++/10218 (ICE in make_decl_rtl for invalid code)
PR c++/10218
	* decl.c (grokfndecl): Return NULL_TREE for bogus out-of-class
	definitions.

From-SVN: r64985
2003-03-28 21:18:39 +00:00
Nathan Sidwell
3e4a35628b PR c++/9978, c++/9708
cp:
	PR c++/9978, c++/9708
	* cp-tree.h (instantiate_template): Add tsubst_flags parameter.
	* call.c (add_template_candidate_real): Adjust
	instantiate_template call.
	* class.c (resolve_address_of_overloaded_function): Likewise.
	* decl.c (build_enumerator): Set TREE_CONSTANT.
	* pt.c (check_instantiated_args): New.
	(push_inline_template_parms_recursive): Set TREE_CONSTANT,
	TREE_READONLY.
	(build_template_parm_index): Copy TREE_CONSTANT, TREE_READONLY.
	(reduce_template_parm_level): Likewise.
	(process_template_parm): Likewise.
	(check_explicit_specialization): Adjust instantiate_template call.
	(convert_template_argument): Don't check non-type argument here.
	(lookup_template_class): Check them here.
	(tsubst_friend_function): Adjust instantiate_template call.
	(instantiate_template): Add tsubst_flags parameter, use it. Check
	instantiated args.
testsuite:
	PR c++/9978, c++/9708
	* g++.dg/ext/vlm1.C: Adjust expected error.
	* g++.dg/ext/vla2.C: New test.
	* g++.dg/template/arg1.C: New test.
	* g++.dg/template/arg2.C: New test.

From-SVN: r64714
2003-03-22 15:34:41 +00:00
Zack Weinberg
d9b2742a3d c-common.c: Include intl.h.
* c-common.c: Include intl.h.
	(shadow_warning): Rewrite to allow better diagnostic translations.
	* c-common.h: Update prototype of shadow_warning.  Declare sw_kind enum.
	* c-decl.c (warn_if_shadowing): Update calls to shadow_warning;
	use it throughout.
	* Makefile.in (c-common.o): Add intl.h.
cp:
	* decl.c: Update calls to shadow_warning.
po:
	* gcc.pot: Regenerate.

From-SVN: r64699
2003-03-22 03:28:39 +00:00
Roger Sayle
10326855ab decl.c (duplicate_decls): Use the new type when prototyping anticipated decls, even when the types match.
* decl.c (duplicate_decls): Use the new type when prototyping
	anticipated decls, even when the types match.  This defines the
	exception list for the built-in function.

From-SVN: r64522
2003-03-18 04:31:21 +00:00
Jason Merrill
35e939ae1c re PR c++/9993 (destructor not called for local object created within and returned from infinite loop)
PR c++/9993
        * decl.c (finish_function): Only allow the NRVO to use variables
        declared at function scope.

From-SVN: r64488
2003-03-17 10:45:29 -05:00
Gabriel Dos Reis
8e7d7fa0d5 Fix rethinko.
From-SVN: r64431
2003-03-16 10:11:02 +00:00
Gabriel Dos Reis
4f907b595a * decl.c (binding_for_name): Fix initialization thinko.
From-SVN: r64429
2003-03-16 09:16:59 +00:00
Gabriel Dos Reis
af6fd53f5a Compile-time improvement: 2/n.
* cp-tree.h (struct cxx_binding): New datatype;
	(struct lang_identifier): Use it.
	(LOCAL_BINDING_P): Adjust definition.
	(INHERITED_VALUE_BINDING_P): Likewise.
	(BINDING_SCOPE): Likewise.
	(BINDING_HAS_LEVEL_P): Likewise.
	(BINDING_VALUE): Likewise.
	(BINDING_TYPE): Likewise.
	(IDENTIFIER_VALUE): Likewise.
	(struct tree_binding): Remove.
	(TS_CP_BINDING): Likewise.
	((union lang_tree_node): Remove field "binding".
	(cxx_binding_clear): New macro.
	(binding_for_name): Adjust return type.
	(qualified_lookup_using_namespace): Adjust prototype.
	(lookup_using_namespace): Adjust prototype.
	(cxx_scope_find_binding_for_name): Declare.
	* cp-tree.def: Remove CPLUS_BINDING definition.
	* parse.y (parse_scoped_id): Don't type-abuse of 'id'.  Allocate
	temporary cxx_binding on stack.  Simplify.
	* decl.c (push_binding): Adjust local variable type.
	(add_binding): Likewise.
	(push_class_binding): Likewise.
	(pop_binding): Likewise.
	(poplevel): Likewise.
	(poplevel_class): Likewise.
	(free_bindings):  Adjust type.
	(find_binding): Adjust return type, add a third parameter. Remove
	non-useful assertion now that we use static typing.
	(cxx_scope_find_binding_for_name): New function.
	(binding_for_name): Use it.  Adjust local variable type. Simplify.
	(namespace_binding):  Simplify.
	(set_namespace_binding): Likewise.
	(set_identifier_type_value_with_scope): Adjust local variable type.
	(lookup_tag): Don't type-abuse of local variable 'old'.
	(lookup_namespace_name): Likewise.  Allocate binding on stack.
	(select_decl): Adjust prototype.
	(unqualified_namespace_lookup):  Allocate binding on stack.
	Don't type-abuse of local variable 'val'.
	(lookup_name_real): Likewise.
	(maybe_inject_for_scope_var): Adjust local variable type.
	(cp_tree_node_structure): Remove CPLUS_BINDING case label.
	(namespace_binding): Adjust logic, simplify.
	(BINDING_LEVEL): Adjust definition.
	(push_class_level_binding): Adjust local variable type.
	(struct cxx_saved_binding): Adjust field 'binding' type.
	* decl2.c (ambiguous_decl): Adjust prototype.
	(lookup_using_namespace): Adjust local variable type.
	(qualified_lookup_using_namespace): Catch type error and correct
	ensueing logic error.
	(do_nonmember_using_decl): Adjust local variable type.  Allocate
	temporary cxx_binding on stack.
	(do_toplevel_using_decl): Adjust local variable type.
	* ptree.c (cxx_print_cxx_binding): New function.
	(cxx_print_identifier): Use it.
	(cxx_print_xnode): Delete CPLUS_BINDING case label.

From-SVN: r64405
2003-03-15 16:30:02 +00:00
Mark Mitchell
26f8647153 call.c (initialize_reference): Remove bogus assertion.
* call.c (initialize_reference): Remove bogus assertion.
	* decl.c (build_ptrmemfunc_type): Revert change of 2003-03-09.

	* g++.dg/init/ref5.C: New test.
	* g++.dg/parse/ptrmem1.C: Likewise.

From-SVN: r64316
2003-03-13 19:57:12 +00:00
Jason Merrill
70f0e2883a re PR c++/9798 (Infinite recursion (segfault) in cp/decl.c:push_using_directive with recusive using directives)
PR c++/9798
        * decl.c (push_using_directive): Push before recursing.

From-SVN: r64133
2003-03-10 17:04:09 -05:00
Mark Mitchell
f6d19bfe41 re PR c++/8534 (When compiling qt contradicting aliasing class created for bitfield constructor)
PR c++/8534
	* decl.c (build_ptrmemfunc_type): Do not allow default arugments
	in pointer-to-member-function types.

	PR c++/8534
	* g++.dg/opt/ptrmem1.C: New test.

From-SVN: r64066
2003-03-10 06:22:28 +00:00
Kriang Lerdsuwanakij
ca9e13823c re PR c++/9970 (previously declared inline friend can't access members)
PR c++/9970
	* decl.c (duplicate_decls): Only copy DECL_THUNKS for virtual
	functions.

	* g++.dg/lookup/friend1.C: New test.

From-SVN: r64029
2003-03-09 14:30:18 +00:00
Mark Mitchell
0768112136 re PR c++/9400 (Warning -Wshadow warns of shadowed declaration of THIS in local classes.)
PR c++/9400
	* decl.c (pushdecl): Don't check for shadowing of DECL_ARTIFICIAL
	PARM_DECLs.

	PR c++/9400
	* g++.dg/warn/Wshadow-2.C: New test.

From-SVN: r63904
2003-03-06 21:10:38 +00:00
Matt Austern
1d555f7aec decl.c (cp_binding_level): Add static_decls varray member.
* decl.c (cp_binding_level): Add static_decls varray member.
	(add_decl_to_level): Add static/inline namespace scope
	declarations to static_decls array.
	(wrapup_global_for_namespace): Pass static_decls only, instead of
	all decls, to wrapup_global_declarations/check_global_declarations.
	(push_namespace): Initialize static_decls for ordinary namespaces.
	(cxx_init_decl_processing): Initialize static_decls for global
	namespace.

From-SVN: r63866
2003-03-05 22:08:39 +00:00
Gabriel Dos Reis
000d38ea95 cp-tree.h (cxx_saved_binding): Declare.
* cp-tree.h (cxx_saved_binding): Declare.
        (struct saved_scope): Adjust type of field 'old_binding'.
        * decl.c (cxx_saved_binding_make): New macro.
        (struct cxx_saved_binding): Define.
        (store_bindings): Adjust prototype.  Use cxx_saved_binding to save
        C++ bindings.
        (maybe_push_to_top_level): Adjust local variable type.
        (pop_from_top_level): Likewise.

From-SVN: r63810
2003-03-04 23:23:16 +00:00
Jason Merrill
f5d70cc024 decl.c (finish_enum): Do set the type in a template.
* decl.c (finish_enum): Do set the type in a template. Simplify.
        * pt.c (tsubst_enum, tsubst_copy): Revert last patch.

From-SVN: r63754
2003-03-03 20:13:38 -05:00
Mark Mitchell
7993382ed0 re PR c++/9878 (error: non-lvalue in unary `&' wrongly issued)
PR c++/9878
	* call.c (convert_class_to_reference): Correct conversion
	sequences.
	(reference_binding): Add ref_bound_directly_to_rvalue_p parameter.
	(implicit_conversion): Adjust call to reference_binding.
	(add_candidate): Change type of candidates parameter.
	(add_function_candidate): Likewise.
	(add_conv_candidate): Likewise.
	(build_builtin_candidate): Likewise.
	(add_builtin_candidate): Likewise.
	(add_builtin_candidates): Likewise.
	(add_template_candidate_real): Likewise.
	(add_template_candidate): Likewise.
	(add_template_conv_candidate): Likewise.
	(build_user_type_conversion_1): Adjust accordingly.
	(build_object_call): Likewise.
	(build_conditional_expr): Likewise.
	(add_candidates): Likewise.
	(build_new_op): Likewise.
	(convert_like_real): Use USER_CONV_CAND.  Use build_nop.
	(build_new_method_call): Adjust calls to add_function_candidate.
	(make_temporary_var_for_ref_to_temp): New function.
	(initialize_reference): Add decl parameter.
	* class.c (build_rtti_vtbl_entries): Use build_address and
	build_nop.
	* cp-tree.h (initialize_reference): Change prototype.
	(make_temporary_var_for_ref_to_temp): New function.
	(build_type_conversion): Change prototype.
	(build_address): New function.
	(build_nop): Likewise.
	* cvt.c (cp_convert_to_pointer): Adjust call to
	build_type_conversion.  Avoid indicating redundant NOP_EXPRs.
	Use build_nop.
	(convert_to_pointer_force): Use build_nop.
	(build_up_reference): Use make_temporary_var_for_ref_to_temp.
	(convert_to_reference): Adjust call to build_type_conversion.
	(ocp_convert): Likewise.
	(build_type_conversion): Remove for_sure parameter.
	* decl.c (grok_reference_init): Use initialize_reference.
	* typeck.c (build_address): New function.
	(build_nop): Likewise.
	(build_unary_op): Use them.
	(build_ptrmemfunc): Tidy slightly.
	(convert_for_initialization): Adjust call to
	initialize_reference.
	* typeck2.c (store_init_value): Remove #if 0'd code.

	PR c++/9878
	* g++.dg/init/ref1.C: New test.

From-SVN: r63735
2003-03-03 21:55:25 +00:00
Jason Merrill
d1a74aa7d3 tree-inline.c (find_builtin_longjmp_call): Save and restore lineno and input_filename.
* tree-inline.c (find_builtin_longjmp_call): Save and restore
        lineno and input_filename.
        (find_alloca_call): Likewise.
        (inlinable_function_p): Run the langhook earlier.

        * calls.c (compute_argument_addresses): Give the new MEMs a
        minimum alignment of PARM_BOUNDARY.
cp/
        * decl.c (start_function): Clear DECL_NUM_STMTS.

        * class.c (get_vtable_decl): Use vtbl_type_node.
        (build_primary_vtable): Check for it.

From-SVN: r63733
2003-03-03 16:28:23 -05:00
Aldy Hernandez
6e1b3a7c94 decl.c (check_initializer): Check for vector_opaque_p.
2003-03-02  Aldy Hernandez  <aldyh@redhat.com>

        * cp/decl.c (check_initializer): Check for vector_opaque_p.

From-SVN: r63713
2003-03-03 05:31:32 +00:00