OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [cp/] [ChangeLog-2007] - Diff between revs 283 and 338

Only display areas with differences | Details | Blame | View Log

Rev 283 Rev 338
2007-12-20  Jason Merrill  
2007-12-20  Jason Merrill  
        PR c++/34111
        PR c++/34111
        * call.c (standard_conversion): Derived-to-base is considered a
        * call.c (standard_conversion): Derived-to-base is considered a
        standard conversion.
        standard conversion.
2007-12-19  Jakub Jelinek  
2007-12-19  Jakub Jelinek  
        PR c++/34513
        PR c++/34513
        * parser.c (cp_parser_omp_parallel): For non-combined parallel
        * parser.c (cp_parser_omp_parallel): For non-combined parallel
        call cp_parser_statement rather than
        call cp_parser_statement rather than
        cp_parser_already_scoped_statement.
        cp_parser_already_scoped_statement.
2007-12-18  Jason Merrill  
2007-12-18  Jason Merrill  
        PR c++/34206
        PR c++/34206
        * pt.c (tsubst_aggr_type): Do nothing if the type already doesn't
        * pt.c (tsubst_aggr_type): Do nothing if the type already doesn't
        use template parms.
        use template parms.
        (dependent_type_p_r): Handle the domain of an array.
        (dependent_type_p_r): Handle the domain of an array.
2007-12-18  Douglas Gregor  
2007-12-18  Douglas Gregor  
             Jakub Jelinek  
             Jakub Jelinek  
        PR c++/32565
        PR c++/32565
        PR c++/33943
        PR c++/33943
        PR c++/33965
        PR c++/33965
        * pt.c (template_template_parm_bindings_ok_p): New; verifies
        * pt.c (template_template_parm_bindings_ok_p): New; verifies
        bindings of template template parameters after all template
        bindings of template template parameters after all template
        arguments have been deduced.
        arguments have been deduced.
        (coerce_template_parms): Don't complain when COMPLAIN doesn't
        (coerce_template_parms): Don't complain when COMPLAIN doesn't
        include tf_error.
        include tf_error.
        (fn_type_unification): Use template_template_parm_bindings_ok_p.
        (fn_type_unification): Use template_template_parm_bindings_ok_p.
        (unify): Deal with variadic, bound template template parameters.
        (unify): Deal with variadic, bound template template parameters.
        (get_class_bindings): Use template_template_parm_bindings_ok_p.
        (get_class_bindings): Use template_template_parm_bindings_ok_p.
2007-12-18  Jakub Jelinek  
2007-12-18  Jakub Jelinek  
        PR c++/34488
        PR c++/34488
        * decl.c (grokdeclarator): Reject friend sfk_constructor
        * decl.c (grokdeclarator): Reject friend sfk_constructor
        FUNCTION_TYPE.
        FUNCTION_TYPE.
2007-12-17  Jakub Jelinek  
2007-12-17  Jakub Jelinek  
        PR c/34506
        PR c/34506
        * parser.c (cp_parser_omp_all_clauses): Accept optional comma
        * parser.c (cp_parser_omp_all_clauses): Accept optional comma
        in between clauses.
        in between clauses.
2007-12-15  Alexandre Oliva  
2007-12-15  Alexandre Oliva  
        PR debug/7081
        PR debug/7081
        * cp-lang.c (cp_classify_record): New.
        * cp-lang.c (cp_classify_record): New.
        (LANG_HOOKS_CLASSIFY_RECORD): Override.
        (LANG_HOOKS_CLASSIFY_RECORD): Override.
2007-12-11  Jakub Jelinek  
2007-12-11  Jakub Jelinek  
        PR c++/34238
        PR c++/34238
        * decl2.c (cp_write_global_declarations): Revert 2007-11-22 change.
        * decl2.c (cp_write_global_declarations): Revert 2007-11-22 change.
        PR c++/34364
        PR c++/34364
        * rtti.c (build_dynamic_cast): Call convert_from_reference even for
        * rtti.c (build_dynamic_cast): Call convert_from_reference even for
        dynamic_cast in a template.
        dynamic_cast in a template.
2007-12-10  Simon Martin  
2007-12-10  Simon Martin  
        PR c++/34059
        PR c++/34059
        * typeck.c (build_class_member_access_expr): Compute MEMBER_SCOPE from
        * typeck.c (build_class_member_access_expr): Compute MEMBER_SCOPE from
        MEMBER's BASELINK_ACCESS_BINFO instead of its BASELINK_BINFO.
        MEMBER's BASELINK_ACCESS_BINFO instead of its BASELINK_BINFO.
2007-12-10  Jakub Jelinek  
2007-12-10  Jakub Jelinek  
        PR c++/34395
        PR c++/34395
        * error.c (dump_type_prefix, dump_type_suffix): Handle
        * error.c (dump_type_prefix, dump_type_suffix): Handle
        TYPE_PACK_EXPANSION.
        TYPE_PACK_EXPANSION.
        PR c++/34394
        PR c++/34394
        * error.c (dump_expr): Handle ABS_EXPR.
        * error.c (dump_expr): Handle ABS_EXPR.
2007-12-09  Jakub Jelinek  
2007-12-09  Jakub Jelinek  
        PR c++/34178
        PR c++/34178
        PR c++/34340
        PR c++/34340
        * repo.c (repo_emit_p): Return 2 for DECL_INTEGRAL_CONSTANT_VAR_P
        * repo.c (repo_emit_p): Return 2 for DECL_INTEGRAL_CONSTANT_VAR_P
        in class scope rather than DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P.
        in class scope rather than DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P.
        Return 2 also if DECL_EXPLICIT_INSTANTIATION.
        Return 2 also if DECL_EXPLICIT_INSTANTIATION.
        * decl2.c (import_export_decl): Don't make VAR_DECLs import_p when
        * decl2.c (import_export_decl): Don't make VAR_DECLs import_p when
        flag_use_repository and repo_emit_p returned 2.
        flag_use_repository and repo_emit_p returned 2.
2007-12-06  Jakub Jelinek  
2007-12-06  Jakub Jelinek  
        PR c++/34336
        PR c++/34336
        * tree.c (stabilize_call, stabilize_init): Do nothing if
        * tree.c (stabilize_call, stabilize_init): Do nothing if
        processing_template_decl.
        processing_template_decl.
2007-12-05  Jakub Jelinek  
2007-12-05  Jakub Jelinek  
        PR c++/34271
        PR c++/34271
        * semantics.c (finish_decltype_type): For SCOPE_REF issue an
        * semantics.c (finish_decltype_type): For SCOPE_REF issue an
        error instead of assertion failure.
        error instead of assertion failure.
        * parser.c (cp_parser_decltype): If closing paren is not found,
        * parser.c (cp_parser_decltype): If closing paren is not found,
        return error_mark_node.
        return error_mark_node.
2007-12-04  Douglas Gregor  
2007-12-04  Douglas Gregor  
        PR c++/34101
        PR c++/34101
        * name-lookup.c (arg_assoc_template_arg): Recurse on argument
        * name-lookup.c (arg_assoc_template_arg): Recurse on argument
        packs.
        packs.
        (arg_assoc_type): We don't need to handle TYPE_ARGUMENT_PACK here,
        (arg_assoc_type): We don't need to handle TYPE_ARGUMENT_PACK here,
        since arg_assoc_template_arg will deal with them (better).
        since arg_assoc_template_arg will deal with them (better).
2007-12-04  Douglas Gregor  
2007-12-04  Douglas Gregor  
        PR c++/33509
        PR c++/33509
        * pt.c (tsubst_exception_specification): Handle substitutions into
        * pt.c (tsubst_exception_specification): Handle substitutions into
        member templates, where tsubst_pack_expansion returns a
        member templates, where tsubst_pack_expansion returns a
        TYPE_PACK_EXPANSION.
        TYPE_PACK_EXPANSION.
2007-12-04  Douglas Gregor  
2007-12-04  Douglas Gregor  
        PR c++/33091
        PR c++/33091
        * pt.c (unify_pack_expansion): If we didn't deduce any actual
        * pt.c (unify_pack_expansion): If we didn't deduce any actual
        bindings for the template parameter pack, don't try to keep the
        bindings for the template parameter pack, don't try to keep the
        empty deduced arguments.
        empty deduced arguments.
        (unify): If a parameter is a template-id whose template argument
        (unify): If a parameter is a template-id whose template argument
        list contains a pack expansion that is not at the end, then we
        list contains a pack expansion that is not at the end, then we
        cannot unify against that template-id.
        cannot unify against that template-id.
2007-12-02  Paolo Carlini  
2007-12-02  Paolo Carlini  
         PR c++/34061
         PR c++/34061
         * pt.c (current_template_args): Use error_operand_p.
         * pt.c (current_template_args): Use error_operand_p.
2007-12-02  Paolo Carlini  
2007-12-02  Paolo Carlini  
         PR c++/34273
         PR c++/34273
         * error.c (dump_decl): Handle TREE_BINFO.
         * error.c (dump_decl): Handle TREE_BINFO.
2007-12-01  Ollie Wild  
2007-12-01  Ollie Wild  
        PR c++/8171
        PR c++/8171
        * typeck.c (build_binary_op): Add conversion of pointers to function
        * typeck.c (build_binary_op): Add conversion of pointers to function
        members appearing as operands to the equality operators.
        members appearing as operands to the equality operators.
2007-11-30  Jakub Jelinek  
2007-11-30  Jakub Jelinek  
        PR c++/34275
        PR c++/34275
        * error.c (dump_expr): Handle OBJ_TYPE_REF.
        * error.c (dump_expr): Handle OBJ_TYPE_REF.
2007-11-29  Jakub Jelinek  
2007-11-29  Jakub Jelinek  
        PR c++/34270
        PR c++/34270
        * tree.c (lvalue_p_1) : Handle x ?: y
        * tree.c (lvalue_p_1) : Handle x ?: y
        in templates.
        in templates.
        * typeck.c (is_bitfield_expr_with_lowered_type) :
        * typeck.c (is_bitfield_expr_with_lowered_type) :
        Likewise.
        Likewise.
        PR c++/34267
        PR c++/34267
        PR c++/34268
        PR c++/34268
        * parser.c (cp_parser_decltype): Don't call finish_id_expression
        * parser.c (cp_parser_decltype): Don't call finish_id_expression
        on ~type.
        on ~type.
        * semantics.c (finish_decltype_type): Issue error on types, TYPE_DECLs
        * semantics.c (finish_decltype_type): Issue error on types, TYPE_DECLs
        and ~type early.
        and ~type early.
2007-11-27  Jakub Jelinek  
2007-11-27  Jakub Jelinek  
        PR tree-optimization/34181
        PR tree-optimization/34181
        * method.c (use_thunk): Don't inline the call in the thunk.
        * method.c (use_thunk): Don't inline the call in the thunk.
        PR c++/34213
        PR c++/34213
        * tree.c (decl_linkage): Static data members and static member
        * tree.c (decl_linkage): Static data members and static member
        functions in anonymous ns classes are lk_external.
        functions in anonymous ns classes are lk_external.
2007-11-26  Andreas Krebbel  
2007-11-26  Andreas Krebbel  
        PR c++/34081
        PR c++/34081
        * decl.c (start_preparsed_function): Pass
        * decl.c (start_preparsed_function): Pass
        processing_template_decl for the new allocate_struct_function
        processing_template_decl for the new allocate_struct_function
        parameter.
        parameter.
2007-11-25  Richard Guenther  
2007-11-25  Richard Guenther  
        * decl.c (poplevel): Use BLOCK_CHAIN.
        * decl.c (poplevel): Use BLOCK_CHAIN.
2007-11-24  Ollie Wild  
2007-11-24  Ollie Wild  
        * typeck.c (delta_from_ptrmemfunc): New function.
        * typeck.c (delta_from_ptrmemfunc): New function.
        (get_member_function_from_ptrfunc): Call delta_from_ptrmemfunc.
        (get_member_function_from_ptrfunc): Call delta_from_ptrmemfunc.
        (build_binary_op): Call delta_from_ptrmemfunc.
        (build_binary_op): Call delta_from_ptrmemfunc.
2007-11-23  Jakub Jelinek  
2007-11-23  Jakub Jelinek  
        PR c++/30293
        PR c++/30293
        PR c++/30294
        PR c++/30294
        * decl.c (cp_finish_decl): Disallow variable or field
        * decl.c (cp_finish_decl): Disallow variable or field
        definitions if extern "Java" aggregates.
        definitions if extern "Java" aggregates.
        (grokparms): Disallow parameters with extern "Java"
        (grokparms): Disallow parameters with extern "Java"
        aggregates.
        aggregates.
        (check_function_type): Disallow function return values
        (check_function_type): Disallow function return values
        with extern "Java" aggregates.
        with extern "Java" aggregates.
        * init.c (build_new_1): Disallow placement new with
        * init.c (build_new_1): Disallow placement new with
        extern "Java" aggregates.
        extern "Java" aggregates.
2007-11-23  Mark Mitchell  
2007-11-23  Mark Mitchell  
            Manuel Lopez-Ibanez  
            Manuel Lopez-Ibanez  
        PR c++/5310
        PR c++/5310
        * call.c (convert_like_real): Build a zero constant when __null is
        * call.c (convert_like_real): Build a zero constant when __null is
        converted to an integer type.
        converted to an integer type.
2007-11-22  Jakub Jelinek  
2007-11-22  Jakub Jelinek  
        PR c++/34094
        PR c++/34094
        * decl2.c (cp_write_global_declarations): Issue error about static
        * decl2.c (cp_write_global_declarations): Issue error about static
        data members in anonymous namespace which are declared and used,
        data members in anonymous namespace which are declared and used,
        but not defined.
        but not defined.
2007-11-20  Jakub Jelinek  
2007-11-20  Jakub Jelinek  
        PR c++/34089
        PR c++/34089
        * parser.c (cp_parser_class_head): Reject function template ids.
        * parser.c (cp_parser_class_head): Reject function template ids.
        PR c++/28879
        PR c++/28879
        * tree.c (build_cplus_array_type_1): Don't pass any VLA types
        * tree.c (build_cplus_array_type_1): Don't pass any VLA types
        when processing_template_decl to build_array_type.
        when processing_template_decl to build_array_type.
        PR c++/33962
        PR c++/33962
        * pt.c (more_specialized_fn): Don't segfault if one or
        * pt.c (more_specialized_fn): Don't segfault if one or
        both argument list end with ellipsis.
        both argument list end with ellipsis.
2007-11-18  Jakub Jelinek  
2007-11-18  Jakub Jelinek  
        PR c++/30988
        PR c++/30988
        * semantics.c (finish_call_expr): Set
        * semantics.c (finish_call_expr): Set
        current_function_returns_abnormally if fn is noreturn FUNCTION_DECL
        current_function_returns_abnormally if fn is noreturn FUNCTION_DECL
        or OVERLOAD with all noreturn functions.
        or OVERLOAD with all noreturn functions.
2007-11-16  Jakub Jelinek  
2007-11-16  Jakub Jelinek  
        PR c++/34100
        PR c++/34100
        * pt.c (apply_late_template_attributes): Do nothing if decl's type is
        * pt.c (apply_late_template_attributes): Do nothing if decl's type is
        error_mark_node.
        error_mark_node.
2007-11-13  Jakub Jelinek  
2007-11-13  Jakub Jelinek  
        PR c++/34054
        PR c++/34054
        PR c++/34056
        PR c++/34056
        PR c++/34057
        PR c++/34057
        PR c++/34058
        PR c++/34058
        PR c++/34060
        PR c++/34060
        * pt.c (find_parameter_packs_r): If ppd->set_packs_to_error,
        * pt.c (find_parameter_packs_r): If ppd->set_packs_to_error,
        set to error_mark_node the outermost POINTER_TYPE to the pack if
        set to error_mark_node the outermost POINTER_TYPE to the pack if
        it is seen in a POINTER_TYPE.
        it is seen in a POINTER_TYPE.
        (push_template_decl_real): If check_for_bare_parameter_packs
        (push_template_decl_real): If check_for_bare_parameter_packs
        fails for function return type, set the return type to
        fails for function return type, set the return type to
        integer_type_node.  If check_for_bare_parameter_packs failed
        integer_type_node.  If check_for_bare_parameter_packs failed
        for non-function, return error_mark_node.
        for non-function, return error_mark_node.
        PR c++/29225
        PR c++/29225
        * call.c (build_new_op): Call resolve_args before calling
        * call.c (build_new_op): Call resolve_args before calling
        build_over_call.
        build_over_call.
2007-11-11  Tom Tromey  
2007-11-11  Tom Tromey  
        PR c++/17577:
        PR c++/17577:
        * lex.c (handle_pragma_implementation): Use cpp_included_before.
        * lex.c (handle_pragma_implementation): Use cpp_included_before.
2007-11-12  Manuel Lopez-Ibanez  
2007-11-12  Manuel Lopez-Ibanez  
        PR c++/8570
        PR c++/8570
        * pt.c (redeclare_class_template): Update error message. Use a
        * pt.c (redeclare_class_template): Update error message. Use a
        note to show the previous declaration.
        note to show the previous declaration.
        (tsubst_friend_class): Use the location of the friend template as
        (tsubst_friend_class): Use the location of the friend template as
        the input location before calling redeclare_class_template.
        the input location before calling redeclare_class_template.
2007-11-11  Jakub Jelinek  
2007-11-11  Jakub Jelinek  
        PR c++/34068
        PR c++/34068
        * semantics.c (finish_pseudo_destructor_expr): Handle
        * semantics.c (finish_pseudo_destructor_expr): Handle
        object == error_mark_node.
        object == error_mark_node.
2007-11-10  Jakub Jelinek  
2007-11-10  Jakub Jelinek  
        PR c++/32241
        PR c++/32241
        * pt.c (tsubst_copy_and_build) : If object_type
        * pt.c (tsubst_copy_and_build) : If object_type
        is not scalar type, let finish_class_member_access_expr handle
        is not scalar type, let finish_class_member_access_expr handle
        diagnostics.  Pass BIT_NOT_EXPR argument to
        diagnostics.  Pass BIT_NOT_EXPR argument to
        finish_pseudo_destructor_expr.  Handle SCOPE_REF properly.
        finish_pseudo_destructor_expr.  Handle SCOPE_REF properly.
2007-11-09  Douglas Gregor  
2007-11-09  Douglas Gregor  
        PR c++/33510
        PR c++/33510
        * decl.c (cp_complete_array_type): If any of the initializer
        * decl.c (cp_complete_array_type): If any of the initializer
        elements are pack expansions, don't compute the array size yet.
        elements are pack expansions, don't compute the array size yet.
2007-11-08  Andrew Pinski  
2007-11-08  Andrew Pinski  
        PR c++/30297:
        PR c++/30297:
        * tree.c (decl_linkage): Fields have no linkage.
        * tree.c (decl_linkage): Fields have no linkage.
2007-11-08  Daniel Jacobowitz  
2007-11-08  Daniel Jacobowitz  
        * class.c (build_ctor_vtbl_group): Lay out the new type and decl.
        * class.c (build_ctor_vtbl_group): Lay out the new type and decl.
2007-11-07  Douglas Gregor  
2007-11-07  Douglas Gregor  
        PR c++/33045
        PR c++/33045
        PR c++/33837
        PR c++/33837
        PR c++/33838
        PR c++/33838
        * semantics.c (finish_decltype_type): See through INDIRECT_REFs.
        * semantics.c (finish_decltype_type): See through INDIRECT_REFs.
        Be careful with ERROR_MARK_NODEs.
        Be careful with ERROR_MARK_NODEs.
        * parser.c (cp_parser_check_access_in_redeclaration): Handle NULL
        * parser.c (cp_parser_check_access_in_redeclaration): Handle NULL
        argument.
        argument.
2007-11-07  Jakub Jelinek  
2007-11-07  Jakub Jelinek  
        PR c++/33501
        PR c++/33501
        * call.c (build_over_call): Don't check TREE_ADDRESSABLE
        * call.c (build_over_call): Don't check TREE_ADDRESSABLE
        on incomplete type.
        on incomplete type.
2007-11-06  Douglas Gregor  
2007-11-06  Douglas Gregor  
        PR c++/33977
        PR c++/33977
        PR c++/33886
        PR c++/33886
        * tree.c (c_build_qualified_type): Define bridge to
        * tree.c (c_build_qualified_type): Define bridge to
        cp_build_qualified_type.
        cp_build_qualified_type.
2007-11-06  Douglas Gregor  
2007-11-06  Douglas Gregor  
        PR c++/31439
        PR c++/31439
        PR c++/32114
        PR c++/32114
        PR c++/32115
        PR c++/32115
        PR c++/32125
        PR c++/32125
        PR c++/32126
        PR c++/32126
        PR c++/32127
        PR c++/32127
        PR c++/32128
        PR c++/32128
        PR c++/32253
        PR c++/32253
        PR c++/32566
        PR c++/32566
        * typeck.c (check_return_expr): Pass address of retval to
        * typeck.c (check_return_expr): Pass address of retval to
        check_for_bare_parameter_packs.
        check_for_bare_parameter_packs.
        * class.c (build_base_field): Tolerate bases that have no layout
        * class.c (build_base_field): Tolerate bases that have no layout
        due to errors.
        due to errors.
        (end_of_base): Ditto.
        (end_of_base): Ditto.
        * tree.c (canonical_type_variant): Be careful with
        * tree.c (canonical_type_variant): Be careful with
        ERROR_MARK_NODE.
        ERROR_MARK_NODE.
        * cp-tree.h (check_for_bare_parameter_packs): Now accepts a
        * cp-tree.h (check_for_bare_parameter_packs): Now accepts a
        tree*.
        tree*.
        * pt.c (find_parameter_pack_data): Add set_packs_to_error field,
        * pt.c (find_parameter_pack_data): Add set_packs_to_error field,
        which states whether parameter packs should be replaced with
        which states whether parameter packs should be replaced with
        ERROR_MARK_NODE.
        ERROR_MARK_NODE.
        (find_parameter_packs_r): Pass addresses to cp_walk_tree wherever
        (find_parameter_packs_r): Pass addresses to cp_walk_tree wherever
        possible. If set_packs_to_error is set true, replace the parameter
        possible. If set_packs_to_error is set true, replace the parameter
        pack with ERROR_MARK_NODE. Manage our own pointer sets.
        pack with ERROR_MARK_NODE. Manage our own pointer sets.
        (uses_parameter_packs): Don't set parameter packs to
        (uses_parameter_packs): Don't set parameter packs to
        ERROR_MARK_NODE.
        ERROR_MARK_NODE.
        (check_for_bare_parameter_packs): Now takes a pointer to a tree,
        (check_for_bare_parameter_packs): Now takes a pointer to a tree,
        which may be modified (if it is a parameter pack). Instructs
        which may be modified (if it is a parameter pack). Instructs
        find_parameter_packs_r to replace parameter packs with
        find_parameter_packs_r to replace parameter packs with
        ERROR_MARK_NODE (so that they won't cause errors later on).
        ERROR_MARK_NODE (so that they won't cause errors later on).
        (process_template_parm): Pass pointer to
        (process_template_parm): Pass pointer to
        check_for_bare_parameter_packs.
        check_for_bare_parameter_packs.
        (process_partial_specialization): Replace pack expansions before
        (process_partial_specialization): Replace pack expansions before
        the end of the template argument list with ERROR_MARK_NODE.
        the end of the template argument list with ERROR_MARK_NODE.
        (push_template_decl_real): Pass pointer to
        (push_template_decl_real): Pass pointer to
        check_for_bare_parameter_packs. Replace parameter packs not at the
        check_for_bare_parameter_packs. Replace parameter packs not at the
        end of the template parameter list with ERROR_MARK_NODE.
        end of the template parameter list with ERROR_MARK_NODE.
        (convert_template_argument): Be more careful about using DECL_NAME
        (convert_template_argument): Be more careful about using DECL_NAME
        on only declarations.
        on only declarations.
        (unify): Can't unify against ERROR_MARK_NODE.
        (unify): Can't unify against ERROR_MARK_NODE.
        * semantics.c (finish_cond): Pass pointer to
        * semantics.c (finish_cond): Pass pointer to
        check_for_bare_parameter_packs.
        check_for_bare_parameter_packs.
        (finish_expr_stmt): Ditto.
        (finish_expr_stmt): Ditto.
        (finish_for_expr): Ditto.
        (finish_for_expr): Ditto.
        (finish_switch_cond): Pass pointer to
        (finish_switch_cond): Pass pointer to
        check_for_bare_parameter_packs, and call it before we put the
        check_for_bare_parameter_packs, and call it before we put the
        condition into the statement.
        condition into the statement.
        (finish_mem_initializers): Pass pointer to
        (finish_mem_initializers): Pass pointer to
        check_for_bare_parameter_packs.
        check_for_bare_parameter_packs.
        (finish_member_declaration): Ditto.
        (finish_member_declaration): Ditto.
        * parser.c (cp_parser_base_clause): Ditto.
        * parser.c (cp_parser_base_clause): Ditto.
2007-11-06  Jakub Jelinek  
2007-11-06  Jakub Jelinek  
        PR target/33168
        PR target/33168
        * decl.c (cp_finish_decl): Call make_rtl_for_nonlocal_decl already
        * decl.c (cp_finish_decl): Call make_rtl_for_nonlocal_decl already
        with the final TREE_READONLY flag in place.  processing_template_decl
        with the final TREE_READONLY flag in place.  processing_template_decl
        is known to be 0 in this part of function.
        is known to be 0 in this part of function.
        PR c++/33894
        PR c++/33894
        * cp-tree.h: Update comment - TYPE_LANG_FLAG_0 is not
        * cp-tree.h: Update comment - TYPE_LANG_FLAG_0 is not
        OMP_ATOMIC_DEPENDENT_P in OMP_ATOMIC.
        OMP_ATOMIC_DEPENDENT_P in OMP_ATOMIC.
        * pt.c (tsubst_expr): Assert OMP_ATOMIC_DEPENDENT_P.
        * pt.c (tsubst_expr): Assert OMP_ATOMIC_DEPENDENT_P.
        * semantics.c (finish_omp_atomic): Revert most of the
        * semantics.c (finish_omp_atomic): Revert most of the
        2007-02-05 changes, just keep the new representation of
        2007-02-05 changes, just keep the new representation of
        OMP_ATOMIC_DEPENDENT_P OMP_ATOMIC.
        OMP_ATOMIC_DEPENDENT_P OMP_ATOMIC.
2007-11-05  H.J. Lu  
2007-11-05  H.J. Lu  
        PR c++/33871
        PR c++/33871
        * decl2.c (constrain_visibility): Clear DECL_ONE_ONLY if marked
        * decl2.c (constrain_visibility): Clear DECL_ONE_ONLY if marked
        local.
        local.
2007-11-05  Douglas Gregor  
2007-11-05  Douglas Gregor  
        PR c++/33996
        PR c++/33996
        PR c++/33235
        PR c++/33235
        PR c++/33930
        PR c++/33930
        * typeck.c (merge_types): Don't lose rvalue references when
        * typeck.c (merge_types): Don't lose rvalue references when
        merging types.
        merging types.
        * call.c (build_over_call): Don't elide move constructors just
        * call.c (build_over_call): Don't elide move constructors just
        because the copy constructor is trivial (!).
        because the copy constructor is trivial (!).
        (compare_ics): If comparing cv-qualifiers fails, we can still order
        (compare_ics): If comparing cv-qualifiers fails, we can still order
        based on binding lvalues vs. rvalues.
        based on binding lvalues vs. rvalues.
2007-11-05  Douglas Gregor  
2007-11-05  Douglas Gregor  
        PR c++/33939
        PR c++/33939
        * pt.c (unify_pack_expansion): bring handling of function call
        * pt.c (unify_pack_expansion): bring handling of function call
        arguments into line with type_unification_real.
        arguments into line with type_unification_real.
2007-11-05  Manuel Lopez-Ibanez  
2007-11-05  Manuel Lopez-Ibanez  
        * typeck.c (build_binary_op): Use pedwarn instead of error for
        * typeck.c (build_binary_op): Use pedwarn instead of error for
        consistency.
        consistency.
2007-11-05  Jakub Jelinek  
2007-11-05  Jakub Jelinek  
        PR c++/33836
        PR c++/33836
        * parser.c (cp_parser_unary_expression): For &&label call
        * parser.c (cp_parser_unary_expression): For &&label call
        cp_parser_non_integral_constant_expression and return error_mark_node
        cp_parser_non_integral_constant_expression and return error_mark_node
        if it returned true.
        if it returned true.
        PR c++/33969
        PR c++/33969
        * decl.c (grokdeclarator): Don't call build_memfn_type if type
        * decl.c (grokdeclarator): Don't call build_memfn_type if type
        is neither FUNCTION_TYPE nor METHOD_TYPE.
        is neither FUNCTION_TYPE nor METHOD_TYPE.
2007-11-02  Jakub Jelinek  
2007-11-02  Jakub Jelinek  
        PR c++/33516
        PR c++/33516
        * parser.c (cp_parser_nested_name_specifier_opt): Use
        * parser.c (cp_parser_nested_name_specifier_opt): Use
        TYPE_MAIN_VARIANT (new_scope) as scope if new_scope is an incomplete
        TYPE_MAIN_VARIANT (new_scope) as scope if new_scope is an incomplete
        typedef of currently open class.
        typedef of currently open class.
2007-11-02  Paolo Carlini  
2007-11-02  Paolo Carlini  
        PR c++/33495
        PR c++/33495
        * error.c (dump_expr): Deal specially with statements.
        * error.c (dump_expr): Deal specially with statements.
2007-11-01  Jason Merrill  
2007-11-01  Jason Merrill  
        PR c++/30897
        PR c++/30897
        * pt.c (push_template_decl_real): Set DECL_CONTEXT on template
        * pt.c (push_template_decl_real): Set DECL_CONTEXT on template
        template parms.
        template parms.
        (lookup_template_class): Use it to get the outer template args
        (lookup_template_class): Use it to get the outer template args
        for instantiating one.
        for instantiating one.
        PR c++/29236
        PR c++/29236
        * pt.c (reduce_template_parm_level): tsubst the parameters
        * pt.c (reduce_template_parm_level): tsubst the parameters
        of a template template parm.
        of a template template parm.
2007-11-01  Douglas Gregor  
2007-11-01  Douglas Gregor  
        PR c++/33955
        PR c++/33955
        * pt.c (find_parameter_packs_r): Handle TYPENAME_TYPE.
        * pt.c (find_parameter_packs_r): Handle TYPENAME_TYPE.
2007-11-01  Jakub Jelinek  
2007-11-01  Jakub Jelinek  
        PR c++/32384
        PR c++/32384
        * parser.c (cp_parser_postfix_dot_deref_expression): If
        * parser.c (cp_parser_postfix_dot_deref_expression): If
        POSTFIX_EXPRESSION is type dependent, try to parse it as pseudo dtor
        POSTFIX_EXPRESSION is type dependent, try to parse it as pseudo dtor
        first and if that succeeds and type is SCALAR_TYPE_P, create
        first and if that succeeds and type is SCALAR_TYPE_P, create
        PSEUDO_DTOR_EXPR.
        PSEUDO_DTOR_EXPR.
        PR c++/32260
        PR c++/32260
        * rtti.c (enum_tinfo_kind): Fix TK_TYPE_INFO_TYPE comment.
        * rtti.c (enum_tinfo_kind): Fix TK_TYPE_INFO_TYPE comment.
        (typeid_ok_p): Use the same alias set for abi::__type_info_pseudo
        (typeid_ok_p): Use the same alias set for abi::__type_info_pseudo
        as for std::type_info.
        as for std::type_info.
2007-10-31  Paolo Carlini  
2007-10-31  Paolo Carlini  
        PR c++/33494
        PR c++/33494
        * cxx-pretty-print.c (pp_cxx_typeid_expression,
        * cxx-pretty-print.c (pp_cxx_typeid_expression,
        pp_cxx_delete_expression): Change to static linkage.
        pp_cxx_delete_expression): Change to static linkage.
        * cxx-pretty-print.h: Adjust declarations.
        * cxx-pretty-print.h: Adjust declarations.
        * error.c (dump_expr, case EXPR_PACK_EXPANSION, TYPEID_EXPR,
        * error.c (dump_expr, case EXPR_PACK_EXPANSION, TYPEID_EXPR,
        MEMBER_REF, DOTSTAR_EXPR, DELETE_EXPR, VEC_DELETE_EXPR,
        MEMBER_REF, DOTSTAR_EXPR, DELETE_EXPR, VEC_DELETE_EXPR,
        MODOP_EXPR): Forward to pp_expression.
        MODOP_EXPR): Forward to pp_expression.
        * cxx-pretty-print.c (pp_cxx_expression, case NON_DEPENDENT_EXPR):
        * cxx-pretty-print.c (pp_cxx_expression, case NON_DEPENDENT_EXPR):
        Fix typo.
        Fix typo.
2007-10-31 Christian Bruel  
2007-10-31 Christian Bruel  
            Mark Mitchell  
            Mark Mitchell  
        PR c++/19531
        PR c++/19531
        * typeck.c (check_return_expr): Don't set named_return_value_okay_p
        * typeck.c (check_return_expr): Don't set named_return_value_okay_p
        if retval is volatile.
        if retval is volatile.
2007-10-30  Jakub Jelinek  
2007-10-30  Jakub Jelinek  
        PR c++/33616
        PR c++/33616
        * decl2.c (build_offset_ref_call_from_tree): Call
        * decl2.c (build_offset_ref_call_from_tree): Call
        build_non_dependent_expr on object prior to building ADDR_EXPR from it
        build_non_dependent_expr on object prior to building ADDR_EXPR from it
        if FN is DOTSTAR_EXPR.
        if FN is DOTSTAR_EXPR.
2007-10-30  Douglas Gregor  
2007-10-30  Douglas Gregor  
        PR c++/31993
        PR c++/31993
        PR c++/32252
        PR c++/32252
        * pt.c (find_parameter_packs_r): Fix typo in comment.
        * pt.c (find_parameter_packs_r): Fix typo in comment.
        (convert_template_argument): Look at the pattern of a pack
        (convert_template_argument): Look at the pattern of a pack
        expansion to determine what kind of entity we're converting.
        expansion to determine what kind of entity we're converting.
        (coerce_template_parameter_pack): When we have coerced a non-type
        (coerce_template_parameter_pack): When we have coerced a non-type
        template parameter pack, substitute into the type of that pack.
        template parameter pack, substitute into the type of that pack.
        (tsubst_pack_expansion): When our substitution of a parameter pack
        (tsubst_pack_expansion): When our substitution of a parameter pack
        is a "trivial" substitution of itself, just substitute into the
        is a "trivial" substitution of itself, just substitute into the
        pack expansion rather than actually expanding.
        pack expansion rather than actually expanding.
2007-10-29  Jakub Jelinek  
2007-10-29  Jakub Jelinek  
        PR c++/33841
        PR c++/33841
        * class.c (check_bitfield_decl): Don't set field's type to error_mark_node
        * class.c (check_bitfield_decl): Don't set field's type to error_mark_node
        for non-integral type bitfields.  Return true if bitfield is correct, false
        for non-integral type bitfields.  Return true if bitfield is correct, false
        error has been diagnosed.
        error has been diagnosed.
        (check_field_decls): If check_bitfield_decl returned false, call also
        (check_field_decls): If check_bitfield_decl returned false, call also
        check_field_decl.
        check_field_decl.
2007-10-28  Paolo Carlini  
2007-10-28  Paolo Carlini  
            Mark Mitchell  
            Mark Mitchell  
        PR c++/30659
        PR c++/30659
        * pt.c (do_decl_instantiation): If the VAR_DECL is not a
        * pt.c (do_decl_instantiation): If the VAR_DECL is not a
        class member error out and return.
        class member error out and return.
2007-10-27  Jakub Jelinek  
2007-10-27  Jakub Jelinek  
        * error.c (reinit_cxx_pp): Initialize cxx_pp->enclosing_scope
        * error.c (reinit_cxx_pp): Initialize cxx_pp->enclosing_scope
        to current_function_decl rather than 0.
        to current_function_decl rather than 0.
        PR c++/33844
        PR c++/33844
        * cxx-pretty-print.c (pp_cxx_pm_expression) : Print
        * cxx-pretty-print.c (pp_cxx_pm_expression) : Print
        ->* rather than .*.
        ->* rather than .*.
        * error.c (dump_expr): Handle MEMBER_REF and DOTSTAR_EXPR.
        * error.c (dump_expr): Handle MEMBER_REF and DOTSTAR_EXPR.
2007-10-27  Jason Merrill  
2007-10-27  Jason Merrill  
        PR c++/5247
        PR c++/5247
        * call.c (convert_default_arg): Detect recursion.
        * call.c (convert_default_arg): Detect recursion.
2007-10-27  Jakub Jelinek  
2007-10-27  Jakub Jelinek  
        PR c++/33842
        PR c++/33842
        * cxx-pretty-print.h (pp_cxx_offsetof_expression): New prototype.
        * cxx-pretty-print.h (pp_cxx_offsetof_expression): New prototype.
        * cxx-pretty-print.c (pp_cxx_primary_expression): Handle
        * cxx-pretty-print.c (pp_cxx_primary_expression): Handle
        OFFSETOF_EXPR.
        OFFSETOF_EXPR.
        (pp_cxx_offsetof_expression_1, pp_cxx_offsetof_expression): New
        (pp_cxx_offsetof_expression_1, pp_cxx_offsetof_expression): New
        functions.
        functions.
        * error.c (dump_expr): Handle OFFSETOF_EXPR.
        * error.c (dump_expr): Handle OFFSETOF_EXPR.
2007-10-26  Jason Merrill  
2007-10-26  Jason Merrill  
        PR c++/24791
        PR c++/24791
        * pt.c (get_template_info): New fn.
        * pt.c (get_template_info): New fn.
        (template_class_depth): Use it.
        (template_class_depth): Use it.
        (push_template_decl_real): Check that the template args of the
        (push_template_decl_real): Check that the template args of the
        definition match the args of the previous declaration.
        definition match the args of the previous declaration.
2007-10-26  Paolo Carlini  
2007-10-26  Paolo Carlini  
        PR c++/31988
        PR c++/31988
        * decl2.c (coerce_new_type): Do not allow a default argument for
        * decl2.c (coerce_new_type): Do not allow a default argument for
        the first parameter.
        the first parameter.
2007-10-26  Douglas Gregor  
2007-10-26  Douglas Gregor  
        PR c++/33839
        PR c++/33839
        * parser.c (cp_parser_decltype): Return ERROR_MARK_NODE if we
        * parser.c (cp_parser_decltype): Return ERROR_MARK_NODE if we
        don't see the leading '('. Only lookup names if we get an
        don't see the leading '('. Only lookup names if we get an
        IDENTIFIER_NODE.
        IDENTIFIER_NODE.
2007-10-26  Jakub Jelinek  
2007-10-26  Jakub Jelinek  
        PR c++/33744
        PR c++/33744
        * parser.c (cp_parser_parenthesized_expression_list): Set
        * parser.c (cp_parser_parenthesized_expression_list): Set
        greater_than_is_operator_p to true in between the parens.
        greater_than_is_operator_p to true in between the parens.
2007-10-26  Paolo Carlini  
2007-10-26  Paolo Carlini  
        PR c++/31747
        PR c++/31747
        * decl.c (grokdeclarator): In case of conflicting specifiers
        * decl.c (grokdeclarator): In case of conflicting specifiers
        just return error_mark_node.
        just return error_mark_node.
2007-10-26  Ollie Wild  
2007-10-26  Ollie Wild  
        * expr.c (cxx_expand_expr): Removed.
        * expr.c (cxx_expand_expr): Removed.
        * cp-tree.h (exx_expand_expr): Removed.
        * cp-tree.h (exx_expand_expr): Removed.
        * cp-objcp-common.h (LANK_HOOKS_EXPAND_EXPR): Replace cxx_expand_expr
        * cp-objcp-common.h (LANK_HOOKS_EXPAND_EXPR): Replace cxx_expand_expr
        with c_expand_expr.
        with c_expand_expr.
2007-10-25  Paolo Carlini  
2007-10-25  Paolo Carlini  
        PR c++/33843
        PR c++/33843
        * cxx-pretty-print.c (pp_cxx_unqualified_id): Deal with BIT_NOT_EXPR.
        * cxx-pretty-print.c (pp_cxx_unqualified_id): Deal with BIT_NOT_EXPR.
2007-10-23  Jason Merrill  
2007-10-23  Jason Merrill  
        PR c++/25950 (DR 391)
        PR c++/25950 (DR 391)
        * call.c (struct conversion): Remove check_copy_constructor_p.
        * call.c (struct conversion): Remove check_copy_constructor_p.
        (reference_binding): Always bind a reference directly to a
        (reference_binding): Always bind a reference directly to a
        compatible class rvalue.  Pass down LOOKUP_NO_TEMP_BIND during
        compatible class rvalue.  Pass down LOOKUP_NO_TEMP_BIND during
        temporary creation.
        temporary creation.
        (check_constructor_callable): Remove.
        (check_constructor_callable): Remove.
        (convert_like_real): Don't call it.
        (convert_like_real): Don't call it.
        (initialize_reference): Don't call check_constructor_callable.
        (initialize_reference): Don't call check_constructor_callable.
        (standard_conversion): Check LOOKUP_NO_CONVERSION instead of
        (standard_conversion): Check LOOKUP_NO_CONVERSION instead of
        LOOKUP_CONSTRUCTOR_CALLABLE.  Don't require a temporary for base
        LOOKUP_CONSTRUCTOR_CALLABLE.  Don't require a temporary for base
        conversions if LOOKUP_NO_TEMP_BIND.
        conversions if LOOKUP_NO_TEMP_BIND.
        (implicit_conversion): Pass through LOOKUP_NO_TEMP_BIND.
        (implicit_conversion): Pass through LOOKUP_NO_TEMP_BIND.
        (build_user_type_conversion_1): Pass through LOOKUP_NO_TEMP_BIND for
        (build_user_type_conversion_1): Pass through LOOKUP_NO_TEMP_BIND for
        second conversion.
        second conversion.
        * cp-tree.h (LOOKUP_CONSTRUCTOR_CALLABLE): Remove.
        * cp-tree.h (LOOKUP_CONSTRUCTOR_CALLABLE): Remove.
2007-10-22  Jakub Jelinek  
2007-10-22  Jakub Jelinek  
        PR c++/33372
        PR c++/33372
        * semantics.c (finish_omp_clauses): Check !type_dependent_expression_p
        * semantics.c (finish_omp_clauses): Check !type_dependent_expression_p
        before checking if its type is integral.
        before checking if its type is integral.
2007-10-22  Jason Merrill  
2007-10-22  Jason Merrill  
        PR c++/33620
        PR c++/33620
        * class.c (finish_struct_bits): Copy TYPE_ATTRIBUTES.
        * class.c (finish_struct_bits): Copy TYPE_ATTRIBUTES.
        * pt.c (apply_late_template_attributes): Splice out dependent
        * pt.c (apply_late_template_attributes): Splice out dependent
        attributes from DECL_ATTRIBUTES.
        attributes from DECL_ATTRIBUTES.
        * decl.c (cxx_maybe_build_cleanup): Use build_address.
        * decl.c (cxx_maybe_build_cleanup): Use build_address.
2007-10-17  Manuel Lopez-Ibanez  
2007-10-17  Manuel Lopez-Ibanez  
        * typeck.c (build_binary_op) : Use appropriate warning option
        * typeck.c (build_binary_op) : Use appropriate warning option
        instead of unnamed warning.
        instead of unnamed warning.
2007-10-16  Paolo Carlini  
2007-10-16  Paolo Carlini  
        PR c++/31446
        PR c++/31446
        * pt.c (current_template_args): Do not change TREE_LIST elements
        * pt.c (current_template_args): Do not change TREE_LIST elements
        with a TREE_VALUE of error_mark_node.
        with a TREE_VALUE of error_mark_node.
2007-10-16  Mark Mitchell  
2007-10-16  Mark Mitchell  
        * typeck.c (cp_apply_type_quals_to_decl): Expand documentation.
        * typeck.c (cp_apply_type_quals_to_decl): Expand documentation.
        * decl.c (start_decl): Tidy.
        * decl.c (start_decl): Tidy.
        (start_decl_1): Call cp_apply_type_quals_to_decl after completing
        (start_decl_1): Call cp_apply_type_quals_to_decl after completing
        the type.
        the type.
        (grokdeclarator): Clarify comment.
        (grokdeclarator): Clarify comment.
2007-10-14  Andrew Pinski  
2007-10-14  Andrew Pinski  
        PR c++/30303
        PR c++/30303
        * decl.c (grokfndecl): Return NULL after the "definition of
        * decl.c (grokfndecl): Return NULL after the "definition of
        implicitly-declared" error happened.
        implicitly-declared" error happened.
2007-10-12  Simon Martin  
2007-10-12  Simon Martin  
        PR c++/26698
        PR c++/26698
        * call.c (build_user_type_conversion_1): Do not consider conversion
        * call.c (build_user_type_conversion_1): Do not consider conversion
        functions to convert a (possibly cv-qualified) object to the (possibly
        functions to convert a (possibly cv-qualified) object to the (possibly
        cv-qualified) same object type (or a reference to it), to a (possibly
        cv-qualified) same object type (or a reference to it), to a (possibly
        cv-qualified) base class of that type (or a reference to it).
        cv-qualified) base class of that type (or a reference to it).
2007-10-12  Paolo Carlini  
2007-10-12  Paolo Carlini  
        * pt.c (tsubst): Use template_parm_level_and_index.
        * pt.c (tsubst): Use template_parm_level_and_index.
2007-10-12  Jakub Jelinek  
2007-10-12  Jakub Jelinek  
        PR c++/32121
        PR c++/32121
        * parser.c (cp_parser_compound_statement): Handle label-declarations
        * parser.c (cp_parser_compound_statement): Handle label-declarations
        at the beginning of the compound statement.
        at the beginning of the compound statement.
        (cp_parser_block_declaration): Issue diagnostics about __label__
        (cp_parser_block_declaration): Issue diagnostics about __label__
        not at the beginning of a block.
        not at the beginning of a block.
2007-10-11  Paolo Carlini  
2007-10-11  Paolo Carlini  
        PR c++/33461
        PR c++/33461
        * pt.c (coerce_template_parameter_pack): Do not pass error_mark_node
        * pt.c (coerce_template_parameter_pack): Do not pass error_mark_node
        to convert_template_argument.
        to convert_template_argument.
        (coerce_template_parms): Return error_mark_node after fixed-length
        (coerce_template_parms): Return error_mark_node after fixed-length
        error.
        error.
        (tsubst_decl): Check for error_mark_node the return value of the
        (tsubst_decl): Check for error_mark_node the return value of the
        first tsubst in 'case VAR_DECL'.
        first tsubst in 'case VAR_DECL'.
2007-10-08  Ollie Wild  
2007-10-08  Ollie Wild  
        * typeck2.c (digest_init): Call cplus_expand_constant after
        * typeck2.c (digest_init): Call cplus_expand_constant after
        convert_for_initialization.
        convert_for_initialization.
        * cp-objcp-common.h (LANG_HOOKS_EXPAND_CONSTANT): Removed.
        * cp-objcp-common.h (LANG_HOOKS_EXPAND_CONSTANT): Removed.
        * expr.c (cplus_expand_constant): Updated function description.
        * expr.c (cplus_expand_constant): Updated function description.
2007-10-04  Jason Merrill  
2007-10-04  Jason Merrill  
        PR c++/20416
        PR c++/20416
        * call.c (initialize_reference): Handle local static reference
        * call.c (initialize_reference): Handle local static reference
        temps properly.
        temps properly.
2007-10-03  Jason Merrill  
2007-10-03  Jason Merrill  
        PR c++/32470
        PR c++/32470
        * name-lookup.c (push_namespace_with_attrs): Fold back into...
        * name-lookup.c (push_namespace_with_attrs): Fold back into...
        (push_namespace): Here.
        (push_namespace): Here.
        (handle_namespace_attrs): New fn for the attr code.
        (handle_namespace_attrs): New fn for the attr code.
        (leave_scope): Don't pop_visibility.
        (leave_scope): Don't pop_visibility.
        * name-lookup.h (struct cp_binding_level): Remove has_visibility.
        * name-lookup.h (struct cp_binding_level): Remove has_visibility.
        * parser.c (cp_parser_namespace_definition): Call
        * parser.c (cp_parser_namespace_definition): Call
        handle_namespace_attrs and pop_visibility as appropriate.
        handle_namespace_attrs and pop_visibility as appropriate.
        PR c++/11756
        PR c++/11756
        * mangle.c (write_type) [TYPEOF_TYPE]: Just sorry.
        * mangle.c (write_type) [TYPEOF_TYPE]: Just sorry.
2007-10-03  Alexandre Oliva  
2007-10-03  Alexandre Oliva  
        * decl.c (duplicate_decls): Preserve linkage flags for mere
        * decl.c (duplicate_decls): Preserve linkage flags for mere
        redeclarations of gnu_inline definitions.
        redeclarations of gnu_inline definitions.
2007-10-03  Jason Merrill  
2007-10-03  Jason Merrill  
        PR c++/15764
        PR c++/15764
        * decl.c (wrap_cleanups_r): New fn.
        * decl.c (wrap_cleanups_r): New fn.
        (wrap_temporary_cleanups): New fn.
        (wrap_temporary_cleanups): New fn.
        (initialize_local_var): Call it.
        (initialize_local_var): Call it.
2007-09-29  Jason Merrill  
2007-09-29  Jason Merrill  
        PR c++/33094
        PR c++/33094
        * decl.c (make_rtl_for_nonlocal_decl): It's ok for a member
        * decl.c (make_rtl_for_nonlocal_decl): It's ok for a member
        constant to not have DECL_EXTERNAL if it's file-local.
        constant to not have DECL_EXTERNAL if it's file-local.
2007-09-28  Ollie Wild  
2007-09-28  Ollie Wild  
        Revert
        Revert
        2007-09-27  Ollie Wild  
        2007-09-27  Ollie Wild  
        * typeck2.c (digest_init): Call cplus_expand_constant after
        * typeck2.c (digest_init): Call cplus_expand_constant after
        convert_for_initialization.
        convert_for_initialization.
        * cp-objcp-common.h (LANG_HOOKS_EXPAND_CONSTANT): Removed.
        * cp-objcp-common.h (LANG_HOOKS_EXPAND_CONSTANT): Removed.
        * expr.c (cplus_expand_constant): Updated function description.
        * expr.c (cplus_expand_constant): Updated function description.
2007-09-28  Jason Merrill  
2007-09-28  Jason Merrill  
        PR c++/10179
        PR c++/10179
        * class.c (layout_empty_base): Take rli parameter, update
        * class.c (layout_empty_base): Take rli parameter, update
        rli->record_align if empty base has user-specified alignment.
        rli->record_align if empty base has user-specified alignment.
        (build_base_field): Pass rli to it.
        (build_base_field): Pass rli to it.
2007-09-28  Paolo Carlini  
2007-09-28  Paolo Carlini  
        PR c++/33213
        PR c++/33213
        * error.c (dump_decl): Deal with TYPE_PACK_EXPANSION.
        * error.c (dump_decl): Deal with TYPE_PACK_EXPANSION.
2007-09-28  Paolo Carlini  
2007-09-28  Paolo Carlini  
        PR c++/33118
        PR c++/33118
        * error.c (dump_expr): Deal with ARGUMENT_PACK_SELECT.
        * error.c (dump_expr): Deal with ARGUMENT_PACK_SELECT.
        (dump_type): Use dump_template_argument for TYPE_ARGUMENT_PACK.
        (dump_type): Use dump_template_argument for TYPE_ARGUMENT_PACK.
        (dump_parameters): Just call dump_type for argument packs too.
        (dump_parameters): Just call dump_type for argument packs too.
2007-09-28  Jakub Jelinek  
2007-09-28  Jakub Jelinek  
        PR c++/31434
        PR c++/31434
        * tree.c (cp_build_qualified_type_real): Handle TYPE_PACK_EXPANSION
        * tree.c (cp_build_qualified_type_real): Handle TYPE_PACK_EXPANSION
        qualification by creating qualified PACK_EXPANSION_PATTERN and
        qualification by creating qualified PACK_EXPANSION_PATTERN and
        then calling make_pack_expansion on it.
        then calling make_pack_expansion on it.
2007-09-27  Ollie Wild  
2007-09-27  Ollie Wild  
        * typeck2.c (digest_init): Call cplus_expand_constant after
        * typeck2.c (digest_init): Call cplus_expand_constant after
        convert_for_initialization.
        convert_for_initialization.
        * cp-objcp-common.h (LANG_HOOKS_EXPAND_CONSTANT): Removed.
        * cp-objcp-common.h (LANG_HOOKS_EXPAND_CONSTANT): Removed.
        * expr.c (cplus_expand_constant): Updated function description.
        * expr.c (cplus_expand_constant): Updated function description.
2007-09-27  Jason Merrill  
2007-09-27  Jason Merrill  
        PR c++/33571
        PR c++/33571
        * decl2.c (is_late_template_attribute): Don't crash on unknown
        * decl2.c (is_late_template_attribute): Don't crash on unknown
        attribute.
        attribute.
2007-09-27  Paolo Carlini  
2007-09-27  Paolo Carlini  
        PR c++/33493
        PR c++/33493
        * error.c (dump_expr): Deal with DELETE_EXPR and VEC_DELETE_EXPR.
        * error.c (dump_expr): Deal with DELETE_EXPR and VEC_DELETE_EXPR.
        * cxx-pretty-print.c (pp_cxx_delete_expression): Add missing
        * cxx-pretty-print.c (pp_cxx_delete_expression): Add missing
        spaces in the formatting.
        spaces in the formatting.
        * cxx-pretty-print.h (pp_cxx_delete_expression): Declare.
        * cxx-pretty-print.h (pp_cxx_delete_expression): Declare.
2007-09-27  Jakub Jelinek  
2007-09-27  Jakub Jelinek  
        * error.c (cxx_print_error_function): Add third argument, pass
        * error.c (cxx_print_error_function): Add third argument, pass
        it over to lhd_print_error_function.
        it over to lhd_print_error_function.
        (cp_print_error_function): If diagnostic->abstract_origin, print
        (cp_print_error_function): If diagnostic->abstract_origin, print
        virtual backtrace.
        virtual backtrace.
        * cp-tree.h (struct diagnostic_info): New forward decl.
        * cp-tree.h (struct diagnostic_info): New forward decl.
        (cxx_print_error_function): Add third argument.
        (cxx_print_error_function): Add third argument.
2007-09-25  Simon Martin  
2007-09-25  Simon Martin  
        PR c++/33207
        PR c++/33207
        * name-lookup.c (pushtag): Do not create an implicit typedef before
        * name-lookup.c (pushtag): Do not create an implicit typedef before
        the associated type declaration is known to be valid.
        the associated type declaration is known to be valid.
2007-09-25  Jakub Jelinek  
2007-09-25  Jakub Jelinek  
        * tree.c (cxx_printable_name): Compare FUNCTION_DECL uids
        * tree.c (cxx_printable_name): Compare FUNCTION_DECL uids
        rather than pointers.
        rather than pointers.
2007-09-24  Danny Smith  
2007-09-24  Danny Smith  
        PR c++/14688
        PR c++/14688
         * search.c (check_final_overrider): Fail if
         * search.c (check_final_overrider): Fail if
        targetm.comp_type_attributes returns 0.
        targetm.comp_type_attributes returns 0.
2007-09-24  Jason Merrill  
2007-09-24  Jason Merrill  
        PR c++/33239
        PR c++/33239
        * pt.c (resolve_typename_type): Don't look things up in the original
        * pt.c (resolve_typename_type): Don't look things up in the original
        template if it would mean losing template arguments.
        template if it would mean losing template arguments.
2007-09-24  Jakub Jelinek  
2007-09-24  Jakub Jelinek  
        PR c++/33506
        PR c++/33506
        * cp-tree.h (cxx_type_hash_eq): New prototype.
        * cp-tree.h (cxx_type_hash_eq): New prototype.
        * cp-objcp-common.h (LANG_HOOKS_TYPE_HASH_EQ): Redefine.
        * cp-objcp-common.h (LANG_HOOKS_TYPE_HASH_EQ): Redefine.
        * tree.c (cxx_type_hash_eq): New function.
        * tree.c (cxx_type_hash_eq): New function.
2007-09-24  Douglas Gregor  
2007-09-24  Douglas Gregor  
        PR c++/33185
        PR c++/33185
        * tree.c (cp_build_qualified_type_real): Build a canonical
        * tree.c (cp_build_qualified_type_real): Build a canonical
        ARRAY_TYPE if the original ARRAY_TYPE was not a canonical type.
        ARRAY_TYPE if the original ARRAY_TYPE was not a canonical type.
2007-09-24  Douglas Gregor  
2007-09-24  Douglas Gregor  
        PR c++/33112
        PR c++/33112
        PR c++/33185
        PR c++/33185
        * tree.c (cplus_array_compare): Compare pointers, not types.
        * tree.c (cplus_array_compare): Compare pointers, not types.
        (build_cplus_array_type_1): Store new array type into the hash
        (build_cplus_array_type_1): Store new array type into the hash
        table before building the canonical type; build the canonical type
        table before building the canonical type; build the canonical type
        correctly.
        correctly.
        (cp_build_qualified_type_real): Put all of the array types with
        (cp_build_qualified_type_real): Put all of the array types with
        cv-qualified element types into the C++ array hash table, built as
        cv-qualified element types into the C++ array hash table, built as
        variants of the unqualified versions.
        variants of the unqualified versions.
2007-09-23  Jason Merrill  
2007-09-23  Jason Merrill  
        PR c++/16370
        PR c++/16370
        * decl.c (grokdeclarator): Look through implicit TYPE_DECLs
        * decl.c (grokdeclarator): Look through implicit TYPE_DECLs
        for deprecation warnings.
        for deprecation warnings.
2007-09-22  Jason Merrill  
2007-09-22  Jason Merrill  
        PR c++/15269
        PR c++/15269
        * call.c (build_over_call): Warn about deprecated virtuals.
        * call.c (build_over_call): Warn about deprecated virtuals.
        PR c++/19407
        PR c++/19407
        * cp-tree.h (ATTR_IS_DEPENDENT): New macro.
        * cp-tree.h (ATTR_IS_DEPENDENT): New macro.
        (MAYBE_TAGGED_TYPE_P): Remove.
        (MAYBE_TAGGED_TYPE_P): Remove.
        * pt.c (apply_late_template_attributes): Check ATTR_IS_DEPENDENT
        * pt.c (apply_late_template_attributes): Check ATTR_IS_DEPENDENT
        instead of calling is_late_template_attribute again.
        instead of calling is_late_template_attribute again.
        (tsubst_decl) [TYPE_DECL]: Just check if the name is the tag.
        (tsubst_decl) [TYPE_DECL]: Just check if the name is the tag.
        (tsubst): A typedef is a TYPE_NAME != TYPE_MAIN_DECL.
        (tsubst): A typedef is a TYPE_NAME != TYPE_MAIN_DECL.
        Don't crash on typedefs from non-template classes.
        Don't crash on typedefs from non-template classes.
        * decl2.c (grokfield): Don't sorry about attrs on template parms.
        * decl2.c (grokfield): Don't sorry about attrs on template parms.
        (is_late_template_attribute): All attributes applied to template
        (is_late_template_attribute): All attributes applied to template
        parms or typename types are dependent.  Static.
        parms or typename types are dependent.  Static.
        (splice_template_attributes): Pass decl through.
        (splice_template_attributes): Pass decl through.
        (save_template_attributes): Likewise.
        (save_template_attributes): Likewise.
2007-09-20  Jakub Jelinek  
2007-09-20  Jakub Jelinek  
        PR c++/33496
        PR c++/33496
        * pt.c (tsubst_copy) : Handle error_mark_node
        * pt.c (tsubst_copy) : Handle error_mark_node
        returned from tsubst_pack_expansion.
        returned from tsubst_pack_expansion.
        (tsubst_copy_and_build) : Likewise.
        (tsubst_copy_and_build) : Likewise.
        (tsubst_copy_and_build) : Likewise.
        (tsubst_copy_and_build) : Likewise.
2007-09-20  Paolo Carlini  
2007-09-20  Paolo Carlini  
        PR c++/33460
        PR c++/33460
        * semantics.c (finish_id_expression): Use consistently
        * semantics.c (finish_id_expression): Use consistently
        context_for_name_lookup.
        context_for_name_lookup.
        * decl.c (fixup_anonymous_aggr): Fix error message for
        * decl.c (fixup_anonymous_aggr): Fix error message for
        anonymous struct (vs union).
        anonymous struct (vs union).
2007-09-19  Jason Merrill  
2007-09-19  Jason Merrill  
        PR c++/7586
        PR c++/7586
        * pt.c (tsubst): Handle typedefs by looking for the specialization.
        * pt.c (tsubst): Handle typedefs by looking for the specialization.
        (retrieve_specialization): Only tagged types use
        (retrieve_specialization): Only tagged types use
        DECL_TEMPLATE_INSTANTIATIONS.
        DECL_TEMPLATE_INSTANTIATIONS.
        (instantiate_class_template): Push nested classes too.
        (instantiate_class_template): Push nested classes too.
        (tsubst_decl) [TYPE_DECL]: Only check for canonical decl for
        (tsubst_decl) [TYPE_DECL]: Only check for canonical decl for
        tagged types.
        tagged types.
        * cp-tree.h (MAYBE_TAGGED_TYPE_P): New macro.
        * cp-tree.h (MAYBE_TAGGED_TYPE_P): New macro.
        * init.c (is_aggr_type): Remove redundant tests.
        * init.c (is_aggr_type): Remove redundant tests.
        * class.c (push_nested_class): Use CLASS_TYPE_P.
        * class.c (push_nested_class): Use CLASS_TYPE_P.
2007-09-20  Paolo Carlini  
2007-09-20  Paolo Carlini  
        PR c++/33459
        PR c++/33459
        * init.c (build_zero_init): If, recursively, build_zero_init
        * init.c (build_zero_init): If, recursively, build_zero_init
        returns a NULL_TREE, do not append it to the VEC of constructors.
        returns a NULL_TREE, do not append it to the VEC of constructors.
2007-09-18  Jason Merrill  
2007-09-18  Jason Merrill  
        PR c++/17743
        PR c++/17743
        * pt.c (apply_late_template_attributes): Set processing_template_decl.
        * pt.c (apply_late_template_attributes): Set processing_template_decl.
        (tsubst_decl) [TYPE_DECL]: Preserve naming typedef, pass
        (tsubst_decl) [TYPE_DECL]: Preserve naming typedef, pass
        ATTR_FLAG_TYPE_IN_PLACE.
        ATTR_FLAG_TYPE_IN_PLACE.
        (tsubst): Do unqualified lookup to find typedefs from current class.
        (tsubst): Do unqualified lookup to find typedefs from current class.
        [ARRAY_TYPE]: Propagate alignment info.
        [ARRAY_TYPE]: Propagate alignment info.
        * decl2.c (is_late_template_attribute): Only defer handling of
        * decl2.c (is_late_template_attribute): Only defer handling of
        attribute aligned if the expression is dependent.
        attribute aligned if the expression is dependent.
        (save_template_attributes): If we're deferring any attributes,
        (save_template_attributes): If we're deferring any attributes,
        make this a naming typedef.
        make this a naming typedef.
2007-09-18  Paolo Carlini  
2007-09-18  Paolo Carlini  
        PR c++/33462 (again)
        PR c++/33462 (again)
        * cxx-pretty-print.c (pp_cxx_va_arg_expression): Print
        * cxx-pretty-print.c (pp_cxx_va_arg_expression): Print
        va_arg instead of __builtin_va_arg.
        va_arg instead of __builtin_va_arg.
2007-09-18  Paolo Carlini  
2007-09-18  Paolo Carlini  
        PR c++/33462
        PR c++/33462
        * cxx-pretty-print.c (pp_cxx_va_arg_expression): Add.
        * cxx-pretty-print.c (pp_cxx_va_arg_expression): Add.
        (pp_cxx_primary_expression): Use it.
        (pp_cxx_primary_expression): Use it.
        * cxx-pretty-print.h (pp_cxx_va_arg_expression): Declare.
        * cxx-pretty-print.h (pp_cxx_va_arg_expression): Declare.
        * error.c (dump_expr): Use it.
        * error.c (dump_expr): Use it.
2007-09-18  Paolo Carlini  
2007-09-18  Paolo Carlini  
        PR c++/33463
        PR c++/33463
        * cxx-pretty-print.c (pp_cxx_postfix_expression): Split
        * cxx-pretty-print.c (pp_cxx_postfix_expression): Split
        out case TYPEID_EXPR to...
        out case TYPEID_EXPR to...
        (pp_cxx_typeid_expression): ... here; use pp_cxx_left_paren
        (pp_cxx_typeid_expression): ... here; use pp_cxx_left_paren
        and pp_cxx_right_paren.
        and pp_cxx_right_paren.
        * cxx-pretty-print.h (pp_cxx_typeid_expression): Declare.
        * cxx-pretty-print.h (pp_cxx_typeid_expression): Declare.
        * error.c (dump_expr): Use it.
        * error.c (dump_expr): Use it.
2007-09-18  Paolo Carlini  
2007-09-18  Paolo Carlini  
        PR c++/33464
        PR c++/33464
        * cxx-pretty-print.c (pp_cxx_trait_expression): Add.
        * cxx-pretty-print.c (pp_cxx_trait_expression): Add.
        (pp_cxx_primary_expression): Use it.
        (pp_cxx_primary_expression): Use it.
        * cxx-pretty-print.h (pp_cxx_trait_expression): Declare.
        * cxx-pretty-print.h (pp_cxx_trait_expression): Declare.
        * error.c (dump_expr): Use it.
        * error.c (dump_expr): Use it.
2007-09-16  Paolo Carlini  
2007-09-16  Paolo Carlini  
        PR c++/33124
        PR c++/33124
        * init.c (build_new): Remove warning for zero-element
        * init.c (build_new): Remove warning for zero-element
        allocations.
        allocations.
2007-09-16  Nathan Sidwell  
2007-09-16  Nathan Sidwell  
        PR c++/32756
        PR c++/32756
        * call.c (maybe_handle_implicit_object): Set this_p, clear
        * call.c (maybe_handle_implicit_object): Set this_p, clear
        rvaluedness_matches_p.
        rvaluedness_matches_p.
        (compare_ics): Do not compare rvaluedness matching when one of the
        (compare_ics): Do not compare rvaluedness matching when one of the
        operands is an implicit object.
        operands is an implicit object.
2007-09-14  Jason Merrill  
2007-09-14  Jason Merrill  
        PR c++/17743, c++/19163
        PR c++/17743, c++/19163
        * decl2.c (is_late_template_attribute): New fn.
        * decl2.c (is_late_template_attribute): New fn.
        (splice_template_attributes, save_template_attributes): New fns.
        (splice_template_attributes, save_template_attributes): New fns.
        (cplus_decl_attributes): Call save_template_attributes.
        (cplus_decl_attributes): Call save_template_attributes.
        * pt.c (apply_late_template_attributes): New fn.
        * pt.c (apply_late_template_attributes): New fn.
        (instantiate_class_template, tsubst_decl): Use it.
        (instantiate_class_template, tsubst_decl): Use it.
        * cp-tree.h: Declare is_late_template_attribute.
        * cp-tree.h: Declare is_late_template_attribute.
2007-09-13  Tom Tromey  
2007-09-13  Tom Tromey  
        * parser.c (cp_lexer_new_main): Don't use
        * parser.c (cp_lexer_new_main): Don't use
        c_lex_return_raw_strings.
        c_lex_return_raw_strings.
        (cp_lexer_get_preprocessor_token): Update.  Add special case when
        (cp_lexer_get_preprocessor_token): Update.  Add special case when
        lexer is NULL.
        lexer is NULL.
2007-09-11  Jan Hubicka 
2007-09-11  Jan Hubicka 
        * method.c (use_thunk): Use tree_rest_of_compilation
        * method.c (use_thunk): Use tree_rest_of_compilation
        * cp-objecp-common.h (LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION): Kill.
        * cp-objecp-common.h (LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION): Kill.
        (LANG_HOOKS_CALLGRAPH_EMIT_ASSOCIATED_THUNKS): Define.
        (LANG_HOOKS_CALLGRAPH_EMIT_ASSOCIATED_THUNKS): Define.
        * cp-tree.h (expand_body): Kill.
        * cp-tree.h (expand_body): Kill.
        (emit_associated_thunks): Declare.
        (emit_associated_thunks): Declare.
        * semantics.c (emit_associated_thunks): Export.
        * semantics.c (emit_associated_thunks): Export.
        (expand_body): Kill.
        (expand_body): Kill.
2007-09-09  David Daney  
2007-09-09  David Daney  
        PR c++/33324
        PR c++/33324
        * init.c (build_new_1):  Use POINTER_PLUS_EXPR instead of MINUS_EXPR
        * init.c (build_new_1):  Use POINTER_PLUS_EXPR instead of MINUS_EXPR
        to calculate cookie_ptr.
        to calculate cookie_ptr.
2007-09-08  Jason Merrill  
2007-09-08  Jason Merrill  
        PR c++/33342
        PR c++/33342
        * pt.c (most_specialized_class): Set processing_template_decl
        * pt.c (most_specialized_class): Set processing_template_decl
        while tsubsting partial spec args.
        while tsubsting partial spec args.
2007-09-06  Jason Merrill  
2007-09-06  Jason Merrill  
        * decl2.c (get_guard): Copy visibility from the guarded variable.
        * decl2.c (get_guard): Copy visibility from the guarded variable.
2007-09-06  Jan Hubicka  
2007-09-06  Jan Hubicka  
        * semantics.c (expand_body): Do not mark arguments of clones used.
        * semantics.c (expand_body): Do not mark arguments of clones used.
2007-09-06  Paolo Carlini  
2007-09-06  Paolo Carlini  
        PR c++/32674
        PR c++/32674
        * decl.c (cp_finish_decl): When processing_template_decl,
        * decl.c (cp_finish_decl): When processing_template_decl,
        deal correctly with init as TREE_LIST.
        deal correctly with init as TREE_LIST.
2007-09-06  Tom Tromey  
2007-09-06  Tom Tromey  
        * decl.c (finish_function): Put return's location on line zero of
        * decl.c (finish_function): Put return's location on line zero of
        file.
        file.
2007-09-05  Jason Merrill  
2007-09-05  Jason Merrill  
        PR c++/15745
        PR c++/15745
        * except.c (prepare_eh_type): Use type_decays_to.
        * except.c (prepare_eh_type): Use type_decays_to.
        PR c++/15097
        PR c++/15097
        * init.c (build_delete): Use build_headof to get the address of the
        * init.c (build_delete): Use build_headof to get the address of the
        complete object if we aren't using the deleting destructor.
        complete object if we aren't using the deleting destructor.
        * rtti.c (build_headof): No longer static.
        * rtti.c (build_headof): No longer static.
        * cp-tree.h: Declare it.
        * cp-tree.h: Declare it.
2007-09-06  Jakub Jelinek  
2007-09-06  Jakub Jelinek  
        * decl.c (duplicate_decls): Set TREE_NOTHROW on __builtin_XX
        * decl.c (duplicate_decls): Set TREE_NOTHROW on __builtin_XX
        decl if a prototype for XX is provided with throw().
        decl if a prototype for XX is provided with throw().
        PR c++/33289
        PR c++/33289
        * decl.c (builtin_function_1): Set DECL_ANTICIPATED also
        * decl.c (builtin_function_1): Set DECL_ANTICIPATED also
        on __*_chk non-__builtin_* decls.
        on __*_chk non-__builtin_* decls.
2007-09-05  Paolo Carlini  
2007-09-05  Paolo Carlini  
        PR c++/30302
        PR c++/30302
        * semantics.c (finish_id_expression): Use context_for_name_lookup
        * semantics.c (finish_id_expression): Use context_for_name_lookup
        insted of DECL_CONTEXT, to see through anonymous structs and unions.
        insted of DECL_CONTEXT, to see through anonymous structs and unions.
        * class.c (finish_struct_anon): Deal correctly with anonymous
        * class.c (finish_struct_anon): Deal correctly with anonymous
        structs (vs unions, as GNU extension) in error messages.
        structs (vs unions, as GNU extension) in error messages.
2007-09-05  Jan Hubicka  
2007-09-05  Jan Hubicka  
        * sematics.c (expand_body): Remove unnecesary import_export_decl
        * sematics.c (expand_body): Remove unnecesary import_export_decl
        call, DECL_EXTERNAL checks and current_function_decl saving.
        call, DECL_EXTERNAL checks and current_function_decl saving.
2007-09-05  Paolo Carlini  
2007-09-05  Paolo Carlini  
        PR c++/29731 (again)
        PR c++/29731 (again)
        * parser.c (cp_parser_primary_expression): Return error_mark_node
        * parser.c (cp_parser_primary_expression): Return error_mark_node
        when a statement-expression is found in a template-argument list.
        when a statement-expression is found in a template-argument list.
2007-09-04  Jason Merrill  
2007-09-04  Jason Merrill  
        * except.c (initialize_handler_parm): Use
        * except.c (initialize_handler_parm): Use
        fold_build_cleanup_point_expr.
        fold_build_cleanup_point_expr.
        PR c++/31419
        PR c++/31419
        * call.c (reference_binding): Don't look for user-defined conversions
        * call.c (reference_binding): Don't look for user-defined conversions
        to the same type.
        to the same type.
        PR c++/31411
        PR c++/31411
        * except.c (initialize_handler_parm): Put a CLEANUP_POINT_EXPR inside
        * except.c (initialize_handler_parm): Put a CLEANUP_POINT_EXPR inside
        the MUST_NOT_THROW_EXPR.
        the MUST_NOT_THROW_EXPR.
2007-09-04  Richard Sandiford  
2007-09-04  Richard Sandiford  
        * decl.c (cp_finish_decl): Call determine_visibility before
        * decl.c (cp_finish_decl): Call determine_visibility before
        make_rtl_for_nonlocal_decl.
        make_rtl_for_nonlocal_decl.
2007-09-04  Jason Merrill  
2007-09-04  Jason Merrill  
        PR c++/14032
        PR c++/14032
        * pt.c (most_specialized_class): Substitute outer template
        * pt.c (most_specialized_class): Substitute outer template
        arguments into the arguments of a member template partial
        arguments into the arguments of a member template partial
        specialization.
        specialization.
        (strip_innermost_template_args): New fn.
        (strip_innermost_template_args): New fn.
2007-09-03  Daniel Jacobowitz  
2007-09-03  Daniel Jacobowitz  
        * Make-lang.in (g++spec.o): Remove SHLIB_MULTILIB.
        * Make-lang.in (g++spec.o): Remove SHLIB_MULTILIB.
2007-09-03  Kaveh R. Ghazi  
2007-09-03  Kaveh R. Ghazi  
        * call.c (name_as_c_string): Supply a TYPE for CONST_CAST.
        * call.c (name_as_c_string): Supply a TYPE for CONST_CAST.
        * decl.c (cp_make_fname_decl): Likewise,
        * decl.c (cp_make_fname_decl): Likewise,
        * parser.c (cp_parser_string_literal): Likewise,
        * parser.c (cp_parser_string_literal): Likewise,
        * tree.c (pod_type_p, zero_init_p): Use CONST_CAST_TREE.
        * tree.c (pod_type_p, zero_init_p): Use CONST_CAST_TREE.
        * typeck.c (cp_type_quals, cp_type_readonly, cp_has_mutable_p):
        * typeck.c (cp_type_quals, cp_type_readonly, cp_has_mutable_p):
        Likewise,
        Likewise,
2007-09-02  Paolo Carlini  
2007-09-02  Paolo Carlini  
        PR c++/33208
        PR c++/33208
        * typeck.c (build_unary_op): Fix error message for
        * typeck.c (build_unary_op): Fix error message for
        Boolean expression as operand to operator--.
        Boolean expression as operand to operator--.
2007-09-01  Kaveh R. Ghazi  
2007-09-01  Kaveh R. Ghazi  
        * tree.c (pod_type_p, zero_init_p): Use strip_array_types.
        * tree.c (pod_type_p, zero_init_p): Use strip_array_types.
        * typeck.c (cp_type_quals, cp_type_readonly, cp_has_mutable_p):
        * typeck.c (cp_type_quals, cp_type_readonly, cp_has_mutable_p):
        Likewise.
        Likewise.
2007-08-31 Douglas Gregor 
2007-08-31 Douglas Gregor 
        PR c++/32597
        PR c++/32597
        * init.c (build_default_init): Make extern.
        * init.c (build_default_init): Make extern.
        * cp-tree.h (build_default_init): Declare here.
        * cp-tree.h (build_default_init): Declare here.
        * pt.c (tsubst_expr): When the instantiation of the initializer of
        * pt.c (tsubst_expr): When the instantiation of the initializer of
        a variable results in an empty list, default-initialize the
        a variable results in an empty list, default-initialize the
        variable.
        variable.
        (tsubst_copy_and_build): When the instantiation of the initializer
        (tsubst_copy_and_build): When the instantiation of the initializer
        in a new expression results in an empty initializer list,
        in a new expression results in an empty initializer list,
        default-initialize it.
        default-initialize it.
2007-08-31  Douglas Gregor  
2007-08-31  Douglas Gregor  
        * mangle.c (write_type): Change mangling of rvalue reference from
        * mangle.c (write_type): Change mangling of rvalue reference from
        `RR' to `O'.
        `RR' to `O'.
2007-08-31  Jakub Jelinek  
2007-08-31  Jakub Jelinek  
        * decl.c (duplicate_decls): Remove duplicated line.
        * decl.c (duplicate_decls): Remove duplicated line.
2007-08-31  Paolo Carlini  
2007-08-31  Paolo Carlini  
        PR c++/33210
        PR c++/33210
        * cxx-pretty-print.c (pp_cxx_unqualified_id): Deal with
        * cxx-pretty-print.c (pp_cxx_unqualified_id): Deal with
        BOUND_TEMPLATE_TEMPLATE_PARM.
        BOUND_TEMPLATE_TEMPLATE_PARM.
2007-08-31  Paolo Carlini  
2007-08-31  Paolo Carlini  
        PR c++/32113
        PR c++/32113
        * search.c (lookup_member): Check the name argument for
        * search.c (lookup_member): Check the name argument for
        error_mark_node.
        error_mark_node.
2007-08-31  Paolo Carlini  
2007-08-31  Paolo Carlini  
        PR c++/33212
        PR c++/33212
        * parser.c (cp_parser_trait_expr): Check rerurn value of
        * parser.c (cp_parser_trait_expr): Check rerurn value of
        cp_parser_type_id.
        cp_parser_type_id.
2007-08-30  Ollie Wild  
2007-08-30  Ollie Wild  
        * cvt.c (cp_convert_to_pointer): Remove force parameter. Call
        * cvt.c (cp_convert_to_pointer): Remove force parameter. Call
        convert_ptrmem for pointer to member conversions.
        convert_ptrmem for pointer to member conversions.
        (convert_to_pointer_force): Update cp_convert_to_pointer call.
        (convert_to_pointer_force): Update cp_convert_to_pointer call.
        (ocp_convert): Update cp_convert_to_pointer call.
        (ocp_convert): Update cp_convert_to_pointer call.
        * typeck.c (convert_ptrmem): Add conditional for null pointers to
        * typeck.c (convert_ptrmem): Add conditional for null pointers to
        members.
        members.
        (build_static_cast_1): Check can_convert for conversions in either
        (build_static_cast_1): Check can_convert for conversions in either
        direction.
        direction.
        (get_delta_difference_1): New function.
        (get_delta_difference_1): New function.
        (get_delta_difference): Refactor to call get_delta_difference_1.
        (get_delta_difference): Refactor to call get_delta_difference_1.
2007-08-30  Jakub Jelinek  
2007-08-30  Jakub Jelinek  
        * decl.c (start_preparsed_function): Set
        * decl.c (start_preparsed_function): Set
        DECL_DISREGARD_INLINE_LIMITS for GNU_INLINE_P functions.
        DECL_DISREGARD_INLINE_LIMITS for GNU_INLINE_P functions.
2007-08-28  Paolo Carlini  
2007-08-28  Paolo Carlini  
        PR c++/33209
        PR c++/33209
        * error.c (dump_expr): Deal with TEMPLATE_TYPE_PARM and
        * error.c (dump_expr): Deal with TEMPLATE_TYPE_PARM and
        BOUND_TEMPLATE_TEMPLATE_PARM.
        BOUND_TEMPLATE_TEMPLATE_PARM.
2007-08-28  Jakub Jelinek  
2007-08-28  Jakub Jelinek  
        PR c++/32596
        PR c++/32596
        PR c++/32400
        PR c++/32400
        * pt.c (check_explicit_specialization): Set DECL_INTERFACE_KNOWN
        * pt.c (check_explicit_specialization): Set DECL_INTERFACE_KNOWN
        and DECL_NOT_REALLY_EXTERN if tmpl_func is not public.
        and DECL_NOT_REALLY_EXTERN if tmpl_func is not public.
2007-08-27  Jason Merrill  
2007-08-27  Jason Merrill  
        PR c++/29000
        PR c++/29000
        * pt.c (build_non_dependent_expr, type_dependent_expression_p):
        * pt.c (build_non_dependent_expr, type_dependent_expression_p):
        Look inside STMT_EXPR.
        Look inside STMT_EXPR.
        * semantics.c (stmt_expr_value_expr): New fn.
        * semantics.c (stmt_expr_value_expr): New fn.
        * cp-tree.h: Declare it.
        * cp-tree.h: Declare it.
        PR c++/28558
        PR c++/28558
        * decl.c (groktypename): Ignore attributes applied to class type.
        * decl.c (groktypename): Ignore attributes applied to class type.
2007-08-28  Richard Guenther  
2007-08-28  Richard Guenther  
        * decl.c (duplicate_decls): Merge DECL_DISREGARD_INLINE_LIMITS.
        * decl.c (duplicate_decls): Merge DECL_DISREGARD_INLINE_LIMITS.
2007-08-28  Gabriel Dos Reis  
2007-08-28  Gabriel Dos Reis  
        * error.c (dump_expr): Handle COMPLEX_CST.
        * error.c (dump_expr): Handle COMPLEX_CST.
        * cxx-pretty-print.c (pp_cxx_primary_expression): Likewise.
        * cxx-pretty-print.c (pp_cxx_primary_expression): Likewise.
        (pp_cxx_expression): Likewise.
        (pp_cxx_expression): Likewise.
2007-08-27  Alexandre Oliva  
2007-08-27  Alexandre Oliva  
        * decl.c (GNU_INLINE_P): New.
        * decl.c (GNU_INLINE_P): New.
        (duplicate_decls): Handle gnu_inline.  Merge attributes and
        (duplicate_decls): Handle gnu_inline.  Merge attributes and
        some flags in overriding definitions.
        some flags in overriding definitions.
        (redeclaration_error_message): Handle gnu_inline.
        (redeclaration_error_message): Handle gnu_inline.
        (start_preparsed_function): Likewise.
        (start_preparsed_function): Likewise.
2007-08-25  Kaveh R. Ghazi  
2007-08-25  Kaveh R. Ghazi  
        * call.c (sufficient_parms_p): Constify.
        * call.c (sufficient_parms_p): Constify.
        * class.c (same_signature_p): Likewise.
        * class.c (same_signature_p): Likewise.
        * cp-gimplify.c (is_invisiref_parm,
        * cp-gimplify.c (is_invisiref_parm,
        cxx_omp_privatize_by_reference): Likewise.
        cxx_omp_privatize_by_reference): Likewise.
        * cp-objcp-common.c (has_c_linkage): Likewise.
        * cp-objcp-common.c (has_c_linkage): Likewise.
        * cp-tree.h (NON_THUNK_FUNCTION_CHECK, THUNK_FUNCTION_CHECK,
        * cp-tree.h (NON_THUNK_FUNCTION_CHECK, THUNK_FUNCTION_CHECK,
        sufficient_parms_p, same_signature_p, copy_fn_p, move_fn_p,
        sufficient_parms_p, same_signature_p, copy_fn_p, move_fn_p,
        grok_ctor_properties, nothrow_libfn_p, skip_artificial_parms_for,
        grok_ctor_properties, nothrow_libfn_p, skip_artificial_parms_for,
        num_artificial_parms_for, comp_template_parms,
        num_artificial_parms_for, comp_template_parms,
        template_parameter_pack_p, any_dependent_template_arguments_p,
        template_parameter_pack_p, any_dependent_template_arguments_p,
        any_type_dependent_arguments_p, any_value_dependent_elements_p,
        any_type_dependent_arguments_p, any_value_dependent_elements_p,
        repo_export_class_p, cxx_omp_privatize_by_reference, pod_type_p,
        repo_export_class_p, cxx_omp_privatize_by_reference, pod_type_p,
        zero_init_p, member_p, cp_lvalue_kind,
        zero_init_p, member_p, cp_lvalue_kind,
        builtin_valid_in_constant_expr_p, decl_anon_ns_mem_p,
        builtin_valid_in_constant_expr_p, decl_anon_ns_mem_p,
        varargs_function_p, is_dummy_object, special_function_kind,
        varargs_function_p, is_dummy_object, special_function_kind,
        string_conv_p, type_unknown_p, comp_except_specs, compparms,
        string_conv_p, type_unknown_p, comp_except_specs, compparms,
        comp_cv_qualification, is_bitfield_expr_with_lowered_type,
        comp_cv_qualification, is_bitfield_expr_with_lowered_type,
        unlowered_expr_type, ptr_reasonably_similar, cp_type_readonly,
        unlowered_expr_type, ptr_reasonably_similar, cp_type_readonly,
        cp_has_mutable_p, at_least_as_qualified_p,
        cp_has_mutable_p, at_least_as_qualified_p,
        invalid_nonstatic_memfn_p, lvalue_or_else, lvalue_p): Likewise.
        invalid_nonstatic_memfn_p, lvalue_or_else, lvalue_p): Likewise.
        * decl.c (copy_fn_p, move_fn_p, grok_ctor_properties): Likewise.
        * decl.c (copy_fn_p, move_fn_p, grok_ctor_properties): Likewise.
        * except.c (nothrow_libfn_p): Likewise.
        * except.c (nothrow_libfn_p): Likewise.
        * method.c (skip_artificial_parms_for, num_artificial_parms_for):
        * method.c (skip_artificial_parms_for, num_artificial_parms_for):
        Likewise.
        Likewise.
        * pt.c (comp_template_parms, template_parameter_pack_p,
        * pt.c (comp_template_parms, template_parameter_pack_p,
        any_type_dependent_arguments_p, any_value_dependent_elements_p,
        any_type_dependent_arguments_p, any_value_dependent_elements_p,
        any_dependent_template_arguments_p): Likewise.
        any_dependent_template_arguments_p): Likewise.
        * repo.c (repo_export_class_p): Likewise.
        * repo.c (repo_export_class_p): Likewise.
        * semantics.c (anon_aggr_type_p): Likewise.
        * semantics.c (anon_aggr_type_p): Likewise.
        * tree.c (lvalue_p_1, real_lvalue_p, lvalue_p,
        * tree.c (lvalue_p_1, real_lvalue_p, lvalue_p,
        builtin_valid_in_constant_expr_p, decl_anon_ns_mem_p,
        builtin_valid_in_constant_expr_p, decl_anon_ns_mem_p,
        varargs_function_p, member_p, is_dummy_object, pod_type_p,
        varargs_function_p, member_p, is_dummy_object, pod_type_p,
        zero_init_p, special_function_p): Likewise.
        zero_init_p, special_function_p): Likewise.
        * typeck.c (comp_array_types, type_unknown_p, comp_except_specs,
        * typeck.c (comp_array_types, type_unknown_p, comp_except_specs,
        comp_array_types, at_least_as_qualified_p, comp_cv_qualification,
        comp_array_types, at_least_as_qualified_p, comp_cv_qualification,
        compparms, invalid_nonstatic_memfn_p,
        compparms, invalid_nonstatic_memfn_p,
        is_bitfield_expr_with_lowered_type, unlowered_expr_type,
        is_bitfield_expr_with_lowered_type, unlowered_expr_type,
        string_conv_p, ptr_reasonably_similar, cp_type_readonly,
        string_conv_p, ptr_reasonably_similar, cp_type_readonly,
        cp_has_mutable_p, lvalue_or_else): Likewise.
        cp_has_mutable_p, lvalue_or_else): Likewise.
2007-08-25  Paolo Bonzini  
2007-08-25  Paolo Bonzini  
        * decl.c (cp_tree_node_structure): Kill TINST_LEVEL case.
        * decl.c (cp_tree_node_structure): Kill TINST_LEVEL case.
        * cp-objcp-common.c (cp_tree_size): Ditto.
        * cp-objcp-common.c (cp_tree_size): Ditto.
        * tree.c (cp_walk_subtrees): Ditto
        * tree.c (cp_walk_subtrees): Ditto
        * cp-tree.def (TINST_LEVEL): Go away.
        * cp-tree.def (TINST_LEVEL): Go away.
        * cp-tree.h (struct tinst_level_s): Rename to struct tinst_level,
        * cp-tree.h (struct tinst_level_s): Rename to struct tinst_level,
        move together with other non-tree structs.
        move together with other non-tree structs.
        (enum cp_tree_node_structure_enum): Nuke TS_CP_TINST_LEVEL.
        (enum cp_tree_node_structure_enum): Nuke TS_CP_TINST_LEVEL.
        (union lang_tree_node): Eliminate tinst_level field.
        (union lang_tree_node): Eliminate tinst_level field.
        (TINST_DECL, TINST_LOCATION, TINST_IN_SYSTEM_HEADER_P): Annihilate.
        (TINST_DECL, TINST_LOCATION, TINST_IN_SYSTEM_HEADER_P): Annihilate.
        (current_instantiation, outermost_tinst_level): Return
        (current_instantiation, outermost_tinst_level): Return
        a "struct tinst_level *".
        a "struct tinst_level *".
        * error.c (print_instantiation_partial_context): Change second
        * error.c (print_instantiation_partial_context): Change second
        parameter to a "struct tinst_level *".  Replace accessor macros
        parameter to a "struct tinst_level *".  Replace accessor macros
        with field access.
        with field access.
        (print_instantiation_full_context): Likewise.
        (print_instantiation_full_context): Likewise.
        * lex.c (in_main_input_context): Likewise.
        * lex.c (in_main_input_context): Likewise.
        * pt.c (struct pending_templates): New.
        * pt.c (struct pending_templates): New.
        (pending_templates, last_pending_template): Use it as a type.
        (pending_templates, last_pending_template): Use it as a type.
        (current_tinst_level): Change typo to "struct tinst_level *"
        (current_tinst_level): Change typo to "struct tinst_level *"
        (reopen_tinst_level): Accept "struct tinst_level *", return decl.
        (reopen_tinst_level): Accept "struct tinst_level *", return decl.
        (add_pending_template): Construct a "struct pending_template".
        (add_pending_template): Construct a "struct pending_template".
        Replace TINST_LEVEL accessor macros with field access.
        Replace TINST_LEVEL accessor macros with field access.
        (push_tinst_level): Likewise, using GGC_NEW instead of make_node.
        (push_tinst_level): Likewise, using GGC_NEW instead of make_node.
        (pop_tinst_level): Likewise.
        (pop_tinst_level): Likewise.
        (instantiate_pending_templates): Likewise.  Factor common code used
        (instantiate_pending_templates): Likewise.  Factor common code used
        when an instantiation has been done.
        when an instantiation has been done.
        (outermost_tinst_level): Replace tree_last with loop.
        (outermost_tinst_level): Replace tree_last with loop.
        (current_instantiation): Return a "struct tinst_level *".
        (current_instantiation): Return a "struct tinst_level *".
2007-08-24  Ollie Wild  
2007-08-24  Ollie Wild  
        * name-lookup.c (add_decl_to_level): Remove addition to vtables chain.
        * name-lookup.c (add_decl_to_level): Remove addition to vtables chain.
        * name-lookup.h (cp_binding_level): Remove vtables member.
        * name-lookup.h (cp_binding_level): Remove vtables member.
2007-08-24  Richard Guenther  
2007-08-24  Richard Guenther  
        * tree.c (cp_cannot_inline_tree_fn): Remove.
        * tree.c (cp_cannot_inline_tree_fn): Remove.
        * cp-tree.h (cp_cannot_inline_tree_fn): Likewise.
        * cp-tree.h (cp_cannot_inline_tree_fn): Likewise.
        * cp-objcp-common.h (LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN):
        * cp-objcp-common.h (LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN):
        Remove define.
        Remove define.
2007-08-24  Jakub Jelinek  
2007-08-24  Jakub Jelinek  
        PR c++/32567
        PR c++/32567
        * typeck.c (build_unary_op) : Return
        * typeck.c (build_unary_op) : Return
        error_mark_node right away if build_expr_type_conversion
        error_mark_node right away if build_expr_type_conversion
        returned it.
        returned it.
        PR c++/32898
        PR c++/32898
        * name-lookup.c (set_decl_namespace): lookup_qualified_name failure
        * name-lookup.c (set_decl_namespace): lookup_qualified_name failure
        is error_mark_node rather than NULL_TREE.
        is error_mark_node rather than NULL_TREE.
        * pt.c (check_explicit_specialization): Likewise.
        * pt.c (check_explicit_specialization): Likewise.
        PR c++/31941
        PR c++/31941
        * error.c (resolve_virtual_fun_from_obj_type_ref): Handle
        * error.c (resolve_virtual_fun_from_obj_type_ref): Handle
        TARGET_VTABLE_USES_DESCRIPTORS targets properly.
        TARGET_VTABLE_USES_DESCRIPTORS targets properly.
2007-08-22  Jason Merrill  
2007-08-22  Jason Merrill  
        PR c++/29365
        PR c++/29365
        * pt.c (outermost_tinst_level): New function.
        * pt.c (outermost_tinst_level): New function.
        * lex.c (in_main_input_context): New function.
        * lex.c (in_main_input_context): New function.
        * cp-tree.h: Declare it.
        * cp-tree.h: Declare it.
        * decl2.c (constrain_class_visibility): Use it to avoid warning
        * decl2.c (constrain_class_visibility): Use it to avoid warning
        about uses of the anonymous namespace in the main input file.
        about uses of the anonymous namespace in the main input file.
2007-08-21  Jakub Jelinek  
2007-08-21  Jakub Jelinek  
        * init.c (build_new_1): Use get_target_expr instead of save_expr.
        * init.c (build_new_1): Use get_target_expr instead of save_expr.
2007-08-20  Pawel Sikora  
2007-08-20  Pawel Sikora  
        PR c++/7302
        PR c++/7302
        * class.c (finish_struct_1): Warn when a class has virtual
        * class.c (finish_struct_1): Warn when a class has virtual
        functions and accessible non-virtual destructor.
        functions and accessible non-virtual destructor.
2007-08-20  Richard Guenther  
2007-08-20  Richard Guenther  
        PR c++/22369
        PR c++/22369
        PR c++/22451
        PR c++/22451
        * call.c (build_new_method_call): Convert initializer to
        * call.c (build_new_method_call): Convert initializer to
        the basetype.
        the basetype.
        * init.c (build_aggr_init): Do not fiddle with types.
        * init.c (build_aggr_init): Do not fiddle with types.
        (build_vec_delete_1): Use correct type for POINTER_PLUS_EXPR.
        (build_vec_delete_1): Use correct type for POINTER_PLUS_EXPR.
        * except.c (build_throw): Do not drop qualifiers for the
        * except.c (build_throw): Do not drop qualifiers for the
        pointer type.
        pointer type.
        * typeck.c (get_member_function_from_ptrfunc): Do not
        * typeck.c (get_member_function_from_ptrfunc): Do not
        fiddle with types, instead convert.
        fiddle with types, instead convert.
        (build_ptrmemfunc1): Convert to the target type for
        (build_ptrmemfunc1): Convert to the target type for
        initialization.
        initialization.
        (gfc_trans_allocate): Convert result to target type.
        (gfc_trans_allocate): Convert result to target type.
        * cp-objcp-common.c (cxx_get_alias_set): Pointers to
        * cp-objcp-common.c (cxx_get_alias_set): Pointers to
        pointer-to-member structures shall have alias set zero as well.
        pointer-to-member structures shall have alias set zero as well.
2007-08-20  Richard Guenther  
2007-08-20  Richard Guenther  
        * cp-objcp-common.h (LANG_HOOKS_TREE_INLINING_AUTO_VAR_IN_FN_P):
        * cp-objcp-common.h (LANG_HOOKS_TREE_INLINING_AUTO_VAR_IN_FN_P):
        Remove.
        Remove.
        * cp-tree.h (cp_auto_var_in_fn_p): Remove.
        * cp-tree.h (cp_auto_var_in_fn_p): Remove.
        (nonstatic_local_decl_p): Likewise.
        (nonstatic_local_decl_p): Likewise.
        * tree.c (cp_auto_var_in_fn_p): Remove.
        * tree.c (cp_auto_var_in_fn_p): Remove.
        * decl.c (nonstatic_local_decl_p): Remove.
        * decl.c (nonstatic_local_decl_p): Remove.
2007-08-20  Richard Guenther  
2007-08-20  Richard Guenther  
        * cp-objcp-common.h (LANG_HOOKS_TREE_INLINING_WALK_SUBTREES):
        * cp-objcp-common.h (LANG_HOOKS_TREE_INLINING_WALK_SUBTREES):
        Remove define.
        Remove define.
        * tree.h (cp_walk_tree): New define to walk_tree_1 with
        * tree.h (cp_walk_tree): New define to walk_tree_1 with
        cp_walk_subtrees lh parameter.
        cp_walk_subtrees lh parameter.
        (cp_walk_tree_without_duplicates): New define to
        (cp_walk_tree_without_duplicates): New define to
        walk_tree_without_duplicates_1 with cp_walk_subtrees lh parameter.
        walk_tree_without_duplicates_1 with cp_walk_subtrees lh parameter.
        * tree.c (count_trees): Call
        * tree.c (count_trees): Call
        cp_walk_tree_without_duplicates.
        cp_walk_tree_without_duplicates.
        (verify_stmt_tree): Call cp_walk_tree.
        (verify_stmt_tree): Call cp_walk_tree.
        (break_out_target_exprs): Likewise.
        (break_out_target_exprs): Likewise.
        (WALK_SUBTREE): Likewise.
        (WALK_SUBTREE): Likewise.
        * cp-gimplify.c (cp_genericize): Likewise.
        * cp-gimplify.c (cp_genericize): Likewise.
        * cp-pt.c (find_parameter_packs_r): Likewise.
        * cp-pt.c (find_parameter_packs_r): Likewise.
        (uses_parameter_packs): Likewise.
        (uses_parameter_packs): Likewise.
        (make_pack_expansion): Likewise.
        (make_pack_expansion): Likewise.
        (check_for_bare_parameter_packs): Likewise.
        (check_for_bare_parameter_packs): Likewise.
        (for_each_template_parm): Likewise.
        (for_each_template_parm): Likewise.
        * decl.c (check_default_argument): Call
        * decl.c (check_default_argument): Call
        cp_walk_tree_without_duplicates.
        cp_walk_tree_without_duplicates.
        * except.c (build_throw): Likewise.
        * except.c (build_throw): Likewise.
        * decl2.c (type_visibility): Likewise.
        * decl2.c (type_visibility): Likewise.
        * semantics.c (expand_or_defer_fn): Likewise.
        * semantics.c (expand_or_defer_fn): Likewise.
        (finalize_nrv): Call cp_walk_tree.
        (finalize_nrv): Call cp_walk_tree.
2007-08-20  Jakub Jelinek  
2007-08-20  Jakub Jelinek  
        PR c++/33025
        PR c++/33025
        * init.c (build_new_1): Rename placement_var variable to placement_expr.
        * init.c (build_new_1): Rename placement_var variable to placement_expr.
        Initialize it with save_expr rather than get_temp_regvar.
        Initialize it with save_expr rather than get_temp_regvar.
2007-08-17  Andrew Pinski  
2007-08-17  Andrew Pinski  
        PR c++/28989
        PR c++/28989
        * tree.c (lvalue_p_1 ): SAVE_EXPRs are never
        * tree.c (lvalue_p_1 ): SAVE_EXPRs are never
        lvalues.
        lvalues.
2007-08-17  Ollie Wild  
2007-08-17  Ollie Wild  
        PR c++/31749
        PR c++/31749
        * name-lookup.c (do_nonmember_using_decl): Shift implicit type
        * name-lookup.c (do_nonmember_using_decl): Shift implicit type
        declarations into appropriate slots for comparison.  Fix type
        declarations into appropriate slots for comparison.  Fix type
        comparison.
        comparison.
2007-08-17  Paolo Carlini  
2007-08-17  Paolo Carlini  
        PR c++/32112
        PR c++/32112
        * error.c (dump_decl): Deal with UNBOUND_CLASS_TEMPLATE.
        * error.c (dump_decl): Deal with UNBOUND_CLASS_TEMPLATE.
        * cxx-pretty-print.c (pp_cxx_unqualified_id): Likewise.
        * cxx-pretty-print.c (pp_cxx_unqualified_id): Likewise.
2007-08-17  Paolo Carlini  
2007-08-17  Paolo Carlini  
        PR c++/32870
        PR c++/32870
        * parser.c (cp_parser_class_head): Improve error message.
        * parser.c (cp_parser_class_head): Improve error message.
2007-08-16  Seongbae Park  
2007-08-16  Seongbae Park  
        * pt.c (instantiate_decl): Set input_location
        * pt.c (instantiate_decl): Set input_location
        for the function end.
        for the function end.
2007-08-16  Kaveh R. Ghazi  
2007-08-16  Kaveh R. Ghazi  
        * cp-objcp-common.c (cxx_warn_unused_global_decl, cp_expr_size):
        * cp-objcp-common.c (cxx_warn_unused_global_decl, cp_expr_size):
        Constify.
        Constify.
        * cp-tree.h (local_variable_p, nonstatic_local_decl_p,
        * cp-tree.h (local_variable_p, nonstatic_local_decl_p,
        class_tmpl_impl_spec_p, cp_auto_var_in_fn_p, cp_type_quals,
        class_tmpl_impl_spec_p, cp_auto_var_in_fn_p, cp_type_quals,
        cxx_incomplete_type_diagnostic, cxx_incomplete_type_error,
        cxx_incomplete_type_diagnostic, cxx_incomplete_type_error,
        cxx_warn_unused_global_decl, cp_expr_size): Likewise.
        cxx_warn_unused_global_decl, cp_expr_size): Likewise.
        * decl.c (local_variable_p, nonstatic_local_decl_p): Likewise.
        * decl.c (local_variable_p, nonstatic_local_decl_p): Likewise.
        * tree.c (class_tmpl_impl_spec_p, cp_auto_var_in_fn_p): Likewise.
        * tree.c (class_tmpl_impl_spec_p, cp_auto_var_in_fn_p): Likewise.
        * typeck.c (cp_type_quals): Likewise.
        * typeck.c (cp_type_quals): Likewise.
        * typeck2.c (cxx_incomplete_type_diagnostic,
        * typeck2.c (cxx_incomplete_type_diagnostic,
        cxx_incomplete_type_error): Likewise.
        cxx_incomplete_type_error): Likewise.
2007-08-16  Paolo Carlini  
2007-08-16  Paolo Carlini  
        PR c++/31132
        PR c++/31132
        * pt.c (tsubst_friend_function): When check_classfn
        * pt.c (tsubst_friend_function): When check_classfn
        returns error_mark_node likewise return it.
        returns error_mark_node likewise return it.
2007-08-15  Jakub Jelinek  
2007-08-15  Jakub Jelinek  
        PR c++/32992
        PR c++/32992
        * typeck.c (check_return_expr): Don't NRV optimize vars in
        * typeck.c (check_return_expr): Don't NRV optimize vars in
        anonymous unions.
        anonymous unions.
        * decl.c (finish_function): Comment fix.
        * decl.c (finish_function): Comment fix.
2007-08-15  Paolo Carlini  
2007-08-15  Paolo Carlini  
        PR c++/33035
        PR c++/33035
        * pt.c (push_template_decl_real): Depending on TYPE_P
        * pt.c (push_template_decl_real): Depending on TYPE_P
        use either TYPE_CONTEXT or DECL_CONTEXT.
        use either TYPE_CONTEXT or DECL_CONTEXT.
2007-08-14  Mark Mitchell  
2007-08-14  Mark Mitchell  
        * semantics.c (finish_omp_clauses): Strip a NOP_EXPR if
        * semantics.c (finish_omp_clauses): Strip a NOP_EXPR if
        constructors and destructors return this.
        constructors and destructors return this.
2007-08-14  Paolo Carlini  
2007-08-14  Paolo Carlini  
        PR c++/27211
        PR c++/27211
        * decl2.c (check_classfn): Return error_mark_node in case of error;
        * decl2.c (check_classfn): Return error_mark_node in case of error;
        in that case, do not call add_method.
        in that case, do not call add_method.
        * decl.c (start_decl): Deal with check_classfn returning
        * decl.c (start_decl): Deal with check_classfn returning
        error_mark_node.
        error_mark_node.
        (grokfndecl): Likewise.
        (grokfndecl): Likewise.
        * pt.c (tsubst_friend_function): Likewise.
        * pt.c (tsubst_friend_function): Likewise.
2007-08-14  Andrew Pinski  
2007-08-14  Andrew Pinski  
        PR c++/30428
        PR c++/30428
        * typeck.c (build_binary_op): Disallow vector float types with
        * typeck.c (build_binary_op): Disallow vector float types with
        BIT_IOR_EXPR, BIT_AND_EXPR, and BIT_XOR_EXPR.
        BIT_IOR_EXPR, BIT_AND_EXPR, and BIT_XOR_EXPR.
2007-08-11  Ian Lance Taylor  
2007-08-11  Ian Lance Taylor  
        * cp-objcp-common.c (cxx_get_alias_set): Change return type to
        * cp-objcp-common.c (cxx_get_alias_set): Change return type to
        alias_set_type.
        alias_set_type.
        * cp-tree.h (cxx_get_alias_set): Update declaration.
        * cp-tree.h (cxx_get_alias_set): Update declaration.
2007-08-10  Ollie Wild  
2007-08-10  Ollie Wild  
        * name-lookup.c (do_nonmember_using_decl): Print an error for ambiguous
        * name-lookup.c (do_nonmember_using_decl): Print an error for ambiguous
        type lookups.
        type lookups.
        (ambiguous_decl): Construct tree of ambiguous types.  Remove extaneous
        (ambiguous_decl): Construct tree of ambiguous types.  Remove extaneous
        function parameter.
        function parameter.
        (unqualified_namespace_lookup): Fix ambiguous_decl call.
        (unqualified_namespace_lookup): Fix ambiguous_decl call.
        (lookup_using_namespace): Fix ambiguous_decl call.
        (lookup_using_namespace): Fix ambiguous_decl call.
        (qualified_lookup_using_namespace): Fix ambiguous_decl call.
        (qualified_lookup_using_namespace): Fix ambiguous_decl call.
2007-08-10  Kaveh R. Ghazi  
2007-08-10  Kaveh R. Ghazi  
        * call.c (name_as_c_string): Use CONST_CAST.
        * call.c (name_as_c_string): Use CONST_CAST.
        * decl.c (build_decl): Likewise.
        * decl.c (build_decl): Likewise.
        * parser.c (cp_parser_string_literal): Likewise.
        * parser.c (cp_parser_string_literal): Likewise.
2007-08-10  Paolo Carlini  
2007-08-10  Paolo Carlini  
        PR c++/17763
        PR c++/17763
        * error.c (dump_expr): Consistently use the *_cxx_*
        * error.c (dump_expr): Consistently use the *_cxx_*
        variants of the pretty-print functions.
        variants of the pretty-print functions.
2007-08-10  Paolo Carlini  
2007-08-10  Paolo Carlini  
        PR c++/22256
        PR c++/22256
        * decl.c (check_special_function_return_type): Just error
        * decl.c (check_special_function_return_type): Just error
        on return type specified for conversion operator.
        on return type specified for conversion operator.
2007-08-09  Daniel Berlin  
2007-08-09  Daniel Berlin  
        * typeck2.c (readonly_error): Handle general expressions.
        * typeck2.c (readonly_error): Handle general expressions.
        * error.c (dump_expr): Handle POINTER_PLUS_EXPR
        * error.c (dump_expr): Handle POINTER_PLUS_EXPR
2007-08-06  Dan Hipschman  
2007-08-06  Dan Hipschman  
        * method.c (use_thunk): Use DECL_NAME instead of DECL_RTL to
        * method.c (use_thunk): Use DECL_NAME instead of DECL_RTL to
        access function name.
        access function name.
2007-08-04  Alfred Minarik  
2007-08-04  Alfred Minarik  
        PR pch/13676
        PR pch/13676
        * lang-specs.h: Add .hp, .hxx, .hpp, .h, .HPP, .tcc as c++ header.
        * lang-specs.h: Add .hp, .hxx, .hpp, .h, .HPP, .tcc as c++ header.
        * g++spec.c (lang_specific_driver): Check them.
        * g++spec.c (lang_specific_driver): Check them.
2007-08-06  Paolo Carlini  
2007-08-06  Paolo Carlini  
        PR c++/19532
        PR c++/19532
        * pt.c (inline_needs_template_parms): Fix comment; change return type
        * pt.c (inline_needs_template_parms): Fix comment; change return type
        to bool.
        to bool.
2007-08-05  Volker Reichelt  
2007-08-05  Volker Reichelt  
        Revert:
        Revert:
        2007-03-26  Dirk Mueller  
        2007-03-26  Dirk Mueller  
        * parser.c (cp_parser_member_declaration): Pedwarn
        * parser.c (cp_parser_member_declaration): Pedwarn
        about stray semicolons after member declarations.
        about stray semicolons after member declarations.
2007-08-02  Lee Millward  
2007-08-02  Lee Millward  
        PR c++/30849
        PR c++/30849
        PR c++/30850
        PR c++/30850
        PR c++/30851
        PR c++/30851
        * parser.c (cp_parser_asm_definition): Detect and discard asm
        * parser.c (cp_parser_asm_definition): Detect and discard asm
        statements with invalid inputs or outputs.
        statements with invalid inputs or outputs.
         (cp_parser_asm_operand_list): Return error mark node if any
         (cp_parser_asm_operand_list): Return error mark node if any
         of the operands are invalid. Adjust documentation.
         of the operands are invalid. Adjust documentation.
2007-08-02  Nick Clifton  
2007-08-02  Nick Clifton  
        * typeck.c: Change copyright header to refer to version 3 of the
        * typeck.c: Change copyright header to refer to version 3 of the
        GNU General Public License and to point readers at the COPYING3
        GNU General Public License and to point readers at the COPYING3
        file and the FSF's license web page.
        file and the FSF's license web page.
        * optimize.c, lang-specs.h, init.c, class.c, repo.c, decl.c,
        * optimize.c, lang-specs.h, init.c, class.c, repo.c, decl.c,
        config-lang.in, cp-tree.def, call.c, decl.h, ptree.c,
        config-lang.in, cp-tree.def, call.c, decl.h, ptree.c,
        Make-lang.in, method.c, rtti.c, cp-objcp-common.c, g++spec.c,
        Make-lang.in, method.c, rtti.c, cp-objcp-common.c, g++spec.c,
        cp-objcp-common.h, except.c, error.c, operators.def, cvt.c,
        cp-objcp-common.h, except.c, error.c, operators.def, cvt.c,
        tree.c, mangle.c, cp-tree.h, dump.c, search.c, friend.c, expr.c,
        tree.c, mangle.c, cp-tree.h, dump.c, search.c, friend.c, expr.c,
        cp-gimplify.c, cxx-pretty-print.c, cp-lang.c, typeck2.c, pt.c,
        cp-gimplify.c, cxx-pretty-print.c, cp-lang.c, typeck2.c, pt.c,
        cxx-pretty-print.h, semantics.c, name-lookup.c, lex.c, decl2.c,
        cxx-pretty-print.h, semantics.c, name-lookup.c, lex.c, decl2.c,
        name-lookup.h, parser.c: Likewise.
        name-lookup.h, parser.c: Likewise.
2007-08-01  Kaveh R. Ghazi  
2007-08-01  Kaveh R. Ghazi  
        PR middle-end/32668
        PR middle-end/32668
        * call.c (magic_varargs_p): Honor the "type generic" attribute.
        * call.c (magic_varargs_p): Honor the "type generic" attribute.
2007-07-30  Paolo Carlini  
2007-07-30  Paolo Carlini  
        PR c++/32108
        PR c++/32108
        * semantics.c (finish_label_stmt): Reject the __label__
        * semantics.c (finish_label_stmt): Reject the __label__
        extension outside function scopes.
        extension outside function scopes.
2007-07-29  Kaveh R. Ghazi  
2007-07-29  Kaveh R. Ghazi  
        * parser.c (eof_token): Un-constify.
        * parser.c (eof_token): Un-constify.
        (cp_lexer_new_main, cp_lexer_new_from_tokens, VEC_alloc,
        (cp_lexer_new_main, cp_lexer_new_from_tokens, VEC_alloc,
        cp_lexer_consume_token, cp_lexer_purge_token): Remove spurious
        cp_lexer_consume_token, cp_lexer_purge_token): Remove spurious
        casts.
        casts.
2007-07-28  Kazu Hirata  
2007-07-28  Kazu Hirata  
        * pt.c, tree.c, typeck2.c: Fix comment typos.
        * pt.c, tree.c, typeck2.c: Fix comment typos.
2007-07-28  Simon Martin  
2007-07-28  Simon Martin  
            Mark Mitchell  
            Mark Mitchell  
        PR c++/30917
        PR c++/30917
        * name-lookup.c (lookup_name_real): Non namespace-scope bindings can be
        * name-lookup.c (lookup_name_real): Non namespace-scope bindings can be
        hidden due to friend declarations in local classes.
        hidden due to friend declarations in local classes.
2007-07-27  Douglas Gregor  
2007-07-27  Douglas Gregor  
        * typeck.c (structural_comptypes): Compare DECLTYPE_TYPE nodes.
        * typeck.c (structural_comptypes): Compare DECLTYPE_TYPE nodes.
        * cp-tree.def (DECLTYPE_TYPE): New.
        * cp-tree.def (DECLTYPE_TYPE): New.
        * error.c (dump_type): Dump DECLTYPE_TYPE nodes.
        * error.c (dump_type): Dump DECLTYPE_TYPE nodes.
        (dump_type_prefix): Ditto.
        (dump_type_prefix): Ditto.
        (dump_type_suffix): Ditto.
        (dump_type_suffix): Ditto.
        * tree.c (DECLTYPE_TYPE): Walk DECLTYPE_TYPE nodes.
        * tree.c (DECLTYPE_TYPE): Walk DECLTYPE_TYPE nodes.
        * mangle.c (write_type): Handle DECLTYPE_TYPE.
        * mangle.c (write_type): Handle DECLTYPE_TYPE.
        * cp-tree.h (IS_AGGR_TYPE): DECLTYPE_TYPE nodes can be aggregate
        * cp-tree.h (IS_AGGR_TYPE): DECLTYPE_TYPE nodes can be aggregate
        types.
        types.
        (DECLTYPE_TYPE_EXPR): New.
        (DECLTYPE_TYPE_EXPR): New.
        (DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P): New.
        (DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P): New.
        (finish_declared_type): Declare.
        (finish_declared_type): Declare.
        * cxx-pretty-print.c (pp_cxx_type_specifier_seq): Print
        * cxx-pretty-print.c (pp_cxx_type_specifier_seq): Print
        DECLTYPE_TYPE nodes.
        DECLTYPE_TYPE nodes.
        (pp_cxx_type_id): Ditto.
        (pp_cxx_type_id): Ditto.
        * pt.c (for_each_template_parm_r): Walk DECLTYPE_TYPE children.
        * pt.c (for_each_template_parm_r): Walk DECLTYPE_TYPE children.
        (tsubst): Substitute into a DECLTYPE_TYPE node.
        (tsubst): Substitute into a DECLTYPE_TYPE node.
        (tsubst_copy): Ditto.
        (tsubst_copy): Ditto.
        (unify): Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
        (unify): Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
        nodes.
        nodes.
        (dependent_type_p_r): DECLTYPE_TYPE types are always dependent.
        (dependent_type_p_r): DECLTYPE_TYPE types are always dependent.
        * semantics.c (finish_typeof): TYPEOF_TYPE types need to use
        * semantics.c (finish_typeof): TYPEOF_TYPE types need to use
        structural equality (because we can't hash the expressions).
        structural equality (because we can't hash the expressions).
        (finish_declared_type): New.
        (finish_declared_type): New.
        * lex.c (reswords): Add "decltype" keyword.
        * lex.c (reswords): Add "decltype" keyword.
        * parser.c cp_lexer_next_token_is_decl_specifier_keyword
        * parser.c cp_lexer_next_token_is_decl_specifier_keyword
        (cp_parser_postfix_expression): Add member_access_only_p to
        (cp_parser_postfix_expression): Add member_access_only_p to
        restrict postfix expression to member access expressions.
        restrict postfix expression to member access expressions.
        (cp_parser_unary_expression): Update call to
        (cp_parser_unary_expression): Update call to
        cp_parser_postfix_expression to reflect new parameter.
        cp_parser_postfix_expression to reflect new parameter.
        (cp_parser_declared_type): New.
        (cp_parser_declared_type): New.
        (cp_parser_simple_type_specifier): Parse decltype types.
        (cp_parser_simple_type_specifier): Parse decltype types.
2007-07-27  Mark Mitchell  
2007-07-27  Mark Mitchell  
        PR c++/32346
        PR c++/32346
        * call.c (convert_for_arg_passing): Only widen bitfields to their
        * call.c (convert_for_arg_passing): Only widen bitfields to their
        declared types if necessary.
        declared types if necessary.
2007-07-25  Kaveh R. Ghazi  
2007-07-25  Kaveh R. Ghazi  
        * parser.c (cp_parser_string_literal, cp_parser_sizeof_operand):
        * parser.c (cp_parser_string_literal, cp_parser_sizeof_operand):
        Constify.
        Constify.
2007-07-25  Kaveh R. Ghazi  
2007-07-25  Kaveh R. Ghazi  
        * decl.c (typename_hash, typename_compare): Constify.
        * decl.c (typename_hash, typename_compare): Constify.
        * mangle.c (hash_type, compare_type): Likewise.
        * mangle.c (hash_type, compare_type): Likewise.
        * pt.c (eq_local_specializations, hash_local_specialization):
        * pt.c (eq_local_specializations, hash_local_specialization):
        Likewise.
        Likewise.
        * tree.c (cplus_array_hash, cplus_array_compare, list_hash_eq,
        * tree.c (cplus_array_hash, cplus_array_compare, list_hash_eq,
        list_hash): Likewise.
        list_hash): Likewise.
        * typeck2.c (pat_compare): Likewise.
        * typeck2.c (pat_compare): Likewise.
2007-07-24  Nathan Sidwell  
2007-07-24  Nathan Sidwell  
        * method.c (implicitly_declare_fn): Increase alignment if member
        * method.c (implicitly_declare_fn): Increase alignment if member
        function pointer format requires it.
        function pointer format requires it.
2007-07-24  Paolo Carlini  
2007-07-24  Paolo Carlini  
        PR c++/29001
        PR c++/29001
        * typeck.c (check_return_expr): Do not pass a null argument
        * typeck.c (check_return_expr): Do not pass a null argument
        to null_ptr_cst_p.
        to null_ptr_cst_p.
2007-07-24  Paolo Carlini  
2007-07-24  Paolo Carlini  
        PR c++/32561
        PR c++/32561
        * decl.c (redeclaration_error_message): Call DECL_ANON_UNION_VAR_P
        * decl.c (redeclaration_error_message): Call DECL_ANON_UNION_VAR_P
        only on VAR_DECL.
        only on VAR_DECL.
2007-07-22  Nathan Sidwell  
2007-07-22  Nathan Sidwell  
        PR c++/32839
        PR c++/32839
        * typeck.c (convert_arguments): Only use default args if we have
        * typeck.c (convert_arguments): Only use default args if we have
        a function decl.
        a function decl.
        PR c++/30818
        PR c++/30818
        * typeck.c (structural_comptypes): No need to check
        * typeck.c (structural_comptypes): No need to check
        resolve_typename_type return value here.
        resolve_typename_type return value here.
        * cp-tree.h (TYPENAME_IS_RESOLVING_P): New.
        * cp-tree.h (TYPENAME_IS_RESOLVING_P): New.
        * pt.c (resolve_typename_type): Follow typename typedefs.  Return
        * pt.c (resolve_typename_type): Follow typename typedefs.  Return
        original type rather than error_mark_node in case of failure.
        original type rather than error_mark_node in case of failure.
        * parser.c (cp_parser_nested_name_specifier_opt): Adjust
        * parser.c (cp_parser_nested_name_specifier_opt): Adjust
        resolve_typename_type result check.
        resolve_typename_type result check.
        (cp_parser_direct_declarator, cp_parser_head,
        (cp_parser_direct_declarator, cp_parser_head,
        cp_parser_constructor_declarator_p): Likewise.
        cp_parser_constructor_declarator_p): Likewise.
2007-07-12  Kazu Hirata  
2007-07-12  Kazu Hirata  
        * pt.c (template_parms_variadic_p): Remove.
        * pt.c (template_parms_variadic_p): Remove.
        * cp-tree.h: Remove the prototype for template_parms_variadic_p.
        * cp-tree.h: Remove the prototype for template_parms_variadic_p.
2007-07-12  Jakub Jelinek  
2007-07-12  Jakub Jelinek  
        PR c++/30854
        PR c++/30854
        * error.c (dump_expr) : Pass true as last
        * error.c (dump_expr) : Pass true as last
        argument to dump_aggr_init_expr_args instead of false.
        argument to dump_aggr_init_expr_args instead of false.
2007-07-11  Douglas Gregor  
2007-07-11  Douglas Gregor  
        * typeck.c (comptypes): When USE_CANONICAL_TYPES, use the
        * typeck.c (comptypes): When USE_CANONICAL_TYPES, use the
        canonical types; otherwise, fall back to structural type
        canonical types; otherwise, fall back to structural type
        comparisons. If ENABLE_CHECKING and USE_CANONICAL_TYPES, give an
        comparisons. If ENABLE_CHECKING and USE_CANONICAL_TYPES, give an
        internal compiler error if the canonical types are wrong.
        internal compiler error if the canonical types are wrong.
2007-07-11  Paolo Carlini  
2007-07-11  Paolo Carlini  
        PR c++/32560
        PR c++/32560
        * parser.c (cp_parser_make_indirect_declarator): When the
        * parser.c (cp_parser_make_indirect_declarator): When the
        the code argument is ERROR_MARK return cp_error_declarator.
        the code argument is ERROR_MARK return cp_error_declarator.
2007-07-09  Geoffrey Keating  
2007-07-09  Geoffrey Keating  
        PR 32617
        PR 32617
        * decl.c (cxx_init_decl_processing): Don't set
        * decl.c (cxx_init_decl_processing): Don't set
        force_align_functions_log.
        force_align_functions_log.
        (grokfndecl): Honour ptrmemfunc_vbit_in_pfn.
        (grokfndecl): Honour ptrmemfunc_vbit_in_pfn.
        * typeck.c (cxx_alignof_expr): When alignof is used on a plain
        * typeck.c (cxx_alignof_expr): When alignof is used on a plain
        FUNCTION_DECL, return its alignment.
        FUNCTION_DECL, return its alignment.
2007-07-09  Richard Guenther  
2007-07-09  Richard Guenther  
        * decl.c (start_preparsed_function): Do not promote return type.
        * decl.c (start_preparsed_function): Do not promote return type.
2007-07-08  Paolo Carlini  
2007-07-08  Paolo Carlini  
        PR c++/30535
        PR c++/30535
        * pt.c (unify): Never pass error_mark_node to template_decl_level.
        * pt.c (unify): Never pass error_mark_node to template_decl_level.
2007-07-07  Mark Mitchell  
2007-07-07  Mark Mitchell  
        PR c++/32232
        PR c++/32232
        * pt.c (resolve_overloaded_unification): Robustify.  Return a
        * pt.c (resolve_overloaded_unification): Robustify.  Return a
        bool, not an int.
        bool, not an int.
        (type_unification_real): Adjust accordingly.
        (type_unification_real): Adjust accordingly.
2007-07-06  Richard Guenther  
2007-07-06  Richard Guenther  
        * init.c (build_new_1): Use the correct pointer type.
        * init.c (build_new_1): Use the correct pointer type.
        * typeck2.c (build_m_component_ref): Likewise.
        * typeck2.c (build_m_component_ref): Likewise.
2007-07-05  Mark Mitchell  
2007-07-05  Mark Mitchell  
        PR c++/32245
        PR c++/32245
        * init.c (build_zero_init): Always build an initializer for
        * init.c (build_zero_init): Always build an initializer for
        non-static storage.
        non-static storage.
        * typeck2.c (build_functional_cast): Use build_zero_init.
        * typeck2.c (build_functional_cast): Use build_zero_init.
        PR c++/32251
        PR c++/32251
        * init.c (build_new_1): Always pass the allocation function to
        * init.c (build_new_1): Always pass the allocation function to
        build_op_delete_call.
        build_op_delete_call.
        * call.c (build_op_delete_call): Handle operator delete with a
        * call.c (build_op_delete_call): Handle operator delete with a
        variable-argument list.  Do not issue an error when no matching
        variable-argument list.  Do not issue an error when no matching
        deallocation function is available for a new operator.
        deallocation function is available for a new operator.
        PR c++/31992
        PR c++/31992
        * cp-tree.h (any_value_dependent_elements_p): Declare it.
        * cp-tree.h (any_value_dependent_elements_p): Declare it.
        * decl.c (value_dependent_init_p): New function.
        * decl.c (value_dependent_init_p): New function.
        (cp_finish_decl): Use it.
        (cp_finish_decl): Use it.
        * pt.c (value_dependent_expression_p): Use
        * pt.c (value_dependent_expression_p): Use
        any_value_dependent_elements_p.
        any_value_dependent_elements_p.
        * parser.c (cp_parser_primary_expression): Add comment about
        * parser.c (cp_parser_primary_expression): Add comment about
        treating dependent qualified names as integral
        treating dependent qualified names as integral
        constant-expressions.
        constant-expressions.
2007-07-04  Douglas Gregor  
2007-07-04  Douglas Gregor  
        * decl.c (build_ptrmemfunc_type): Always use structural equality
        * decl.c (build_ptrmemfunc_type): Always use structural equality
        tests when comparing pointer-to-member-function types, because the
        tests when comparing pointer-to-member-function types, because the
        handling of TYPE_GET_PTRMEMFUNC_TYPE currently defeats canonical
        handling of TYPE_GET_PTRMEMFUNC_TYPE currently defeats canonical
        types.
        types.
2007-07-03  Mark Mitchell  
2007-07-03  Mark Mitchell  
        * init.c (build_new): Tweak comment.
        * init.c (build_new): Tweak comment.
2007-06-29  Dave Brolley  
2007-06-29  Dave Brolley  
        PR c++/31743
        PR c++/31743
        * parser.c (cp_parser_new_type_id): Don't reduce a named array
        * parser.c (cp_parser_new_type_id): Don't reduce a named array
        type to its base type and number of elements here.
        type to its base type and number of elements here.
        * init.c (build_new): Call complete_type_or_else to ensure that the
        * init.c (build_new): Call complete_type_or_else to ensure that the
        type is complete and to issue a diagnostic if it is not.
        type is complete and to issue a diagnostic if it is not.
        (build_new_1): Don't call complete_type_or_else here.
        (build_new_1): Don't call complete_type_or_else here.
2007-07-03  Richard Guenther  
2007-07-03  Richard Guenther  
        PR c++/32609
        PR c++/32609
        * class.c (fixed_type_or_null): Re-lookup the hashtable slot
        * class.c (fixed_type_or_null): Re-lookup the hashtable slot
        after recursing.
        after recursing.
2007-07-02  Simon Baldwin  
2007-07-02  Simon Baldwin  
        * parser.c (cp_parser_elaborated_type_specifier): Added a warning
        * parser.c (cp_parser_elaborated_type_specifier): Added a warning
        for inner-style nested forward declarations that don't declare
        for inner-style nested forward declarations that don't declare
        anything useful.
        anything useful.
2007-07-02  Jakub Jelinek  
2007-07-02  Jakub Jelinek  
        PR c++/31748
        PR c++/31748
        * semantics.c (finish_omp_clauses): Use %qD instead of %qE for
        * semantics.c (finish_omp_clauses): Use %qD instead of %qE for
        DECL_P in not a variable and appears more than once error messages.
        DECL_P in not a variable and appears more than once error messages.
2007-07-01  Ollie Wild  
2007-07-01  Ollie Wild  
        * name-lookup.c (ambiguous_decl): Fix case when new->value is hidden.
        * name-lookup.c (ambiguous_decl): Fix case when new->value is hidden.
        (select_decl): Remove function.
        (select_decl): Remove function.
        (unqualified_namespace_lookup): Populate binding by calling
        (unqualified_namespace_lookup): Populate binding by calling
        ambiguous_decl.  Remove select_decl call.
        ambiguous_decl.  Remove select_decl call.
        (lookup_qualified_name): Remove select_decl call.
        (lookup_qualified_name): Remove select_decl call.
        * decl.c (lookup_and_check_tag): Check for ambiguous references.
        * decl.c (lookup_and_check_tag): Check for ambiguous references.
        * parser.c (cp_parser_elaborated_type_specifier): Skip redundant error
        * parser.c (cp_parser_elaborated_type_specifier): Skip redundant error
        generation when name lookup is ambiguous.
        generation when name lookup is ambiguous.
2007-06-29  Douglas Gregor  
2007-06-29  Douglas Gregor  
        PR c++/31724
        PR c++/31724
        * init.c (build_new_1): Use structural equality on the copy of the
        * init.c (build_new_1): Use structural equality on the copy of the
        array type.
        array type.
2007-06-28  Geoffrey Keating  
2007-06-28  Geoffrey Keating  
        * decl2.c (determine_visibility): Implement
        * decl2.c (determine_visibility): Implement
        flag_visibility_ms_compat effect on type info.
        flag_visibility_ms_compat effect on type info.
        * decl.c (cxx_init_decl_processing): Implement
        * decl.c (cxx_init_decl_processing): Implement
        global effect of flag_visibility_ms_compat.
        global effect of flag_visibility_ms_compat.
2007-06-28  Geoffrey Keating  
2007-06-28  Geoffrey Keating  
        * decl2.c (start_objects): Mark constructor-running function
        * decl2.c (start_objects): Mark constructor-running function
        as artificial.
        as artificial.
2007-06-26  Simon Martin  
2007-06-26  Simon Martin  
        PR c++/32111
        PR c++/32111
        * decl.c (grokdeclarator): Reset friendp for member functions declared
        * decl.c (grokdeclarator): Reset friendp for member functions declared
        friend of their own class.
        friend of their own class.
2007-06-23  Mark Mitchell  
2007-06-23  Mark Mitchell  
        * decl2.c (determine_visibility): Don't look for dllexport here.
        * decl2.c (determine_visibility): Don't look for dllexport here.
        (determine_visibility_from_class): Tidy.
        (determine_visibility_from_class): Tidy.
2007-06-18  Simon Baldwin 
2007-06-18  Simon Baldwin 
        PR c++/31923
        PR c++/31923
        * parser.c (cp_parser_single_declaration): Added check for storage
        * parser.c (cp_parser_single_declaration): Added check for storage
        class other than sc_none in parsed declaration, and a flag to indicate
        class other than sc_none in parsed declaration, and a flag to indicate
        if the call is part of an explicit template specialization parse.
        if the call is part of an explicit template specialization parse.
        * (cp_parser_explicit_specialization): Specialization check flag added
        * (cp_parser_explicit_specialization): Specialization check flag added
        to call to cp_parser_single_declaration(), set true.
        to call to cp_parser_single_declaration(), set true.
        * (cp_parser_template_declaration_after_export): Specialization check
        * (cp_parser_template_declaration_after_export): Specialization check
        flag added to call to cp_parser_single_declaration(), set false.
        flag added to call to cp_parser_single_declaration(), set false.
        * pt.c (check_explicit_specialization): Added code to copy visiblity
        * pt.c (check_explicit_specialization): Added code to copy visiblity
        and linkage from the templated function to the explicit specialization.
        and linkage from the templated function to the explicit specialization.
2007-06-15  Andrew Pinski  
2007-06-15  Andrew Pinski  
        * typeck.c (build_binary_op): For templates build the
        * typeck.c (build_binary_op): For templates build the
        expression in pieces to avoid the assert in build2_stat.
        expression in pieces to avoid the assert in build2_stat.
        (get_member_function_from_ptrfunc):
        (get_member_function_from_ptrfunc):
        Change over to using POINTER_PLUS_EXPR and convert
        Change over to using POINTER_PLUS_EXPR and convert
        the second operand to sizetype.
        the second operand to sizetype.
        * typeck2.c (build_m_component_ref):  Likewise.
        * typeck2.c (build_m_component_ref):  Likewise.
        * init.c (expand_virtual_init): Create a POINTER_PLUS_EXPR
        * init.c (expand_virtual_init): Create a POINTER_PLUS_EXPR
        instead of PLUS_EXPR for pointers.
        instead of PLUS_EXPR for pointers.
        (build_new_1): Likewise.
        (build_new_1): Likewise.
        (build_vec_delete_1): Likewise.
        (build_vec_delete_1): Likewise.
        (build_vec_delete): Likewise.
        (build_vec_delete): Likewise.
        * class.c (build_base_path): Likewise.
        * class.c (build_base_path): Likewise.
        (build_base_path): Likewise.
        (build_base_path): Likewise.
        (convert_to_base_statically): Likewise.
        (convert_to_base_statically): Likewise.
        (fixed_type_or_null): Handle POINTER_PLUS_EXPR.
        (fixed_type_or_null): Handle POINTER_PLUS_EXPR.
        (get_vtbl_decl_for_binfo): Handle POINTER_PLUS_EXPR
        (get_vtbl_decl_for_binfo): Handle POINTER_PLUS_EXPR
        instead of PLUS_EXPR.
        instead of PLUS_EXPR.
        (dfs_accumulate_vtbl_inits): Create a POINTER_PLUS_EXPR
        (dfs_accumulate_vtbl_inits): Create a POINTER_PLUS_EXPR
        instead of PLUS_EXPR for pointers.
        instead of PLUS_EXPR for pointers.
        * call.c (build_special_member_call): Likewise.
        * call.c (build_special_member_call): Likewise.
        * rtti.c (build_headof): Likewise.
        * rtti.c (build_headof): Likewise.
        Use sizetype instead of ptrdiff_type_node.
        Use sizetype instead of ptrdiff_type_node.
        (tinfo_base_init): Create a POINTER_PLUS_EXPR
        (tinfo_base_init): Create a POINTER_PLUS_EXPR
        instead of PLUS_EXPR for pointers.
        instead of PLUS_EXPR for pointers.
        * except.c (expand_start_catch_block):  Do a
        * except.c (expand_start_catch_block):  Do a
        NEGATIVE and then a POINTER_PLUS_EXPR instead
        NEGATIVE and then a POINTER_PLUS_EXPR instead
        of a MINUS_EXPR.
        of a MINUS_EXPR.
        * cp-gimplify.c (cxx_omp_clause_apply_fn): Convert
        * cp-gimplify.c (cxx_omp_clause_apply_fn): Convert
        PLUS_EXPR on pointer types over to use
        PLUS_EXPR on pointer types over to use
        POINTER_PLUS_EXPR and remove the conversion
        POINTER_PLUS_EXPR and remove the conversion
        to the pointer types.
        to the pointer types.
        * method.c (thunk_adjust): Use POINTER_PLUS_EXPR for
        * method.c (thunk_adjust): Use POINTER_PLUS_EXPR for
        adding to a pointer type. Use size_int instead of
        adding to a pointer type. Use size_int instead of
        ssize_int. Convert the index to sizetype before
        ssize_int. Convert the index to sizetype before
        adding it to the pointer.
        adding it to the pointer.
2007-06-15  Mark Mitchell  
2007-06-15  Mark Mitchell  
        * cp-tree.h (DECL_VAR_MARKED_P): Remove.
        * cp-tree.h (DECL_VAR_MARKED_P): Remove.
        (DECL_ANON_UNION_VAR_P): New macro.
        (DECL_ANON_UNION_VAR_P): New macro.
        * class.c (fixed_type_or_null): Tidy.  Use a hash table, rather
        * class.c (fixed_type_or_null): Tidy.  Use a hash table, rather
        than DECL_VAR_MARKED_P, to keep track of which variables we have
        than DECL_VAR_MARKED_P, to keep track of which variables we have
        seen.
        seen.
        * decl.c (redeclaration_error_message): Complain about redeclaring
        * decl.c (redeclaration_error_message): Complain about redeclaring
        anonymous union members at namespace scope.
        anonymous union members at namespace scope.
        * decl2.c (build_anon_union_vars): Set DECL_ANON_UNION_VAR_P.
        * decl2.c (build_anon_union_vars): Set DECL_ANON_UNION_VAR_P.
2007-06-14  Geoff Keating  
2007-06-14  Geoff Keating  
        * decl2.c (determine_visibility): Ensure that functions with
        * decl2.c (determine_visibility): Ensure that functions with
        hidden types as parameters are hidden.
        hidden types as parameters are hidden.
        PR 31093
        PR 31093
        * decl2.c (determine_visibility): Remove duplicate code for
        * decl2.c (determine_visibility): Remove duplicate code for
        handling type info.
        handling type info.
2007-06-12  Ian Lance Taylor  
2007-06-12  Ian Lance Taylor  
        PR libstdc++/29286
        PR libstdc++/29286
        * init.c (avoid_placement_new_aliasing): New static function.
        * init.c (avoid_placement_new_aliasing): New static function.
        (build_new_1): Call it.
        (build_new_1): Call it.
2007-06-11  Rafael Ávila de Espíndola  
2007-06-11  Rafael Ávila de Espíndola  
        * cp-objcp-common.h (LANG_HOOKS_SIGNED_TYPE): Remove.
        * cp-objcp-common.h (LANG_HOOKS_SIGNED_TYPE): Remove.
        (LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE): Remove.
        (LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE): Remove.
2007-06-08  Jakub Jelinek  
2007-06-08  Jakub Jelinek  
        PR c++/32177
        PR c++/32177
        * semantics.c (finish_omp_for): Call fold_build_cleanup_point_expr
        * semantics.c (finish_omp_for): Call fold_build_cleanup_point_expr
        on init, the non-decl cond operand and increment value.
        on init, the non-decl cond operand and increment value.
2007-06-07  Simon Martin  
2007-06-07  Simon Martin  
        PR c++/30759
        PR c++/30759
        * decl.c (check_initializer): Report an error when a brace enclosed
        * decl.c (check_initializer): Report an error when a brace enclosed
        initializer is used for a non-aggregate type in C++98.
        initializer is used for a non-aggregate type in C++98.
        (redeclaration_error_message): Rewrote flag_cpp0x in terms of
        (redeclaration_error_message): Rewrote flag_cpp0x in terms of
        cxx_dialect.
        cxx_dialect.
        (grokdeclarator): Likewise.
        (grokdeclarator): Likewise.
        (move_fn_p): Likewise.
        (move_fn_p): Likewise.
        * typeck.c (check_return_expr): Likewise.
        * typeck.c (check_return_expr): Likewise.
        * call.c (reference_binding): Likewise.
        * call.c (reference_binding): Likewise.
        * error.c (cp_cpp_error): Likewise.
        * error.c (cp_cpp_error): Likewise.
        * pt.c (check_default_tmpl_args): Likewise.
        * pt.c (check_default_tmpl_args): Likewise.
        (tsubst): Likewise.
        (tsubst): Likewise.
        * lex.c (init_reswords): Likewise.
        * lex.c (init_reswords): Likewise.
        * parser.c (p_parser_primary_expression): Likewise.
        * parser.c (p_parser_primary_expression): Likewise.
        (TOKEN_PRECEDENCE): Likewise.
        (TOKEN_PRECEDENCE): Likewise.
        (cp_parser_init_declarator): Likewise.
        (cp_parser_init_declarator): Likewise.
        (cp_parser_ptr_operator): Likewise.
        (cp_parser_ptr_operator): Likewise.
        (cp_parser_parameter_declaration): Likewise.
        (cp_parser_parameter_declaration): Likewise.
        (cp_parser_enclosed_template_argument_list): Likewise.
        (cp_parser_enclosed_template_argument_list): Likewise.
        (cp_parser_skip_to_end_of_template_parameter_list): Likewise.
        (cp_parser_skip_to_end_of_template_parameter_list): Likewise.
        (cp_parser_next_token_ends_template_argument_p): Likewise.
        (cp_parser_next_token_ends_template_argument_p): Likewise.
2007-06-04  Simon Baldwin  
2007-06-04  Simon Baldwin  
        * decl.c (grokdeclarator): Readability change.  Moved case labels
        * decl.c (grokdeclarator): Readability change.  Moved case labels
        into direct switch statement scope.
        into direct switch statement scope.
2007-06-04  Paolo Carlini  
2007-06-04  Paolo Carlini  
        * call.c (convert_like_real): Remove pointless code.
        * call.c (convert_like_real): Remove pointless code.
2007-05-31  Mark Mitchell  
2007-05-31  Mark Mitchell  
        * decl.c (get_atexit_fn_ptr_type): New function.
        * decl.c (get_atexit_fn_ptr_type): New function.
        (get_atexit_node): Use it.
        (get_atexit_node): Use it.
        (start_cleanup_fn): Likewise.
        (start_cleanup_fn): Likewise.
        (register_dtor_fn): Use the object's destructor, instead of a
        (register_dtor_fn): Use the object's destructor, instead of a
        separate cleanup function, where possible.
        separate cleanup function, where possible.
        * cp-tree.h (CPTI_ATEXIT_FN_PTR_TYPE): New enumerator.
        * cp-tree.h (CPTI_ATEXIT_FN_PTR_TYPE): New enumerator.
        (atexit_fn_ptr_type_node): New macro.
        (atexit_fn_ptr_type_node): New macro.
        * decl2.c (build_cleanup): Use build_address.
        * decl2.c (build_cleanup): Use build_address.
2007-05-31  Daniel Berlin  
2007-05-31  Daniel Berlin  
        * typeck.c (build_binary_op): Include types in error.
        * typeck.c (build_binary_op): Include types in error.
2007-05-31  Jakub Jelinek  
2007-05-31  Jakub Jelinek  
        PR c++/31806
        PR c++/31806
        * decl.c (cp_finish_decl): Also clear was_readonly if a static var
        * decl.c (cp_finish_decl): Also clear was_readonly if a static var
        needs runtime initialization.
        needs runtime initialization.
2007-05-31  Paolo Carlini  
2007-05-31  Paolo Carlini  
        PR c++/32158
        PR c++/32158
        * semantics.c (finish_trait_expr): Complete the types.
        * semantics.c (finish_trait_expr): Complete the types.
2007-05-30  Russell Yanofsky 
2007-05-30  Russell Yanofsky 
             Douglas Gregor 
             Douglas Gregor 
             Pedro Lamarao 
             Pedro Lamarao 
             Howard Hinnant 
             Howard Hinnant 
        PR c++/7412
        PR c++/7412
        PR c++/29939
        PR c++/29939
        * typeck.c (comptypes): Don't consider rvalue and lvalue
        * typeck.c (comptypes): Don't consider rvalue and lvalue
        reference types to be equivalent.
        reference types to be equivalent.
        (check_return_expr): Move from certain lvalues when returning
        (check_return_expr): Move from certain lvalues when returning
        them.
        them.
        * decl.c (grokdeclarator): Implement reference collapsing.
        * decl.c (grokdeclarator): Implement reference collapsing.
        (copy_fn_p): Don't consider constructors taking rvalue references
        (copy_fn_p): Don't consider constructors taking rvalue references
        to be copy constructors.
        to be copy constructors.
        (move_fn_p): New.
        (move_fn_p): New.
        * call.c (conversion): New "rvaluedness_matches_p" member.
        * call.c (conversion): New "rvaluedness_matches_p" member.
        (convert_class_to_reference): Require reference type as first
        (convert_class_to_reference): Require reference type as first
        parameter instead of base type.
        parameter instead of base type.
        (reference_binding): Add logic to handle rvalue references.
        (reference_binding): Add logic to handle rvalue references.
        (implicit_conversion): Update inaccurate comment.
        (implicit_conversion): Update inaccurate comment.
        (convert_like_real): Disable creation of temporaries that are
        (convert_like_real): Disable creation of temporaries that are
        impossible to initialize for types with move constructors.
        impossible to initialize for types with move constructors.
        (build_over_call): Elide move constructors when possible.
        (build_over_call): Elide move constructors when possible.
        (maybe_handle_implicit_object): Set "rvaluedness_matches_p".
        (maybe_handle_implicit_object): Set "rvaluedness_matches_p".
        (maybe_handle_ref_bind): Return conversion instead of type node.
        (maybe_handle_ref_bind): Return conversion instead of type node.
        (compare_ics): Add logic to use "rvaluedness_matches_p" values to
        (compare_ics): Add logic to use "rvaluedness_matches_p" values to
        determine preferred conversion sequences.
        determine preferred conversion sequences.
        * cp-tree.h (TYPE_REF_IS_RVALUE): New.
        * cp-tree.h (TYPE_REF_IS_RVALUE): New.
        (LOOKUP_PREFER_RVALUE): New.
        (LOOKUP_PREFER_RVALUE): New.
        (DECL_MOVE_CONSTRUCTOR_P): New.
        (DECL_MOVE_CONSTRUCTOR_P): New.
        (struct cp_declarator): Add "reference" member for reference
        (struct cp_declarator): Add "reference" member for reference
        types, with new "rvalue_ref" flag.
        types, with new "rvalue_ref" flag.
        (cp_build_reference_type): Declare.
        (cp_build_reference_type): Declare.
        (move_fn_p): Declare.
        (move_fn_p): Declare.
        * error.c (dump_type_prefix): Format rvalue reference types
        * error.c (dump_type_prefix): Format rvalue reference types
        correctly in error messages.
        correctly in error messages.
        * except.c (build_throw): Move from certain lvalues when
        * except.c (build_throw): Move from certain lvalues when
        throwing.
        throwing.
        * mangle.c (write_type): Mangle rvalue references differently
        * mangle.c (write_type): Mangle rvalue references differently
        than regular references.
        than regular references.
        * parser.c (make_reference_declarator): Add boolean parameter for
        * parser.c (make_reference_declarator): Add boolean parameter for
        rvalue references.
        rvalue references.
        (cp_parser_make_indirect_declarator): New.
        (cp_parser_make_indirect_declarator): New.
        (cp_parser_new_declarator_opt): Call
        (cp_parser_new_declarator_opt): Call
        cp_parser_make_indirect_declarator.
        cp_parser_make_indirect_declarator.
        (cp_parser_conversion_declarator_opt): Ditto.
        (cp_parser_conversion_declarator_opt): Ditto.
        (cp_parser_declarator): Ditto.
        (cp_parser_declarator): Ditto.
        (cp_parser_ptr_operator): Parse "&&" tokens into rvalue reference
        (cp_parser_ptr_operator): Parse "&&" tokens into rvalue reference
        declarators.
        declarators.
        * pt.c (tsubst): Implement reference collapsing.
        * pt.c (tsubst): Implement reference collapsing.
        (maybe_adjust_types_for_deduction): Implement special template
        (maybe_adjust_types_for_deduction): Implement special template
        parameter deduction rule for rvalue references.
        parameter deduction rule for rvalue references.
        (type_unification_real): Update calls to
        (type_unification_real): Update calls to
        maybe_adjust_types_for_deduction.
        maybe_adjust_types_for_deduction.
        (try_one_overload): Ditto.
        (try_one_overload): Ditto.
        (unify_pack_expansion): Ditto.
        (unify_pack_expansion): Ditto.
        * tree.c (lvalue_p_1): Handle rvalue reference types.
        * tree.c (lvalue_p_1): Handle rvalue reference types.
        (cp_build_reference_type): New.
        (cp_build_reference_type): New.
2007-05-30  Jakub Jelinek  
2007-05-30  Jakub Jelinek  
        PR c++/31809
        PR c++/31809
        * decl.c (cp_finish_decl): Clear TREE_READONLY flag on TREE_STATIC
        * decl.c (cp_finish_decl): Clear TREE_READONLY flag on TREE_STATIC
        variables that need runtime initialization.
        variables that need runtime initialization.
2007-05-28  Andrew Pinski  
2007-05-28  Andrew Pinski  
        PR c++/31339
        PR c++/31339
        * typeck.c (build_unary_op 
        * typeck.c (build_unary_op 
        case POSTINCREMENT_EXPR, case PREDECREMENT_EXPR,
        case POSTINCREMENT_EXPR, case PREDECREMENT_EXPR,
        case POSTDECREMENT_EXPR>): Return the error_mark_node
        case POSTDECREMENT_EXPR>): Return the error_mark_node
        if either the real or imaginary parts would an
        if either the real or imaginary parts would an
        error_mark_node.
        error_mark_node.
2007-05-25  Simon Martin  
2007-05-25  Simon Martin  
            Manuel Lopez-Ibanez  
            Manuel Lopez-Ibanez  
        PR c++/31745
        PR c++/31745
        * parser.c (cp_parser_skip_to_closing_brace): Return true if the next
        * parser.c (cp_parser_skip_to_closing_brace): Return true if the next
        token is a closing brace, false if there are no tokens left.
        token is a closing brace, false if there are no tokens left.
        (cp_parser_namespace_alias_definition): Only consume the next token if
        (cp_parser_namespace_alias_definition): Only consume the next token if
        it is a closing brace.
        it is a closing brace.
        * parser.c (cp_parser_class_specifier): Likewise.
        * parser.c (cp_parser_class_specifier): Likewise.
2007-05-25  H.J. Lu  
2007-05-25  H.J. Lu  
        * semantics.c (finish_member_declaration): Fix a typo in the
        * semantics.c (finish_member_declaration): Fix a typo in the
        last checkin.
        last checkin.
2007-05-25  Douglas Gregor 
2007-05-25  Douglas Gregor 
        PR c++/31431
        PR c++/31431
        PR c++/31432
        PR c++/31432
        PR c++/31434
        PR c++/31434
        PR c++/31435
        PR c++/31435
        PR c++/31437
        PR c++/31437
        PR c++/31438
        PR c++/31438
        PR c++/31442
        PR c++/31442
        PR c++/31443
        PR c++/31443
        PR c++/31444
        PR c++/31444
        PR c++/31445
        PR c++/31445
        * error.c (dump_type): Dump TYPE_ARGUMENT_PACK nodes.
        * error.c (dump_type): Dump TYPE_ARGUMENT_PACK nodes.
        * cp-tree.h (check_for_bare_parameter_packs): Returns bool.
        * cp-tree.h (check_for_bare_parameter_packs): Returns bool.
        * pt.c (check_for_bare_parameter_packs): Return bool indicated
        * pt.c (check_for_bare_parameter_packs): Return bool indicated
        whether everything was okay. Fix indentation.
        whether everything was okay. Fix indentation.
        (push_template_decl_real): Check for bare parameter packs in
        (push_template_decl_real): Check for bare parameter packs in
        function parameters; where errors occur, mark the parameter types
        function parameters; where errors occur, mark the parameter types
        with ERROR_MARK_NODEs to avert ICEs.
        with ERROR_MARK_NODEs to avert ICEs.
        (coerce_template_parameter_pack): New.
        (coerce_template_parameter_pack): New.
        (coerce_template_parms): Moved parameter pack coercion into
        (coerce_template_parms): Moved parameter pack coercion into
        coerce_template_parameter_pack, and permit it anywhere in the
        coerce_template_parameter_pack, and permit it anywhere in the
        template parameter list (not just at the end). Parameter and
        template parameter list (not just at the end). Parameter and
        argument indices can vary (somewhat) separately now, so add
        argument indices can vary (somewhat) separately now, so add
        PARM_IDX and ARG_IDX.
        PARM_IDX and ARG_IDX.
        (fn_type_unification): Don't set an argument pack as incomplete if
        (fn_type_unification): Don't set an argument pack as incomplete if
        no argument pack was deduced.
        no argument pack was deduced.
        (type_unification_real): If a type parameter is a parameter pack
        (type_unification_real): If a type parameter is a parameter pack
        and has not otherwise been deduced, it will be deduced to an empty
        and has not otherwise been deduced, it will be deduced to an empty
        parameter pack.
        parameter pack.
        (more_specialized_fn): Use the actual lengths of the argument
        (more_specialized_fn): Use the actual lengths of the argument
        lists when comparing against expansions.
        lists when comparing against expansions.
        * semantics.c (finish_member_declaration): If a field's type has
        * semantics.c (finish_member_declaration): If a field's type has
        bare parameter packs, error and set its type to ERROR_MARK_NODE.
        bare parameter packs, error and set its type to ERROR_MARK_NODE.
2007-05-24  Danny Smith  
2007-05-24  Danny Smith  
        PR target/27067
        PR target/27067
        * mangle.c (mangle_decl): Call targetm.mangle_decl_assembler_name.
        * mangle.c (mangle_decl): Call targetm.mangle_decl_assembler_name.
2007-05-22  Ollie Wild  
2007-05-22  Ollie Wild  
        * name-lookup.c (ambiguous_decl): Adds check for hidden types.
        * name-lookup.c (ambiguous_decl): Adds check for hidden types.
        (unqualified_namespace_lookup): Adds check for hidden types.
        (unqualified_namespace_lookup): Adds check for hidden types.
2007-05-22  Ollie Wild  
2007-05-22  Ollie Wild  
        * decl.c (duplicate_decls): Verify namespace names are unique.
        * decl.c (duplicate_decls): Verify namespace names are unique.
2007-05-21  Mark Mitchell  
2007-05-21  Mark Mitchell  
        * decl.c (cxx_maybe_build_cleanup): Handle
        * decl.c (cxx_maybe_build_cleanup): Handle
        __attribute__((cleanup)).
        __attribute__((cleanup)).
2007-05-19  Manuel Lopez-Ibanez  
2007-05-19  Manuel Lopez-Ibanez  
        * cvt.c (cp_convert_and_check): Don't check warnings if the
        * cvt.c (cp_convert_and_check): Don't check warnings if the
        conversion failed.
        conversion failed.
2007-05-18  Geoffrey Keating  
2007-05-18  Geoffrey Keating  
        * mangle.c (write_real_cst): Use 'unsigned long' for %lx.
        * mangle.c (write_real_cst): Use 'unsigned long' for %lx.
2007-05-14  Paolo Carlini  
2007-05-14  Paolo Carlini  
        PR c++/29928
        PR c++/29928
        * rtti.c (get_tinfo_decl_dynamic, get_typeid): Try to complete the
        * rtti.c (get_tinfo_decl_dynamic, get_typeid): Try to complete the
        type only if is a class type (5.2.8/4).
        type only if is a class type (5.2.8/4).
2007-05-14  Rafael Ávila de Espíndola  
2007-05-14  Rafael Ávila de Espíndola  
        * cp-objcp-common.h (LANG_HOOKS_UNSIGNED_TYPE): Remove.
        * cp-objcp-common.h (LANG_HOOKS_UNSIGNED_TYPE): Remove.
        * decl.c (grokdeclarator): Use unsigned_type_for instead of
        * decl.c (grokdeclarator): Use unsigned_type_for instead of
        c_common_unsigned_type.
        c_common_unsigned_type.
2007-05-11  Silvius Rus  
2007-05-11  Silvius Rus  
        * typeck.c (build_indirect_ref): Add call to
        * typeck.c (build_indirect_ref): Add call to
        strict_aliasing_warning.
        strict_aliasing_warning.
        (build_reinterpret_cast_1): Condition call to
        (build_reinterpret_cast_1): Condition call to
        strict_aliasing_warning.
        strict_aliasing_warning.
2007-05-11  Jan Hubicka  
2007-05-11  Jan Hubicka  
        * semantics.c (expand_or_defer_fn): Do not call c_record_cdtor_fn.
        * semantics.c (expand_or_defer_fn): Do not call c_record_cdtor_fn.
        * decl2.c (start_objects): ctors and dtors are no longer public.
        * decl2.c (start_objects): ctors and dtors are no longer public.
        (cp_write_global_declarations): Do not call c_build_cdtor_fns.
        (cp_write_global_declarations): Do not call c_build_cdtor_fns.
2007-05-07  Andrew Pinski  
2007-05-07  Andrew Pinski  
        * typeck.c (build_unary_op): Remove code that used to
        * typeck.c (build_unary_op): Remove code that used to
        handle non lvalue increments/decrements.
        handle non lvalue increments/decrements.
2007-05-07  Mike Stump  
2007-05-07  Mike Stump  
        * parser.c (check_empty_body): Add.
        * parser.c (check_empty_body): Add.
        (cp_parser_iteration_statement): Add call to check_empty_body.
        (cp_parser_iteration_statement): Add call to check_empty_body.
2007-05-05  Geoffrey Keating  
2007-05-05  Geoffrey Keating  
        PR 31775
        PR 31775
        * mangle.c (write_mangled_name): Mangle static variable names.
        * mangle.c (write_mangled_name): Mangle static variable names.
        (write_unqualified_name): Use local-source-name for
        (write_unqualified_name): Use local-source-name for
        namespace-scope static variables.
        namespace-scope static variables.
2007-05-04  Dirk Mueller  
2007-05-04  Dirk Mueller  
        * cp-tree.h (DECL_MAIN_P): only if -ffreestanding is
        * cp-tree.h (DECL_MAIN_P): only if -ffreestanding is
        not in effect.
        not in effect.
2007-05-02  Seongbae Park  
2007-05-02  Seongbae Park  
        PR c++/31663
        PR c++/31663
        * decl2.c (constrain_class_visibility):
        * decl2.c (constrain_class_visibility):
        Use strip_pointer_or_array_types instead of strip_array_types.
        Use strip_pointer_or_array_types instead of strip_array_types.
2007-04-28  Andrew Pinski  
2007-04-28  Andrew Pinski  
        PR C++/30221
        PR C++/30221
        * decl.c (reshape_init_r): Don't reshape the first element if it
        * decl.c (reshape_init_r): Don't reshape the first element if it
        is a pointer to member function.
        is a pointer to member function.
2007-04-27  Simon Baldwin  
2007-04-27  Simon Baldwin  
        * decl.c (grokparms): Changed message format from %qD to %qE.
        * decl.c (grokparms): Changed message format from %qD to %qE.
2007-04-27  Douglas Gregor  
2007-04-27  Douglas Gregor  
        * error.c (maybe_warn_variadic_templates): Variadic templates are
        * error.c (maybe_warn_variadic_templates): Variadic templates are
        now in C++0x, so only warn about them in C++98 mode.
        now in C++0x, so only warn about them in C++98 mode.
2007-04-26  Andrew Pinski  
2007-04-26  Andrew Pinski  
        PR C++/30016
        PR C++/30016
        * typeck.c (build_reinterpret_cast_1): Only allow conversion to
        * typeck.c (build_reinterpret_cast_1): Only allow conversion to
        integeral types from vectors types.
        integeral types from vectors types.
2007-04-26  Jakub Jelinek  
2007-04-26  Jakub Jelinek  
        PR c++/31598
        PR c++/31598
        * semantics.c (finish_omp_clauses): Don't create CP_OMP_CLAUSE_INFO
        * semantics.c (finish_omp_clauses): Don't create CP_OMP_CLAUSE_INFO
        for type dependent OMP_CLAUSE_DECLs.
        for type dependent OMP_CLAUSE_DECLs.
2007-04-24  Mark Mitchell  
2007-04-24  Mark Mitchell  
        PR c++/31338
        PR c++/31338
        * cp-tree.h (ARITHMETIC_TYPE): Include COMPLEX_TYPE.
        * cp-tree.h (ARITHMETIC_TYPE): Include COMPLEX_TYPE.
        * typeck.c (type_after_usual_arithmetic_conversions): Adjust, as
        * typeck.c (type_after_usual_arithmetic_conversions): Adjust, as
        COMPLEX_TYPE is now an ARITHMETIC_TYPE.
        COMPLEX_TYPE is now an ARITHMETIC_TYPE.
        * init.c (build_zero_init): Adjust, as
        * init.c (build_zero_init): Adjust, as
        COMPLEX_TYPE is now a SCALAR_TYPE.
        COMPLEX_TYPE is now a SCALAR_TYPE.
        * typeck2.c (digest_init): Allow brace-enclosed initializers for
        * typeck2.c (digest_init): Allow brace-enclosed initializers for
        COMPLEX_TYPE, even though that is now a SCALAR_TYPE.
        COMPLEX_TYPE, even though that is now a SCALAR_TYPE.
2007-04-25  Paolo Carlini  
2007-04-25  Paolo Carlini  
        * semantics.c (classtype_has_nothrow_copy_or_assign_p): Adjust
        * semantics.c (classtype_has_nothrow_copy_or_assign_p): Adjust
        per N2255; rename as classtype_has_nothrow_assign_or_copy_p.
        per N2255; rename as classtype_has_nothrow_assign_or_copy_p.
        (trait_expr_value): Adjust.
        (trait_expr_value): Adjust.
2007-04-23  Simon Baldwin  
2007-04-23  Simon Baldwin  
        * decl.c (grokparms): Added new error for duplicate function
        * decl.c (grokparms): Added new error for duplicate function
        parameters names in function prototypes, to match gcc behavior.
        parameters names in function prototypes, to match gcc behavior.
2007-04-23  Jan Hubicka  
2007-04-23  Jan Hubicka  
        * decl2.c (finish_objects): Do not call target constructor/destructor
        * decl2.c (finish_objects): Do not call target constructor/destructor
        bits dirrectly.
        bits dirrectly.
2007-04-21  Andrew Pinski  
2007-04-21  Andrew Pinski  
        * cp-tree.h (lang_tree_node): Use GENERIC_NEXT
        * cp-tree.h (lang_tree_node): Use GENERIC_NEXT
        instead of checking GIMPLE_STMT_P in chain_next.
        instead of checking GIMPLE_STMT_P in chain_next.
2007-04-17  Mark Mitchell  
2007-04-17  Mark Mitchell  
        PR c++/31513
        PR c++/31513
        * call.c (convert_for_arg_passing): Convert bitfields to their
        * call.c (convert_for_arg_passing): Convert bitfields to their
        declared types.
        declared types.
2007-04-17  Simon Martin  
2007-04-17  Simon Martin  
        PR c++/31517
        PR c++/31517
        * pt.c (value_dependent_expression_p): Handle MODOP_EXPRs.
        * pt.c (value_dependent_expression_p): Handle MODOP_EXPRs.
2007-04-16  Seongbae Park 
2007-04-16  Seongbae Park 
        PR c++/29365
        PR c++/29365
        * decl2.c (constrain_class_visibility):
        * decl2.c (constrain_class_visibility):
        Do not warn about the use of anonymous namespace in the main input file.
        Do not warn about the use of anonymous namespace in the main input file.
2007-04-15  Mark Mitchell  
2007-04-15  Mark Mitchell  
        * cp-tree.h (current_template_parms): Fix typo in comment.
        * cp-tree.h (current_template_parms): Fix typo in comment.
2007-04-15  Kazu Hirata  
2007-04-15  Kazu Hirata  
        * cp-tree.h, error.c: Fix comment typos.
        * cp-tree.h, error.c: Fix comment typos.
2007-04-13  Jason Merrill  
2007-04-13  Jason Merrill  
        PR c++/31074
        PR c++/31074
        * call.c (reference_binding): Add c_cast_p parm.  If true,
        * call.c (reference_binding): Add c_cast_p parm.  If true,
        add quals to TO as needed to make it reference-compatible.
        add quals to TO as needed to make it reference-compatible.
2007-04-11  Jan Hubicka  
2007-04-11  Jan Hubicka  
        * class.c (convert_to_base_statically): Fold produced tree; verify
        * class.c (convert_to_base_statically): Fold produced tree; verify
        that we are not processing template_decl.
        that we are not processing template_decl.
2007-04-09  Mark Mitchell  
2007-04-09  Mark Mitchell  
        PR c++/31449
        PR c++/31449
        * class.c (build_base_path): Ensure that the converted pointer has
        * class.c (build_base_path): Ensure that the converted pointer has
        the same cv-qualification as the input.
        the same cv-qualification as the input.
2007-04-09  Paolo Carlini  
2007-04-09  Paolo Carlini  
        * tree.c (cp_tree_equal): Deal with TRAIT_EXPR.
        * tree.c (cp_tree_equal): Deal with TRAIT_EXPR.
2007-04-08  Steven Bosscher  
2007-04-08  Steven Bosscher  
        * cp-objcp-common.h (LANG_HOOKS_TREE_INLINING_ADD_PENDING_FN_DECLS):
        * cp-objcp-common.h (LANG_HOOKS_TREE_INLINING_ADD_PENDING_FN_DECLS):
        Do not set it.
        Do not set it.
        (LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P): Do not set it.
        (LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P): Do not set it.
        * tree.c (cp_add_pending_fn_decls): Remove.
        * tree.c (cp_add_pending_fn_decls): Remove.
        * cp-tree.h (cp_add_pending_fn_decls): Remove prototype.
        * cp-tree.h (cp_add_pending_fn_decls): Remove prototype.
2007-04-07  Daniel Berlin  
2007-04-07  Daniel Berlin  
        Revert change removing staticp.
        Revert change removing staticp.
2007-04-06  Daniel Berlin  
2007-04-06  Daniel Berlin  
        * cp-objcp-common.c (cxx_staticp): Remove.
        * cp-objcp-common.c (cxx_staticp): Remove.
        * cp-objcp-common.h (LANG_HOOKS_STATICP): Remove.
        * cp-objcp-common.h (LANG_HOOKS_STATICP): Remove.
        * cp-tree.h (cxx_staticp):
        * cp-tree.h (cxx_staticp):
2007-04-04  Danny Smith  
2007-04-04  Danny Smith  
        * class.c (check_for_override): Don't remove dllmport attribute
        * class.c (check_for_override): Don't remove dllmport attribute
        of virtual methods.
        of virtual methods.
2007-04-03  Jakub Jelinek  
2007-04-03  Jakub Jelinek  
        PR c++/30847
        PR c++/30847
        * typeck.c (build_modify_expr): For COND_EXPR on LHS, if RHS has void
        * typeck.c (build_modify_expr): For COND_EXPR on LHS, if RHS has void
        type issue error and return early.
        type issue error and return early.
2007-03-30  Jason Merrill  
2007-03-30  Jason Merrill  
        PR c++/31187
        PR c++/31187
        * typeck.c (cp_type_readonly): New fn.
        * typeck.c (cp_type_readonly): New fn.
        * cp-tree.h: Declare it.
        * cp-tree.h: Declare it.
        * decl.c (start_decl): Set implicit DECL_THIS_STATIC here.
        * decl.c (start_decl): Set implicit DECL_THIS_STATIC here.
        (cp_finish_decl): Not here.
        (cp_finish_decl): Not here.
2007-03-31  Richard Guenther  
2007-03-31  Richard Guenther  
        * optimize.c (maybe_clone_body): Replace splay-tree usage by
        * optimize.c (maybe_clone_body): Replace splay-tree usage by
        pointer-map.
        pointer-map.
2007-03-31  Douglas Gregor  
2007-03-31  Douglas Gregor  
        PR c++/31138
        PR c++/31138
        PR c++/31140
        PR c++/31140
        PR c++/31141
        PR c++/31141
        * parser.c (declarator_can_be_parameter_pack): New.
        * parser.c (declarator_can_be_parameter_pack): New.
        (cp_parser_template_parameter): Only parse the `...' if the
        (cp_parser_template_parameter): Only parse the `...' if the
        declarator can be a parameter pack.
        declarator can be a parameter pack.
        (cp_parser_parameter_declaration): Ditto. Also, handle when TYPE
        (cp_parser_parameter_declaration): Ditto. Also, handle when TYPE
        is NULL.
        is NULL.
        * pt.c (find_parameter_packs_r): Look into the bounds on integer
        * pt.c (find_parameter_packs_r): Look into the bounds on integer
        types (they could be used as array bounds).
        types (they could be used as array bounds).
        (check_for_bare_parameter_packs): Deal with TEMPLATE_PARM_INDEX.
        (check_for_bare_parameter_packs): Deal with TEMPLATE_PARM_INDEX.
        (tsubst_pack_expansion): Handle failure to expand parameter
        (tsubst_pack_expansion): Handle failure to expand parameter
        packs.
        packs.
2007-03-30  Paolo Carlini  
2007-03-30  Paolo Carlini  
        PR c++/26099
        PR c++/26099
        * cp-tree.h (enum cp_trait_kind, struct tree_trait_expr,
        * cp-tree.h (enum cp_trait_kind, struct tree_trait_expr,
        TRAIT_EXPR_TYPE1, TRAIT_EXPR_TYPE2, TRAIT_EXPR_KIND): Add.
        TRAIT_EXPR_TYPE1, TRAIT_EXPR_TYPE2, TRAIT_EXPR_KIND): Add.
        (enum cp_tree_node_structure_enum, union lang_tree_node): Update.
        (enum cp_tree_node_structure_enum, union lang_tree_node): Update.
        (CLASS_TYPE_NON_UNION_P): Add.
        (CLASS_TYPE_NON_UNION_P): Add.
        (struct lang_type_class): Add has_complex_dflt.
        (struct lang_type_class): Add has_complex_dflt.
        (TYPE_HAS_COMPLEX_DFLT, TYPE_HAS_TRIVIAL_DFLT): Add.
        (TYPE_HAS_COMPLEX_DFLT, TYPE_HAS_TRIVIAL_DFLT): Add.
        (locate_copy, locate_ctor, locate_dtor, finish_trait_expr): Declare.
        (locate_copy, locate_ctor, locate_dtor, finish_trait_expr): Declare.
        * cp-tree.def: Add TRAIT_EXPR.
        * cp-tree.def: Add TRAIT_EXPR.
        * cp-objcp-common.c (cp_tree_size): Add TRAIT_EXPR case.
        * cp-objcp-common.c (cp_tree_size): Add TRAIT_EXPR case.
        * lex.c (struct resword): Add __has_nothrow_assign,
        * lex.c (struct resword): Add __has_nothrow_assign,
        __has_nothrow_constructor, __has_nothrow_copy, __has_trivial_assign,
        __has_nothrow_constructor, __has_nothrow_copy, __has_trivial_assign,
        __has_trivial_constructor, __has_trivial_copy,
        __has_trivial_constructor, __has_trivial_copy,
        __has_trivial_destructor, __has_virtual_destructor, __is_abstract,
        __has_trivial_destructor, __has_virtual_destructor, __is_abstract,
        __is_base_of, __is_class, __is_convertible_to, __is_empty, __is_enum,
        __is_base_of, __is_class, __is_convertible_to, __is_empty, __is_enum,
        __is_pod, __is_polymorphic, __is_union.
        __is_pod, __is_polymorphic, __is_union.
        * parser.c (cp_parser_primary_expression): Deal with the new RIDs.
        * parser.c (cp_parser_primary_expression): Deal with the new RIDs.
        (cp_parser_trait_expr): New.
        (cp_parser_trait_expr): New.
        * semantics.c (finish_trait_expr, trait_expr_value
        * semantics.c (finish_trait_expr, trait_expr_value
        classtype_has_nothrow_copy_or_assign_p): New.
        classtype_has_nothrow_copy_or_assign_p): New.
        * method.c (locate_copy, locate_ctor, locate_dtor): Do not define
        * method.c (locate_copy, locate_ctor, locate_dtor): Do not define
        as static.
        as static.
        * decl.c (cp_tree_node_structure): Add TRAIT_EXPR.
        * decl.c (cp_tree_node_structure): Add TRAIT_EXPR.
        * class.c (check_bases, check_field_decl, check_bases_and_members):
        * class.c (check_bases, check_field_decl, check_bases_and_members):
        Deal with TYPE_HAS_COMPLEX_DFLT (t) too.
        Deal with TYPE_HAS_COMPLEX_DFLT (t) too.
        * pt.c (uses_template_parms, tsubst_copy_and_build,
        * pt.c (uses_template_parms, tsubst_copy_and_build,
        value_dependent_expression_p, type_dependent_expression_p): Deal with
        value_dependent_expression_p, type_dependent_expression_p): Deal with
        TRAIT_EXPR.
        TRAIT_EXPR.
        * tree.c (cp_walk_subtrees): Deal with TRAIT_EXPR.
        * tree.c (cp_walk_subtrees): Deal with TRAIT_EXPR.
2007-03-29  Richard Guenther  
2007-03-29  Richard Guenther  
        * tree.c (cp_walk_subtrees): Do not set input_location.
        * tree.c (cp_walk_subtrees): Do not set input_location.
2007-03-28  Simon Martin  
2007-03-28  Simon Martin  
        PR c++/29077
        PR c++/29077
        * decl.c (grokfndecl): Properly setup decl if it is a constructor or a
        * decl.c (grokfndecl): Properly setup decl if it is a constructor or a
        destructor.
        destructor.
2007-03-28 Douglas Gregor 
2007-03-28 Douglas Gregor 
        * parser.c (struct cp_parser): Update comment for
        * parser.c (struct cp_parser): Update comment for
        greater_than_is_operator_p.
        greater_than_is_operator_p.
        (cp_parser_primary_expression): In C++0x mode, a cast operator can
        (cp_parser_primary_expression): In C++0x mode, a cast operator can
        be terminated with a `>>' token when !GREATER_THAN_IS_OPERATOR_P.
        be terminated with a `>>' token when !GREATER_THAN_IS_OPERATOR_P.
        (TOKEN_PRECEDENCE): In C++0x mode, `>>' is treated like `>' when
        (TOKEN_PRECEDENCE): In C++0x mode, `>>' is treated like `>' when
        !GREATER_THAN_IS_OPERATOR_P.
        !GREATER_THAN_IS_OPERATOR_P.
        (cp_parser_binary_expression): When -Wc++0x-compat, warn about
        (cp_parser_binary_expression): When -Wc++0x-compat, warn about
        `>>' operators that will become two `>' tokens in C++0x.
        `>>' operators that will become two `>' tokens in C++0x.
        (cp_parser_parameter_declaration): Treat `>>' like `>' in C++0x
        (cp_parser_parameter_declaration): Treat `>>' like `>' in C++0x
        mode, allowing it to terminate default arguments.
        mode, allowing it to terminate default arguments.
        (cp_parser_enclosed_template_argument_list): In C++0x mode, treat
        (cp_parser_enclosed_template_argument_list): In C++0x mode, treat
        `>>' like two consecutive `>' tokens.
        `>>' like two consecutive `>' tokens.
        (cp_parser_skip_to_end_of_template_parameter_list): Ditto.
        (cp_parser_skip_to_end_of_template_parameter_list): Ditto.
        (cp_parser_next_token_ends_template_argument_p): In C++0x, `>>'
        (cp_parser_next_token_ends_template_argument_p): In C++0x, `>>'
        ends a template argument.
        ends a template argument.
2007-03-28  Douglas Gregor  
2007-03-28  Douglas Gregor  
        * decl.c (redeclaration_error_message): Complain when redeclaring
        * decl.c (redeclaration_error_message): Complain when redeclaring
        a friend function with default template arguments (C++0x mode only).
        a friend function with default template arguments (C++0x mode only).
        * cp-tree.h (check_default_tmpl_args): Declare.
        * cp-tree.h (check_default_tmpl_args): Declare.
        * pt.c (check_default_tmpl_args): In C++0x mode, permit default
        * pt.c (check_default_tmpl_args): In C++0x mode, permit default
        template arguments in function templates. Add support for checking
        template arguments in function templates. Add support for checking
        the default template arguments of friend templates.
        the default template arguments of friend templates.
        (push_template_decl_real): Fix call to check_default_tmpl_args.
        (push_template_decl_real): Fix call to check_default_tmpl_args.
        (type_unification_real): If a template parameter has not been
        (type_unification_real): If a template parameter has not been
        deduced but provides a default template argument, substitute into
        deduced but provides a default template argument, substitute into
        that default template argument.
        that default template argument.
        * parser.c (cp_parser_init_declarator): When declaring (but not
        * parser.c (cp_parser_init_declarator): When declaring (but not
        defining!) a function template in C++0x mode, check for default
        defining!) a function template in C++0x mode, check for default
        template arguments.
        template arguments.
2007-03-28 Douglas Gregor 
2007-03-28 Douglas Gregor 
        PR c++/29993
        PR c++/29993
        * decl.c (grokdeclarator): Deal with cv-qualified function type
        * decl.c (grokdeclarator): Deal with cv-qualified function type
        typedefs in the same way for member and non-member functions.
        typedefs in the same way for member and non-member functions.
2007-03-26  Dirk Mueller  
2007-03-26  Dirk Mueller  
        * parser.c (cp_parser_member_declaration): Pedwarn
        * parser.c (cp_parser_member_declaration): Pedwarn
        about stray semicolons after member declarations.
        about stray semicolons after member declarations.
2007-03-26  Paolo Carlini  
2007-03-26  Paolo Carlini  
        PR c++/30500
        PR c++/30500
        * pt.c (instantiate_decl): Set in_system_header.
        * pt.c (instantiate_decl): Set in_system_header.
2007-03-22  Mark Mitchell  
2007-03-22  Mark Mitchell  
        * cp-tree.h (current_tempalte_parms): Improve documentation.
        * cp-tree.h (current_tempalte_parms): Improve documentation.
        * pt.c (current_template_args): Likewise.
        * pt.c (current_template_args): Likewise.
        PR c++/30863
        PR c++/30863
        * parser.c (cp_parser_parse_and_diagnose_invalid_type_name): Do
        * parser.c (cp_parser_parse_and_diagnose_invalid_type_name): Do
        not consume tokens when failing.
        not consume tokens when failing.
2007-03-22  Jim Wilson  
2007-03-22  Jim Wilson  
            Mark Mitchell  
            Mark Mitchell  
        PR c++/31273
        PR c++/31273
        * call.c (standard_conversion): Use type_decays_to.  Keep FCODE
        * call.c (standard_conversion): Use type_decays_to.  Keep FCODE
        consistent with FROM.
        consistent with FROM.
2007-03-22  Gabriel Dos Reis  
2007-03-22  Gabriel Dos Reis  
        * error.c (dump_expr): Handle dependent names that designate types.
        * error.c (dump_expr): Handle dependent names that designate types.
        * cxx-pretty-print.c (pp_cxx_unqualified_id): Handle TYPENAME_TYPE.
        * cxx-pretty-print.c (pp_cxx_unqualified_id): Handle TYPENAME_TYPE.
2007-03-17  Kazu Hirata  
2007-03-17  Kazu Hirata  
        * cp-tree.def, parser.c, pt.c: Fix comment typos.
        * cp-tree.def, parser.c, pt.c: Fix comment typos.
2007-03-16  Manuel Lopez-Ibanez  
2007-03-16  Manuel Lopez-Ibanez  
        * cvt.c (cp_convert_and_check) : Define.
        * cvt.c (cp_convert_and_check) : Define.
        * cp-tree.h (cp_convert_and_check): Declare.
        * cp-tree.h (cp_convert_and_check): Declare.
        * call.c (convert_conversion_warnings): Rename to
        * call.c (convert_conversion_warnings): Rename to
        conversion_null_warnings.  The warning for floating-point to
        conversion_null_warnings.  The warning for floating-point to
        integer is handled by convert_and_check in convert_like_real.
        integer is handled by convert_and_check in convert_like_real.
        (convert_like_real): convert_conversion_warnings was renamed as
        (convert_like_real): convert_conversion_warnings was renamed as
        conversion_null_warnings.
        conversion_null_warnings.
        * typeck.c (build_binary_op): Use cp_convert_and_check to warn for
        * typeck.c (build_binary_op): Use cp_convert_and_check to warn for
        overflow and changes of value during conversion.
        overflow and changes of value during conversion.
2007-03-15  Manuel Lopez-Ibanez  
2007-03-15  Manuel Lopez-Ibanez  
        PR c++/30891
        PR c++/30891
        * parser.c (cp_parser_statement): If 'namespace' is found, this
        * parser.c (cp_parser_statement): If 'namespace' is found, this
        only can be a namespace alias definition, so parse it now.
        only can be a namespace alias definition, so parse it now.
        (cp_parser_namespace_alias_definition): if we find an open brace
        (cp_parser_namespace_alias_definition): if we find an open brace
        instead of '=', then this is actually a misplaced namespace
        instead of '=', then this is actually a misplaced namespace
        definition.
        definition.
2007-03-15  Manuel Lopez-Ibanez  
2007-03-15  Manuel Lopez-Ibanez  
        PR c++/24924
        PR c++/24924
        * decl.c (cxx_init_decl_processing): Move command-line options
        * decl.c (cxx_init_decl_processing): Move command-line options
        processing to c-opts.c.
        processing to c-opts.c.
2007-03-15  Douglas Gregor  
2007-03-15  Douglas Gregor  
        * ptree.c (cxx_print_type): Use formatting markup for integers
        * ptree.c (cxx_print_type): Use formatting markup for integers
        when printing template parameter index/level/orig level.
        when printing template parameter index/level/orig level.
        (cxx_print_xnode): Ditto.
        (cxx_print_xnode): Ditto.
        * cp-tree.h (TEMPLATE_PARM_PARAMETER_PACK): Use TREE_LANG_FLAG_0.
        * cp-tree.h (TEMPLATE_PARM_PARAMETER_PACK): Use TREE_LANG_FLAG_0.
        (struct template_parm_index_s): Remove the PARAMETER_PACK member.
        (struct template_parm_index_s): Remove the PARAMETER_PACK member.
        Make INDEX, LEVEL, and ORIG_LEVEL integers instead of
        Make INDEX, LEVEL, and ORIG_LEVEL integers instead of
        HOST_WIDE_INTs.
        HOST_WIDE_INTs.
        (struct saved_scope): Make X_PROCESSING_TEMPLATE_DECL an int,
        (struct saved_scope): Make X_PROCESSING_TEMPLATE_DECL an int,
        rather than a HOST_WIDE_INT.
        rather than a HOST_WIDE_INT.
        Turn X_PROCESSING_EXPLICIT_INSTANTIATION, SKIP_EVALUATION, and
        Turn X_PROCESSING_EXPLICIT_INSTANTIATION, SKIP_EVALUATION, and
        NEED_POP_FUNCTION_CONTEXT into bool bitfields; reorder fields for
        NEED_POP_FUNCTION_CONTEXT into bool bitfields; reorder fields for
        better bit-packing.
        better bit-packing.
        (struct language_function): Make RETURNS_VALUE, RETURNS_NULL,
        (struct language_function): Make RETURNS_VALUE, RETURNS_NULL,
        RETURNS_ABNORMALLY, IN_FUNCTION_TRY_HANDLER, and
        RETURNS_ABNORMALLY, IN_FUNCTION_TRY_HANDLER, and
        IN_BASE_INITIALIZER bool bitfields.
        IN_BASE_INITIALIZER bool bitfields.
        (struct cp_declarator): Make KIND a 4-bit field. Make
        (struct cp_declarator): Make KIND a 4-bit field. Make
        PARAMETER_PACK_P a bool bitfield just after KIND.
        PARAMETER_PACK_P a bool bitfield just after KIND.
        * pt.c (uses_parameter_packs): Destroy the pointer set.
        * pt.c (uses_parameter_packs): Destroy the pointer set.
        (make_pack_expansion): Ditto.
        (make_pack_expansion): Ditto.
        (check_for_bare_parameter_packs): Ditto.
        (check_for_bare_parameter_packs): Ditto.
        * name-lookup.c (push_to_top_level): Make need_pop a bool value.
        * name-lookup.c (push_to_top_level): Make need_pop a bool value.
2007-03-14  Andrew Pinski  
2007-03-14  Andrew Pinski  
        PR c++/31165
        PR c++/31165
        * call.c  (convert_default_arg): Instead of copying the node,
        * call.c  (convert_default_arg): Instead of copying the node,
        unshare it.
        unshare it.
2007-03-15  Dirk Mueller  
2007-03-15  Dirk Mueller  
        PR c++/30860
        PR c++/30860
        * call.c (convert_conversion_warnings): New..
        * call.c (convert_conversion_warnings): New..
        (convert_like_real): .. factored out from here.
        (convert_like_real): .. factored out from here.
        (convert_conversion_warnings): Add warning about
        (convert_conversion_warnings): Add warning about
        false being converted to NULL in argument passing.
        false being converted to NULL in argument passing.
2007-03-14  Dirk Mueller  
2007-03-14  Dirk Mueller  
        * semantics.c (c_finish_if_stmt): Call empty_if_body_warning.
        * semantics.c (c_finish_if_stmt): Call empty_if_body_warning.
        (finish_do_body): Warn about empty body in do/while statement.
        (finish_do_body): Warn about empty body in do/while statement.
2007-03-14  Manuel Lopez-Ibanez  
2007-03-14  Manuel Lopez-Ibanez  
        * class.c (warn_hidden): Add OPT_Woverloaded_virtual to warning.
        * class.c (warn_hidden): Add OPT_Woverloaded_virtual to warning.
2007-03-14  Manuel Lopez-Ibanez  
2007-03-14  Manuel Lopez-Ibanez  
        PR c/21438
        PR c/21438
        * typeck.c (build_binary_op): Call warn_for_div_zero instead of
        * typeck.c (build_binary_op): Call warn_for_div_zero instead of
        warning.
        warning.
2007-03-13  Alexandre Oliva  
2007-03-13  Alexandre Oliva  
        * repo.c (init_repo): Initialize random_seed saved options.
        * repo.c (init_repo): Initialize random_seed saved options.
        (finish_repo): Adjust.
        (finish_repo): Adjust.
2007-03-13  Mark Mitchell  
2007-03-13  Mark Mitchell  
        PR bootstrap/30899
        PR bootstrap/30899
        * Make-lang.in (doc/g++.1): Use $< to specify the location from
        * Make-lang.in (doc/g++.1): Use $< to specify the location from
        which to copy.
        which to copy.
2007-03-12  Seongbae Park 
2007-03-12  Seongbae Park 
        * decl.c (compute_array_index_type): New warning flag warn_vla.
        * decl.c (compute_array_index_type): New warning flag warn_vla.
2007-03-12  Mark Mitchell  
2007-03-12  Mark Mitchell  
        PR c++/30108
        PR c++/30108
        * call.c (convert_default_arg): Copy non-constant arguments.
        * call.c (convert_default_arg): Copy non-constant arguments.
2007-03-11  Mark Mitchell  
2007-03-11  Mark Mitchell  
        PR c++/31038
        PR c++/31038
        * parser.c (cp_parser_postfix_expression): Disallow compound
        * parser.c (cp_parser_postfix_expression): Disallow compound
        literals in constant expressions.
        literals in constant expressions.
        PR c++/30328
        PR c++/30328
        * semantics.c (finish_typeof): Use unlowered_expr_type.
        * semantics.c (finish_typeof): Use unlowered_expr_type.
2007-03-10  Mark Mitchell  
2007-03-10  Mark Mitchell  
        PR c++/30274
        PR c++/30274
        * cp-tree.h (unlowered_expr_type): New function.
        * cp-tree.h (unlowered_expr_type): New function.
        * typeck.c (is_bitfield_expr_with_lowered_type): Handle
        * typeck.c (is_bitfield_expr_with_lowered_type): Handle
        COMPOUND_EXPR, MODIFY_EXPR, and SAVE_EXPR.
        COMPOUND_EXPR, MODIFY_EXPR, and SAVE_EXPR.
        (unlowered_expr_type): New function.
        (unlowered_expr_type): New function.
        (build_unary_op): Disallow predecrements of bool bitfields.
        (build_unary_op): Disallow predecrements of bool bitfields.
        * call.c (build_conditional_expr): Use unlowered_expr_type.
        * call.c (build_conditional_expr): Use unlowered_expr_type.
        * pt.c (type_unification_real): Likewise.
        * pt.c (type_unification_real): Likewise.
2007-03-09  Douglas Gregor  
2007-03-09  Douglas Gregor  
        PR c++/20599
        PR c++/20599
        * typeck.c (check_return_expr): Check for bare parameter packs.
        * typeck.c (check_return_expr): Check for bare parameter packs.
        (comptypes): Compare template parameter packs and
        (comptypes): Compare template parameter packs and
        type pack expansions.
        type pack expansions.
        * decl.c (grokdeclarator): Deal with the declaration of function
        * decl.c (grokdeclarator): Deal with the declaration of function
        parameter packs.
        parameter packs.
        (grokparms): Verify that the (optional) function parameter pack is
        (grokparms): Verify that the (optional) function parameter pack is
        at the end of the parameter list.
        at the end of the parameter list.
        (xref_basetypes): Handle pack expansions in the base class.
        (xref_basetypes): Handle pack expansions in the base class.
        (cp_tree_node_structure): Handle ARGUMENT_PACK_SELECT.
        (cp_tree_node_structure): Handle ARGUMENT_PACK_SELECT.
        * cp-tree.def (TYPE_ARGUMENT_PACK): New.
        * cp-tree.def (TYPE_ARGUMENT_PACK): New.
        (NONTYPE_ARGUMENT_PACK): New.
        (NONTYPE_ARGUMENT_PACK): New.
        (TYPE_PACK_EXPANSION): New.
        (TYPE_PACK_EXPANSION): New.
        (EXPR_PACK_EXPANSION): New.
        (EXPR_PACK_EXPANSION): New.
        (ARGUMENT_PACK_SELECT): New.
        (ARGUMENT_PACK_SELECT): New.
        * cp-objcp-common.c (cp_tree_size): Compute size of
        * cp-objcp-common.c (cp_tree_size): Compute size of
        (NON)TYPE_ARGUMENT_PACK, (TYPE|EXPR)_PACK_EXPANSION, and
        (NON)TYPE_ARGUMENT_PACK, (TYPE|EXPR)_PACK_EXPANSION, and
        ARGUMENT_PACK_SELECT.
        ARGUMENT_PACK_SELECT.
        * error.c (dump_template_argument): Print template argument packs.
        * error.c (dump_template_argument): Print template argument packs.
        (dump_template_argument_list): Ditto.
        (dump_template_argument_list): Ditto.
        (dump_template_parameter): Dump `...' for template type parameter
        (dump_template_parameter): Dump `...' for template type parameter
        packs.
        packs.
        (dump_type): Dump TYPE_PACK_EXPANSION nodes.
        (dump_type): Dump TYPE_PACK_EXPANSION nodes.
        (dump_parameters): Print function parameter packs.
        (dump_parameters): Print function parameter packs.
        (dump_template_parms): Print template argument packs.
        (dump_template_parms): Print template argument packs.
        (dump_expr): Dump EXPR_PACK_EXPANSION nodes.
        (dump_expr): Dump EXPR_PACK_EXPANSION nodes.
        (maybe_warn_variadic_templates): New.
        (maybe_warn_variadic_templates): New.
        * operators.def: Add ellipsis operator for EXPR_PACK_EXPANSION.
        * operators.def: Add ellipsis operator for EXPR_PACK_EXPANSION.
        * tree.c (cp_walk_subtrees): Walk BASELINK, TYPE_ARGUMENT_PACK,
        * tree.c (cp_walk_subtrees): Walk BASELINK, TYPE_ARGUMENT_PACK,
        NONTYPE_ARGUMENT_PACK, TYPE_PACK_EXPANSION, EXPR_PACK_EXPANSION,
        NONTYPE_ARGUMENT_PACK, TYPE_PACK_EXPANSION, EXPR_PACK_EXPANSION,
        CAST_EXPR.
        CAST_EXPR.
        * mangle.c (write_type): Mangle TYPE_PACK_EXPANSION.
        * mangle.c (write_type): Mangle TYPE_PACK_EXPANSION.
        (write_template_arg): Write argument packs as separate arguments.
        (write_template_arg): Write argument packs as separate arguments.
        * cp-tree.h (struct template_parm_index_s): Add flag that
        * cp-tree.h (struct template_parm_index_s): Add flag that
        indicates that the template parameter is actually a parameter
        indicates that the template parameter is actually a parameter
        pack.
        pack.
        (struct tree_argument_pack_select): New.
        (struct tree_argument_pack_select): New.
        (enum cp_tree_node_structure_enum): Add TS_CP_ARGUMENT_PACK_SELECT.
        (enum cp_tree_node_structure_enum): Add TS_CP_ARGUMENT_PACK_SELECT.
        (union lang_tree_node): Add argument_pack_select.
        (union lang_tree_node): Add argument_pack_select.
        (FUNCTION_PARAMETER_PACK_P): New.
        (FUNCTION_PARAMETER_PACK_P): New.
        (PACK_EXPANSION_P): New.
        (PACK_EXPANSION_P): New.
        (PACK_EXPANSION_PATTERN): New.
        (PACK_EXPANSION_PATTERN): New.
        (SET_PACK_EXPANSION_PATTERN): New.
        (SET_PACK_EXPANSION_PATTERN): New.
        (PACK_EXPANSION_PARAMETER_PACKS): New.
        (PACK_EXPANSION_PARAMETER_PACKS): New.
        (ARGUMENT_PACK_P): New.
        (ARGUMENT_PACK_P): New.
        (ARGUMENT_PACK_ARGS): New.
        (ARGUMENT_PACK_ARGS): New.
        (SET_ARGUMENT_PACK_ARGS): New.
        (SET_ARGUMENT_PACK_ARGS): New.
        (ARGUMENT_PACK_INCOMPLETE_P): New.
        (ARGUMENT_PACK_INCOMPLETE_P): New.
        (ARGUMENT_PACK_EXPLICIT_ARGS): New.
        (ARGUMENT_PACK_EXPLICIT_ARGS): New.
        (TEMPLATE_PARM_PARAMETER_PACK): New.
        (TEMPLATE_PARM_PARAMETER_PACK): New.
        (TEMPLATE_TYPE_PARAMETER_PACK): New.
        (TEMPLATE_TYPE_PARAMETER_PACK): New.
        (ARGUMENT_PACK_SELECT_FROM_PACK): New.
        (ARGUMENT_PACK_SELECT_FROM_PACK): New.
        (ARGUMENT_PACK_SELECT_INDEX): New.
        (ARGUMENT_PACK_SELECT_INDEX): New.
        (ARGUMENT_PACK_SELECT_ARG): New.
        (ARGUMENT_PACK_SELECT_ARG): New.
        (struct cp_declarator): Add parameter_pack_p flag.
        (struct cp_declarator): Add parameter_pack_p flag.
        (maybe_warn_variadic_templates): Declare.
        (maybe_warn_variadic_templates): Declare.
        (process_template_parm): Add bool parameter IS_PARAMETER_PACK, to
        (process_template_parm): Add bool parameter IS_PARAMETER_PACK, to
        indicate a template parameter pack.
        indicate a template parameter pack.
        (uses_parameter_packs): Declare.
        (uses_parameter_packs): Declare.
        (template_parameter_pack_p): Declare.
        (template_parameter_pack_p): Declare.
        (template_parms_variadic_p): Declare.
        (template_parms_variadic_p): Declare.
        (make_pack_expansion): Declare.
        (make_pack_expansion): Declare.
        (check_for_bare_parameter_packs): Declare.
        (check_for_bare_parameter_packs): Declare.
        * cxx-pretty-print.c (pp_cxx_unary_expression): Print
        * cxx-pretty-print.c (pp_cxx_unary_expression): Print
        sizeof... expressions.
        sizeof... expressions.
        (pp_cxx_expression): Print pack expansions and non-type argument
        (pp_cxx_expression): Print pack expansions and non-type argument
        packs.
        packs.
        (pp_cxx_exception_specification): Print pack expansions.
        (pp_cxx_exception_specification): Print pack expansions.
        (pp_cxx_direct_declarator): Print ellipsis for parameter packs.
        (pp_cxx_direct_declarator): Print ellipsis for parameter packs.
        (pp_cxx_ctor_initializer): Print pack expansions.
        (pp_cxx_ctor_initializer): Print pack expansions.
        (pp_cxx_type_id): Print pack expansions.
        (pp_cxx_type_id): Print pack expansions.
        (pp_cxx_template_argument_list): Print argument packs.
        (pp_cxx_template_argument_list): Print argument packs.
        (pp_cxx_template_parameter): Print ellipsis for template parameter
        (pp_cxx_template_parameter): Print ellipsis for template parameter
        packs.
        packs.
        * pt.c (comp_template_parms): Compare template parameter packs.
        * pt.c (comp_template_parms): Compare template parameter packs.
        (template_parameter_pack_p): New.
        (template_parameter_pack_p): New.
        (template_parms_variadic_p): New.
        (template_parms_variadic_p): New.
        (template_args_variadic_p): New.
        (template_args_variadic_p): New.
        (make_ith_pack_parameter_name): New.
        (make_ith_pack_parameter_name): New.
        (struct find_parameter_pack_data): New.
        (struct find_parameter_pack_data): New.
        (find_parameter_packs_r): New.
        (find_parameter_packs_r): New.
        (uses_parameter_packs): New.
        (uses_parameter_packs): New.
        (make_pack_expansion): New.
        (make_pack_expansion): New.
        (check_for_bare_parameter_packs): New.
        (check_for_bare_parameter_packs): New.
        (expand_template_argument_pack): New.
        (expand_template_argument_pack): New.
        (reduce_template_parm_level): Propagate parameter pack flag.
        (reduce_template_parm_level): Propagate parameter pack flag.
        (process_template_parm): Add is_parameter_pack parameter to state
        (process_template_parm): Add is_parameter_pack parameter to state
        when the parameter is actually a parameter pack. Create template
        when the parameter is actually a parameter pack. Create template
        parameter packs when is_parameter_pack is true.
        parameter packs when is_parameter_pack is true.
        (current_template_args): The argument for a template parameter
        (current_template_args): The argument for a template parameter
        pack is an argument pack containing a single pack expansion.
        pack is an argument pack containing a single pack expansion.
        (process_partial_specialization): When checking that non-type
        (process_partial_specialization): When checking that non-type
        argument expressions do not involve template parameters, loop over
        argument expressions do not involve template parameters, loop over
        the arguments in argument packs separately.
        the arguments in argument packs separately.
        (push_template_decl_real): Check that the type of the declaration
        (push_template_decl_real): Check that the type of the declaration
        does not have any bare parameter packs. Check that primary
        does not have any bare parameter packs. Check that primary
        templates have no more than one parameter pack, and that it comes
        templates have no more than one parameter pack, and that it comes
        at the end of the template parameter list.
        at the end of the template parameter list.
        (convert_template_argument): Handle coercions for pack expansion
        (convert_template_argument): Handle coercions for pack expansion
        expressions by coercing the pattern then rebuilding the expansion.
        expressions by coercing the pattern then rebuilding the expansion.
        (coerce_template_parms): When coercing the arguments for a
        (coerce_template_parms): When coercing the arguments for a
        variadic template, pack "extra" arguments into an argument pack.
        variadic template, pack "extra" arguments into an argument pack.
        (coerce_template_template_parms): Cannot coerce between parameter
        (coerce_template_template_parms): Cannot coerce between parameter
        packs and non-pack parameters.
        packs and non-pack parameters.
        (template_args_equal): Compare PACK_EXPANSION_P expressions.
        (template_args_equal): Compare PACK_EXPANSION_P expressions.
        (comp_template_args): Expand all template arguments packs before
        (comp_template_args): Expand all template arguments packs before
        comparing template argument lists.
        comparing template argument lists.
        (mangle_class_name_for_template): Make argument packs as separate
        (mangle_class_name_for_template): Make argument packs as separate
        template arguments.
        template arguments.
        (for_each_template_parm_r): No need to handle BASELINK.
        (for_each_template_parm_r): No need to handle BASELINK.
        (instantiate_class_template): Handle pack expansions in the base
        (instantiate_class_template): Handle pack expansions in the base
        class list.
        class list.
        (tsubst_pack_expansion): New.
        (tsubst_pack_expansion): New.
        (tsubst_template_args): Handle substitutions of argument packs and
        (tsubst_template_args): Handle substitutions of argument packs and
        pack expansion into template argument lists.
        pack expansion into template argument lists.
        (tsubst_decl): Expand function parameter packs into separate
        (tsubst_decl): Expand function parameter packs into separate
        function parameters.
        function parameters.
        (tsubst_arg_types): Expand a type pack expansion into separate
        (tsubst_arg_types): Expand a type pack expansion into separate
        argument types.
        argument types.
        (tsubst_exception_specification): Handle pack expansions in
        (tsubst_exception_specification): Handle pack expansions in
        exception specifiers.
        exception specifiers.
        (tsubst): See through ARGUMENT_PACK_SELECT arguments when
        (tsubst): See through ARGUMENT_PACK_SELECT arguments when
        replacing a template parameter with its argument. If we encounter
        replacing a template parameter with its argument. If we encounter
        a substitution for an argument pack, just return the parameter
        a substitution for an argument pack, just return the parameter
        itself.
        itself.
        (tsubst_copy): sizeof(X...) returns the number of elements in
        (tsubst_copy): sizeof(X...) returns the number of elements in
        parameter pack X.  See through ARGUMENT_PACK_SELECT when the
        parameter pack X.  See through ARGUMENT_PACK_SELECT when the
        PARM_DECL is a parameter pack.
        PARM_DECL is a parameter pack.
        (tsubst_expr): Expression pack expansions and argument packs
        (tsubst_expr): Expression pack expansions and argument packs
        cannot show up here; they will all be handled through function
        cannot show up here; they will all be handled through function
        calls, sizeof, and template argument lists.
        calls, sizeof, and template argument lists.
        (tsubst_copy_and_build): sizeof(X...) returns the number of
        (tsubst_copy_and_build): sizeof(X...) returns the number of
        elements in parameter pack X.  Handle pack expansions in TREE_LIST
        elements in parameter pack X.  Handle pack expansions in TREE_LIST
        and CONSTRUCTOR nodes.
        and CONSTRUCTOR nodes.
        (fn_type_unification): Handle "incomplete" explicit template
        (fn_type_unification): Handle "incomplete" explicit template
        argument lists that specify some of the arguments for a template
        argument lists that specify some of the arguments for a template
        parameter pack.
        parameter pack.
        (type_unification_real): Unify arguments against pack expansions.
        (type_unification_real): Unify arguments against pack expansions.
        (template_parm_level_and_index): New, helper function.
        (template_parm_level_and_index): New, helper function.
        (unify_pack_expansion): New.
        (unify_pack_expansion): New.
        (unify): Unify argument packs on an argument-by-argument basis,
        (unify): Unify argument packs on an argument-by-argument basis,
        handling variadic argument packs as well.
        handling variadic argument packs as well.
        (more_specialized_fn): Handle unification of function parameter
        (more_specialized_fn): Handle unification of function parameter
        packs. All things being equal, prefer non-variadic function
        packs. All things being equal, prefer non-variadic function
        templates to variadic function templates.
        templates to variadic function templates.
        (more_specialized_class): Prefer the variadic class template
        (more_specialized_class): Prefer the variadic class template
        partial specialization that binds fewer arguments to a parameter
        partial specialization that binds fewer arguments to a parameter
        pack.
        pack.
        (regenerate_decl_from_template): Expand function parameter packs
        (regenerate_decl_from_template): Expand function parameter packs
        into separate parameters.
        into separate parameters.
        (instantiate_decl): Ditto.
        (instantiate_decl): Ditto.
        (tsubst_initializer_list): Handle pack expansions for base-class
        (tsubst_initializer_list): Handle pack expansions for base-class
        initializers.
        initializers.
        (dependent_type_p_r): Determine dependent types in argument packs
        (dependent_type_p_r): Determine dependent types in argument packs
        and pack expansions.
        and pack expansions.
        (value_dependent_expression_p): Determine value-dependence of
        (value_dependent_expression_p): Determine value-dependence of
        non-type argument packs.
        non-type argument packs.
        (dependent_template_arg_p): Handle argument packs.
        (dependent_template_arg_p): Handle argument packs.
        * semantics.c (finish_cond): Check for bare parameter packs.
        * semantics.c (finish_cond): Check for bare parameter packs.
        (finish_expr_stmt): Ditto.
        (finish_expr_stmt): Ditto.
        (finish_for_expr): Ditto.
        (finish_for_expr): Ditto.
        (finish_switch_cond): Ditto.
        (finish_switch_cond): Ditto.
        (finish_mem_initializers): Ditto.
        (finish_mem_initializers): Ditto.
        * name-lookup.c (arg_assoc_type): Handle pack expansions and
        * name-lookup.c (arg_assoc_type): Handle pack expansions and
        argument packs.
        argument packs.
        * decl2.c (cp_build_parm_decl): Mark function parameter packs.
        * decl2.c (cp_build_parm_decl): Mark function parameter packs.
        * parser.c (make_declarator): Declarator is not an expansion.
        * parser.c (make_declarator): Declarator is not an expansion.
        (make_pointer_declarator): Transfer parameter pack flag to outer
        (make_pointer_declarator): Transfer parameter pack flag to outer
        declarator.
        declarator.
        (make_reference_declarator): Ditto.
        (make_reference_declarator): Ditto.
        (make_ptrmem_declarator): Ditto.
        (make_ptrmem_declarator): Ditto.
        (make_call_declarator): Ditto.
        (make_call_declarator): Ditto.
        (make_array_declarator): Ditto.
        (make_array_declarator): Ditto.
        (cp_parser_postfix_expression): Allow pack expansion expressions
        (cp_parser_postfix_expression): Allow pack expansion expressions
        in the argument list for a call expression.
        in the argument list for a call expression.
        (cp_parser_parenthesized_expression_list): Add new parameter
        (cp_parser_parenthesized_expression_list): Add new parameter
        ALLOW_EXPANSION_P. When true, parse the ellipsis to mean "expand
        ALLOW_EXPANSION_P. When true, parse the ellipsis to mean "expand
        into separate arguments."
        into separate arguments."
        (cp_parser_new_placement): Allow pack expansion expressions.
        (cp_parser_new_placement): Allow pack expansion expressions.
        (cp_parser_new_initializer): Ditto.
        (cp_parser_new_initializer): Ditto.
        (cp_parser_mem_initializer_list): Allow ellipsis to create a
        (cp_parser_mem_initializer_list): Allow ellipsis to create a
        base-class initializer expansion.
        base-class initializer expansion.
        (cp_parser_mem_initializer): Ditto.
        (cp_parser_mem_initializer): Ditto.
        (cp_parser_template_parameter_list): Keep track of whether the
        (cp_parser_template_parameter_list): Keep track of whether the
        template parameter is a template parameter pack.
        template parameter is a template parameter pack.
        (cp_parser_template_parameter): Parse the ellipsis to indicate a
        (cp_parser_template_parameter): Parse the ellipsis to indicate a
        template parameter pack.
        template parameter pack.
        (cp_parser_type_parameter): Ditto.
        (cp_parser_type_parameter): Ditto.
        (cp_parser_template_argument_list): Parse the ellipsis to indicate
        (cp_parser_template_argument_list): Parse the ellipsis to indicate
        a pack expansion.
        a pack expansion.
        (cp_parser_direct_declarator): Parse the ellipsis to indicate that
        (cp_parser_direct_declarator): Parse the ellipsis to indicate that
        this declarator is a parameter pack.
        this declarator is a parameter pack.
        (cp_parser_parameter_declaration): The ellipsis does not end the
        (cp_parser_parameter_declaration): The ellipsis does not end the
        parameter declaration, because it might be a parameter pack. Parse
        parameter declaration, because it might be a parameter pack. Parse
        the ellipsis to indicate a parameter pack.
        the ellipsis to indicate a parameter pack.
        (cp_parser_initializer): Allow pack expansions.
        (cp_parser_initializer): Allow pack expansions.
        (cp_parser_initializer_list): Allow ellipsis to create an
        (cp_parser_initializer_list): Allow ellipsis to create an
        initializer expansion.
        initializer expansion.
        (cp_parser_base_clause): Allow ellipsis to create a base specifier
        (cp_parser_base_clause): Allow ellipsis to create a base specifier
        expansion.
        expansion.
        (cp_parser_type_id_list): Allow ellipsis to create an exception
        (cp_parser_type_id_list): Allow ellipsis to create an exception
        specifier expansion.
        specifier expansion.
        (cp_parser_attribute_list): Don't allow pack expansions.
        (cp_parser_attribute_list): Don't allow pack expansions.
        (cp_parser_functional_cast): Allow pack expansions.
        (cp_parser_functional_cast): Allow pack expansions.
        (cp_parser_sizeof_operand): Allow ellipsis following "sizeof" to
        (cp_parser_sizeof_operand): Allow ellipsis following "sizeof" to
        compute the length of a parameter pack.
        compute the length of a parameter pack.
        (cp_parser_next_token_ends_template_argument_p): An ellipsis can
        (cp_parser_next_token_ends_template_argument_p): An ellipsis can
        end a template argument.
        end a template argument.
        * tree.c (cp_walk_subtrees): Walk BASELINK, TYPE_ARGUMENT_PACK,
        * tree.c (cp_walk_subtrees): Walk BASELINK, TYPE_ARGUMENT_PACK,
        NONTYPE_ARGUMENT_PACK, TYPE_PACK_EXPANSION, EXPR_PACK_EXPANSION,
        NONTYPE_ARGUMENT_PACK, TYPE_PACK_EXPANSION, EXPR_PACK_EXPANSION,
        CAST_EXPR.
        CAST_EXPR.
2007-03-09  Dirk Mueller  
2007-03-09  Dirk Mueller  
        * call.c (build_new_op): Call warn_logical_operator.
        * call.c (build_new_op): Call warn_logical_operator.
2007-03-08  Volker Reichelt  
2007-03-08  Volker Reichelt  
        PR c++/30852
        PR c++/30852
        * semantics.c (finish_offsetof): Handle COMPOUND_EXPR.
        * semantics.c (finish_offsetof): Handle COMPOUND_EXPR.
        PR c++/30534
        PR c++/30534
        * pt.c (any_template_arguments_need_structural_equality_p):
        * pt.c (any_template_arguments_need_structural_equality_p):
        Robustify.
        Robustify.
2007-03-08  Alexandre Oliva  
2007-03-08  Alexandre Oliva  
        * decl.c (grokdeclarator): Disable warnings for anonymous
        * decl.c (grokdeclarator): Disable warnings for anonymous
        bitfields.
        bitfields.
2007-03-05  Volker Reichelt  
2007-03-05  Volker Reichelt  
        * typeck2.c (readonly_error): Always emit a hard error.
        * typeck2.c (readonly_error): Always emit a hard error.
        Remove last argument.
        Remove last argument.
        * cp-tree.h (readonly_error): Adjust prototype.
        * cp-tree.h (readonly_error): Adjust prototype.
        * semantics.c (finish_asm_stmt): Adjust call to readonly_error.
        * semantics.c (finish_asm_stmt): Adjust call to readonly_error.
        * typeck.c (build_unary_op): Likewise.
        * typeck.c (build_unary_op): Likewise.
        (build_modify_expr): Likewise.
        (build_modify_expr): Likewise.
2007-03-04  Simon Martin  
2007-03-04  Simon Martin  
        PR c++/30895
        PR c++/30895
        * tree.c (cp_tree_equal): Properly handle COMPLEX_CST trees.
        * tree.c (cp_tree_equal): Properly handle COMPLEX_CST trees.
2007-03-03  Manuel Lopez-Ibanez  
2007-03-03  Manuel Lopez-Ibanez  
        PR c++/15787
        PR c++/15787
        * parser.c (struct cp_parser): New IN_IF_STMT.
        * parser.c (struct cp_parser): New IN_IF_STMT.
        (cp_parser_statement_seq_opt): Handle an unexpected 'else',
        (cp_parser_statement_seq_opt): Handle an unexpected 'else',
        returning if parsing the body of an 'if' statement or issuing an
        returning if parsing the body of an 'if' statement or issuing an
        error and continuing.
        error and continuing.
        (cp_parser_selection_statement): Set IN_IF_STMT bit when parsing
        (cp_parser_selection_statement): Set IN_IF_STMT bit when parsing
        body of 'if'.
        body of 'if'.
        (cp_parser_jump_statement): Mask new IN_IF_STMT bit.
        (cp_parser_jump_statement): Mask new IN_IF_STMT bit.
2007-03-02  Simon Martin  
2007-03-02  Simon Martin  
        PR c++/28253
        PR c++/28253
        * class.c (update_vtable_entry_for_fn): Properly handle invalid overriders
        * class.c (update_vtable_entry_for_fn): Properly handle invalid overriders
        for thunks.
        for thunks.
2007-03-02  Geoffrey Keating  
2007-03-02  Geoffrey Keating  
        * g++spec.c (lang_specific_driver): Add -lstdc++ when compiling
        * g++spec.c (lang_specific_driver): Add -lstdc++ when compiling
        Objective-C++.  Don't exit early if -shared-libgcc needs to be
        Objective-C++.  Don't exit early if -shared-libgcc needs to be
        added.
        added.
2007-03-02  Manuel Lopez-Ibanez  
2007-03-02  Manuel Lopez-Ibanez  
        * typeck.c (common_base_type): Delete unused function.
        * typeck.c (common_base_type): Delete unused function.
2007-03-01  Brooks Moses  
2007-03-01  Brooks Moses  
        * Make-lang.in: Add dummy lang.install-pdf target.
        * Make-lang.in: Add dummy lang.install-pdf target.
2007-03-01  Simon Baldwin 
2007-03-01  Simon Baldwin 
        PR c++/23689
        PR c++/23689
        * decl.c (check_tag_decl): Added new warning for typedef ignored
        * decl.c (check_tag_decl): Added new warning for typedef ignored
        when it precedes an otherwise valid non-typedef declaration.
        when it precedes an otherwise valid non-typedef declaration.
2007-02-28  Sandra Loosemore  
2007-02-28  Sandra Loosemore  
        * typeck.c (build_function_call): Store converted arguments
        * typeck.c (build_function_call): Store converted arguments
        in a stack-allocated array instead of building a list.
        in a stack-allocated array instead of building a list.
        (convert_arguments): Store arguments in the array passed in as an
        (convert_arguments): Store arguments in the array passed in as an
        argument, and return the actual number of arguments.
        argument, and return the actual number of arguments.
        * call.c (build_call): Delete, and replace with...
        * call.c (build_call): Delete, and replace with...
        (build_call_n, build_call_a): New.
        (build_call_n, build_call_a): New.
        (build_op_delete_call): Rewrite to avoid constructing argument lists.
        (build_op_delete_call): Rewrite to avoid constructing argument lists.
        (build_over_call): Store converted arguments in a stack-allocated
        (build_over_call): Store converted arguments in a stack-allocated
        array instead of building a list.
        array instead of building a list.
        (build_cxx_call): Pass arguments in an array instead of as a list.
        (build_cxx_call): Pass arguments in an array instead of as a list.
        (build_java_interface_fn_ref): Rewrite to avoid constructing
        (build_java_interface_fn_ref): Rewrite to avoid constructing
        argument lists.
        argument lists.
        * tree.h: Update declarations to reflect above changes.
        * tree.h: Update declarations to reflect above changes.
        * method.c (use_thunk): Use a stack-allocated array to hold
        * method.c (use_thunk): Use a stack-allocated array to hold
        the arguments instead of a list.
        the arguments instead of a list.
        * rtti.c (throw_bad_cast): Update call to cxx_call.
        * rtti.c (throw_bad_cast): Update call to cxx_call.
        (throw_bad_typeid): Likewise.
        (throw_bad_typeid): Likewise.
        (build_dynamic_cast_1): Likewise.
        (build_dynamic_cast_1): Likewise.
        * init.c (build_builtin_delete_call): Use build_call_n.
        * init.c (build_builtin_delete_call): Use build_call_n.
        * decl.c (expand_static_init): Likewise.
        * decl.c (expand_static_init): Likewise.
        * except.c (cp_protect_cleanup_actions): Likewise.
        * except.c (cp_protect_cleanup_actions): Likewise.
        * cp-gimplify.c (genericize_eh_spec_block): Likewise.
        * cp-gimplify.c (genericize_eh_spec_block): Likewise.
        (gimplify_must_not_throw_expr): Likewise.
        (gimplify_must_not_throw_expr): Likewise.
        (cxx_omp_apply_fn): Use build_call_a.
        (cxx_omp_apply_fn): Use build_call_a.
2007-02-26  Mark Mitchell  
2007-02-26  Mark Mitchell  
        * semantics.c (expand_or_defer_fn): Call c_record_cdtor_fn.
        * semantics.c (expand_or_defer_fn): Call c_record_cdtor_fn.
        * decl2.c (cp_write_gloabl_declarations): Call c_build_cdtor_fns.
        * decl2.c (cp_write_gloabl_declarations): Call c_build_cdtor_fns.
2007-02-25  Mark Mitchell  
2007-02-25  Mark Mitchell  
        * cp-tree.h (static_ctors): Remove.
        * cp-tree.h (static_ctors): Remove.
        * cp-tree.h (static_dtors): Likewise.
        * cp-tree.h (static_dtors): Likewise.
        * cp-objcp-common.c (decl_shadowed_for_var_lookup): Adjust for
        * cp-objcp-common.c (decl_shadowed_for_var_lookup): Adjust for
        refactoring of tree_map hierarchy.
        refactoring of tree_map hierarchy.
        (decl_shadowed_for_var_insert): Likewise.
        (decl_shadowed_for_var_insert): Likewise.
        * semantics.c (expand_body): Use c_expand_body.
        * semantics.c (expand_body): Use c_expand_body.
        (expand_or_defer_fn): Don't update static_ctors or static_dtors.
        (expand_or_defer_fn): Don't update static_ctors or static_dtors.
        * decl2.c (static_ctors): Remove.
        * decl2.c (static_ctors): Remove.
        (static_dtors): Likewise.
        (static_dtors): Likewise.
        (generate_ctor_or_dtor_function): Pass NULL_TREE to
        (generate_ctor_or_dtor_function): Pass NULL_TREE to
        objc_generate_static_init_call.  Do not call static_[cd]tors.
        objc_generate_static_init_call.  Do not call static_[cd]tors.
        (generate_ctor_and_dtor_functions_for_priority): Do not check for
        (generate_ctor_and_dtor_functions_for_priority): Do not check for
        static_[cd]tors.
        static_[cd]tors.
        (cp_write_global_declarations): Likewise.
        (cp_write_global_declarations): Likewise.
2007-02-23  Richard Guenther  
2007-02-23  Richard Guenther  
        * class.c (note_name_declared_in_class): Make declaration
        * class.c (note_name_declared_in_class): Make declaration
        changes meaning a pedwarn.
        changes meaning a pedwarn.
2007-02-22  Michael Matz  
2007-02-22  Michael Matz  
        PR c++/29433
        PR c++/29433
        * cp-tree.h (TFF_UNQUALIFIED_NAME): New formatting flag.
        * cp-tree.h (TFF_UNQUALIFIED_NAME): New formatting flag.
        * error.c (dump_aggr_type, dump_simple_decl, dump_decl,
        * error.c (dump_aggr_type, dump_simple_decl, dump_decl,
        dump_function_decl): Guard emitting outer scopes by new flag.
        dump_function_decl): Guard emitting outer scopes by new flag.
        * cp-lang.c (cxx_dwarf_name): New function.
        * cp-lang.c (cxx_dwarf_name): New function.
        (LANG_HOOKS_DWARF_NAME): Define to cxx_dwarf_name.
        (LANG_HOOKS_DWARF_NAME): Define to cxx_dwarf_name.
        * pt.c (classtype_mangled_name, mangle_class_name_for_template):
        * pt.c (classtype_mangled_name, mangle_class_name_for_template):
        Remove functions.
        Remove functions.
        (push_template_decl_real, lookup_template_class): Remove calls
        (push_template_decl_real, lookup_template_class): Remove calls
        to above functions.
        to above functions.
2007-02-19  Mark Mitchell  
2007-02-19  Mark Mitchell  
        * call.c (build_new_method_call): Ensure that explicit calls of
        * call.c (build_new_method_call): Ensure that explicit calls of
        destructors have type "void".
        destructors have type "void".
2007-02-19  Manuel Lopez-Ibanez  
2007-02-19  Manuel Lopez-Ibanez  
        * typeck.c (build_binary_op): Replace -Wstring-literal-comparison
        * typeck.c (build_binary_op): Replace -Wstring-literal-comparison
        and -Walways-true with -Waddress.
        and -Walways-true with -Waddress.
        * cvt.c (convert_to_void): Replace unconditional warning with
        * cvt.c (convert_to_void): Replace unconditional warning with
        -Waddress.
        -Waddress.
2007-02-18  Kazu Hirata  
2007-02-18  Kazu Hirata  
        * decl.c, tree.c: Fix comment typos.
        * decl.c, tree.c: Fix comment typos.
2007-02-15  Andrew Pinski  
2007-02-15  Andrew Pinski  
        PR C++/30158
        PR C++/30158
        * semantics.c (finish_stmt_expr_expr): Set TREE_TYPE of the
        * semantics.c (finish_stmt_expr_expr): Set TREE_TYPE of the
        statement expression if we had an error mark node.
        statement expression if we had an error mark node.
2007-02-15  Sandra Loosemore  
2007-02-15  Sandra Loosemore  
            Brooks Moses  
            Brooks Moses  
            Lee Millward  
            Lee Millward  
        * cp-tree.def (AGGR_INIT_EXPR): Adjust documentation.
        * cp-tree.def (AGGR_INIT_EXPR): Adjust documentation.
        Change class to tcc_vl_exp.
        Change class to tcc_vl_exp.
        * call.c (build_call): Use build_call_list instead
        * call.c (build_call): Use build_call_list instead
        of build3.
        of build3.
        (build_over_call): Likewise.
        (build_over_call): Likewise.
        (build_new_method_call): Use build_min_non_dep_call_list
        (build_new_method_call): Use build_min_non_dep_call_list
        instead of build_min_non_dep.
        instead of build_min_non_dep.
        * error.c (dump_call_expr_args): New function.
        * error.c (dump_call_expr_args): New function.
        (dump_aggr_init_expr_args): New function.
        (dump_aggr_init_expr_args): New function.
        (dump_expr) : Use them.
        (dump_expr) : Use them.
        Update to use new CALL_EXPR and AGGR_INIT_EXPR accessor macros.
        Update to use new CALL_EXPR and AGGR_INIT_EXPR accessor macros.
        * cvt.c (convert_to_void): Use build_call_array instead
        * cvt.c (convert_to_void): Use build_call_array instead
        of build3; use new AGGR_INIT_EXPR accessor macros.
        of build3; use new AGGR_INIT_EXPR accessor macros.
        * mangle.c (write_expression): Use TREE_OPERAND_LENGTH
        * mangle.c (write_expression): Use TREE_OPERAND_LENGTH
        instead of TREE_CODE_LENGTH.
        instead of TREE_CODE_LENGTH.
        * dump.c (cp_dump_tree) : Update to use new
        * dump.c (cp_dump_tree) : Update to use new
        AGGR_INIT_EXPR accessor macros.
        AGGR_INIT_EXPR accessor macros.
        * cp-gimplify.c (cp_gimplify_init_expr): Use
        * cp-gimplify.c (cp_gimplify_init_expr): Use
        AGGR_INIT_EXPR_SLOT to set the slot operand.
        AGGR_INIT_EXPR_SLOT to set the slot operand.
        * cp-tree.h (AGGR_INIT_EXPR_FN): New macro.
        * cp-tree.h (AGGR_INIT_EXPR_FN): New macro.
        (AGGR_INIT_EXPR_SLOT): New macro.
        (AGGR_INIT_EXPR_SLOT): New macro.
        (AGGR_INIT_EXPR_ARG): New macro.
        (AGGR_INIT_EXPR_ARG): New macro.
        (aggr_init_expr_nargs): New macro.
        (aggr_init_expr_nargs): New macro.
        (AGGR_INIT_EXPR_ARGP): New macro.
        (AGGR_INIT_EXPR_ARGP): New macro.
        (aggr_init_expr_arg_iterator): New.
        (aggr_init_expr_arg_iterator): New.
        (init_aggr_init_expr_arg_iterator): New.
        (init_aggr_init_expr_arg_iterator): New.
        (next_aggr_init_expr_arg): New.
        (next_aggr_init_expr_arg): New.
        (first_aggr_init_expr_arg): New.
        (first_aggr_init_expr_arg): New.
        (more_aggr_init_expr_args_p): New.
        (more_aggr_init_expr_args_p): New.
        (FOR_EACH_AGGR_INIT_EXPR_ARG): New.
        (FOR_EACH_AGGR_INIT_EXPR_ARG): New.
        (stabilize_aggr_init): New declaration.
        (stabilize_aggr_init): New declaration.
        (build_min_non_dep_call_list): Likewise.
        (build_min_non_dep_call_list): Likewise.
        * tree.c (process_aggr_init_operands): New function.
        * tree.c (process_aggr_init_operands): New function.
        (build_aggr_init_array) New function.
        (build_aggr_init_array) New function.
        (build_cplus_new): Update to use new CALL_EXPR and
        (build_cplus_new): Update to use new CALL_EXPR and
        AGGR_INIT_EXPR accessor macros. Replace use of build3 with
        AGGR_INIT_EXPR accessor macros. Replace use of build3 with
        build_aggr_init_array.
        build_aggr_init_array.
        (build_min_non_dep_call_list) New function.
        (build_min_non_dep_call_list) New function.
        (build_min_nt): Assert input code parameter is not a variable
        (build_min_nt): Assert input code parameter is not a variable
        length expression class.
        length expression class.
        (build_min, build_min_non_dep): Likewise.
        (build_min, build_min_non_dep): Likewise.
        (cp_tree_equal) : Iterate through the arguments
        (cp_tree_equal) : Iterate through the arguments
        to check for equality instead of recursing. Handle tcc_vl_exp
        to check for equality instead of recursing. Handle tcc_vl_exp
        tree code classes.
        tree code classes.
        (stabilize_call): Update to only handle CALL_EXPRs, not
        (stabilize_call): Update to only handle CALL_EXPRs, not
        AGGR_INIT_EXPRs; use new CALL_EXPR accessor macros.
        AGGR_INIT_EXPRs; use new CALL_EXPR accessor macros.
        (stabilize_aggr_init): New function.
        (stabilize_aggr_init): New function.
        (stabilize_init): Use it.
        (stabilize_init): Use it.
        * cxx-pretty-print.c (pp_cxx_postfix_expression)
        * cxx-pretty-print.c (pp_cxx_postfix_expression)
        : Update to use new CALL_EXPR and
        : Update to use new CALL_EXPR and
        AGGR_INIT_EXPR accessor macros and argument iterators.
        AGGR_INIT_EXPR accessor macros and argument iterators.
        * pt.c (tsubst_copy) : Replace build_nt with
        * pt.c (tsubst_copy) : Replace build_nt with
        build_vl_exp. Iterate through the operands, recursively
        build_vl_exp. Iterate through the operands, recursively
        processing each one.
        processing each one.
        (tsubst_copy_and_build) : Update to use new
        (tsubst_copy_and_build) : Update to use new
        CALL_EXPR accessor macros.
        CALL_EXPR accessor macros.
        (value_dependent_expression_p) : Handle tcc_vl_exp
        (value_dependent_expression_p) : Handle tcc_vl_exp
        tree code classes. Use TREE_OPERAND_LENGTH instead of
        tree code classes. Use TREE_OPERAND_LENGTH instead of
        TREE_CODE_LENGTH.
        TREE_CODE_LENGTH.
        * semantics.c (finish_call_expr): Use build_nt_call_list
        * semantics.c (finish_call_expr): Use build_nt_call_list
        instead of build_nt.
        instead of build_nt.
        (simplify_aggr_init_expr): Update to use new AGGR_INIT_EXPR
        (simplify_aggr_init_expr): Update to use new AGGR_INIT_EXPR
        accessor macros. Use build_call_array to construct the
        accessor macros. Use build_call_array to construct the
        CALL_EXPR node instead of build3
        CALL_EXPR node instead of build3
        * decl2.c (build_offset_ref_call_from_tree): Use
        * decl2.c (build_offset_ref_call_from_tree): Use
        build_nt_call_list and build_min_non_dep_call_list instead
        build_nt_call_list and build_min_non_dep_call_list instead
        of build_min_nt and build_min_non_dep.
        of build_min_nt and build_min_non_dep.
        * parser.c (cp_parser_postfix_expression) :
        * parser.c (cp_parser_postfix_expression) :
        Use build_nt_call_list instead of build_min_nt.
        Use build_nt_call_list instead of build_min_nt.
2007-02-15  Manuel Lopez-Ibanez  
2007-02-15  Manuel Lopez-Ibanez  
        PR c++/28943
        PR c++/28943
        * call.c (build_conditional_expr): Improve error message.
        * call.c (build_conditional_expr): Improve error message.
2007-02-13  Dirk Mueller  
2007-02-13  Dirk Mueller  
        * friend.c (do_friend): Annotate warning about friend
        * friend.c (do_friend): Annotate warning about friend
        declarations in templates with OPT_Wnon_template_friend.
        declarations in templates with OPT_Wnon_template_friend.
        Convert informal message from warning() to inform().
        Convert informal message from warning() to inform().
2007-02-12  Simon Martin  
2007-02-12  Simon Martin  
            Mark Mitchell  
            Mark Mitchell  
        PR c++/14622
        PR c++/14622
        * pt.c (do_decl_instantiation): Detect type mismatches in explicit
        * pt.c (do_decl_instantiation): Detect type mismatches in explicit
        instantiations for variables.
        instantiations for variables.
2007-02-12  Manuel Lopez-Ibanez  
2007-02-12  Manuel Lopez-Ibanez  
        PR middle-end/7651
        PR middle-end/7651
        * cp-gimplify.c (gimplify_expr_stmt): Don't check extra_warnings.
        * cp-gimplify.c (gimplify_expr_stmt): Don't check extra_warnings.
        Check warn_unused_value just once.
        Check warn_unused_value just once.
2007-02-11  Mark Mitchell  
2007-02-11  Mark Mitchell  
        PR c++/26988
        PR c++/26988
        * pt.c (determine_specialization): Use skip_artificial_parms_for.
        * pt.c (determine_specialization): Use skip_artificial_parms_for.
        (fn_type_unificiation): Likewise.
        (fn_type_unificiation): Likewise.
        (get_bindings): Likewise.
        (get_bindings): Likewise.
o2007-02-06  Mark Mitchell  
o2007-02-06  Mark Mitchell  
        PR target/29487
        PR target/29487
        * decl.c (finish_function): Use DECL_REPLACEABLE.
        * decl.c (finish_function): Use DECL_REPLACEABLE.
        * tree.c (cp_cannot_inline_tree_fn): Likewise.
        * tree.c (cp_cannot_inline_tree_fn): Likewise.
2007-02-10  Gabriel Dos Reis  
2007-02-10  Gabriel Dos Reis  
        * parser.c (cp_parser_primary_expression): Reformat overly long lines.
        * parser.c (cp_parser_primary_expression): Reformat overly long lines.
2007-02-10  Richard Henderson  , Jakub Jelinek  
2007-02-10  Richard Henderson  , Jakub Jelinek  
        * decl.c (grokvardecl): Don't error if !have_tls.
        * decl.c (grokvardecl): Don't error if !have_tls.
        (grokdeclarator): Likewise.
        (grokdeclarator): Likewise.
        * parser.c (cp_parser_omp_threadprivate): Likewise.
        * parser.c (cp_parser_omp_threadprivate): Likewise.
2007-02-07  Jakub Jelinek  
2007-02-07  Jakub Jelinek  
        PR c++/30703
        PR c++/30703
        * cp-gimplify.c (cp_genericize_r): Don't dereference invisiref
        * cp-gimplify.c (cp_genericize_r): Don't dereference invisiref
        parameters and result decls in omp clauses.
        parameters and result decls in omp clauses.
        (cxx_omp_privatize_by_reference): Pass also invisiref PARM_DECLs
        (cxx_omp_privatize_by_reference): Pass also invisiref PARM_DECLs
        by reference.
        by reference.
2007-02-05  Dirk Mueller  
2007-02-05  Dirk Mueller  
        PR bootstrap/30510
        PR bootstrap/30510
        * parser.c (cp_parser_class_specifier): Always initialize bases.
        * parser.c (cp_parser_class_specifier): Always initialize bases.
2007-02-05  Paolo Bonzini  
2007-02-05  Paolo Bonzini  
        * cp-tree.h (OMP_ATOMIC_CODE): Delete.
        * cp-tree.h (OMP_ATOMIC_CODE): Delete.
        (OMP_ATOMIC_DEPENDENT_P): Rewrite.
        (OMP_ATOMIC_DEPENDENT_P): Rewrite.
        * pt.c (tsubst_expr): Adjust for new format of dependent OMP_ATOMIC
        * pt.c (tsubst_expr): Adjust for new format of dependent OMP_ATOMIC
        expressions.
        expressions.
        * semantics.c (finish_omp_atomic): Store a whole expression node
        * semantics.c (finish_omp_atomic): Store a whole expression node
        in operand 1, and integer_zero_node in operand 0, for dependent
        in operand 1, and integer_zero_node in operand 0, for dependent
        OMP_ATOMIC.  Rewrite to make flow easier to understand.
        OMP_ATOMIC.  Rewrite to make flow easier to understand.
2007-02-03  Gabriel Dos Reis  
2007-02-03  Gabriel Dos Reis  
        * decl.c (grokdeclarator): Use OPT_Wreturn_type instead of 0.
        * decl.c (grokdeclarator): Use OPT_Wreturn_type instead of 0.
2007-02-04  Kazu Hirata  
2007-02-04  Kazu Hirata  
        * class.c, cp-tree.h, decl.c, decl2.c, g++spec.c, init.c,
        * class.c, cp-tree.h, decl.c, decl2.c, g++spec.c, init.c,
        parser.c, pt.c, tree.c, typeck.c: Follow spelling conventions.
        parser.c, pt.c, tree.c, typeck.c: Follow spelling conventions.
2007-02-03  Douglas Gregor  
2007-02-03  Douglas Gregor  
        * parser.c (cp_lexer_get_preprocessor_token): Attach the C++0x
        * parser.c (cp_lexer_get_preprocessor_token): Attach the C++0x
        keyword warning to -Wc++0x-compat.
        keyword warning to -Wc++0x-compat.
2007-02-03  Gabriel Dos Reis  
2007-02-03  Gabriel Dos Reis  
        * decl.c (grokdeclarator): Update documentation.
        * decl.c (grokdeclarator): Update documentation.
2007-02-02  Jakub Jelinek  
2007-02-02  Jakub Jelinek  
        PR c++/30536
        PR c++/30536
        * decl.c (grokdeclarator): If __thread is used together with
        * decl.c (grokdeclarator): If __thread is used together with
        a storage class other than extern and static, clear thread_p
        a storage class other than extern and static, clear thread_p
        after issuing diagnostics and fall through to checking the
        after issuing diagnostics and fall through to checking the
        storage class.
        storage class.
2007-01-30  Roger Sayle  
2007-01-30  Roger Sayle  
        * error.c (dump_type_suffix): Avoid use of cp_build_binary_op when
        * error.c (dump_type_suffix): Avoid use of cp_build_binary_op when
        calculating the size of an array (to avoid recursive errors).
        calculating the size of an array (to avoid recursive errors).
2007-01-30  Manuel Lopez-Ibanez  
2007-01-30  Manuel Lopez-Ibanez  
        PR c++/24745
        PR c++/24745
        * typeck.c (build_binary_op): Fix logic for warning. Move warning
        * typeck.c (build_binary_op): Fix logic for warning. Move warning
        to -Wpointer-arith.
        to -Wpointer-arith.
        * call.c (convert_like_real): Don't warn when converting to
        * call.c (convert_like_real): Don't warn when converting to
        boolean type.
        boolean type.
2007-01-29  Manuel Lopez-Ibanez  
2007-01-29  Manuel Lopez-Ibanez  
        * decl.c (pop_label): Replace warning with call to
        * decl.c (pop_label): Replace warning with call to
        warn_for_unused_label.
        warn_for_unused_label.
2007-01-28  Andrew Pinski  
2007-01-28  Andrew Pinski  
        PR C++/28988
        PR C++/28988
        * semantics.c (finish_pseudo_destructor_expr): Check the
        * semantics.c (finish_pseudo_destructor_expr): Check the
        destrutor name by calling check_dtor_name.
        destrutor name by calling check_dtor_name.
2007-01-24  Douglas Gregor  
2007-01-24  Douglas Gregor  
        * lex.c (D_CPP0X): Rename.
        * lex.c (D_CPP0X): Rename.
        (D_CXX0X): To this.
        (D_CXX0X): To this.
        (reswords): D_CPP0X -> D_CXX0X.
        (reswords): D_CPP0X -> D_CXX0X.
        (init_reswords): Ditto.
        (init_reswords): Ditto.
        * parser.c (cp_lexer_get_preprocessor_token): Warn about the use
        * parser.c (cp_lexer_get_preprocessor_token): Warn about the use
        of C++0x keywords as identifiers.
        of C++0x keywords as identifiers.
2007-01-23  Simon Martin  
2007-01-23  Simon Martin  
        PR c++/27492
        PR c++/27492
        * decl.c (duplicate_decls): Don't reset DECL_INVALID_OVERRIDER_P for
        * decl.c (duplicate_decls): Don't reset DECL_INVALID_OVERRIDER_P for
        function decls.
        function decls.
2007-01-23  Ian Lance Taylor  
2007-01-23  Ian Lance Taylor  
        * typeck.c (convert_for_assignment): Only warn about a = b = c
        * typeck.c (convert_for_assignment): Only warn about a = b = c
        when converting to bool.
        when converting to bool.
2007-01-23  Roger Sayle  
2007-01-23  Roger Sayle  
        * call.c (null_ptr_cst_p): Replace use of TREE_CONSTANT_OVERFLOW with
        * call.c (null_ptr_cst_p): Replace use of TREE_CONSTANT_OVERFLOW with
        TREE_OVERFLOW.
        TREE_OVERFLOW.
        * typeck.c (ignore_overflows): Remove the remaining uses of
        * typeck.c (ignore_overflows): Remove the remaining uses of
        TREE_CONSTANT_OVERFLOW.
        TREE_CONSTANT_OVERFLOW.
2007-01-20  Jan Hubicka  
2007-01-20  Jan Hubicka  
        * decl2.c (start_objects, start_static_storage_duration_function):
        * decl2.c (start_objects, start_static_storage_duration_function):
        Do not make the functions uninlinable.
        Do not make the functions uninlinable.
2007-01-17  Ian Lance Taylor  
2007-01-17  Ian Lance Taylor  
        * class.c (add_method): Call VEC_reserve_exact rather than passing
        * class.c (add_method): Call VEC_reserve_exact rather than passing
        a negative size to VEC_reserve.
        a negative size to VEC_reserve.
2007-01-11  Simon Martin  
2007-01-11  Simon Martin  
        PR c++/29573
        PR c++/29573
        * tree.c (cp_tree_equal): Properly handle MODOP_EXPR trees.
        * tree.c (cp_tree_equal): Properly handle MODOP_EXPR trees.
2007-01-10  Mark Mitchell  
2007-01-10  Mark Mitchell  
        PR c++/28999
        PR c++/28999
        * decl.c (make_typename_type): If the qualified name is not a
        * decl.c (make_typename_type): If the qualified name is not a
        type, issue an error.
        type, issue an error.
        * parser.c (cp_parser_elaborated_type_specifier): Fix comment
        * parser.c (cp_parser_elaborated_type_specifier): Fix comment
        formatting.
        formatting.
2007-01-08  Geoffrey Keating  
2007-01-08  Geoffrey Keating  
        * rtti.c: Include target.h.
        * rtti.c: Include target.h.
        (emit_support_tinfos): If ! targetm.cxx.library_rtti_comdat (),
        (emit_support_tinfos): If ! targetm.cxx.library_rtti_comdat (),
        don't emit typeinfo for fundamental types as weak.
        don't emit typeinfo for fundamental types as weak.
        * Make-lang.in (cp/rtti.o): Update and correct dependencies.
        * Make-lang.in (cp/rtti.o): Update and correct dependencies.
2007-01-08  Richard Guenther  
2007-01-08  Richard Guenther  
        * cvt.c (cp_convert_to_pointer): Use build_int_cst_type.
        * cvt.c (cp_convert_to_pointer): Use build_int_cst_type.
2007-01-08  Mark Shinwell  
2007-01-08  Mark Shinwell  
        * call.c (standard_conversion): Pass flag to
        * call.c (standard_conversion): Pass flag to
        vector_types_convertible_p to disallow emission of note.
        vector_types_convertible_p to disallow emission of note.
        * typeck.c (convert_for_assignment): Pass flag to
        * typeck.c (convert_for_assignment): Pass flag to
        vector_types_convertible_p to allow emission of note.
        vector_types_convertible_p to allow emission of note.
        (ptr_reasonably_similar): Pass flag to vector_types_convertible_p
        (ptr_reasonably_similar): Pass flag to vector_types_convertible_p
        to disallow emission of note.
        to disallow emission of note.
2007-01-07  Manuel Lopez-Ibanez  
2007-01-07  Manuel Lopez-Ibanez  
        PR c++/28986
        PR c++/28986
        * typeck.c (build_binary_op): Call overflow_warning if
        * typeck.c (build_binary_op): Call overflow_warning if
        TREE_OVERFLOW_P is true for the result and not for any of the
        TREE_OVERFLOW_P is true for the result and not for any of the
        operands.
        operands.
2007-01-06  Lee Millward  
2007-01-06  Lee Millward  
        PR c++/19439
        PR c++/19439
        * class.c (add_method): Don't wait until template
        * class.c (add_method): Don't wait until template
        instantiation time to complain about duplicate methods.
        instantiation time to complain about duplicate methods.
2007-01-05  Manuel Lopez-Ibanez  
2007-01-05  Manuel Lopez-Ibanez  
        PR c/19978
        PR c/19978
        * semantics.c (finish_unary_op_expr): Warn only if result
        * semantics.c (finish_unary_op_expr): Warn only if result
        overflowed and operands did not.
        overflowed and operands did not.
2007-01-05  Ian Lance Taylor  
2007-01-05  Ian Lance Taylor  
        * typeck.c (build_binary_op): Warn about comparing a non-weak
        * typeck.c (build_binary_op): Warn about comparing a non-weak
        address to NULL.
        address to NULL.
2007-01-05  Douglas Gregor  
2007-01-05  Douglas Gregor  
        * pt.c (tsubst): Propagate the need for structural equality checks
        * pt.c (tsubst): Propagate the need for structural equality checks
        when reducing the level of template parameters.
        when reducing the level of template parameters.
2007-01-03  Kazu Hirata  
2007-01-03  Kazu Hirata  
        * pt.c: Fix a comment typo.
        * pt.c: Fix a comment typo.
2007-01-02  Ian Lance Taylor  
2007-01-02  Ian Lance Taylor  
        * semantics.c (maybe_convert_cond): Optionally warn when using an
        * semantics.c (maybe_convert_cond): Optionally warn when using an
        assignment as a condition.
        assignment as a condition.
        * typeck.c (convert_for_assignment): Optionally warn about
        * typeck.c (convert_for_assignment): Optionally warn about
        assigning the result of an assignment to a bool.
        assigning the result of an assignment to a bool.
2007-01-02  Douglas Gregor  
2007-01-02  Douglas Gregor  
        * pt.c (canonical_template_parms): Correct typo in comment.
        * pt.c (canonical_template_parms): Correct typo in comment.
2007-01-02  Douglas Gregor  
2007-01-02  Douglas Gregor  
        * typeck.c (structural_comptypes): Renamed from "comptypes".
        * typeck.c (structural_comptypes): Renamed from "comptypes".
        (comptypes): Use canonical type information to perform fast type
        (comptypes): Use canonical type information to perform fast type
        comparison. When VERIFY_CANONICAL_TYPES, verify that the
        comparison. When VERIFY_CANONICAL_TYPES, verify that the
        canonical type comparison returns the same results as we would see
        canonical type comparison returns the same results as we would see
        from the current, structural check. Support COMPARE_STRUCTURAL
        from the current, structural check. Support COMPARE_STRUCTURAL
        when we need structural checks.
        when we need structural checks.
        * decl.c (typename_compare): Fix comment.
        * decl.c (typename_compare): Fix comment.
        (build_typename_type): TYPENAME_TYPE nodes require structural
        (build_typename_type): TYPENAME_TYPE nodes require structural
        equality checks, because they resolve different based on the
        equality checks, because they resolve different based on the
        current class type.
        current class type.
        (make_unbound_class_template): UNBOUND_CLASS_TEMPLATE nodes
        (make_unbound_class_template): UNBOUND_CLASS_TEMPLATE nodes
        require structural equality checks (for now).
        require structural equality checks (for now).
        (build_ptrmemfunc_type): Build the canonical pointer to member
        (build_ptrmemfunc_type): Build the canonical pointer to member
        function type.
        function type.
        (compute_array_index_type): Whenever we build a new index type
        (compute_array_index_type): Whenever we build a new index type
        to represent the size of an array in a template, we need to mark
        to represent the size of an array in a template, we need to mark
        this index type as requiring structural equality. This goes for
        this index type as requiring structural equality. This goes for
        arrays with value-dependent sizes with the current ABI, or all
        arrays with value-dependent sizes with the current ABI, or all
        arrays with ABI-1.
        arrays with ABI-1.
        * tree.c (cplus_array_hash): New.
        * tree.c (cplus_array_hash): New.
        (struct cplus_array_info): New.
        (struct cplus_array_info): New.
        (cplus_array_compare): New.
        (cplus_array_compare): New.
        (cplus_array_htab): New.
        (cplus_array_htab): New.
        (build_cplus_array_type_1): Use a hash table to cache the array
        (build_cplus_array_type_1): Use a hash table to cache the array
        types we build. Build the canonical array type for each array
        types we build. Build the canonical array type for each array
        type.
        type.
        (cp_build_qualified_type_real): When building a cv-qualified array
        (cp_build_qualified_type_real): When building a cv-qualified array
        type, use the hash table of array types and build canonical array
        type, use the hash table of array types and build canonical array
        types as necessary.
        types as necessary.
        (bind_template_template_parm): BOUND_TEMPLATE_TEMPLATE_PARM nodes
        (bind_template_template_parm): BOUND_TEMPLATE_TEMPLATE_PARM nodes
        use structural equality (for now).
        use structural equality (for now).
        * cp-tree.h (COMPARE_STRUCTURAL): New.
        * cp-tree.h (COMPARE_STRUCTURAL): New.
        * pt.c (canonical_template_parms): New.
        * pt.c (canonical_template_parms): New.
        (canonical_type_parameter): New.
        (canonical_type_parameter): New.
        (process_template_parm): Find the canonical type parameter.
        (process_template_parm): Find the canonical type parameter.
        (lookup_template_class): When we have named the primary template
        (lookup_template_class): When we have named the primary template
        type, set the canonical type for our template class to the primary
        type, set the canonical type for our template class to the primary
        template type. If any of the template arguments need structural
        template type. If any of the template arguments need structural
        equality checks, the template class needs structural equality
        equality checks, the template class needs structural equality
        checks.
        checks.
        (tsubst): When reducing the level of a template template
        (tsubst): When reducing the level of a template template
        parameter, we require structural equality tests for the resulting
        parameter, we require structural equality tests for the resulting
        parameter because its template parameters have not had their types
        parameter because its template parameters have not had their types
        canonicalized. When reducing a template type parameter, find the
        canonicalized. When reducing a template type parameter, find the
        canonical reduced type parameter.
        canonical reduced type parameter.
        (any_template_arguments_need_structural_equality_p): New.
        (any_template_arguments_need_structural_equality_p): New.


Copyright (C) 2007 Free Software Foundation, Inc.
Copyright (C) 2007 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
notice and this notice are preserved.
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.