OSDN Git Service

cp:
[pf3gnuchains/gcc-fork.git] / gcc / cp / ChangeLog
index 12d8435..7dcf9c2 100644 (file)
@@ -1,3 +1,502 @@
+2003-08-20  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR c++/11945
+       * pt.c (build_non_dependent_expr): Look inside COND_EXPR and
+       COMPOUND_EXPR.
+       * semantics.c (finish_expr_stmt): Always convert to void.
+       * typeck.c (build_x_compound_exp): Always convert to void.
+
+2003-08-19  Mark Mitchell  <mark@codesourcery.com>
+
+       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
+       * 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.
+
+2003-08-19  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR c++/10538, PR c/5582
+       * cp/cp-lang.c (LANG_HOOKS_DECL_UNINIT): Define.
+
+2003-08-19  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
+
+       PR c++/11174
+       * init.c (build_offset_ref): Perform access checking for
+       pointer to member correctly.
+
+2003-08-19  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * cp-lang.c (LANG_HOOKS_INITIALIZE_DIAGNOSTICS): Fix spelling.
+
+2003-08-18  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR c++/11957
+       * cp-tree.h (finish_stmt_expr): Add bool parameter.
+       * init.c (finish_init_stmts): Pass true to finish_stmt_expr. Don't
+       adjust the stmt_expr here.
+       (build_vec_init): Use finish_stmt_expr_expr, convert result to
+       array type.
+       * parser.c (cp_parser_primar_expression): Adjust finish_stmt_expr
+       call.
+       * pt.c (tsubst_copy): Likewise.
+       * semantics.c (finish_stmt_expr): Add parameter.
+
+       * pt.c (instantiate_class_template): Push to class's scope before
+       tsubsting base.
+
+Sun Aug 17 10:05:38 CEST 2003  Jan Hubicka  <jh@suse.cz>
+
+       PR C++/11702
+       * semantics.c (finish_id_expression): Mark all functions as used.
+
+2003-08-16  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR c++/11512
+       * cvt.c (convert_to_void): Indicate which side of conditional has
+       no effects, and rhs of comma operator. Test for no sideeffect
+       expressions here and always build a convert expr.
+       * init.c (expand_default_init): Convert the init to void.
+       * typeck.c (build_x_compound_expr): Do not check for side effects
+       here.
+       (build_compound_expr): Do not convert lhs when building a
+       template.
+
+2003-08-15  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * cp-tree.def (NON_DEPENDENT_EXPR): Add operand.
+       * decl2.c (build_offset_ref_call_from_tree): Use
+       build_non_dependent_expr.
+       * error.c (dump_expr) <NON_DEPENDENT_EXPR case>: Dump the operand.
+       * pt.c (build_non_dependent_expr): Set operand.
+       
+2003-08-14  Jan Hubicka  <jh@suse.cz>
+
+       * decl2.c (mark_member_pointers): Rename to...
+       (mark_member_pointers_and_eh_tinfos): ... this one; deal with eh tinfos
+       (lower_function): Update call.
+       * except.c (eh_type_info): Break out from ...
+       (build_eh_type): ... here; tinfo is already used.
+       (finish_eh_spec_block): Mark tinfos as used.
+       * semantics.c (finish_handler_params): Mark tinfo as used.
+       * cp-tree.h (eh_type_info): Declare.
+
+2003-08-15  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * pt.c (instantiate_class_template): Set location before
+       substuting bases.
+
+       * decl.c (make_typename_type): Use my_friendly_assert.
+       * pt.c (tsubst_aggr_type): Rearrange context substitution.
+
+Thu Aug 14 12:19:25 CEST 2003  Jan Hubicka  <jh@suse.cz>
+
+       * method.c (use_thunk): Expand body directly.
+
+2003-08-12  Mark Mitchell  <mark@codesourcery.com>
+
+       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.
+       
+2003-08-11  Aldy Hernandez  <aldyh@redhat.com>
+        * call.c (standard_conversion): Opaque pointers interconvert.
+        * testsuite/g++.dg/other/opaque-3.C: New.
+
+2003-08-11  Mark Mitchell  <mark@codesourcery.com>
+
+       * typeck.c (merge_types): Handle cv-qualified pointer-to-member
+       types correctly.
+
+2003-08-10  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/11789
+       * cp-tree.h (get_vbase): Remove.
+       (get_vbase_types): Remove.
+       * init.c (expand_member_init): Correct logic for looking up base
+       classes.
+
+2003-08-10  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * error.c (dump_expr): Tidy.
+       * cxx-pretty-print.c (pp_cxx_nonconsecutive_character): New.
+       (pp_cxx_begin_template_argument_list): Likewise.
+       (pp_cxx_end_template_argument_list): Likewise.
+       (is_destructor_name): Likewise.
+       (pp_cxx_unqualified_id): Likewise.
+       (pp_cxx_qualified_id): Likewise.
+       (pp_cxx_id_expression): Likewise.
+       (pp_cxx_new_expression): Likewise.
+       (pp_cxx_delete_expression): Likewise.
+       (pp_cxx_pm_expression): Likewise.
+       (pp_cxx_type_specifier): Rework.
+       (pp_cxx_type_id): Likewise.
+       (pp_cxx_primary_expression): Likewise.
+       (pp_cxx_postfix_expression): Likewise.
+       (pp_cxx_unary_expression): Likewise.
+       (pp_cxx_multiplicative_expression): Likewise.
+       (pp_cxx_conditional_expression): Likewise.
+       (pp_cxx_assignment_expression): Likewise.
+       (pp_cxx_pretty_printer_init): Tidy.
+
+2003-08-10  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * cp-tree.h (TMPL_ARGS_HAVE_MULTIPLE_LEVELS): non-NULL
+       NODE is always a TREE_VEC of non-zero size.
+       (NUM_TMPL_ARGS): NODE is always a TREE_VEC.
+       * decl2.c (arg_assoc): Template args will be a vec.
+       * error.c (dump_decl) <TEMPLATE_ID_EXPR case>: Call
+       dump_template_argument_list.
+       (dump_template_parms): Args will be a vec.
+       * parser.c (cp_parser_template_argument_list): Produce a
+       vector, not a list.
+       * pt.c (coerce_template_parms): Args are always vectors.
+       (mangle_class_name_for_template): Likewise.
+       (lookup_template_function): Likewise.
+       (lookup_template_class): Likewise.
+       (tsubst_template_args): Likewise.
+       (tsubst_baselink): Use tsubst_template_args.
+       (tsubst_qualified_id): Likewise.
+       (tsubst_copy) <TEMPLATE_ID_EXPR case>: Likewise.
+       (tsubst_copy_and_build) <TEMPLATE_ID_EXPR case>: Likewise.
+       (any_dependent_template_args_p):  Args are always vectors.
+       * tree.c (cp_tree_equal): Add TEMPLATE_ID_EXPR case.
+
+       PR c++/11670
+       * call.c (convert_like_real): Add rvalue binding error message.
+       * error.c (dump_expr) <NOP_EXPR case>: Detect when the no expr is
+       really a cast.
+       
+       PR c++/10530
+       * pt.c (dependent_type_p_r): A dependent template-id is a class
+       type with dependent template arguments, or a bound template
+       template parameter.
+       (type_dependent_expression_p): A template function decl cannot
+       have a dependent context.
+
+2003-08-07  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
+
+       PR c++/5767
+       * parser.c (cp_parser_class_name): Return immediately when scope
+       is error_mark_node.
+
+2003-08-07  Aldy Hernandez  <aldyh@redhat.com>
+
+       * cp/Make-lang.in (cp/call.o): Add dependency for target.h.
+
+       * cp/call.c (standard_conversion): Support opaque types.
+       Include target.h.
+       (strip_top_quals): Use cp_build_qualified_type instead of
+       TYPE_MAIN_VARIANT.
+
+       * cp/typeck.c (convert_for_assignment): Support opaque types.
+
+       * testsuite/g++.dg/other/opaque-1.C: New.
+
+       * testsuite/g++.dg/other/opaque-2.C: New.
+
+2003-08-06  Aldy Hernandez  <aldyh@redhat.com>
+
+       * decl.c (grokparms): Use cp_build_qualified_type instead
+       TYPE_MAIN_VARIANT.
+
+2003-08-05  Gabriel Dos Reis  <gdr@integrable-solutions.net>
+
+       * cxx-pretty-print.h: New file.
+       * cxx-pretty-print.c: Likewise.
+       * error.c (scratch_pretty_printer): Change type.
+       (init_error): Tidy.
+       (dump_aggr_type): Likewise.
+       (dump_global_iord): Likewise.
+       (dump_expr): Likewise.
+       (dump_char): Remove.
+       * cp-lang.c (LANG_HOOKS_INITIALIZE_DIAGNOSTITCS): Define.
+       (cxx_initialize_diagnostics): New function.
+       * Make-lang.in (CXX_OBJS): Add cp/cxx-pretty-print.o
+       (CXX_PRETTY_PRINT_H): New variable.
+       (cp/cxx-pretty-print.o): New rule.
+       (cp/cp-lang.o): Update dependence.
+       (cp/error.o): Likewise.
+
+2003-08-05  Steven Bosscher  <steven@gcc.gnu.org>
+
+       * 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.
+
+2003-08-04  Roger Sayle  <roger@eyesopen.com>
+
+       * 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.
+
+2003-08-03  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR c++/11704
+       * pt.c (type_dependent_expression_p): Cope with COMPONENT_REF with
+       unknown type.
+
+       PR c++/11766
+       * typeck.c (comp_ptr_ttypes_real): Don't loop on pointers to
+       member functions.
+
+2003-08-02  Nathan Sidwell  <nathan@codesourcery.com>
+
+       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.
+
+2003-08-02  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * cp-tree.h (pushclass): Remove unneeded parameter.
+       * class.c (pushclass): Remove unneeded MODIFY parm. Adjust.
+       (push_nested_class): Adjust pushclass call.
+       * pt.c (instantiate_class_template): Likewise.
+       * semantics.c (begin_class_definition): Likewise.
+
+2003-08-01  Nathanael Nerode  <neroden@gcc.gnu.org>
+
+       * typeck2.c (add_exception_specifier): Use 'bool' where appropriate.
+
+2003-08-01  Mark Mitchell  <mark@codesourcery.com>
+
+       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.
+
+2003-08-01  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
+
+       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.
+
+2003-08-01  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * parser.c (cp_parser_init_declarator,
+       cp_paser_member_declaration): Reformat.
+       * pt.c (lookup_template_class, type_unification_real, unify,
+       type_dependent_expression_p): Reformat.
+
+       PR c++/11295
+       * cp-tree.h (tubst_flags_t): Add tf_stmt_expr_cmpd,
+       tf_stmt_expr_body.
+       (finish_stmt_expr_expr): Declare.
+       * parser.c (cp_parser_primary_expression): Tell
+       cp_parser_compount_statement that it is a statement expression.
+       (cp_parser_statement, cp_parser_labeled_statement,
+       cp_parser_compound_statement, cp_parser_statement_seq_opt): Add
+       in_statement_expr_p parameter.
+       (cp_parser_expression_statement): Likewise. Call
+       finish_stmt_expr_expr for final expression of a statement
+       expression.
+       (cp_parser_for_init_statement,
+       cp_parser_implicitly_scoped_statement,
+       cp_parser_already_scoped_statement, cp_parser_function_definition,
+       cp_parser_try_block, cp_parser_handled): Adjust.
+       * pt.c (tsubst_copy) <STMT_EXPR case>: Pass tf_stmt_expr.
+       (tsubst_expr): Process tf_stmt_expr and tf_stmt_exprs flags.
+       (tsubst_expr) <EXPR_STMT case>: Check tf_stmt_exprs flag.
+       * semantics.c (finish_expr_stmt): Do not deal with statement
+       expressions.
+       (begin_stmt_expr): Clear last_expr_type.
+       (finish_stmt_expr_expr): New.
+       (finish_stmt_expr): Process the value expression.
+       
+       * typeck.c (build_compound_expr): If RHS is a TARGET_EXPR, put the
+       compound expr inside the target's initializer.
+       
+       PR c++/11525
+       * parser.c (cp_parser_primary_expression): Do not set
+       non-constant-p merely because it is a dependent scope.
+
+       PR c++/9447
+       * decl2.c (do_class_using_decl): Set type to NULL_TREE.
+       * semantics.c (finish_expr_stmt): Do not convert to void in a
+       template.
+
+2003-07-31  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * pt.c (coerce_template_parms): Refactor.
+       (fn_type_unification): Increment processing_template_decl when
+       tsubsting an incomplete set of explicit args.
+
+       PR c++/11347
+       * pt.c (instantiate_class_template): Increment
+       processing_template_decl around the tsubst of a template member
+       class.
+       (tsubst_qualified_id): Assert we do not have a dependent scope.
+
+       * pt.c (coerce_template_template_parms, lookup_template_class,
+       can_complete_type_without_circularity, instantiate_class_template,
+       tsubst_decl, unify): Reformat.
+
+Thu Jul 31 01:07:41 CEST 2003  Jan Hubicka  <jh@suse.cz>
+
+       * decl2.c (maybe_make_one_only): Use mark_referenced.
+       * method.c (use_thunk): Likewsie.
+
+Wed Jul 30 19:12:48 CEST 2003  Jan Hubicka  <jh@suse.cz>
+
+       * class.c (build_vtable_entry_ref): Kill.
+       (build_vtbl_ref_1): Do not call build_vtable_entry_ref.
+       (build_vfn_ref): Do not call build_vtable_entry_ref.
+       * cp-lang.c (LANG_HOOKS_PREPARE_ASSEMBLE_VARIABLE): Kill.
+       * cp-tree.h (prepare_assemble_variable): Kill.
+       * cp-decl.c (prepare_assemble_variable): Kill.
+
+2003-07-29  Geoffrey Keating  <geoffk@apple.com>
+
+       * parser.c (cp_lexer_new_main): Use c_common_no_more_pch instead
+       of setting valid_pch by hand.
+
+2003-07-29  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+
+       * decl.c (finish_enum): Initialize underlying_type.
+
 2003-07-29  Nathan Sidwell  <nathan@codesourcery.com>
 
        PR c++/9447