summaryrefslogtreecommitdiff
path: root/gcc/cp/class.c
Commit message (Collapse)AuthorAgeFilesLines
* re PR c++/50965 (C++11 Non static member initializer are not run when class ↵Olivier Goffart2011-11-041-0/+6
| | | | | | | | | | | is initialized with {}) PR c++/50965 * class.c (check_field_decls): NSDMI makes a class non-aggregate. Co-Authored-By: Jason Merrill <jason@redhat.com> From-SVN: r180965
* re PR c++/50500 ([C++0x] [DR 1082] move constructor should cause copy ↵Jason Merrill2011-11-011-2/+2
| | | | | | | | | | | | | | | constructor to be deleted, but still declared) PR c++/50500 DR 1082 * search.c (lookup_fnfields_idx_nolazy): Split out from... (lookup_fnfields_1): ...here. (lookup_fnfields_slot_nolazy): Use it. * cp-tree.h: Declare it. * class.c (type_has_move_assign): Use it. (type_has_user_declared_move_assign): Likewise. From-SVN: r180738
* re PR c++/50920 (add a -std=c++11 option to the driver)Jason Merrill2011-10-311-1/+1
| | | | | | | | | | | | | | | | | | | | | PR c++/50920 gcc/c-family * c-common.h (cxx_dialect): Add cxx11 and cxx03. * c.opt: Add -std=c++11, -std=gnu++11, -std=gnu++03, and -Wc++11-compat. * c-opts.c (set_std_cxx11): Rename from set_std_cxx0x. gcc/cp * class.c (check_field_decl): Change c++0x in diags to c++11. * error.c (maybe_warn_cpp0x): Likewise. * parser.c (cp_parser_diagnose_invalid_type_name): Likewise. * pt.c (check_default_tmpl_args): Likewise. libcpp * include/cpplib.h (enum c_lang): Rename CLK_CXX0X to CLK_CXX11, CLK_GNUCXX0X to CLK_GNUCXX11. libstdc++-v3 * include/bits/c++0x_warning.h: Change -std=c++0x to -std=c++11. From-SVN: r180707
* re PR c++/50870 ([C++0x] [4.6/4.7 Regression] ICE with decltype, operator->, ↵Paolo Carlini2011-10-261-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | and default template arguments) 2011-10-26 Paolo Carlini <paolo.carlini@oracle.com> * typeck.c (cp_build_addr_expr_1): Use BASELINK_P. * class.c (instantiate_type): Likewise. * pt.c (convert_nontype_argument_function, uses_template_parms, tsubst_copy, resolve_nondeduced_context, type_dependent_expression_p): Likewise. * semantics.c (finish_decltype_type): Likewise. * decl2.c (mark_used): Likewise. * name-lookup.c (arg_assoc): Likewise. /cp 2011-10-26 Paolo Carlini <paolo.carlini@oracle.com> PR c++/50870 * typeck.c (non_reference): Pass NULL_TREE through. /testsuite 2011-10-26 Paolo Carlini <paolo.carlini@oracle.com> PR c++/50870 * g++.dg/cpp0x/decltype34.C: New. From-SVN: r180531
* re PR c++/13657 (Error message incorrectly describes return type as argument ↵Paolo Carlini2011-10-191-2/+2
| | | | | | | | | | | | | | | | | | | type) /cp 2011-10-19 Paolo Carlini <paolo.carlini@oracle.com> PR c++/13657 * class.c (instantiate_type): Fix error message. /testsuite 2011-10-19 Paolo Carlini <paolo.carlini@oracle.com> PR c++/13657 * g++.dg/parse/error42.C: New. * g++.old-deja/g++.other/ptrmem7.C: Tweak dg-errors. From-SVN: r180228
* re PR c++/50500 ([C++0x] [DR 1082] move constructor should cause copy ↵Jason Merrill2011-10-181-6/+52
| | | | | | | | | | | | | | | | | | constructor to be deleted, but still declared) PR c++/50500 DR 1082 * class.c (type_has_user_declared_move_constructor): New. (type_has_user_declared_move_assign): New. (add_implicitly_declared_members): Add lazy copy ops even if there's a move. * method.c (lazily_declare_fn): Delete implicit copies if there's a move. (maybe_explain_implicit_delete): Explain this. Use inform rather than error. * cp-tree.h: Declare new fns. From-SVN: r180159
* class.c (sorted_fields_type_new): Factor out of ...Diego Novillo2011-10-131-3/+17
| | | | | | | * class.c (sorted_fields_type_new): Factor out of ... (finish_struct_1): ... here. From-SVN: r179939
* class.c (fixed_type_or_null): Handle NSDMI.Jason Merrill2011-10-021-4/+7
| | | | | | | | * class.c (fixed_type_or_null): Handle NSDMI. * method.c (walk_field_subobs): Disable NSDMI noexcept checking for now. From-SVN: r179435
* Implement C++11 non-static data member initializers.Jason Merrill2011-09-241-1/+9
| | | | | | | | | | | | | | | | | | | | | * cp-tree.h (enum cpp_warn_str): Add CPP0X_NSDMI. * error.c (maybe_warn_cpp0x): Handle it. * call.c (convert_like_real) [ck_user]: Don't complain about using an explicit constructor for direct-initialization. * class.c (check_field_decl): Fix ancient typo. (check_field_decls): NSDMIs make the default ctor non-trivial. * decl.c (cp_finish_decl): Record NSDMI. (grokdeclarator): Allow NSDMI. * decl2.c (grokfield): Allow NSDMI. Correct LOOKUP flags. * init.c (perform_member_init): Use NSDMI. * method.c (walk_field_subobs): Check for NSDMI. * parser.c (cp_parser_member_declaration): Parse { } init. * semantics.c (register_constexpr_fundef): Don't talk about a return statement in a constexpr constructor. (cxx_eval_call_expression): Check DECL_INITIAL instead of DECL_SAVED_TREE. From-SVN: r179155
* re PR c++/44267 (SFINAE does not handle down static_cast over virtual ↵Paolo Carlini2011-09-241-11/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | inheritance) /cp 2011-09-24 Paolo Carlini <paolo.carlini@oracle.com> PR c++/44267 * class.c (build_base_path): Add a tsubst_flags_t parameter. (convert_to_base): Adjust call. * typeck.c (build_class_member_access_expr, get_member_function_from_ptrfunc, build_static_cast_1): Likewise. * init.c (dfs_initialize_vtbl_ptrs, emit_mem_initializers): Likewise. * method.c (do_build_copy_constructor, do_build_copy_assign): Likewise. * rtti.c (build_dynamic_cast_1): Likewise. * typeck2.c (build_scoped_ref, build_m_component_ref): Likewise. * call.c (build_over_call, build_special_member_call): Likewise. * cvt.c (cp_convert_to_pointer, convert_to_pointer_force, build_up_reference): Likewise. * cp-tree.h (build_base_path): Adjust declaration. /testsuite 2011-09-24 Paolo Carlini <paolo.carlini@oracle.com> PR c++/44267 * g++.dg/template/sfinae28.C: New. From-SVN: r179141
* Core 234 - allow const objects with no initializer or user-provided default...Jason Merrill2011-09-231-0/+34
| | | | | | | | | | | | | | | | Core 234 - allow const objects with no initializer or user-provided default constructor if the defaulted constructor initializes all the subobjects. PR c++/20039 PR c++/42844 * class.c (default_init_uninitialized_part): New. * cp-tree.h: Declare it. * decl.c (check_for_uninitialized_const_var): Use it. * init.c (perform_member_init): Likewise. (build_new_1): Likewise. * method.c (walk_field_subobs): Likewise. From-SVN: r179130
* cp-tree.h (DECL_TEMPLOID_INSTANTIATION): New.Jason Merrill2011-09-201-1/+1
| | | | | | | | | | * cp-tree.h (DECL_TEMPLOID_INSTANTIATION): New. (DECL_GENERATED_P): New. * class.c (finalize_literal_type_property): Use them. * semantics.c (is_instantiation_of_constexpr): Likewise. (register_constexpr_fundef): Likewise. From-SVN: r179017
* class.c (trivial_default_constructor_is_constexpr): Rename from ↵Jason Merrill2011-09-051-9/+20
| | | | | | | | | | | | | | | | synthesized_default_constructor_is_constexpr. * class.c (trivial_default_constructor_is_constexpr): Rename from synthesized_default_constructor_is_constexpr. (type_has_constexpr_default_constructor): Adjust. (add_implicitly_declared_members): Call it instead. (explain_non_literal_class): Explain about non-constexpr default ctor. * cp-tree.h: Adjust. * method.c (synthesized_method_walk): Adjust. * semantics.c (explain_invalid_constexpr_fn): Handle defaulted functions, too. From-SVN: r178519
* re PR c++/50207 (G++ segv's on reduced test case)Jakub Jelinek2011-08-301-3/+18
| | | | | | | | | | PR c++/50207 * class.c (finish_struct_1): Complain if the first field is artificial. Co-Authored-By: Jason Merrill <jason@redhat.com> From-SVN: r178276
* re PR c++/46862 (ICE on std::decimal::decimal32 without any fields)Jakub Jelinek2011-08-231-1/+7
| | | | | | | | | | PR c++/46862 * class.c (finish_struct_1): If TYPE_TRANSPARENT_AGGR is set on a type which doesn't have any fields, clear it and diagnose. * g++.dg/dfp/nofields.C: New test. From-SVN: r177987
* Fix bug in vtable initializationDavid Li2011-08-131-2/+1
| | | | From-SVN: r177731
* tree.h (fold_build_pointer_plus_loc): New helper function.Richard Guenther2011-07-191-15/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2011-07-19 Richard Guenther <rguenther@suse.de> * tree.h (fold_build_pointer_plus_loc): New helper function. (fold_build_pointer_plus_hwi_loc): Likewise. (fold_build_pointer_plus): Define. (fold_build_pointer_plus_hwi): Likewise. * builtins.c (std_gimplify_va_arg_expr): Use fold_build_pointer_plus. (fold_builtin_memory_op): Likewise. (fold_builtin_stpcpy): Likewise. (fold_builtin_memchr): Likewise. (fold_builtin_strstr): Likewise. (fold_builtin_strchr): Likewise. (fold_builtin_strrchr): Likewise. (fold_builtin_strpbrk): Likewise. (fold_builtin_strcat): Likewise. (expand_builtin_memory_chk): Likewise. (fold_builtin_memory_chk): Likewise. * c-typeck.c (build_unary_op): Likewise. * cgraphunit.c (thunk_adjust): Likewise. * fold-const.c (build_range_check): Likewise. (fold_binary_loc): Likewise. * omp-low.c (extract_omp_for_data): Likewise. (expand_omp_for_generic): Likewise. (expand_omp_for_static_nochunk): Likewise. (expand_omp_for_static_chunk): Likewise. * tree-affine.c (add_elt_to_tree): Likewise. * tree-data-ref.c (split_constant_offset_1): Likewise. * tree-loop-distribution.c (generate_memset_zero): Likewise. * tree-mudflap.c (mf_xform_derefs_1): Likewise. * tree-predcom.c (ref_at_iteration): Likewise. * tree-ssa-address.c (tree_mem_ref_addr): Likewise. (add_to_parts): Likewise. (create_mem_ref): Likewise. * tree-ssa-loop-ivopts.c (force_expr_to_var_cost): Likewise. * tree-ssa-loop-niter.c (number_of_iterations_lt_to_ne): Likewise. (number_of_iterations_le): Likewise. * tree-ssa-loop-prefetch.c (issue_prefetch_ref): Likewise. * tree-vect-data-refs.c (vect_analyze_data_refs): Likewise. (vect_create_addr_base_for_vector_ref): Likewise. * tree-vect-loop-manip.c (vect_update_ivs_after_vectorizer): Likewise. (vect_create_cond_for_alias_checks): Likewise. * tree-vrp.c (extract_range_from_assert): Likewise. * config/alpha/alpha.c (alpha_va_start): Likewise. (alpha_gimplify_va_arg_1): Likewise. * config/i386/i386.c (ix86_va_start): Likewise. (ix86_gimplify_va_arg): Likewise. * config/ia64/ia64.c (ia64_gimplify_va_arg): Likewise. * config/mep/mep.c (mep_expand_va_start): Likewise. (mep_gimplify_va_arg_expr): Likewise. * config/mips/mips.c (mips_va_start): Likewise. (mips_gimplify_va_arg_expr): Likewise. * config/pa/pa.c (hppa_gimplify_va_arg_expr): Likewise. * config/rs6000/rs6000.c (rs6000_va_start): Likewise. (rs6000_gimplify_va_arg): Likewise. * config/s390/s390.c (s390_va_start): Likewise. (s390_gimplify_va_arg): Likewise. * config/sh/sh.c (sh_va_start): Likewise. (sh_gimplify_va_arg_expr): Likewise. * config/sparc/sparc.c (sparc_gimplify_va_arg): Likewise. * config/spu/spu.c (spu_va_start): Likewise. (spu_gimplify_va_arg_expr): Likewise. * config/stormy16/stormy16.c (xstormy16_expand_builtin_va_start): Likewise. (xstormy16_gimplify_va_arg_expr): Likewise. * config/xtensa/xtensa.c (xtensa_va_start): Likewise. (xtensa_gimplify_va_arg_expr): Likewise. c-family/ * c-common.c (pointer_int_sum): Use fold_build_pointer_plus. * c-omp.c (c_finish_omp_for): Likewise. cp/ * call.c (build_special_member_call): Use fold_build_pointer_plus. * class.c (build_base_path): Likewise. (convert_to_base_statically): Likewise. (dfs_accumulate_vtbl_inits): Likewise. * cp-gimplify.c (cxx_omp_clause_apply_fn): Likewise. * except.c (expand_start_catch_block): Likewise. * init.c (expand_virtual_init): Likewise. (build_new_1): Likewise. (build_vec_delete_1): Likewise. (build_vec_delete): Likewise. * rtti.c (build_headof): Likewise. (tinfo_base_init): Likewise. * typeck.c (get_member_function_from_ptrfunc): Likewise. (cp_build_addr_expr_1): Likewise. * typeck2.c (build_m_component_ref): Likewise. fortran/ * trans-expr.c (fill_with_spaces): Use fold_build_pointer_plus. (gfc_trans_string_copy): Likewise. * trans-intrinsic.c (gfc_conv_intrinsic_repeat): Likewise. * trans-types.c (gfc_get_array_descr_info): Likewise. * trans.c (gfc_build_array_ref): Likewise. java/ * builtins.c (static): Use fold_build_pointer_plus. * class.c (make_class_data): Likewise. (build_symbol_entry): Likewise. * except.c (build_exception_object_ref): Likewise. * expr.c (build_java_arrayaccess): Likewise. (build_field_ref): Likewise. (build_known_method_ref): Likewise. (build_invokevirtual): Likewise. objc/ * objc-next-runtime-abi-02.c (objc_v2_build_ivar_ref): Use fold_build_pointer_plus. (objc2_build_ehtype_initializer): Likewise. From-SVN: r176461
* re PR c++/45329 (When printing a list of candidate functions, explain why ↵Nathan Froyd2011-07-161-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | each function failed to match.) PR c++/45329 PR c++/48934 * cp-tree.h (fn_type_unification): Add `bool' parameter. * pt.c (enum template_base_result): Define. (unify_success, unify_unknown): Define. (unify_parameter_deduction_failure): Define. (unify_invalid, unify_cv_qual_mismatch, unify_type_mismatch): Define. (unify_parameter_pack_mismatch): Define. (unify_parameter_pack_inconsistent): Define. (unify_ptrmem_cst_mismatch, unify_vla_arg): Define. (unify_expression_unequal, unify_inconsistency): Define. (unify_method_type_error, unify_arity): Likewise. (unify_too_many_parameters, unify_too_few_parameters): Define. (unify_arg_conversion, unify_no_common_base): Define. (unify_illformed_ptrmem_cst_expr): Define. (unify_substitution_failure): Define. (unify_inconsistent_template_template_parameters): Define. (unify_template_deduction_failure): Define. (unify_template_argument_mismatch): Define. (unify_overload_resolution_failure): Define. (comp_template_args_with_info): New function, split out from... (comp_template_args): ...here. Call it. (deduction_tsubst_fntype): Add `complain' parameter'. Pass it to tsubst. (unify): Add `explain_p' parameter. Pass to all relevant calls. Call above status functions when appropriate. (resolve_overloaded_unification, try_one_overload): Likewise. (type_unification, type_unification_real): Likewise. (unify_pack_expansion): Likewise. (get_template_base, try_class_unification): Likewise. (get_bindings, more_specialized_fn): Pass false to unification calls. (get_class_bindings, do_auto_deduction): Likewise. (convert_nontype_argument): Likewise. (fn_type_unification): Likewise. Pass tf_warning_or_error if explain_p. (get_template_base): Add `explain_p' parameter and pass it to try_class_unification. Return an enum template_base_result. * class.c (resolve_address_of_overloaded_function): Pass false to fn_type_unification. * call.c (enum rejection_reason_code): Add new codes. (struct rejection_reason): Add template_unification field. Add template_instantiation field. (template_unification_rejection): Define. (template_unification_error_rejection): Define. (template_instantiation_rejection): Define. (invalid_copy_with_fn_template_rejection): Define. (add_template_candidate): Pass false to unify. Provide more rejection reasons when possible. (print_template_unification_rejection): Define. (print_arity_rejection): Define, split out from... (print_z_candidate): ...here. Add cases for new rejection reasons. Co-Authored-By: Jason Merrill <jason@redhat.com> From-SVN: r176365
* re PR c++/49663 ([C++0x] ICE in lookup_base)Jason Merrill2011-07-071-17/+3
| | | | | | | | | | | | | | PR c++/49663 * pt.c (push_deduction_access_scope): Preserve processing_template_decl across push_to_top_level. And revert: * class.c (pushclass): Accept NULL argument. (popclass): Deal with popping null class. * pt.c (push_access_scope, pop_access_scope): Use them rather than push_to_top_level/pop_from_top_level. * name-lookup.c (lookup_name_real_1): Check current_class_type. From-SVN: r176013
* re PR c++/45923 (constexpr diagnostics, more more)Jason Merrill2011-06-291-1/+65
| | | | | | | | | | | | | | | | | | | | | | | | PR c++/45923 * class.c (explain_non_literal_class): New. (finalize_literal_type_property): Call it. * cp-tree.h: Declare it. * semantics.c (ensure_literal_type_for_constexpr_object): Call it. (is_valid_constexpr_fn): Likewise. (massage_constexpr_body): Split out from... (register_constexpr_fundef): ...here. (is_instantiation_of_constexpr): New. (expand_or_defer_fn_1): Leave DECL_SAVED_TREE alone in that case. (explain_invalid_constexpr_fn): New. (cxx_eval_call_expression): Call it. (potential_constant_expression_1): Likewise. Avoid redundant errors. * method.c (process_subob_fn): Diagnose non-constexpr. (walk_field_subobs): Likewise. (synthesized_method_walk): Don't shortcut if we want diagnostics. (explain_implicit_non_constexpr): New. (defaulted_late_check): Use it. * call.c (build_cxx_call): Remember location. From-SVN: r175646
* class.c (finalize_literal_type_property): Update conditions.Jason Merrill2011-06-291-4/+2
| | | | | | | * class.c (finalize_literal_type_property): Update conditions. * method.c (defaulted_late_check): Set TYPE_HAS_CONSTEXPR_CTOR. From-SVN: r175644
* re PR c++/49440 (Invalid dynamic_cast for unnamed namespace)Jason Merrill2011-06-231-14/+3
| | | | | | | | PR c++/49440 * class.c (set_linkage_according_to_type): Just check TREE_PUBLIC on the type's name. From-SVN: r175340
* re PR c++/49369 (typeof() strips const from member when used in const method)Jason Merrill2011-06-141-16/+8
| | | | | | | PR c++/49369 * class.c (build_base_path): Fix cv-quals in unevaluated context. From-SVN: r175042
* re PR c++/48884 (decltype's operand doesn't consider friend declaration)Jason Merrill2011-05-241-3/+17
| | | | | | | | | | | | | PR c++/48884 * class.c (pushclass): Accept NULL argument. (popclass): Deal with popping null class. * pt.c (push_access_scope, pop_access_scope): Use them rather than push_to_top_level/pop_from_top_level. (push_deduction_access_scope, pop_defarg_context): New. (fn_type_unification): Use them. * name-lookup.c (lookup_name_real_1): Check current_class_type. From-SVN: r174139
* re PR c++/48948 ([C++0x] constexpr friend function cannot be defined in-class)Jason Merrill2011-05-181-2/+14
| | | | | | | | | | | | | | | | | | | | | | | | PR c++/48948 PR c++/49015 * class.c (finalize_literal_type_property): Do check for constexpr member functions of non-literal class. (finish_struct): Don't call check_deferred_constexpr_decls. * cp-tree.h: Don't declare it. (DECL_DEFERRED_CONSTEXPR_CHECK): Remove. * decl.c (grok_special_member_properties): Don't check it (grokfnedcl): Don't call validate_constexpr_fundecl. (start_preparsed_function): Do call it. * pt.c (tsubst_decl): Don't call it. (instantiate_class_template_1): Don't call check_deferred_constexpr_decls. * semantics.c (literal_type_p): Check for any incompleteness. (ensure_literal_type_for_constexpr_object): Likewise. (is_valid_constexpr_fn): Revert deferral changes. (validate_constexpr_fundecl): Likewise. (register_constexpr_fundef): Likewise. (check_deferred_constexpr_decls): Remove. From-SVN: r173869
* Implement final on class.Ville Voutilainen2011-05-141-0/+4
| | | | | | | | | | | * 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. From-SVN: r173761
* re PR c++/48948 ([C++0x] constexpr friend function cannot be defined in-class)Jason Merrill2011-05-111-7/+2
| | | | | | | | | | | | | | | | | | | | | 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. From-SVN: r173683
* re PR c++/48930 ([C++0x] Invalid implicitly declared default c'tor)Jason Merrill2011-05-101-0/+21
| | | | | | | | | | | | | | | 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. From-SVN: r173628
* Fixes for override/final.Ville Voutilainen2011-05-101-6/+9
| | | | | | | | * 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. From-SVN: r173626
* Implement final/override for member functions.Ville Voutilainen2011-05-091-0/+5
| | | | | | | | | | | | | | | | | | | | gcc/ * tree.h (TYPE_UNQUALIFIED, TYPE_QUAL_CONST): Convert to enum. (TYPE_QUAL_VOLATILE, TYPE_QUAL_RESTRICT): Likewise. gcc/cp/ * 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. From-SVN: r173581
* re PR c++/48574 (ICE)Dodji Seketeli2011-05-091-1/+1
| | | | | | | | | | | | | | | | | Fix PR c++/48574 gcc/cp/ PR c++/48574 * class.c (fixed_type_or_null): Use type_dependent_p_push to test if the instance has a dependent initializer. gcc/testsuite/ PR c++/48574 * g++.dg/template/dependent-expr8.C: New test case. From-SVN: r173570
* re PR c++/48749 (internal compiler error: tree check: expected field_decl)Jason Merrill2011-05-041-1/+11
| | | | | | | | PR c++/48749 * class.c (resolves_to_fixed_type_p): Don't look closely in templates. From-SVN: r173412
* class.c (resolve_address_of_overloaded_function): Don't change OVERLOAD to ↵Jason Merrill2011-04-271-8/+1
| | | | | | | | | | TREE_LIST. * class.c (resolve_address_of_overloaded_function): Don't change OVERLOAD to TREE_LIST. * pt.c (print_candidates_1): Remove nonsensical assert. From-SVN: r173037
* class.c (cp_fold_obj_type_ref): Remove.Martin Jambor2011-04-261-28/+0
| | | | | | | | | 2011-04-26 Martin Jambor <mjambor@suse.cz> * class.c (cp_fold_obj_type_ref): Remove. * cp-tree.h (cp_fold_obj_type_ref): Remove declaration. From-SVN: r172977
* re PR middle-end/20991 (ICE in cgraph_mark_reachable_node)Jan Hubicka2011-04-171-2/+0
| | | | | | | | | | | | | * cgraph.c (cgraph_clone_node): Do not handle vtable_method * cgraph.h (struct cgraph_local_info): Drop vtable_method. * cgraphunit.c (cgraph_copy_node_for_versioning): Drop vtable_method. * lto-cgraph.c (lto_output_node, input_overwrite_node): Drop vtable method. * gimple-fold.c (can_refer_decl_in_current_unit_p): Mention PR20991 in gimple-fold.c * varasm.c (mark_decl_referenced): Drop vtable_method handling code. * cp/class.c (cp_fold_obj_type_ref): Drop vtable_method. From-SVN: r172613
* re PR c++/48574 (ICE)Dodji Seketeli2011-04-131-0/+1
| | | | | | | | | | | | | | | Fix PR c++/48574 gcc/cp/ * class.c (fixed_type_or_null): We cannot determine the dynamic type of a reference variable if its initializer is dependent. gcc/testsuite/ * g++.dg/template/dependent-expr7.C: New test case. From-SVN: r172375
* class.c (cp_fold_obj_type_ref): Call cgraph_get_node instead of ↵Martin Jambor2011-04-121-1/+1
| | | | | | | | | | | | | | | | | | | | | | cgraph_get_create_node. 2011-04-12 Martin Jambor <mjambor@suse.cz> gcc/cp/ * class.c (cp_fold_obj_type_ref): Call cgraph_get_node instead of cgraph_get_create_node. * decl2.c (cp_write_global_declarations): Call cgraph_get_node instead of cgraph_get_create_node. * method.c (make_alias_for_thunk): Call cgraph_get_node instead of cgraph_get_create_node, assert it returns non-NULL. (use_thunk): Likewise. * optimize.c (maybe_clone_body): Call cgraph_same_body_alias only when flag_syntax_only is not set. Call cgraph_get_node instead of cgraph_get_create_node. (maybe_clone_body): Call cgraph_get_node instead of cgraph_get_create_node. From-SVN: r172308
* cgraph.h (cgraph_node): Remove function declaration.Martin Jambor2011-04-121-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2011-04-12 Martin Jambor <mjambor@suse.cz> * cgraph.h (cgraph_node): Remove function declaration. (cgraph_create_node): Declare. (cgraph_get_create_node): Likewise. * cgraph.c (cgraph_create_node): Renamed to cgraph_create_node_1. Updated all callers. (cgraph_node): Renamed to cgraph_create_node, assert that a node for the decl does not already exist. Call cgraph_get_create_node instead of cgraph_node. (cgraph_get_create_node): New function. (cgraph_same_body_alias): Update comment. (cgraph_set_call_stmt): Call cgraph_get_node instead of cgraph_node, assert it does not return NULL. (cgraph_update_edges_for_call_stmt): Likewise. (cgraph_clone_edge): Likewise. (cgraph_create_virtual_clone): Likewise. (cgraph_update_edges_for_call_stmt_node): Call cgraph_get_create_node instead of cgraph_node. (cgraph_add_new_function): Call cgraph_create_node or cgraph_get_create_node instead of cgraph_node. * cgraphbuild.c (record_reference): Call cgraph_get_create_node instead of cgraph_node. (record_eh_tables): Likewise. (mark_address): Likewise. (mark_load): Likewise. (build_cgraph_edges): Call cgraph_get_create_node instead of cgraph_node. (rebuild_cgraph_edges): Likewise. * cgraphunit.c (cgraph_finalize_function): Call cgraph_get_create_node instead of cgraph_node. (cgraph_copy_node_for_versioning): Call cgraph_create_node instead of cgraph_node. * lto-symtab.c (lto_symtab_merge_cgraph_nodes_1): Call cgraph_create_node instead of cgraph_node. * c-decl.c (finish_function): Call cgraph_get_create_node instead of cgraph_node. * lto-cgraph.c (input_node): Likewise. * lto-streamer-in.c (input_function): Likewise. * varasm.c (mark_decl_referenced): Likewise. (assemble_alias): Likewise. gcc/c-family/ * c-gimplify.c (c_genericize): Call cgraph_get_create_node instead of cgraph_node. gcc/cp/ * cp/class.c (cp_fold_obj_type_ref): Call cgraph_get_create_node instead of cgraph_node. * cp/decl2.c (cxx_callgraph_analyze_expr): Likewise. (cp_write_global_declarations): Likewise. * cp/optimize.c (maybe_clone_body): Likewise. * cp/semantics.c (maybe_add_lambda_conv_op): Likewise. * cp/mangle.c (mangle_decl): Likewise. * cp/method.c (make_alias_for_thunk): Likewise. (use_thunk): Likewise. gcc/ada/ * gcc-interface/utils.c (end_subprog_body): Call cgraph_get_create_node instead of cgraph_node. gcc/fortran/ * trans-decl.c (gfc_generate_function_code): Call cgraph_get_create_node instead of cgraph_node. gcc/objc/ * objc-act.c (mark_referenced_methods): Call cgraph_get_create_node instead of cgraph_node. From-SVN: r172307
* re PR c++/48296 ([C++0x] constexpr member function cannot use the class type ↵Jason Merrill2011-03-291-12/+6
| | | | | | | | | | | | it belongs as parameter type or return type) PR c++/48296 * decl.c (cp_finish_decl): Defer validation of constexpr member functions. * class.c (finalize_literal_type_property): Validate them here. * semantics.c (is_valid_constexpr_fn): Don't check completeness. From-SVN: r171661
* Core 1135Jason Merrill2011-03-251-0/+2
| | | | | | | | | Core 1135 * method.c (defaulted_late_check): Check for exception spec mismatch. (defaultable_fn_check): Allow exception spec and virtual. * class.c (check_for_override): A virtual dtor is non-trivial. From-SVN: r171462
* re PR c++/47873 (virtual Inheritance - Covariant Virtual Function - Segfault)Jason Merrill2011-02-281-2/+2
| | | | | | | | PR c++/47873 * class.c (update_vtable_entry_for_fn): Check BINFO_LOST_PRIMARY_P after checking for a non-thunk. From-SVN: r170576
* re PR c++/47666 (ICE in dfs_walk_once)Dodji Seketeli2011-02-221-28/+65
| | | | | | | | | | | | | | | | | | | Fix PR c++/47666 gcc/cp/ PR c++/47666 * class.c (dfs_declare_virt_assop_and_dtor) (declare_virt_assop_and_dtor): New static functions. (add_implicitly_declared_members): Use declare_virt_assop_and_dtor. gcc/testsuite/ PR c++/47666 * g++.dg/inherit/virtual7.C: New test. From-SVN: r170413
* class.c (type_has_constexpr_default_constructor): Make sure the caller ↵Jason Merrill2011-02-101-1/+5
| | | | | | | | | | stripped an enclosing array. * class.c (type_has_constexpr_default_constructor): Make sure the caller stripped an enclosing array. * init.c (perform_member_init): Strip arrays before calling it. From-SVN: r170006
* Correct conversion/overflow behavior.Jason Merrill2010-11-081-0/+3
| | | | | | | | | | | | | | | | | | | | | * cvt.c (ignore_overflows): Move here from typeck.c. (ocp_convert): Use it. (cp_fold_convert): Use it. Don't call rvalue. * typeck.c (build_static_cast_1): Don't use it. Do call rvalue. * error.c (location_of): Handle expressions, too. * class.c (check_bitfield_decl): Set input_location around call to cxx_constant_value. * semantics.c (cxx_eval_outermost_constant_expr): Don't print the expression if it already had TREE_OVERFLOW set. (reduced_constant_expression_p): Check TREE_OVERFLOW_P for C++98, too. (verify_constant): Allow overflow with a permerror if we're enforcing. (cxx_eval_outermost_constant_expr): Use verify_constant. (adjust_temp_type): Use cp_fold_convert. * decl.c (build_enumerator): Don't call constant_expression_warning. * decl2.c (grokbitfield): Likewise. From-SVN: r166453
* semantics.c (speculative_access_check): New.Jason Merrill2010-11-041-1/+1
| | | | | | | | | | * semantics.c (speculative_access_check): New. * cp-tree.h: Declare it. * call.c (build_over_call): Use it. * class.c (type_has_constexpr_default_constructor): Use locate_ctor. * method.c (locate_ctor): Use push/pop_deferring_access_checks. From-SVN: r166317
* builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert.Nathan Froyd2010-11-031-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | gcc/ * builtins.c (fold_builtin_signbit): Use build_zero_cst instead of fold_convert. * c-typeck.c (build_function_call_vec): Likewise. * cfgexpand.c (expand_debug_expr): Likewise. * cgraphunit.c (assemble_thunk): Likewise. * config/sparc/sparc.c (sparc_fold_builtin): Likewise. * fold-const.c (fold_unary_loc, fold_mult_zconjz): Likewise. (fold_binary_loc, fold_ternary_loc): Likewise. * gimple-fold.c (get_symbol_constant_value): Likewise. * gimple-low.c (lower_builtin_setjmp): Likewise. * gimple.c (gimple_cond_get_ops_from_tree): Likewise. * gimplify.c (gimplify_init_constructor): Likewise. * lambda.h (build_linear_expr): Likewise. * omp-low.c (omp_reduction_init): Likewise. * tree-inline.c (remap_ssa_name): Likewise. * tree-object-size.c (compute_object_sizes): Likewise. * tree-sra.c (init_subtree_with_zero): Likewise. (sra_ipa_modify_assign): Likewise. * tree-ssa-copy.c (propagate_tree_value_into_stmt): Likewise. * tree-ssa-reassoc.c (eliminate_duplicate_pair): Likewise. (eliminate_plus_minus_pair, eliminate_not_pairs): Likewise. (undistribute_ops_list): Likewise. * tree-ssa-sccvn.c (vn_reference_lookup_3): Likewise. * tree-vect-stmts.c (vectorizable_call): Likewise. * tree.c (build_vector_from_ctor, build_one_cst): Likewise. (build_zero_cst): Handle more cases directly. Update comment. gcc/cp/ * class.c (build_base_path, add_vcall_offset): Use build_zero_cst instead of fold_convert. * init.c (build_zero_init): Likewise. * typeck.c (cp_build_binary_op): Likewise. gcc/fortran/ * trans-decl.c (add_argument_checking): Use build_zero_cst instead of fold_convert. * trans-expr.c (gfc_conv_missing_dummy, fill_with_spaces): Likewise. * trans-stmt.c (gfc_trans_do): Likewise. From-SVN: r166227
* Restore canonical type comparison for dependent type(def)sDodji Seketeli2010-11-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch restores canonical type comparison for dependent types and then dependent typedefs. After this patch, two template type parameters T are equal if they have the same index, level, *and* number of sibling parameters. The novelty is to take in account the number of sibling parameters. To do this we first build the template parameters w/o taking in account their number of siblings. When we know the number of template parameters we fix up each template parameter with the number of slibling parameters and we build the appropriate canonical types accordingly. The patch fixes the fallouts deemed necessary. This fixes PR c++/45606 but actually fixes all the previous bugs related to dependent typedef comparison we had since we started to properly representing dependent typedefs. gcc/cp/ChangeLog: PR c++/45606 * cp-tree.h (TEMPLATE_TYPE_PARM_SIBLING_PARMS): Remove. (struct template_parm_index_s)<num_siblings>: New field. (TEMPLATE_PARM_NUM_SIBLINGS): New accessor. (process_template_parm): Extend the API to accept the number of template parms in argument. (cp_set_underlying_type): Remove this. * class.c (build_self_reference): Require canonical type equality back on the self reference of class. * decl2.c (grokfield): Require canonical type equality back on typedef class fields. * name-lookup.c (pushdecl_maybe_friend): Require canonical type equality back on typedefs. * parser.c (cp_parser_template_parameter_list): Do not require canonical type equality on dependent types created during template parameters parsing. * pt.c (fixup_template_type_parm_type, fixup_template_parm_index) (fixup_template_parm, fixup_template_parms): New private functions. (current_template_args): Declare this. (process_template_parm): Pass the total number of template parms to canonical_type_parameter. (build_template_parm_index): Add a new argument to carry the total number of template parms. (reduce_template_parm_level, process_template_parm, make_auto): Adjust. (current_template_args): Fix this for template template parameters. (tsubst_template_parm): Split out of ... (tsubst_template_parms): ... this. (reduce_template_parm_level): Don't loose TEMPLATE_PARM_NUM_SIBLINGS when cloning a TEMPLATE_PARM_INDEX. (template_parm_to_arg): Extracted this function from current_template_args. Make it represent invalid template parms with an error_mark_node instead of a LIST_TREE containing an error_mark_node. (current_template_args): Use template_parm_to_arg. (dependent_template_arg_p): Consider an invalid template argument as dependent. (end_template_parm_list): Do not update template sibling parms here anymore. Use fixup_template_parms instead. (process_template_parm): Pass the number of template parms to canonical_type_parameter. (make_auto): Require structural equality on auto TEMPLATE_TYPE_PARM for now. (unify)<BOUND_TEMPLATE_TEMPLATE_PARM>: Coerce template parameters using all the arguments deduced so far. (tsubst)<TEMPLATE_TYPE_PARM>: Pass the number of sibling parms to canonical_type_parameter. * tree.c (cp_set_underlying_type): Remove. * typeck.c (get_template_parms_of_dependent_type) (incompatible_dependent_types_p): Remove. (structural_comptypes): Do not call incompatible_dependent_types_p anymore. (comp_template_parms_position): Re-organized. Take the length of template parms list in account. gcc/testsuite/ChangeLog: PR c++/45606 * g++.dg/template/typedef36.C: New test. * gcc/testsuite/g++.dg/template/canon-type-9.C: Likewise. * g++.dg/template/canon-type-10.C: Likewise. * g++.dg/template/canon-type-11.C: Likewise. * g++.dg/template/canon-type-12.C: Likewise. * g++.dg/template/canon-type-13.C: Likewise. From-SVN: r166179
* call.c (null_ptr_cst_p): Use maybe_constant_value.Jason Merrill2010-11-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * call.c (null_ptr_cst_p): Use maybe_constant_value. (set_up_extended_ref_temp): Support constant initialization. (initialize_reference): Adjust. * class.c (check_bitfield_decl): Use cxx_constant_value. * cvt.c (ocp_convert): Don't use integral_constant_value when converting to class type. * decl.c (finish_case_label): Use maybe_constant_value. (build_init_list_var_init): Support constant initialization. (check_initializer): Likewise. Reorganize. (cp_finish_decl): Likewise. (expand_static_init): Likewise. (compute_array_index_type): Use maybe_constant_value. Add complain parm. (create_array_type_for_decl, grokdeclarator): Pass it. (build_enumerator): Use cxx_constant_value. * decl2.c (grokfield): Use maybe_constant_init. * except.c (check_noexcept_r): Handle constexpr. (build_noexcept_spec): Use maybe_constant_value. * init.c (expand_default_init): Support constant initialization. (build_vec_init): Likewise. (constant_value_1): Adjust. (build_new_1): Adjust. * parser.c (cp_parser_constant_expression): Allow non-integral in C++0x mode. (cp_parser_direct_declarator): Don't fold yet in C++0x mode. (cp_parser_initializer_clause): Toss folded result if non-constant. * pt.c (fold_decl_constant_value): Remove. (convert_nontype_argument): Use maybe_constant_value. Give clearer error about overflow. (tsubst): Move array bounds handling into compute_array_index_type. (value_dependent_expression_p): Handle constant CALL_EXPR. * semantics.c (finish_static_assert): Use maybe_constant_value. (ensure_literal_type_for_constexpr_object): Make sure type is complete. (potential_constant_expression): Use maybe_constant_value. * tree.c (cast_valid_in_integral_constant_expression_p): Any cast is potentially valid in C++0x. * typeck2.c (store_init_value): Handle constant init. (check_narrowing): Use maybe_constant_value. (build_functional_cast): Set TREE_CONSTANT on literal T(). * cp-tree.h (DECL_INTEGRAL_CONSTANT_VAR_P): Remove. (LOOKUP_ALREADY_DIGESTED): New. (compute_array_index_type): Adjust prototype. From-SVN: r166167
* class.c (is_really_empty_class): Work when type is not complete.Jason Merrill2010-10-311-17/+24
| | | | | | | | | | | * class.c (is_really_empty_class): Work when type is not complete. (synthesized_default_constructor_is_constexpr): New. (add_implicitly_declared_members): Use it. (type_has_constexpr_default_constructor): Likewise. * cp-tree.h: Declare it. * method.c (synthesized_method_walk): Use it. From-SVN: r166124
* class.c (layout_vtable_decl): Call build_array_of_n_type.Nathan Froyd2010-10-301-6/+5
| | | | | | | * class.c (layout_vtable_decl): Call build_array_of_n_type. (build_vtt, build_ctor_vtabl_group): Likewise. From-SVN: r166090