X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Fcp%2FChangeLog;h=f0b9d7f9f32a91c217186ebde018b29f9dbb28ae;hp=1921f7288b276e0bc1a1d33ca3eaf2b02cd693cb;hb=d73f0fde7ff56581799a3342f7d0b90747ef98fe;hpb=c0cc2275bb9c98b3ad82b4199288fed128f12e9c diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1921f7288b2..f0b9d7f9f32 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,508 @@ +2009-12-01 Jason Merrill + + PR c++/41611 + * decl2.c (get_guard): Copy DECL_COMDAT. + (comdat_linkage): Set DECL_COMDAT unconditionally. + +2009-12-01 Jakub Jelinek + + PR c++/3187 + * optimize.c (cdtor_comdat_group): New function. + (maybe_clone_body): Also optimize DECL_COMDAT base/complete cdtors + and in that case put also the deleting dtor in the same comdat group + as base and complete dtor if dtor is virtual. + +2009-11-30 Paolo Carlini + + PR c++/40371 + * call.c (add_template_candidate_real): Early return NULL if + the arglist length is smaller than skip_without_in_chrg; tidy. + +2009-11-30 Dodji Seketeli + + PR c++/42069 + * pt.c (convert_template_argument): Strip typedefs from SCOPE_REFs. + +2009-11-29 Dodji Seketeli + + PR c++/36408 + * semantics.c (empty_expr_stmt_p): Handle void_zero_node and fix + bad indentation. + * pt.c (tsubst_copy_and_build): Fix typo. + +2009-11-29 Jan Hubicka + + * optimize.c (maybe_clone_body): Emit thunks associated to alias. + * Make-lang.in (method.o): Add dependency on gimple.h. + * method.c: Include gimple.h + (make_alias_for_thunk): Use same body alias instead of assemble_alias. + (use_thunk): Drop codegen; use cgraph_add_thunk; gimplify + generic thunks. + * semantics.c (expand_or_defer_fn): Emit associated thunks. + +2009-11-28 Dodji Seketeli + + PR c++/36408 + * cp-tree.h (empty_expr_stmt_p): Declare ... + * semantics.c (empty_expr_stmt_p): ... this. + * pt.c (tsubst_copy_and_build) : Use it. + +2009-11-27 Paolo Carlini + + PR c++/38656 + * cxx-pretty-print.c (pp_cxx_expression): Handle TEMPLATE_ID_EXPR. + +2009-11-27 Paolo Carlini + + PR c++/35112 + * pt.c (print_overloaded_functions): New. + (print_candidates): Call the latter. + * parser.c (cp_parser_class_name): Do not duplicate the diagnostics + after the cp_parser_lookup_name call. + +2009-11-26 Jason Merrill + + PR c++/42026, DR 239 + * parser.c (cp_parser_postfix_expression): A local extern also + prevents arg-dependent lookup. + +2009-11-26 Gabriel Dos Reis + + * decl.c (grokdeclarator): Remove period at end of diagnosic message. + +2009-11-25 Jason Merrill + + PR c++/10690 + * rtti.c (get_tinfo_decl_dynamic): Call resolve_nondeduced_context. + +2009-11-24 Jason Merrill + + PR c++/42137 + * parser.c (cp_parser_mem_initializer_id): Pass typename_type to + cp_parser_class_name. + (cp_parser_unqualified_id): Same, rather than class_type. + + PR c++/11764 + * parser.c (cp_parser_expression_statement): Give helpful error + for constructor name used as type. + + * pt.c (determine_specialization): Give helpful error about missing + "template<>". + +2009-11-23 Jakub Jelinek + + PR middle-end/42095 + * tree.c: Include cgraph.h. + (cp_fix_function_decl_p): Don't return true for same_body aliases. + * Make-lang.in (cp/tree.o): Depend on $(CGRAPH_H). + +2009-11-23 Dodji Seketeli + + PR c++/14777 + * cp-tree.def : Declare new kind of tree + node. + * cp-tree.h (struct tree_template_info, + struct qualified_typedef_usage_s): New. + (cp_tree_node_structure_enum): add TS_CP_TEMPLATE_INFO. + (union lang_tree_node): Add template_info. + (TI_TEMPLATE, TI_ARGS, TI_TYPEDEFS_NEEDING_ACCESS_CHECKING): + Adjust. + (build_template_info): Declare. + (get_types_needing_access_check): Adjust return type. + (add_typedef_to_current_template_for_access_check): Declare. + * cp-objcp-common.c (cp_tree_size): Handle TEMPLATE_INFO. + * semantics.c (add_typedef_to_current_template_for_access_check): + Split from ... + (check_accessibility_of_qualified_id): ... here. + * decl.c (make_typename_type): Use it. + * pt.c (build_template_info): Define. + (check_explicit_specialization, find_parameter_packs_r, + push_template_decl_real, lookup_template_class, + for_each_template_parm_r, tsubst_decl, tsubst): Use + build_template_info. + (get_types_needing_access_check): Adjust return type. + (append_type_to_template_for_access_check_1): Record the + location of the usage point of the typedef. Adjust to TEMPLATE_INFO. + (append_type_to_template_for_access_check): Add new location + parameter. Pass it to append_type_to_template_for_access_check_1. + Adjust to TEMPLATE_INFO. + (perform_typedefs_access_check): Temporarily set input_location to + the usage point of the typedef we are checking access for. Adjust + to new TEMPLATE_INFO tree node. + * tree.c (bind_template_template_parm): Use build_template_info. + * call.c (add_template_candidate_real): Likewise. + * decl.c (grokfndecl): Likewise. + (cp_tree_node_structure): Handle TEMPLATE_INFO. + +2009-11-20 Jason Merrill + + PR c++/9050, DR 147, DR 318 + * parser.c (cp_parser_lookup_name): If the name matches the explicit + class scope, we're naming the constructor. + (cp_parser_constructor_declarator_p): Just use cp_parser_unqualified_id + if we have a nested-name-specifier. + (cp_parser_direct_declarator): Handle getting an overload set as a + constructor declarator. + (cp_parser_unqualified_id): Avoid looking up the constructor when + naming the destructor. + (cp_parser_diagnose_invalid_type_name): Give good + diagnostic for improper use of constructor as template. + * typeck.c (finish_class_member_access_expr): Give good diagnostic + about calling constructor. + + * error.c (dump_aggr_type): Don't print A::A for injected-class-name. + +2009-11-20 Simon Martin + + PR c++/38646 + * pt.c (process_partial_specialization): Do not turn wrongly located + parameter pack arguments into error_mark_node. + Split too long lines into two. + +2009-11-20 Paolo Carlini + + PR c++/42060 + * except.c (build_throw): Check the tree returned by + decay_conversion for error_mark_node. + +2009-11-20 Shujing Zhao + + PR c++/29017 + * cp-tree.h (composite_pointer_operation): New type. + (composite_pointer_type): Adjust prototype with new argument. + * typeck.c (composite_pointer_type): Accept + composite_pointer_operation as argument and emit diagnostic to be + visible to gettext and checked at compile time. + (composite_pointer_type_r): Likewise. + (common_pointer_type): Update call to composite_pointer_type. + (cp_build_binary_op): Likewise. + * call.c (build_conditional_expr): Likewise. + +2009-11-19 Jason Merrill + + PR c++/42115 + * call.c (build_op_delete_call): Don't complain about using + op delete (void *, size_t) for placement delete if there's an + op delete (void *). + + DR 176 permissiveness + * class.c (build_self_reference): Call set_underlying_type. + * decl.c (check_elaborated_type_specifier): Don't complain about + injected-class-name. + (type_is_deprecated): Use TYPE_MAIN_VARIANT. + * pt.c (convert_template_argument): Handle injected-class-name used + as template template argument. + * typeck2.c (abstract_virtuals_error): Use TYPE_MAIN_VARIANT. + + PR c++/561 + * decl.c (static_fn_type): Split out... + (revert_static_member_fn): ...from here. + * cp-tree.h: Declare it. + * class.c (resolve_address_of_overloaded_function): Use it to compare + pointers to member functions. + * typeck.c (build_static_cast_1): Call instantiate_type. + +2009-11-18 Shujing Zhao + + PR c++/40892 + * error.c (maybe_warn_cpp0x): Accept enum cpp0x_warn_str as argument. + (maybe_warn_variadic_templates): Update the maybe_warn_cpp0x calls to + match the new declaration. + * cp-tree.h (cpp0x_warn_str): New type. + (maybe_warn_cpp0x): Adjust prototype with new argument. + * call.c (reference_binding): Update the maybe_warn_cpp0x calls. + * decl.c (reshape_init_r, check_initializer, grokdeclarator): + Likewise. + * parser.c (cp_parser_primary_expression) + (cp_parser_parenthesized_expression_list, cp_parser_new_initializer) + (cp_parser_assignment_expression, cp_parser_condition) + (cp_parser_jump_statement, cp_parser_mem_initializer) + (cp_parser_simple_type_specifier, cp_parser_elaborated_type_specifier) + (cp_parser_enum_specifier, cp_parser_initializer) + (cp_parser_pure_specifier, cp_parser_functional_cast): Likewise. + +2009-11-18 Jakub Jelinek + + PR c++/3187 + * cp-tree.h (expand_or_defer_fn_1): New prototype. + * decl2.c (cp_write_global_declarations): Mark as !DECL_EXTERNAL + also all same_body aliases. + * semantics.c (expand_or_defer_fn): Move most of the function + except registering with cgraph to ... + (expand_or_defer_fn_1): ... here. New function. + * optimize.c: Include cgraph.h. + (maybe_clone_body): If in charge parm is not used and both base + and complete clones are created and are not comdat, tell cgraph + they have the same body. + * Make-lang.in (cp/optimize.o): Depend on $(CGRAPH_H). + +2009-11-17 Paolo Carlini + + PR c++/42058 + * typeck2.c (digest_init_r): Check init for error_operand_p. + * decl.c (reshape_init_class): Check return value of reshape_init_r + for error_mark_node. + +2009-11-17 Jakub Jelinek + + PR c++/42061 + * call.c (reference_binding): Return NULL for initializer list with + error operand inside of it. + + PR c++/42059 + * typeck.c (cp_build_modify_expr): For initializer list call + check_array_initializer to make sure lhs isn't a VLA. + +2009-11-16 Jason Merrill + + PR c++/189, c++/9937, c++/13950, DR 176 + * search.c (lookup_field_r): Allow lookup to find the + injected-class-name from a template base. + (template_self_reference_p): Remove. + * decl.c (make_typename_type): Diagnose ambiguity. Use + maybe_get_template_decl_from_type_decl. + * parser.c (cp_parser_template_name): Pass true to is_template + rather than use maybe_get_template_decl_from_type_decl. + (cp_parser_lookup_name): Use maybe_get_template_decl_from_type_decl. + * pt.c (maybe_get_template_decl_from_type_decl): Handle ambiguity. + Use DECL_SELF_REFERENCE_P. + + * parser.c (cp_parser_parse_and_diagnose_invalid_type_name): + Avoid duplicate ambiguity error. + * error.c (dump_decl): Don't say "typedef" for injected-class-name. + * pt.c (convert_template_argument): Tweak logic. + +2009-11-16 Paolo Carlini + + PR c++/42055 + * pt.c (determine_specialization): Assign to candidates the return + value of the chainon called before print_candidates. + +2009-11-16 Paolo Carlini + + PR c++/32056 + * decl.h (enum decl_context): Add TPARM enumerator. + * decl.c (grokdeclarator): Per 14.1/2, error out if a storage class + is specified in a template parameter declaration. + * parser.c (cp_parser_template_parameter): Call grokdeclarator with + TPARM as third argument. + +2009-11-13 Jason Merrill + + PR c++/27425 + PR c++/34274 + * pt.c (expand_template_argument_pack): Handle null arg gracefully. + (convert_template_argument): Use %T for type. + + PR c++/29363 + * decl.c (create_implicit_typedef): Set TYPE_STUB_DECL here. + (cxx_init_decl_processing): Not here. + * name-lookup.c (pushtag): Or here. + * pt.c (lookup_template_class): Or here. + + PR c++/35075 + * pt.c (convert_nontype_argument): Give helpful error about + reference variable argument to reference template parameter. + + PR c++/21008, DR 515 + * semantics.c (finish_non_static_data_member): Don't check + derivation in a template. + + PR c++/11987 + * parser.c (cp_parser_direct_declarator): Give helpful error about + trying to define member of a dependent typedef. + * pt.c (resolve_typename_type): Don't resolve a typedef typename. + * tree.c (typedef_variant_p): New. + * cp-tree.h: Declare it. + +2009-11-12 Jason Merrill + + PR c++/27078 + * parser.c (cp_parser_primary_expression): Don't give a duplicate + ambiguity error. + + PR c++/39560 + * decl2.c (build_anon_union_vars): Set DECL_ARTIFICIAL. + + PR c++/37037 + * decl.c (grokdeclarator): Don't generate a void PARM_DECL. + + PR c++/42013 + * call.c (build_conditional_expr): Check specifically for folding + to CALL_EXPR rather than TREE_SIDE_EFFECTS. + + * typeck.c (cv_qualified_p): New fn. + (decay_conversion): Use it. + * cp-tree.h: Declare it. + * tree.c (rvalue): Use it and cv_unqualified. + * init.c (build_aggr_init): Likewise. + + PR c++/42013 + * call.c (build_conditional_expr): Don't fold a TREE_SIDE_EFFECTS + COND_EXPR in unevaluated context. + +2009-11-12 Jan Hubicka + + * decl2.c (constrain_visibility): Clear WEAK and COMMON flags. + +2009-11-11 Jason Merrill + + PR c++/39131 + * rtti.c (emit_support_tinfos): Add DFP types. + + * call.c (build_op_delete_call): Downgrade error about + placement/non-placement confusion to permerror. + +2009-11-10 Jason Merrill + + * call.c (build_op_delete_call): Tweak error. + + PR c++/34158 + PR c++/36406 + * call.c (non_placement_deallocation_fn_p): Split out... + (build_op_delete_call): ...from here. Use instantiate_type + for placement delete. Simplify logic. + * pt.c (primary_template_instantiation_p): Non-static. + * cp-tree.h: Declare it. + +2009-11-09 Jason Merrill + + PR c++/41972 + * parser.c (cp_parser_template_argument): Accept SCOPE_REF around + VAR_DECL. + + PR c++/41994 + * pt.c (tsubst_baselink): tsubst the name. + +2009-11-07 Jason Merrill + + PR c++/37920 + * pt.c (tsubst) [TYPEOF_TYPE]: Set cp_unevaluated_operand. + + PR c++/18451 + PR c++/40738 + * cp-tree.h (cp_decl_specifier_seq): Add any_type_specifiers_p. + * parser.c (cp_parser_single_declaration): Call + cp_parser_parse_and_diagnose_invalid_type_name here, too. + (cp_parser_parameter_declaration): And here. + (cp_parser_parse_and_diagnose_invalid_type_name): Be + less picky about declarator form. Don't skip to + the end of the block if we're in a declarator. + (cp_parser_decl_specifier_seq): Set any_type_specifiers_p. + (cp_parser_simple_declaration): Check it. + (cp_parser_member_declaration): Likewise. + (cp_parser_diagnose_invalid_type_name): Tweak error message. + (cp_parser_expression_statement): Likewise. + * decl2.c (grokfield): Mention decltype instead of typeof. + +2009-11-06 Jason Merrill + + PR c++/15946 + * parser.c (cp_parser_check_template_parameters): Don't talk about + specialization at function scope. + (cp_parser_diagnose_invalid_type_name): Handle dependent scope. + (cp_parser_parse_and_diagnose_invalid_type_name): Likewise. + (cp_parser_expression_statement): Suggest typename. + * error.c (dump_decl) [SCOPE_REF]: Print the type here. + (dump_expr) [SCOPE_REF]: Call it. + (dump_type) [UNBOUND_CLASS_TEMPLATE]: Check TFF_UNQUALIFIED_NAME. + * cxx-pretty-print.c (pp_cxx_unqualified_id): Print class template + args. + + PR c++/9381 + * decl2.c (build_memfn_type): Preserve attributes. + (cp_reconstruct_complex_type): Likewise. + (maybe_retrofit_in_chrg): Likewise. + * class.c (adjust_clone_args): Likewise. + * call.c (standard_conversion): Use build_memfn_type. + * pt.c (tsubst): Likewise. + * decl.c (build_ptrmem_type): Likewise + (check_function_type): Preserve attributes. + * tree.c (cp_build_type_attribute_variant): Propagate exception + specs on METHOD_TYPE, too. + (strip_typedefs): Preserve exception specs and attributes. + +2009-11-06 Andrew Pinski + + PR c++/41536 + * optimize.c (maybe_clone_body): Copy DECL_ATTRIBUTES and + DECL_DISREGARD_INLINE_LIMITS also. + +2009-11-06 Jakub Jelinek + + PR c++/41967 + * parser.c (cp_parser_omp_for_loop): After diagnosing not perfectly + nested loop and parsing statements, don't cp_parser_require }, instead + exit the loop if next token is CPP_EOF. + +2009-11-05 Jason Merrill + + PR c++/34180 + * method.c (do_build_copy_constructor): Don't drop cv-quals from + the field type. + + PR c++/7046 + * class.c (finish_struct): Store maximum_field_alignment in + TYPE_PRECISION. + * pt.c (instantiate_class_template): Set maximum_field_alignment. + + PR c++/34870 + * name-lookup.c (arg_assoc_class): Call complete_type. + * pt.c (instantiate_class_template): Call uses_template_parms + instead of dependent_type_p. + + PR c++/41703 + * pt.c (check_undeduced_parms): New subroutine of... + (more_specialized_fn): ...here. Undeduced template parms can make + a template less specialized than another. + +2009-11-04 Jason Merrill + + PR c++/39413 + * search.c (lookup_base): Don't complete_type (base). + + PR c++/35067 + * method.c (use_thunk): Check DECL_WEAK as well as + DECL_ONE_ONLY. + + PR c++/17365, DR 218 + * name-lookup.c (add_function): Ignore non-functions. + +2009-11-03 Jason Merrill + + PR c++/36959 + * decl2.c (cxx_callgraph_analyze_expr): Don't reference a function + just because a static variable in it is needed unless -frepo. + + PR c++/41876 + * parser.c (cp_parser_type_specifier_seq): Rename is_condition to + is_declaration. + (cp_parser_exception_declaration): Pass true. + (cp_parser_omp_for_loop): Likewise. + + PR c++/41927 + * typeck.c (build_x_binary_op): Don't do warn_parentheses + if we're in a SFINAE context. + + PR c++/41815 + * call.c (build_call_a): Strip cv-quals from rvalue result. + + PR c++/40944 + * call.c (initialize_reference): Add complain parm. + * typeck.c (convert_for_initialization): Pass it. + * decl.c (grok_reference_init): Likewise. + * cp-tree.h: Declare it. + + PR c++/40687 + * pt.c (do_auto_deduction): Diagnose inconsistent deduction. + +2009-11-02 Dodji Seketeli + + PR c++/37093 + * pt.c (check_valid_ptrmem_cst_expr): New function. + (convert_nontype_argument): Use it to output an error for + illegal pointer to member expressions used as template arguments. + 2009-11-02 Jason Merrill Restrict DR 757 change to C++0x mode.