OSDN Git Service

PR c++/48994
[pf3gnuchains/gcc-fork.git] / gcc / cp / ChangeLog
index c6e83de..a425e75 100644 (file)
@@ -1,3 +1,473 @@
+2011-05-15  Jonathan Wakely  <jwakely.gcc@gmail.com>
+
+       PR c++/48994
+       * parser.c (cp_parser_perform_range_for_lookup): Call complete_type.
+
+2011-05-13  Ville Voutilainen  <ville.voutilainen@gmail.com>
+
+       Implement final on class.
+       * class.c (check_bases): Diagnose derivation from a final class.
+       * cp-tree.h (lang_type_class): Add is_final and adjust dummy.
+       (CLASSTYPE_FINAL): New.
+       * parser.c (cp_parser_class_head): Parse class-virt-specifier, set
+       CLASSTYPE_FINAL.
+       * pt.c (instantiate_class_template_1): Copy CLASSTYPE_FINAL.
+
+2011-05-13  Jason Merrill  <jason@redhat.com>
+
+       PR c++/48969
+       * pt.c (deduction_tsubst_fntype): New.
+       (fn_type_unification): Use it.
+       (init_template_processing): Initialize hash table.
+       (print_template_statistics): Print hash table stats.
+
+       * call.c (build_op_call): Use timevar_cond_start/stop.
+       (build_user_type_conversion): Likewise.
+
+2011-05-12  Jason Merrill  <jason@redhat.com>
+
+       * cp-tree.h (DECL_DEFERRED_CONSTEXPR_CHECK): New.
+       * semantics.c (validate_constexpr_fundecl): Set it.
+       (check_deferred_constexpr_decls): Clear it.
+       (register_constexpr_fundef): Make sure it isn't set.
+       * decl.c (grok_special_member_properties): Check it.
+
+2011-05-11  Jason Merrill  <jason@redhat.com>
+
+       PR c++/48948
+       * semantics.c (validate_constexpr_fundecl): Defer checking if
+       an argument type is being defined.
+       (is_valid_constexpr_fn): Add defer_ok parm.
+       (cxx_eval_call_expression): Adjust.
+       (check_deferred_constexpr_decls): New.
+       (literal_type_p): Make sure type isn't being defined.
+       (ensure_literal_type_for_constexpr_object): Handle type being defined.
+       * cp-tree.h: Declare check_deferred_constexpr_decls.
+       * decl.c (grokfndecl): Call validate_constexpr_fundecl here.
+       (start_preparsed_function, cp_finish_decl): Not here.
+       * class.c (finalize_literal_type_property): Don't call
+       validate_constexpr_fundecl.
+       (finish_struct): Call check_deferred_constexpr_decls.
+       * pt.c (tsubst_decl): Call validate_constexpr_fundecl.
+       (instantiate_class_template): Call check_deferred_constexpr_decls.
+
+       * semantics.c (validate_constexpr_fundecl): Check DECL_TEMPLATE_INFO
+       rather than DECL_TEMPLATE_INSTANTIATION.
+       (cxx_eval_call_expression): Likewise.
+
+       * semantics.c (register_constexpr_fundef): Add to hash table here.
+       (validate_constexpr_fundecl): Not here.
+
+       * decl.c (grokdeclarator): Only set DECL_DECLARED_CONSTEXPR_P once.
+
+       * pt.c (build_non_dependent_expr): Don't check null_ptr_cst_p,
+       do call maybe_constant_value in C++0x mode.
+       * semantics.c (cxx_eval_constant_expression): Handle TEMPLATE_DECL.
+
+       PR c++/48745
+       * pt.c (value_dependent_expr_p): Handle CONSTRUCTOR.
+
+2011-05-11  Nathan Froyd  <froydnj@codesourcery.com>
+
+       * cp-tree.h (TYPENAME_TYPE_FULLNAME, TYPEOF_TYPE_EXPR): Use
+       TYPE_VALUES_RAW.
+       (UNDERLYING_TYPE_TYPE, DECLTYPE_TYPE_EXPR): Likewise.
+       (DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P): Likewise.
+       (TEMPLATE_TYPE_PARM_INDEX): Likewise.
+
+2011-05-10  Jason Merrill  <jason@redhat.com>
+
+       PR c++/48930
+       * class.c (type_build_ctor_call): New.
+       * cp-tree.h: Declare it.
+       * decl.c (check_initializer): Use it instead of
+       TYPE_NEEDS_CONSTRUCTING.
+       * init.c (build_value_init, build_value_init_noctor): Likewise.
+       (perform_member_init, expand_aggr_init_1, build_new_1): Likewise.
+       (build_vec_init): Likewise.
+       * typeck2.c (process_init_constructor_array): Likewise.
+       (process_init_constructor_record): Likewise.
+
+       PR c++/48736
+       * pt.c (tsubst_copy_and_build): Handle substitution of a pack
+       expansion producing another expansion.
+
+2011-05-10  Ville Voutilainen  <ville.voutilainen@gmail.com>
+
+       Fixes for override/final.
+       * class.c (check_for_override): Diagnose final on a nonvirtual
+       member function, diagnose override for a virtual with no matching
+       override. Don't fiddle around with DECL_VINDEX.
+
+2011-05-10  Nathan Froyd  <froydnj@codesourcery.com>
+
+        * cp-tree.def (EXPR_PACK_EXPANSION): Add an operand.
+        * cp-objcp-common.c (cp_common_init_ts): Mark it as TS_TYPED.
+        * cp-tree.h (PACK_EXPANSION_PARAMETER_PACKS): Use the new
+        operand of EXPR_PACK_EXPANSION.
+       (cp_tree_operand_length): Declare.
+        * tree.c (cp_tree_operand_length): Define.
+       (cp_tree_equal): Call it.
+        * pt.c (value_dependent_expr_P): Likewise.
+        * mangle.c (write_expression): Likewise.
+
+2011-05-09  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/48737
+       PR c++/48744
+       * decl.c (reshape_init): Take a complain parameter and do
+       not call error if tf_error is not set.
+       (check_initializer, reshape_init_r, reshape_init_array,
+       reshape_init_array_1, reshape_init_vector, reshape_init_class):
+       Adjust.
+       * typeck2.c (digest_init_r): Take a complain parameter and
+       pass it to convert_for_initialization.
+       (digest_init, digest_init_flags, process_init_constructor_array,
+       process_init_constructor_record, process_init_constructor_union,
+       process_init_constructor, digest_init_r): Adjust.
+       * init.c (expand_default_init, build_new_1): Likewise.
+       * typeck.c (cp_build_modify_expr): Likewise.
+       * decl2.c (grokfield): Likewise.
+       * call.c (convert_like_real, convert_default_arg): Likewise.
+       * semantics.c (finish_compound_literal): Pass complain to
+       reshape_init and digest_init.
+       * cp-tree.h: Adjust declarations.
+
+2011-05-07  Fabien ChĂȘne  <fabien@gcc.gnu.org>
+
+       PR c++/48859
+       * init.c (diagnose_uninitialized_cst_or_ref_member_1): stop the
+       recursion if there is user defined constructor.
+
+2011-05-09  Jason Merrill  <jason@redhat.com>
+
+       PR c++/34772
+       * decl.c (initialize_local_var): Use DECL_INITIAL for simple
+       initialization.
+
+2011-05-08  Ville Voutilainen  <ville.voutilainen@gmail.com>
+
+       Implement final/override for member functions.
+       * class.c (check_for_override): Check for DECL_OVERRIDE_P.
+       * cp-tree.h (DECL_OVERRIDE_P, DECL_FINAL_P): New.
+       (cp_virt_specifiers, enum virt_specifier): New.
+       * decl.c (set_virt_specifiers): New.
+       (grokdeclarator): Use them. Diagnose virt-specifiers on non-fields.
+       * parser.c (make_call_declarator): add virt-specifiers parameter.
+       (cp_parser_lambda_declarator_opt): Adjust.
+       (cp_parser_direct_declarator): Likewise.
+       (cp_parser_virt_specifier_seq_opt): New.
+       * search.c (check_final_overrider): Diagnose attempts to override
+       a final member function.
+
+2011-05-09  Dodji Seketeli  <dodji@redhat.com>
+
+       PR c++/48574
+       * class.c (fixed_type_or_null): Use type_dependent_p_push to test
+       if the instance has a dependent initializer.
+
+2011-05-08  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/48816
+       * cxx-pretty-print.c (pp_cxx_template_declaration): Remove
+       effectively unused variable.
+
+2011-05-07  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * name-lookup.h (global_bindings_p): Adjust prototype.
+       * name-lookup.c (global_bindings_p): Return bool.
+
+2011-05-06  Jason Merrill  <jason@redhat.com>
+
+       * decl.c (stabilize_save_expr_r): Set *walk_subtrees as
+       appropriate.
+
+       PR c++/48909
+       * semantics.c (cxx_eval_conditional_expression): Check
+       integer_zerop instead.
+       (potential_constant_expression_1): Likewise.
+
+       PR c++/48911
+       * semantics.c (cxx_eval_array_reference): Handle implicit
+       initializers.
+
+2011-05-06  Nathan Froyd  <froydnj@codesourcery.com>
+
+       * cp-tree.h (type_of_this_parm, class_of_this_parm): New functions.
+       * call.c (standard_conversion): Call class_of_this_parm.
+       * cxx-pretty-print.c (pp_cxx_implicit_parameter_type): Likewise.
+       (pp_cxx_direct_abstract_declarator): Likewise.
+       * decl2.c (change_return_type): Likewise.
+       (cp_reconstruct_complex_type): Likewise.
+       * error.c (dump_type_suffix, dump_function_decl): Likewise.
+       * mangle.c (write_function_type): Likewise.
+       * pt.c (unify): Likewise.
+       * typeck.c (merge_types, type_memfn_quals): Likewise.
+       * decl.c (build_this_parm): Call type_of_this_parm.
+
+2011-05-06  Dodji Seketeli  <dodji@redhat.com>
+
+       PR c++/48838
+       * cp-tree.h (non_static_member_function_p): Declare new function.
+       * tree.c (non_static_member_function_p): Define it.
+       * semantics.c (finish_call_expr): Use it.
+
+2011-05-05  Nathan Froyd  <froydnj@codesourcery.com>
+
+       * decl.c (finish_case_label): Omit the loc argument to
+       build_case_label.
+
+2011-05-05  Jason Merrill  <jason@redhat.com>
+
+       * cp-tree.h (REFERENCE_REF_P): Just check the type.
+       * cvt.c (convert_from_reference): Adjust.
+       * pt.c (build_non_dependent_expr): Adjust.
+       * semantics.c (finish_offsetof): Adjust.
+       * tree.c (lvalue_kind): Use it.
+
+       PR c++/48873
+       * tree.c (stabilize_expr): Don't make gratuitous copies of classes.
+
+2011-05-05  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * decl.c (start_preparsed_function): Do not set
+       dont_save_pending_sizes_p.
+
+2011-05-05  Joseph Myers  <joseph@codesourcery.com>
+
+       * parser.c (cp_parser_objc_method_definition_list): Update call to
+       objc_start_method_definition.
+
+2011-05-04  Jason Merrill  <jason@redhat.com>
+
+       PR c++/48749
+       * class.c (resolves_to_fixed_type_p): Don't look closely
+       in templates.
+
+2011-05-03  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/28501
+       * call.c (add_builtin_candidate): Handle REALPART_EXPR and
+       IMAGPART_EXPR.
+
+2011-05-02  Lawrence Crowl  <crowl@google.com>
+
+       * decl.c: (push_local_name): Change TV_NAME_LOOKUP to start/stop.
+       (poplevel): Refactor POP_TIMEVAR_AND_RETURN to plain code.
+       Change TV_NAME_LOOKUP to start/stop.
+       (define_label): Refactor timevar calls out to a wrapper function.
+       Change TV_NAME_LOOKUP to start/stop.
+       (xref_tag): Likewise.
+       (lookup_label): Refactor timevar calls out to a wrapper function.
+       Change TV_NAME_LOOKUP to start_cond/stop_cond.
+
+        * pt.c: (instantiate_class_template): Add a wrapper to push/pop new
+       TV_TEMPLATE_INST.
+       (instantiate_template): Add a wrapper to push/pop new TV_TEMPLATE_INST.
+       (lookup_template_class): Refactor timevar calls out to a wrapper
+       function.  Change use of TV_NAME_LOOKUP to TV_TEMPLATE_INST.
+       (instantiate_decl): Change TV_PARSE to TV_TEMPLATE_INST.
+
+       * name-lookup.c: (store_bindings): Change TV_NAME_LOOKUP to start/stop.
+       (poplevel_class): Change TV_NAME_LOOKUP to start_cond/stop_cond.
+       (push_namespace): Likewise.
+       (pop_nested_namespace): Likewise.
+       (pushdecl_namespace_level): Likewise.
+       (store_class_bindings): Likewise.
+       (push_to_top_level): Likewise.
+       (identifier_type_value): Refactor timevar calls out to a wrapper
+       function.  Change TV_NAME_LOOKUP to start/stop.
+       (find_binding): Likewise.
+       (push_using_decl): Likewise.
+       (lookup_arg_dependent): Likewise.
+       (push_using_directive): Likewise.
+       (qualified_lookup_using_namespace): Refactor POP_TIMEVAR_AND_RETURN
+       to plain code.  Change TV_NAME_LOOKUP to start/stop.
+       (lookup_type_current_level): Likewise.  Refactor inner return to
+       break.
+       (pushdecl_class_level): Refactor POP_TIMEVAR_AND_RETURN to plain
+       code.  Change TV_NAME_LOOKUP to start_cond/stop_cond.
+       (pushdecl_top_level_1): Likewise.
+       (lookup_using_namespace): Likewise.
+       (pushdecl_with_scope): Refactor timevar calls out to a wrapper
+       function.  Change TV_NAME_LOOKUP to start_cond/stop_cond.
+       (push_overloaded_decl): Likewise.
+       (push_class_level_binding): Likewise.
+       (namespace_binding): Likewise.
+       (set_namespace_binding): Likewise.
+       (supplement_binding): Likewise.
+       (unqualified_namespace_lookup): Likewise.
+       (lookup_name_real): Likewise.
+       (lookup_type_scope): Likewise.
+       (namespace_ancestor): Likewise.
+       (lookup_name_innermost_nonclass_level): Likewise.
+       (pushtag): Likewise.
+       (pop_from_top_level): Likewise.
+       (pushdecl_maybe_friend): Refactor timevar calls out to a wrapper
+       function.  Change TV_NAME_LOOKUP to start_cond/stop_cond.  Wrap long
+       lines.
+       (add_using_namespace): Refactor timevar calls out to a wrapper
+       function.  Change TV_NAME_LOOKUP to start_cond/stop_cond.  Bypass
+       wrapper on call to self.
+
+       * decl2.c: (cp_write_global_declarations):  Add start/stop of
+       new TV_PHASE_DEFERRED, TV_PHASE_CGRAPH, TV_PHASE_CHECK_DBGINFO.
+       Remove push/pop calls to TV_VARCONST.
+
+       * parser.c: Add include of "timevar.h".
+       (cp_parser_explicit_instantiation): Add push/pop calls to
+       TV_TEMPLATE_INST.
+       (cp_parser_enum_specifier): Add push/pop calls to new TV_PARSE_ENUM.
+       (cp_parser_class_specifier): Add wrapper to add push/pop calls to
+       TV_PARSE_STRUCT.
+       (cp_parser_function_definition_from_specifiers_and_declarator): Add
+       push/pop calls to new TV_PARSE_FUNC or TV_PARSE_INLINE.
+       (cp_parser_late_parsing_for_member):  Add push/pop calls to
+       new TV_PARSE_INMETH.
+
+       * call.c: Add include of "timevar.h".
+        (convert_class_to_reference): Wrap and add push/pop calls to 
+       TV_OVERLOAD.
+       (build_op_call): Likewise.
+       (build_conditional_expr): Likewise.
+       (build_new_op): Likewise.
+       (build_new_method_call): Likewise.
+        (build_user_type_conversion): Reorganize to single return and add
+       push/pop calls to TV_OVERLOAD.
+        (perform_overload_resolution): Likewise.
+
+       * Make-lang.in: Add dependence of call.o and parser.o on $(TIMEVAR_H).
+
+2011-05-02  Jason Merrill  <jason@redhat.com>
+
+       * tree.c (build_vec_init_expr): Take complain parm.
+       (build_vec_init_elt): Likewise.  Free arg vector.
+       (diagnose_non_constexpr_vec_init, build_array_copy): Adjust.
+       * cp-tree.h (VEC_INIT_EXPR_SLOT): Use VEC_INIT_EXPR_CHECK.
+       (VEC_INIT_EXPR_INIT): Likewise.
+       Adjust build_vec_init_expr declaration.
+       * init.c (perform_member_init): Adjust.
+
+       Revert:
+       PR c++/40975
+       * cp-tree.def (VEC_INIT_EXPR): Add third operand.
+       * cp-tree.h (VEC_INIT_EXPR_NELTS): New.
+       * cp-gimplify.c (cp_gimplify_expr) [VEC_INIT_EXPR]: Handle it.
+       * tree.c (build_vec_init_expr): Handle getting pointer/nelts.
+       (build_vec_init_elt): Don't expect an array type.
+       (build_array_copy): Adjust.
+       * init.c (perform_member_init): Adjust.
+       (build_new_1): Use build_vec_init_expr.
+
+       PR c++/48834
+       * tree.c (build_vec_init_expr): Set TREE_SIDE_EFFECTS.
+       Protect an explicit target.
+
+       PR c++/48446
+       * decl.c (stabilize_save_expr_r, stabilize_vla_size): New.
+       (compute_array_index_type): Revert earlier 48446 changes.
+       (grokdeclarator): Use stabilize_vla_size.
+
+2011-05-02  Dmitry Gorbachev  <d.g.gorbachev@gmail.com>
+           Eric Botcazou <ebotcazou@adacore.com>
+
+       * parser.c (cp_parser_init_declarator): Set pushed_scope to NULL_TREE
+       instead of inappropriate zero values.
+
+2011-05-02  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/47969
+       * decl.c (compute_array_index_type): Check build_expr_type_conversion
+       return value for NULL_TREE.
+
+2011-04-29  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/48606
+       * init.c (perform_member_init): Check build_value_init return
+       value for error_mark_node.
+
+2011-04-29  Diego Novillo  <dnovillo@google.com>
+           Le-Chun Wu  <lcwu@google.com>
+
+       * call.c (conversion_null_warnings): Also handle assignments
+       when warning about NULL conversions.
+
+2011-04-29  Le-Chun Wu  <lcwu@google.com>
+
+       * cp-tree.h (LOOKUP_EXPLICIT_TMPL_ARGS): Define.
+       * call.c (build_new_function_call): Set it for TEMPLATE_ID_EXPRs.
+       (build_over_call): Use it to determine whether to emit a NULL
+       warning for template function instantiations.
+       (build_new_method_call): Set LOOKUP_EXPLICIT_TMPL_ARGS if
+       EXPLICIT_TARGS is set.
+
+2011-04-29  Nicola Pero  <nicola.pero@meta-innovation.com>,
+           Mike Stump <mikestump@comcast.net>
+
+       * Make-lang.in ($(srcdir)/cp/cfns.h): Enable the dependency only
+       in maintainer mode.  Use the --output-file option of gperf instead
+       of > to prevent creating an empty cp/cfns.h when gperf is not
+       available.
+
+2011-04-28  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/48798
+       * semantics.c (finish_base_specifier): cv-qualified base class
+       is fine, per DR 484.
+
+2011-04-28  Dodji Seketeli  <dodji@redhat.com>
+
+       PR c++/48656
+       * semantics.c (finish_call_expr): Don't forget BASELINK nodes when
+       considering call expressions involving a member function.
+
+2011-04-28  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/48530
+       * tree.c (build_cplus_new): Check build_target_expr return
+       value for error_mark_node.
+
+2011-04-28  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/48771
+       * semantics.c (literal_type_p): Reference types are literal types,
+       per the FDIS.
+       (valid_type_in_constexpr_fundecl_p): Remove.
+       (is_valid_constexpr_fn): Adjust.
+
+2011-04-27  Jason Merrill  <jason@redhat.com>
+
+       PR libstdc++/48760
+       Implement list-initialization of _Complex.
+       * decl.c (reshape_init_r): Allow {real,imag} for _Complex.
+       (check_initializer): Likewise.
+       * call.c (build_complex_conv): New.
+       (implicit_conversion): Call it.
+       (convert_like_real): Handle it.
+       * typeck2.c (check_narrowing): Handle it.
+
+       * init.c (build_vec_delete_1): Look for sfk_deleting_destructor to
+       decide whether to delete.
+       (build_vec_init): Pass sfk_complete_destructor.
+
+       PR c++/40975
+       * cp-tree.def (VEC_INIT_EXPR): Add third operand.
+       * cp-tree.h (VEC_INIT_EXPR_NELTS): New.
+       * cp-gimplify.c (cp_gimplify_expr) [VEC_INIT_EXPR]: Handle it.
+       * tree.c (build_vec_init_expr): Handle getting pointer/nelts.
+       (build_vec_init_elt): Don't expect an array type.
+       (build_array_copy): Adjust.
+       * init.c (perform_member_init): Adjust.
+       (build_new_1): Use build_vec_init_expr.
+
+       * class.c (resolve_address_of_overloaded_function): Don't
+       change OVERLOAD to TREE_LIST.
+       * pt.c (print_candidates_1): Remove nonsensical assert.
+
+       PR c++/48046
+       * parser.c (cp_parser_diagnose_invalid_type_name): Commit
+       to tentative parse sooner.
+
 2011-04-26  Jason Merrill  <jason@redhat.com>
 
        PR c++/42687