2024-07-11 Nathaniel Shead PR c++/99241 * decl.cc (duplicate_decls): Merge module entity information. 2024-07-10 Marek Polacek * constraint.cc (deduce_concept_introduction, get_deduced_wildcard, get_introduction_prototype, introduce_type_template_parameter, introduce_template_template_parameter, introduce_nontype_template_parameter, build_introduced_template_parameter, introduce_template_parameter, introduce_template_parameter_pack, introduce_template_parameter, introduce_template_parameters, process_introduction_parms, check_introduction_list, finish_template_introduction): Remove. (finish_shorthand_constraint): Remove a Concepts TS comment. * cp-tree.h (check_auto_in_tmpl_args, finish_template_introduction): Remove. * decl.cc (function_requirements_equivalent_p): Remove pre-C++20 code. (grokfndecl): Don't check flag_concepts_ts. (grokvardecl): Don't check that concept have type bool. * parser.cc (cp_parser_decl_specifier_seq): Don't check flag_concepts_ts. (cp_parser_introduction_list): Remove. (cp_parser_template_id): Remove dead code. (cp_parser_simple_type_specifier): Don't check flag_concepts_ts. (cp_parser_placeholder_type_specifier): Require require auto or decltype(auto) even pre-C++20. Don't check flag_concepts_ts. (cp_parser_type_id_1): Don't check flag_concepts_ts. (cp_parser_template_type_arg): Likewise. (cp_parser_requires_clause_opt): Remove flag_concepts_ts code. (cp_parser_compound_requirement): Don't check flag_concepts_ts. (cp_parser_template_introduction): Remove. (cp_parser_template_declaration_after_export): Don't call cp_parser_template_introduction. * pt.cc (template_heads_equivalent_p): Remove pre-C++20 code. (find_parameter_pack_data): Remove type_pack_expansion_p. (find_parameter_packs_r): Remove flag_concepts_ts code. Remove type_pack_expansion_p code. (uses_parameter_packs): Remove type_pack_expansion_p code. (make_pack_expansion): Likewise. (check_for_bare_parameter_packs): Likewise. (fixed_parameter_pack_p): Likewise. (tsubst_qualified_id): Remove dead code. (extract_autos_r): Remove. (extract_autos): Remove. (do_auto_deduction): Remove flag_concepts_ts code. (type_uses_auto): Likewise. (check_auto_in_tmpl_args): Remove. 2024-07-10 Marek Polacek PR c++/115645 * init.cc (build_new): Don't do any deduction for arrays with bounds if it's value-initialized. 2024-07-10 Nina Ranns PR c++/113968 * contracts.cc (grok_contract): Check for error_mark_node early exit. 2024-07-09 Jakub Jelinek * constexpr.cc (cxx_eval_constant_expression): CWG2819 - Allow cv void * null pointer value conversion to object types in constant expressions. 2024-07-07 Nathaniel Shead * module.cc (trees_out::get_merge_kind): Use LAMBDA_TYPE_EXTRA_SCOPE instead of LAMBDA_EXPR_EXTRA_SCOPE. (trees_out::key_mergeable): Likewise. 2024-07-04 Tamar Christina PR c++/115623 * semantics.cc (finish_for_cond): Add check for C++ cond. 2024-07-04 Jason Merrill * error.cc (dump_decl) [OVERLOAD]: Recurse on single case. 2024-07-04 Jason Merrill * pt.cc (ctad_template_p): Return false for trait names. 2024-07-02 Jakub Jelinek Jason Merrill PR c++/115754 * constexpr.cc (cxx_eval_constant_expression) : For conversions to void, pass vc_discard to the recursive call and otherwise for tcode other than VIEW_CONVERT_EXPR pass vc_prvalue. 2024-07-02 Jakub Jelinek Jason Merrill PR c++/115747 * init.cc: Implement C++26 P3144R2 - Deleting a Pointer to an Incomplete Type Should be Ill-formed. (build_vec_delete_1): Emit permerror_at and return error_mark_node for delete [] on incomplete type. (build_delete): Similarly for delete. 2024-07-02 Jakub Jelinek PR c++/115745 * cp-tree.h: Implement C++26 P0963R3 - Structured binding declaration as a condition. (DECL_DECOMP_BASE): Adjust comment. (DECL_DECOMP_IS_BASE): Define. * parser.cc (cp_parser_selection_statement): Adjust cp_parser_condition caller. (cp_parser_condition): Add KEYWORD argument. Parse C++26 structured bindings in conditions. (cp_parser_c_for, cp_parser_iteration_statement): Adjust cp_parser_condition callers. (cp_parser_simple_declaration): Adjust cp_parser_decomposition_declaration caller. (cp_parser_decomposition_declaration): Add KEYWORD argument. If it is not RID_MAX, diagnose for C++23 and older rather than C++14 and older. Set DECL_DECOMP_BASE to integer_zero_node for structured bindings used in if/while/for conditions or integer_one_node for those used in switch conditions. * decl.cc (poplevel, check_array_initializer): Use DECL_DECOMP_IS_BASE instead of !DECL_DECOMP_BASE. (cp_finish_decomp): Diagnose array initializer for structured bindings used in conditions. If using std::tuple_{size,element}, emit conversion to bool or integer/enumeration of e into a TARGET_EXPR before emitting get method calls. * decl2.cc (mark_used): Use DECL_DECOMP_IS_BASE instead of !DECL_DECOMP_BASE. * module.cc (trees_in::tree_node): Likewise. * typeck.cc (maybe_warn_about_returning_address_of_local): Likewise. * semantics.cc (maybe_convert_cond): For structured bindings with TARGET_EXPR DECL_DECOMP_BASE use that as condition. (finish_switch_cond): Likewise. 2024-07-02 Lewis Hyatt * Make-lang.in: Remove redundant slash. 2024-07-02 Simon Martin PR c++/111160 * tree.cc (stabilize_expr): Stabilized expressions can have TREE_SIDE_EFFECTS if they're volatile. 2024-07-01 Marek Polacek PR c++/115469 * decl.cc (automatic_var_with_nontrivial_dtor_p): New. (poplevel_named_label_1): Use it. (check_goto_1): Likewise. 2024-07-01 Marek Polacek PR c++/115430 * typeck.cc (cp_build_compound_expr): Call resolve_nondeduced_context on RHS. 2024-07-01 Marek Polacek DR 2627 PR c++/94058 PR c++/104392 * typeck2.cc (check_narrowing): Don't warn if the conversion isn't narrowing as per DR 2627. 2024-06-28 Patrick Palka PR c++/106760 * call.cc (add_candidates): Relax test for adding a candidate to 'bad_cands' to also accept an uninstantiated template candidate that has no missing conversions. 2024-06-26 David Malcolm * parser.cc (cp_parser_error_1): Pass *global_dc to gcc_rich_location::add_location_if_nearby. (cp_parser_decl_specifier_seq): Likewise. (cp_parser_set_storage_class): Likewise. (cp_parser_set_storage_class): Likewise. 2024-06-26 Patrick Palka PR c++/115504 * semantics.cc (finish_decltype_type): Don't strip the reference type (if any) of a capture proxy's captured variable. 2024-06-25 Marek Polacek PR c++/115476 * semantics.cc (finish_trait_expr) : Move below to call check_trait_type with kind==2. 2024-06-25 Marek Polacek PR c++/115425 * pt.cc (tsubst_pack_expansion): Return error_mark_node if make_pack_expansion doesn't work out. 2024-06-25 Marek Polacek PR c++/115501 * rtti.cc (build_dynamic_cast_1): Return if dcast_fn is erroneous. 2024-06-25 Patrick Palka PR c++/115198 * pt.cc (alias_ctad_tweaks): Update DECL_NAME of the transformed guides. 2024-06-25 Patrick Palka PR c++/115358 * decl2.cc (mark_used): Call maybe_instantiate_decl for an array variable with unknown bound. * semantics.cc (finish_decltype_type): Remove now redundant handling of array variables with unknown bound. * typeck.cc (cxx_sizeof_expr): Likewise. 2024-06-25 Sandra Loosemore PR c/115587 * parser.cc (cp_parser_omp_loop_nest): Move initializations to point of declaration. 2024-06-17 Jakub Jelinek PR target/111343 PR c++/115511 * typeck.cc (cp_compare_floating_point_conversion_ranks): If an extended floating point type mv1 has same set of values as more than one standard floating point type and mv2 is float, return 2. 2024-06-13 Jason Merrill PR c++/114683 * name-lookup.cc (do_nonmember_using_decl): Allow exporting a newly inserted decl. 2024-06-13 Jason Merrill PR c++/115194 * name-lookup.cc (name_lookup::process_module_binding): Strip an OVERLOAD from a non-function. 2024-06-13 Jason Merrill * module.cc (depset::hash::add_binding_entity): Adjust comment. 2024-06-13 Patrick Palka PR c++/99678 * parser.cc (cp_parser_constraint_primary_expression): Diagnose a bare unresolved unqualified-id. 2024-06-13 Patrick Palka PR c++/115239 * call.cc (tourney): Don't consider a non-strictly viable candidate as the champ if there was ambiguity between two strictly viable candidates. 2024-06-13 Andi Kleen * parser.cc (cp_parser_asm_string_expression): Use correct error message. 2024-06-13 Andi Kleen * parser.cc (cp_parser_asm_string_expression): Parse close parent when constexpr extraction fails. 2024-06-13 Andi Kleen * parser.cc (cp_parser_asm_string_expression): Remove support for const char * for asm constexpr. 2024-06-13 Patrick Palka PR c++/115283 * decl2.cc (min_vis_expr_r) : Ignore concepts. 2024-06-12 Jason Merrill * tree.cc (lookup_maybe_add): Use ovl_make when setting OVL_USING_P. 2024-06-12 Jason Merrill * module.cc (depset::hash::add_binding_entity): Set DECL_MODULE_PURVIEW_P instead of asserting. 2024-06-12 Andi Kleen * cp-tree.h (extract): Add new overload to return tree. * parser.cc (cp_parser_asm_string_expression): Use tree extract. * semantics.cc (cexpr_str::extract): Add new overload to return tree. 2024-06-12 David Malcolm * error.cc (append_formatted_chunk): Move part of body into chunk_info::append_formatted_chunk. 2024-06-12 David Malcolm * cxx-pretty-print.cc: Update throughout for fields of pretty_printer becoming private. * error.cc: Likewise. 2024-06-11 Andi Kleen * parser.cc (cp_parser_asm_string_expression): New function to handle constexpr strings for asm. (cp_parser_asm_definition): Use cp_parser_asm_string_expression. (cp_parser_yield_expression): Dito. (cp_parser_asm_specification_opt): Dito. (cp_parser_asm_operand_list): Dito. (cp_parser_asm_clobber_list): Dito. 2024-06-11 Andi Kleen * cp-tree.h (class cexpr_str): Add. * semantics.cc (finish_static_assert): Convert to use cexpr_str. (cexpr_str::type_check): Extract constexpr string code to here. (cexpr_str::extract): ... and here. 2024-06-08 Simon Martin PR c++/108438 * parser.cc (cp_parser_postfix_expression): Use cp_parser_require_end_of_template_parameter_list to skip to the closing '>' upon error parsing the target type of *_cast<*> expressions. 2024-06-07 Simon Martin PR c++/107575 * decl.cc (duplicate_decls): Check for error_mark_node DECL_LOCAL_DECL_ALIAS. 2024-06-07 Jason Merrill * module.cc (maybe_translate_include): Allow before the main file. 2024-06-07 Patrick Palka PR c++/115378 * lambda.cc (lambda_capture_field_type): Set TEMPLATE_TYPE_PARAMETER_PACK on the auto type of an init-capture pack expansion. * pt.cc (find_parameter_packs_r) : Restrict TEMPLATE_TYPE_PARAMETER_PACK promotion with flag_concepts_ts. 2024-06-05 Jakub Jelinek Frederik Harwath Sandra Loosemore * cp-tree.h (dependent_omp_for_p): Add another tree argument. * parser.cc (check_omp_intervening_code): Reject imperfectly nested tile. (cp_parser_statement_seq_opt): If want_nested_loop, use cp_parser_next_tokens_can_be_canon_loop instead of just checking for RID_FOR keyword. (cp_parser_omp_clause_name): Handle full and partial clause names. (cp_parser_omp_clause_full, cp_parser_omp_clause_partial): New functions. (cp_parser_omp_all_clauses): Formatting fix. Handle PRAGMA_OMP_CLAUSE_PARTIAL and PRAGMA_OMP_CLAUSE_FULL. (cp_parser_next_tokens_can_be_canon_loop): New function. (cp_parser_omp_loop_nest): Parse C++11 attributes. Handle tile/unroll constructs. Use cp_parser_next_tokens_can_be_canon_loop instead of just checking for RID_FOR keyword. Only add_stmt cp_parser_omp_loop_nest result if it is non-NULL. (cp_parser_omp_for_loop): Rename tiling variable to oacc_tiling. For OMP_CLAUSE_SIZES set collapse to list length of OMP_CLAUSE_SIZES_LIST. Use cp_parser_next_tokens_can_be_canon_loop instead of just checking for RID_FOR keyword. Remove spurious semicolon. Don't call c_omp_check_loop_binding_exprs if stmt is NULL. Skip and/or handle generated loops. Remove spurious ()s around & operands. (cp_parser_omp_tile_sizes, cp_parser_omp_tile): New functions. (OMP_UNROLL_CLAUSE_MASK): Define. (cp_parser_omp_unroll): New function. (cp_parser_omp_construct): Handle PRAGMA_OMP_TILE and PRAGMA_OMP_UNROLL. (cp_parser_pragma): Likewise. * semantics.cc (finish_omp_clauses): Don't call fold_build_cleanup_point_expr for cases which obviously won't need it, like checked INTEGER_CSTs. Handle OMP_CLAUSE_{FULL,PARTIAL,SIZES} and diagnose full vs. partial conflict. Adjust wording of some of the conflicting clause diagnostic messages to include word clause. (finish_omp_for): Use decl equal to global_namespace as a marker for generated loop. Pass also body to dependent_omp_for_p. Skip generated loops. (finish_omp_for_block): Skip generated loops. * pt.cc (tsubst_omp_clauses): Handle OMP_CLAUSE_{FULL,PARTIAL,SIZES}. (tsubst_stmt): Handle OMP_TILE and OMP_UNROLL. Handle or skip generated loops. (dependent_omp_for_p): Add body argument. If declv vector element is NULL, find generated loop. * cp-gimplify.cc (cp_gimplify_expr): Handle OMP_TILE and OMP_UNROLL. (cp_fold_r): Likewise. (cp_genericize_r): Likewise. Skip generated loops. 2024-06-04 Simon Martin * pt.cc (tsubst_expr): Add missing space after seen_error. (dependent_type_p): Likewise. 2024-06-04 Simon Martin PR c++/111106 * pt.cc (dependent_type_p): Don't fail assert during error recovery. 2024-06-03 Jakub Jelinek PR c++/115012 * parser.cc (cp_parser_direct_declarator): Handle abstract declarator starting with ... followed by opening paren. 2024-06-02 Simon Martin PR c++/109958 * typeck.cc (build_class_member_access_expr): Handle single OVERLOADs. (cp_build_addr_expr_1): Likewise. 2024-06-01 Nathaniel Shead PR c++/114867 * cp-tree.h (OVL_PURVIEW_P): New. (ovl_iterator::purview_p): New. * module.cc (depset::hash::add_binding_entity): Only ignore entities not within module purview. Set OVL_PURVIEW_P on new OVERLOADs for emitted declarations. (module_state::read_cluster): Imported using-decls are always in purview, mark as OVL_PURVIEW_P. * name-lookup.h (enum WMB_Flags): New WMB_Purview flag. * name-lookup.cc (walk_module_binding): Set WMB_Purview as needed. (do_nonmember_using_decl): Don't remove from existing OVERLOADs. Also reveal non-exported decls. Also reveal 'extern "C"' decls. Add workaround to reveal non-function decls. * tree.cc (ovl_insert): Adjust to also set OVL_PURVIEW_P when needed. 2024-05-29 Jason Merrill PR c++/109753 * decl.cc (start_preparsed_function): Call decl_attributes. 2024-05-29 Jason Merrill * lang-specs.h: Add module interface extensions. 2024-05-29 Patrick Palka PR c++/115223 * tree.cc (build_cp_fntype_variant): Propagate structural equality of the exception-less variant. 2024-05-28 Marek Polacek PR c++/109396 * cp-tree.h (maybe_warn_self_move): Declare. * init.cc (perform_member_init): Call maybe_warn_self_move. * typeck.cc (maybe_warn_self_move): No longer static. Change the return type to bool. Also warn when called from a member-initializer-list. Drop the inform call. 2024-05-28 Marek Polacek PR c++/114707 * call.cc (convert_for_arg_passing): Call set_target_expr_eliding. * typeck2.cc (replace_placeholders_for_class_temp_r): Don't use pset. (digest_nsdmi_init): Call cp_walk_tree_without_duplicates instead of cp_walk_tree. 2024-05-28 David Malcolm PR bootstrap/115167 PR bootstrap/115167 * call.cc: Replace include of "gcc-rich-location.h" with "c-family/c-type-mismatch.h". * error.cc: Likewise. * typeck.cc: Likewise. 2024-05-25 Nathaniel Shead PR c++/102345 * module.cc (module_may_redeclare): Update error message. 2024-05-24 Nathaniel Shead PR c++/115200 * parser.cc (cp_parser_error_1): Special-case unexpected module directives for better diagnostics. (cp_parser_module_declaration): Check that the module declaration is at global scope. (cp_parser_import_declaration): Sync error message with that in cp_parser_error_1. 2024-05-24 Nathaniel Shead * cp-tree.h (module_has_cmi_p): Also include header units. (module_maybe_has_cmi_p): Update comment. * module.cc (set_defining_module): Only need to track declarations for later exporting if the module may have a CMI. (set_defining_module_for_partial_spec): Likewise. * name-lookup.cc (pushdecl): Likewise. 2024-05-24 Nathaniel Shead * tree.cc (no_linkage_check): Anonymous types can't be accessed in a different TU. 2024-05-24 Nathaniel Shead PR c++/114947 * cp-tree.h (set_defining_module_for_partial_spec): Declare. * module.cc (trees_in::decl_value): Track partial specs coming from partitions. (set_defining_module): Don't track partial specialisations here anymore. (set_defining_module_for_partial_spec): New function. * pt.cc (process_partial_specialization): Call it. 2024-05-23 Jason Merrill PR c++/115187 * init.cc (build_delete): Use get_target_expr instead of save_expr. * tree.cc (stabilize_expr): Update comment. 2024-05-22 Patrick Palka PR c++/115159 * tree.cc (build_cp_fntype_variant): Always use structural equality for types with a complex exception specification. (fixup_deferred_exception_variants): Use structural equality for adjusted variants. * typeck.cc (comp_except_specs): Require == instead of cp_tree_equal for ce_exact noexcept-spec comparison. 2024-05-22 Nathaniel Shead * decl.cc (grokfndecl): Check for main functions with language linkage or module attachment. (grokvardecl): Check for extern 'C' entities named main. 2024-05-21 Jonathan Wakely PR libstdc++/107800 * cxxapi-data.csv : Change dialect to cxx20. * std-name-hint.gperf: Regenerate. * std-name-hint.h: Regenerate. 2024-05-21 Patrick Palka PR c++/115139 * pt.cc (tsubst_expr) : Exit early if args is empty. 2024-05-17 Patrick Palka PR c++/115114 * pt.cc (maybe_aggr_guide): Consider bases in the paren init case. 2024-05-15 Marek Polacek PR c++/114854 * call.cc (convert_like_internal) : Don't set TARGET_EXPR_DIRECT_INIT_P. 2024-05-15 Marek Polacek DR 1693 PR c++/113760 DR 569 * parser.cc (extra_semi_kind): New. (maybe_warn_extra_semi): New. (cp_parser_declaration): Call maybe_warn_extra_semi. (cp_parser_member_declaration): Likewise. 2024-05-15 Jakub Jelinek Jason Merrill PR lto/113208 * cp-tree.h (maybe_optimize_cdtor): Remove. * decl2.cc (tentative_decl_linkage): Call maybe_make_one_only for implicit instantiations of maybe in charge ctors/dtors declared inline. (import_export_decl): Don't call maybe_optimize_cdtor. (c_parse_final_cleanups): Formatting fixes. * optimize.cc (can_alias_cdtor): Adjust condition, for HAVE_COMDAT_GROUP && DECL_ONE_ONLY && DECL_WEAK return true even if not DECL_INTERFACE_KNOWN. (maybe_clone_body): Don't clear DECL_SAVED_TREE, instead set it to void_node. (maybe_clone_body): Remove. * decl.cc (cxx_comdat_group): For DECL_CLONED_FUNCTION_P functions if SUPPORTS_ONE_ONLY return DECL_COMDAT_GROUP if already set. 2024-05-15 Jakub Jelinek PR c/115103 * semantics.cc (finish_omp_clauses): Diagnose grainsize used together with num_tasks. 2024-05-15 Patrick Palka PR c++/114994 * tree.cc (lvalue_kind) : For a class assignment, consider the result type. 2024-05-14 Simon Martin PR c++/105760 * pt.cc (build_deduction_guide): Check for error_mark_node result from tsubst_arg_types. 2024-05-14 Jason Merrill * decl.cc (wrap_cleanups_r): Clarify comment. * init.cc (build_vec_init): Update comment. 2024-05-13 Patrick Palka * constraint.cc (norm_info::norm_info): Take a bool instead of tsubst_flags_t. (norm_info::generate_diagnostics): Turn this predicate function into a bool data member. (normalize_logical_operation): Adjust after norm_info changes. (normalize_concept_check): Likewise. (normalize_atom): Likewise. (get_normalized_constraints_from_info): Likewise. (normalize_concept_definition): Likewise. (normalize_constraint_expression): Likewise. (normalize_placeholder_type_constraints): Likewise. (satisfy_nondeclaration_constraints): Likewise. * cp-tree.h (enum tsubst_flags): Remove tf_norm. 2024-05-13 Ken Matsui PR c++/115061 * semantics.cc (finish_trait_expr): Use rank instead of __array_rank. 2024-05-13 Patrick Palka PR c++/114974 PR c++/114901 PR c++/114903 * pt.cc (maybe_aggr_guide): Fix obtaining TYPE_FIELDS in the paren init case. Hoist out partial substitution logic to apply to the paren init case as well. (alias_ctad_tweaks): Substitute outer template arguments into a guide's constraints. 2024-05-11 Ken Matsui * cp-trait.def: Define __is_nothrow_invocable. * constraint.cc (diagnose_trait_expr): Handle CPTK_IS_NOTHROW_INVOCABLE. * semantics.cc (trait_expr_value): Likewise. (finish_trait_expr): Likewise. 2024-05-11 Ken Matsui * cp-trait.def: Define __is_invocable. * constraint.cc (diagnose_trait_expr): Handle CPTK_IS_INVOCABLE. * semantics.cc (trait_expr_value): Likewise. (finish_trait_expr): Likewise. * cp-tree.h (build_invoke): New function. * method.cc (build_invoke): New function. 2024-05-11 Ken Matsui * cp-trait.def: Define __array_rank. * constraint.cc (diagnose_trait_expr): Handle CPTK_RANK. * semantics.cc (trait_expr_value): Likewise. (finish_trait_expr): Likewise. 2024-05-11 Ken Matsui * cp-trait.def: Define __decay. * semantics.cc (finish_trait_type): Handle CPTK_DECAY. 2024-05-11 Ken Matsui * cp-trait.def: Define __add_rvalue_reference. * semantics.cc (finish_trait_type): Handle CPTK_ADD_RVALUE_REFERENCE. 2024-05-11 Ken Matsui * cp-trait.def: Define __add_lvalue_reference. * semantics.cc (finish_trait_type): Handle CPTK_ADD_LVALUE_REFERENCE. 2024-05-11 Ken Matsui * cp-trait.def: Define __remove_all_extents. * semantics.cc (finish_trait_type): Handle CPTK_REMOVE_ALL_EXTENTS. 2024-05-11 Ken Matsui * cp-trait.def: Define __remove_extent. * semantics.cc (finish_trait_type): Handle CPTK_REMOVE_EXTENT. 2024-05-11 Ken Matsui * cp-trait.def: Define __add_pointer. * semantics.cc (finish_trait_type): Handle CPTK_ADD_POINTER. (object_type_p): New function. (referenceable_type_p): Likewise. (trait_expr_value): Use object_type_p. 2024-05-11 Ken Matsui * cp-trait.def: Define __is_unbounded_array. * constraint.cc (diagnose_trait_expr): Handle CPTK_IS_UNBOUNDED_ARRAY. * semantics.cc (trait_expr_value): Likewise. (finish_trait_expr): Likewise. 2024-05-10 Jakub Jelinek PR target/114968 * cp-tree.h (atexit_fn_ptr_type_node, cleanup_type): Adjust macro comments. (get_cxa_atexit_fn_ptr_type): Declare. * decl.cc (get_atexit_fn_ptr_type): Adjust function comment, only build type for atexit argument. (get_cxa_atexit_fn_ptr_type): New function. (get_atexit_node): Call get_cxa_atexit_fn_ptr_type rather than get_atexit_fn_ptr_type when using __cxa_atexit. (get_thread_atexit_node): Call get_cxa_atexit_fn_ptr_type rather than get_atexit_fn_ptr_type. (start_cleanup_fn): Add ob_parm argument, call get_cxa_atexit_fn_ptr_type or get_atexit_fn_ptr_type depending on it and create PARM_DECL also based on that argument. (register_dtor_fn): Adjust start_cleanup_fn caller, use get_cxa_atexit_fn_ptr_type rather than get_atexit_fn_ptr_type for use_dtor casts. * except.cc (build_throw): Use get_cxa_atexit_fn_ptr_type (). 2024-05-09 Marek Polacek PR c++/114983 * pt.cc (tsubst_expr) : Use copy_warning. * semantics.cc (finish_parenthesized_expr): Also suppress -Wsizeof-array-div. 2024-05-09 Marek Polacek PR c++/85889 * lambda.cc (add_capture): Add a pedwarn for capturing structured bindings. 2024-05-08 Marek Polacek PR c++/113582 * parser.cc (cp_parser_label_for_labeled_statement): suppress_warning if it's not enabled at input_location. * pt.cc (tsubst_stmt): Call copy_warning. 2024-05-07 Nathaniel Shead PR c++/114856 * call.cc (make_temporary_var_for_ref_to_temp): Set context for temporaries with linkage. * init.cc (create_temporary_var): Revert to only set context when in a function decl. 2024-05-07 Andrew Pinski PR c++/89224 * constexpr.cc (cxx_eval_array_reference): Compare main variants for the vector/array types instead of the types directly. 2024-05-07 Jakub Jelinek PR c++/114459 * parser.cc (cp_parser_member_declaration): Implement C++26 P2893R3 - Variadic friends. Parse friend type declarations with ... or with more than one friend type specifier. * friend.cc (make_friend_class): Allow TYPE_PACK_EXPANSION. * pt.cc (instantiate_class_template): Handle PACK_EXPANSION_P in friend classes. 2024-05-07 Marek Polacek * decl.cc (duplicate_decls): Don't check VAR_P before DECL_DECOMPOSITION_P. * init.cc (build_aggr_init): Likewise. * parser.cc (cp_parser_range_for): Likewise. (do_range_for_auto_deduction): Likewise. (cp_convert_range_for): Likewise. (cp_convert_omp_range_for): Likewise. (cp_finish_omp_range_for): Likewise. * pt.cc (extract_locals_r): Likewise. (tsubst_omp_for_iterator): Likewise. (tsubst_decomp_names): Likewise. (tsubst_stmt): Likewise. * typeck.cc (maybe_warn_about_returning_address_of_local): Likewise. 2024-05-07 Rainer Orth * Make-lang.in (cc1plus$(exeext)): Remove $(NETLIBS). 2024-05-07 Nathaniel Shead PR c++/114954 * cp-tree.h (IS_FAKE_BASE_TYPE): Also apply to unions. 2024-05-07 Nathaniel Shead PR c++/114275 * cp-tree.h (remove_defining_module): Declare. * decl.cc (duplicate_decls): Call remove_defining_module on to-be-freed newdecl. * module.cc (imported_temploid_friends): Mark as GTY root... (init_modules): ...and allocate from ggc. (trees_in::decl_value): Only track for declarations that won't be discarded. (remove_defining_module): New function. 2024-05-06 Qing Zhao PR c/53548 * decl.cc (layout_var_decl): Handle the cases when the DECL is union with a flexible array member initializer. 2024-05-06 Qing Zhao PR c/53548 * class.cc (diagnose_flexarrays): Change error to pdewarn for the case flexible array members alone in structures. * decl.cc (grokdeclarator): Change error to pdewarn for the case flexible array members in unions. 2024-05-03 Jason Merrill PR c++/114935 * cp-gimplify.cc (cp_genericize_init): Add flags parm. (cp_genericize_init_expr): Pass nullptr. (cp_genericize_target_expr): Handle cleanup flags. * typeck2.cc (build_disable_temp_cleanup): Factor out of... (split_nonconstant_init): ...here. * cp-tree.h (build_disable_temp_cleanup): Declare. 2024-05-03 Ken Matsui * cp-trait.def: Define __is_pointer. * constraint.cc (diagnose_trait_expr): Handle CPTK_IS_POINTER. * semantics.cc (trait_expr_value): Likewise. (finish_trait_expr): Likewise. 2024-05-03 Ken Matsui * cp-trait.def: Define __is_volatile. * constraint.cc (diagnose_trait_expr): Handle CPTK_IS_VOLATILE. * semantics.cc (trait_expr_value): Likewise. (finish_trait_expr): Likewise. 2024-05-03 Ken Matsui * cp-trait.def: Define __is_const. * constraint.cc (diagnose_trait_expr): Handle CPTK_IS_CONST. * semantics.cc (trait_expr_value): Likewise. (finish_trait_expr): Likewise. 2024-05-03 Patrick Palka * coroutines.cc (instantiate_coro_traits): Adjust call to lookup_template_class. (instantiate_coro_handle_for_promise_type): Likewise. * cp-tree.h (adjust_type_for_entering_scope): Declare. (lookup_template_class): Adjust declaration. * decl.cc (make_typename_type): Adjust call to lookup_template_class. Likewise. (get_tuple_size): Likewise. (get_tuple_element_type): Likewise. * pt.cc (adjust_type_for_entering_scope): Define. (tsubst_entering_scope): Define. (lookup_template_class): Remove entering_scope parameter. Replace tsubst_aggr_type call with tsubst_entering_scope. (tsubst_aggr_type): Remove. (tsubst_aggr_type_1): Inline into tsubst. (tsubst_function_decl): Replace tsubst_aggr_type call with tsubst_entering_scope. (tsubst_template_decl): Likewise. (tsubst_decl): Likewise. (tsubst) : Inlined from tsubst_aggr_type_1. : Adjust calls to lookup_template_class. : Replace tsubst_aggr_type call with tsubst_entering_scope. : Likewise. Increment processing_template_decl when substituting the context. (tsubst_expr) : Replace tsubst_aggr_type call with tsubst_entering_scope. : Likewise. (instantiate_template): Likewise. (resolve_typename_type): Adjust lookup_template_class call and call adjust_type_for_entering_scope afterward. (listify): Adjust lookup_template_class call. (alias_ctad_tweaks): Likewise. * semantics.cc (finish_template_type): Adjust lookup_template_class call and maybe call adjust_type_for_entering_scope afterward. 2024-05-02 Nathaniel Shead PR c++/114917 * parser.cc (cp_parser_declaration_seq_opt): Clear parser->in_unbraced_* flags when parsing toplevel declarations. 2024-05-02 Jakub Jelinek PR c++/114458 * parser.cc (cp_parser_pure_specifier): Implement C++26 P2573R2 - = delete("should have a reason");. Parse deleted-function-body. * decl.cc (duplicate_decls): Copy DECL_INITIAL from DECL_DELETED_FN olddecl to newdecl if it is a STRING_CST. (cp_finish_decl): Handle deleted init with a reason. * decl2.cc: Include "escaped_string.h". (grokfield): Handle deleted init with a reason. (mark_used): Emit DECL_DELETED_FN reason in the message if any. * cp-tree.h (DECL_DELETED_FN): Document representation of = delete("reason") on a DECL. 2024-05-02 Nathaniel Shead PR c++/114630 * module.cc (depset::hash::add_partial_entities): Mark GM specializations as unreached. (depset::hash::find_dependencies): Also reach entities in the DECL_TEMPLATE_SPECIALIZATIONS list. 2024-05-02 Nathaniel Shead PR c++/105224 * class.cc (finish_struct_1): Also push classes attached to a module into the 'keyed_classes' list. * decl.cc (record_key_method_defined): Don't push classes attached to a named module into the 'keyed_classes' list. * module.cc (trees_in::read_class_def): Likewise. * decl2.cc (import_export_class): Uniquely emit vtables for non-template classes attached to a named module. (vtables_uniquely_emitted): New function. (import_export_decl): Update comments. Update with knowledge about new kinds of uniquely emitted vtables. 2024-05-01 Jason Merrill * cp-tree.h (base_ctor_identifier): Adjust comment. * call.cc (in_charge_arg_for_name): Abort on deleting dtor. * decl2.cc (maybe_retrofit_in_chrg): Don't add it for destructors without vbases, either. * constexpr.cc (cxx_eval_call_expression): Remove workaround. 2024-05-01 Jason Merrill PR c++/113706 * decl.cc (decls_match): Handle memchr return type being const-qualified. 2024-05-01 Nathaniel Shead * name-lookup.cc (walk_module_binding): Use the partition-specific hidden flag instead of the top-level decl_hidden. 2024-05-01 Nathaniel Shead PR c++/114868 * module.cc (depset::hash::add_binding_entity): Propagate OVL_USING_P for using-declarations. 2024-05-01 Nathaniel Shead PR c++/107688 * name-lookup.cc (push_namespace): Error when exporting namespace with internal linkage. * parser.h (struct cp_parser): Add new flag 'in_unbraced_export_declaration_p'. * parser.cc (cp_debug_parser): Print the new flag. (cp_parser_new): Initialise the new flag. (cp_parser_module_export): Set the new flag. (cp_parser_class_specifier): Clear and restore the new flag. (cp_parser_import_declaration): Imports can now appear directly in a linkage specification. (cp_parser_declaration): Categorise declarations as "name" or "special"; error on the later in contexts where the former is required. (cp_parser_class_head): Error when exporting a partial specialisation. 2024-04-30 Jakub Jelinek PR c++/114456 * parser.cc (cp_parser_decomposition_declaration): Implement C++26 P0609R3 - Attributes for Structured Bindings. Parse attributed identifier lists for structured binding declarations, pass the attributes to start_decl. 2024-04-30 Nathaniel Shead PR c++/105320 PR c++/114275 * cp-tree.h (propagate_defining_module): Declare. (lookup_imported_hidden_friend): Declare. * decl.cc (duplicate_decls): Also check if hidden decls can be redeclared in this module. * module.cc (imported_temploid_friends): New. (init_modules): Initialize it. (trees_out::decl_value): Write it; don't consider imported temploid friends as attached to a module. (trees_in::decl_value): Read it. (get_originating_module_decl): Follow the owning decl for an imported temploid friend. (propagate_defining_module): New. * name-lookup.cc (get_mergeable_namespace_binding): New. (lookup_imported_hidden_friend): New. * pt.cc (tsubst_friend_function): Propagate defining module for new friend functions. (tsubst_friend_class): Lookup imported hidden friends. Check for valid module attachment of existing names. Propagate defining module for new classes. 2024-04-30 Nathaniel Shead * cp-tree.h (module_may_redeclare): Add default parameter. * decl.cc (duplicate_decls): Don't emit errors for failed module_may_redeclare. (xref_tag): Likewise. (start_enum): Likewise. * semantics.cc (begin_class_definition): Likewise. * module.cc (module_may_redeclare): Clean up logic. Emit error messages on failure. 2024-04-30 Patrick Palka PR c++/114889 * module.cc (trees_in::read_class_def): Look through TEMPLATE_DECL when adding to CLASSTYPE_BEFRIENDING_CLASSES. 2024-04-30 Patrick Palka PR c++/114888 * typeck.cc (cp_build_binary_op) : Add missing dependence check for the second sizeof operand. 2024-04-26 Patrick Palka * error.cc (print_instantiation_partial_context_line): Clear the pretty printer prefix around the call to diagnostic_show_locus. 2024-04-25 Jakub Jelinek PR c++/111284 * constexpr.cc (cxx_bind_parameters_in_call): For PARM_DECLs with TREE_ADDRESSABLE types use vc_glvalue rather than vc_prvalue for cxx_eval_constant_expression and if it doesn't have the same type as it should, cast the reference type to reference to type before convert_from_reference and instead of adjust_temp_type take address of the arg, cast to reference to type and then convert_from_reference. (cxx_eval_constant_expression) : For lval case on parameters with TREE_ADDRESSABLE types lookup result in ctx->globals if possible. Otherwise if lookup in ctx->globals was successful for parameter with TREE_ADDRESSABLE type, recurse with vc_prvalue on the returned value. 2024-04-25 Jakub Jelinek PR lto/113208 * cp-tree.h (maybe_optimize_cdtor): Declare. * decl2.cc (import_export_decl): Call it for cloned cdtors. * optimize.cc (maybe_optimize_cdtor): New function. 2024-04-24 Patrick Palka PR c++/114709 * constexpr.cc (cxx_fold_indirect_ref): Restrict object/offset canonicalization to RECORD_TYPE member accesses. 2024-04-23 Nathaniel Shead * parser.cc (cp_parser_parameter_declaration): Check if decl_specifiers.type is null. 2024-04-23 Patrick Palka PR c++/114795 * module.cc (trees_in::is_matching_decl): Propagate deduced function return type. 2024-04-23 Jakub Jelinek * parser.cc (cp_parser_using_declaration): Spelling fix: favour -> favor. 2024-04-23 Jakub Jelinek PR c++/114784 * method.cc (implicitly_declare_fn): Call clone_attrs on DECL_ATTRIBUTES on STRIP_TEMPLATE (inherited_ctor) rather than inherited_ctor. Also copy DECL_DISREGARD_INLINE_LIMITS flag from it. 2024-04-23 Nathaniel Shead PR c++/114078 * decl.cc (grokdeclarator): Check allocation functions for xobj parameters. 2024-04-16 Jakub Jelinek PR c++/114706 * constexpr.cc (check_bit_cast_type): Handle ARRAY_TYPE. 2024-04-15 Nathaniel Shead Patrick Palka PR c++/114600 * module.cc (depset::hash::add_binding_entity): Require both WMB_Using and WMB_Export for GMF entities. 2024-04-14 Nathaniel Shead PR c++/106820 * module.cc (trees_in::decl_value): Assemble alias when needed. 2024-04-13 Patrick Palka * module.cc (struct bytes_in::bits_in): Define defaulted move ctor. (struct bytes_out::bits_out): Likewise. 2024-04-13 Patrick Palka * module.cc: Update comment about classes defined within. (class data): Enclose in an anonymous namespace. (data::calc_crc): Moved from bytes::calc_crc. (class bytes): Remove. Move bit_flush to namespace scope. (class bytes_in): Enclose in an anonymous namespace. Inherit directly from data and adjust accordingly. Move b and bflush members to bits_in. (class bytes_out): As above. Remove is_set static data member. (bit_flush): Moved from class bytes. (struct bytes_in::bits_in): Define. (struct bytes_out::bits_out): Define. (bytes_in::stream_bits): Define. (bytes_out::stream_bits): Define. (bytes_out::bflush): Moved to bits_out/in. (bytes_in::bflush): Likewise (bytes_in::bfill): Removed. (bytes_out::b): Moved to bits_out/in. (bytes_in::b): Likewise. (class trees_in): Enclose in an anonymous namespace. (class trees_out): Enclose in an anonymous namespace. (trees_out::core_bools): Add bits_out/in parameter and use it. Unconditionally stream a bit for public_flag. Add early exits as appropriate. (trees_out::core_bools): Likewise. (trees_out::lang_decl_bools): Add bits_out/in parameter and use it. Flush the current bit buffer at the start. Unconditionally stream a bit for module_keyed_decls_p. (trees_in::lang_decl_bools): Likewise. (trees_out::lang_type_bools): Add bits_out/in parameter and use it. Flush the current bit buffer at the start. (trees_in::lang_type_bools): Likewise. (trees_out::tree_node_bools): Construct a bits_out object and use/pass it. (trees_in::tree_node_bools): Likewise. (trees_out::decl_value): Likewise. (trees_in::decl_value): Likewise. (module_state::write_define): Likewise. (module_state::read_define): Likewise. 2024-04-12 Marek Polacek PR c++/109966 * typeck2.cc (potential_prvalue_result_of): Remove. (replace_placeholders_for_class_temp_r): Check TARGET_EXPR_ELIDING_P. Use a pset. Don't replace_placeholders in TARGET_EXPRs that initialize a function argument. 2024-04-12 Patrick Palka PR c++/99426 * module.cc (merge_kind::MK_local_type): New enumerator. (merge_kind_name): Update. (trees_out::chained_decls): Move BLOCK-specific handling of DECL_LOCAL_DECL_P decls to ... (trees_out::core_vals) : ... here. Stream BLOCK_VARS manually. (trees_in::core_vals) : Stream BLOCK_VARS manually. Handle deduplicated local types.. (trees_out::key_local_type): Define. (trees_in::key_local_type): Define. (trees_out::get_merge_kind) : Return MK_local_type for a local type. (trees_out::key_mergeable) : Use key_local_type. (trees_in::key_mergeable) : Likewise. (trees_in::is_matching_decl): Be flexible with type mismatches for local entities. (trees_in::register_duplicate): Also register the DECL_TEMPLATE_RESULT of a TEMPLATE_DECL as a duplicate. (depset_cmp): Return 0 for equal IDENTIFIER_HASH_VALUEs. 2024-04-12 Jason Merrill Patrick Palka PR c++/113141 * call.cc (reference_binding): For an invalid cast, warn and don't recalculate. 2024-04-12 Jason Merrill Patrick Palka DR 1996 PR c++/113141 * call.cc (reference_binding): Check direct binding from a single-element list. 2024-04-12 Jakub Jelinek PR c++/114691 * semantics.cc (simplify_loop_decl_cond): Use cp_build_unary_op with TRUTH_NOT_EXPR on ANNOTATE_EXPR argument (if any) rather than ANNOTATE_EXPR itself. 2024-04-12 Patrick Palka PR c++/114393 * pt.cc (tsubst_lambda_expr): Also defer all dependent substitution. 2024-04-12 Jakub Jelinek PR c++/114426 * constexpr.cc (is_valid_constexpr_fn): Return false/diagnose with complain destructors in classes with virtual bases. 2024-04-12 Patrick Palka PR c++/114393 PR c++/107457 PR c++/93595 * cp-tree.h (LAMBDA_EXPR_EXTRA_ARGS): Define. (tree_lambda_expr::extra_args): New field. * module.cc (trees_out::core_vals) : Stream LAMBDA_EXPR_EXTRA_ARGS. (trees_in::core_vals) : Likewise. * pt.cc (has_extra_args_mechanism_p): Return true for LAMBDA_EXPR. (tree_extra_args): Handle LAMBDA_EXPR. (tsubst_lambda_expr): Use LAMBDA_EXPR_EXTRA_ARGS to defer templated substitution into a lambda-expr if we lost the template context. Add sanity check for error_mark_node result from begin_lambda_type. 2024-04-11 Patrick Palka PR c++/114303 * constraint.cc (tsubst_requires_expr): Clear REQUIRES_EXPR_EXTRA_ARGS before calling build_extra_args. * pt.cc (tree_extra_args): Define. (extract_locals_r): Assert *_EXTRA_ARGS is empty. (tsubst_stmt) : Clear IF_SCOPE on the new IF_STMT. Call build_extra_args on the new IF_STMT instead of t which might already have IF_STMT_EXTRA_ARGS. 2024-04-11 Jakub Jelinek PR c++/114409 * pt.cc (tsubst_expr) : Move to ... (tsubst_stmt) : ... here. Use tsubst_expr instead of RECUR for the last 2 arguments. 2024-04-10 Jakub Jelinek PR c++/114462 * semantics.cc: Implement C++26 P2809R3 - Trivial infinite loops are not Undefined Behavior. (maybe_warn_for_constant_evaluated): Add trivial_infinite argument and emit special diagnostics for that case. (finish_if_stmt_cond): Adjust caller. (finish_loop_cond): New function. (finish_while_stmt): Use it. (finish_do_stmt): Likewise. (finish_for_stmt): Likewise. 2024-04-10 Nathaniel Shead PR c++/104040 * semantics.cc (expand_or_defer_fn_1): Keep DECL_SAVED_TREE for all vague linkage cdtors with modules. 2024-04-10 Nathaniel Shead PR c++/99377 * module.cc (trees_in::install_entity): Overwrite entity map index if installing from a partition. 2024-04-09 Jakub Jelinek PR c++/114580 * semantics.cc (finish_if_stmt_cond): Call maybe_warn_for_constant_evaluated with IF_STMT_CONSTEXPR_P (if_stmt) as the second argument, rather than true/false depending on if it is if constexpr with non-dependent constant expression with bool type. 2024-04-09 Jakub Jelinek * constexpr.cc (build_new_constexpr_heap_type): Fix duplicated words in comment; is is -> is. * cp-tree.def (CO_RETURN_EXPR): Fix duplicated words in comment; for for -> for. * parser.cc (fixup_blocks_walker): Fix duplicated words in comment; is is -> is. * semantics.cc (fixup_template_type): Fix duplicated words in comment; for for -> for. (finish_omp_for): Fix duplicated words in comment; the the -> the. * pt.cc (more_specialized_fn): Fix duplicated words in comment; think think -> think. (type_targs_deducible_from): Fix duplicated words in comment; the the -> the. 2024-04-05 Marek Polacek PR c++/111132 * constexpr.cc (get_function_named_in_call): Use cp_get_fndecl_from_callee. * cvt.cc (cp_get_fndecl_from_callee): If there's a DECL_LOCAL_DECL_ALIAS, use it. 2024-04-05 Jakub Jelinek PR c++/114572 * cp-gimplify.cc (cxx_omp_clause_apply_fn): Call build_cplus_new on build_call_a result if it has class type. 2024-04-04 centurion PR c++/114377 * pt.cc (find_template_parameter_info::found): Use TREE_TYPE for TEMPLATE_DECL instead of DECL_INITIAL. 2024-04-02 Marek Polacek PR c++/114479 * semantics.cc (trait_expr_value) : Return false for zero-sized arrays. 2024-04-02 Marek Polacek PR c++/103825 * typeck.cc (is_bitfield_expr_with_lowered_type): Handle CLEANUP_POINT_EXPR. 2024-04-02 Jason Merrill PR c++/114561 PR c++/114562 * call.cc (convert_like_internal): Avoid adding qualification conversion in direct reference binding. 2024-04-01 Jason Merrill * typeck.cc (maybe_warn_about_returning_address_of_local): Permerror in C++26. 2024-03-28 Jason Merrill PR c++/100667 * semantics.cc (same_type_ref_bind_p): New. (finish_trait_expr): Use it. 2024-03-26 Jakub Jelinek PR c++/112724 * error.cc (dump_expr): Handle EXCESS_PRECISION_EXPR like NOP_EXPR. 2024-03-25 Marek Polacek PR c++/114349 * name-lookup.cc (maybe_push_to_top_level): For a non-lambda, don't push to top level if decl_function_context is non-null. * pt.cc (maybe_instantiate_noexcept): Use maybe_push_to_top_level. 2024-03-25 Marek Polacek PR c++/114439 * init.cc (can_init_array_with_p): Return true for a VEC_INIT_EXPR wrapped in a TARGET_EXPR. 2024-03-22 Marek Polacek PR c++/59465 * init.cc (can_init_array_with_p): New. (perform_member_init): Check it. 2024-03-21 Marek Polacek PR c++/110323 * decl2.cc (min_vis_expr_r) : Do nothing for decl_constant_var_p VAR_DECLs. 2024-03-20 Jakub Jelinek * coroutines.cc (expand_one_await_expression): Use integer_zero_node instead of build_int_cst (integer_type_node, 0) and integer_one_node instead of build_int_cst (integer_type_node, 1). 2024-03-19 Nathaniel Shead * cp-tree.h (module_maybe_has_cmi_p): New function. * decl.cc (grokfndecl): Mark block-scope functions as public if they could be visible in other TUs. * decl2.cc (no_linkage_error): Don't error for declarations that could be defined in other TUs since C++20. Suppress duplicate errors from 'check_global_declaration'. * tree.cc (no_linkage_check): In relaxed mode, don't consider types in a module CMI to have no linkage. 2024-03-16 Nathaniel Shead PR c++/112631 * cp-tree.h (named_module_attach_p): New function. * decl.cc (start_decl): Check for attachment not purview. (grokmethod): Likewise. 2024-03-14 Chung-Lin Tang * parser.cc (cp_parser_oacc_data_clause): Add parsing support for 'readonly' modifier, set OMP_CLAUSE_MAP_READONLY if readonly modifier found, update comments. (cp_parser_oacc_cache): Add parsing support for 'readonly' modifier, set OMP_CLAUSE__CACHE__READONLY if readonly modifier found, update comments. 2024-03-12 Nathaniel Shead PR c++/98645 PR c++/98688 PR c++/111224 * module.cc (enum tree_tag): Add new tag for builtin types. (trees_out::start): POLY_INT_CSTs can be emitted. (trees_in::start): Likewise. (trees_out::core_vals): Stream POLY_INT_CSTs. (trees_in::core_vals): Likewise. (trees_out::type_node): Handle vectors with multiple coeffs. (trees_in::tree_node): Likewise. (init_modules): Register target-specific builtin types. Bump initial capacity slightly. 2024-03-08 Jakub Jelinek * pt.cc (tsubst_expr): Handle MEM_REF. 2024-03-08 Jakub Jelinek PR debug/113918 * cp-objcp-common.cc (cp_type_dwarf_attribute): Return 1 for DW_AT_export_symbols on anonymous structs or unions. 2024-03-08 Jakub Jelinek PR c++/113802 * parser.cc (cp_parser_parameter_declaration): Move the xobj_param_p pack diagnostics after ellipsis handling and if an error is reported, pretend this specifier didn't appear. Formatting fix. 2024-03-07 Nathaniel Shead PR c++/114229 * module.cc (trees_out::core_bools): Redetermine DECL_INTERFACE_KNOWN on stream-in for vtables and tinfo. * decl2.cc (import_export_decl): Add fixme for ABI changes with module vtables and tinfo. 2024-03-07 Patrick Palka PR c++/103994 * cp-tree.h (add_mergeable_specialization): Remove second parameter. * module.cc (depset::disc_bits::DB_ALIAS_TMPL_INST_BIT): Remove. (depset::disc_bits::DB_ALIAS_SPEC_BIT): Remove. (depset::is_alias_tmpl_inst): Remove. (depset::is_alias): Remove. (merge_kind::MK_tmpl_alias_mask): Remove. (merge_kind::MK_alias_spec): Remove. (merge_kind_name): Remove entries for alias specializations. (trees_out::core_vals) : Adjust after removing is_alias_tmpl_inst. (trees_in::decl_value): Adjust add_mergeable_specialization calls. (trees_out::get_merge_kind) : Use MK_decl_spec for alias template specializations. (trees_out::key_mergeable): Simplify after MK_tmpl_alias_mask removal. (depset::hash::make_dependency): Adjust after removing DB_ALIAS_TMPL_INST_BIT. (specialization_add): Don't allow alias templates when !decl_p. (depset::hash::add_specializations): Remove now-dead code accomodating alias template specializations in the type table. * pt.cc (lookup_template_class): Dispatch early to instantiate_alias_template for alias templates. Simplify accordingly. (add_mergeable_specialization): Remove alias_p parameter and simplify accordingly. 2024-03-07 Patrick Palka PR c++/110730 PR c++/105512 * module.cc (module_state::write_namespaces): Stream the abi_tag attribute of an inline namespace. (module_state::read_namespaces): Likewise. 2024-03-07 Marek Polacek PR c++/110031 * pt.cc (lookup_and_finish_template_variable): Pass complain to mark_used. 2024-03-07 Nathaniel Shead PR c++/98356 * typeck2.cc (cxx_incomplete_type_diagnostic): Don't assume 'member' will be a FUNCTION_DECL (or something like it). 2024-03-07 Nathaniel Shead PR c++/98881 * module.cc (trees_out::tpl_parms_fini): Stream out DECL_CONTEXT for template template parameters. (trees_in::tpl_parms_fini): Read it. 2024-03-06 Marek Polacek PR c++/114114 * pt.cc (maybe_instantiate_noexcept): Save/restore cp_unevaluated_operand, c_inhibit_evaluation_warnings, and cp_noexcept_operand around the tsubst_expr call. 2024-03-06 Nathaniel Shead PR c++/113629 * pt.cc (type_unification_real): Only use DEDUCE_CONV for the return type of a conversion function. 2024-03-06 Patrick Palka * module.cc (trees_out::get_merge_kind) : Accomodate class-scope DECL_UNINSTANTIATED_TEMPLATE_FRIEND_P TEMPLATE_DECL. Consolidate IDENTIFIER_ANON_P cases. 2024-03-05 Patrick Palka * parser.cc (cp_parser_translation_unit): Relax GMF contents error into a pedwarn. 2024-03-04 Nathaniel Shead * name-lookup.cc (walk_module_binding): Remove completed FIXME. (do_nonmember_using_decl): Mark redeclared entities as exported when needed. Check for re-exporting internal linkage types. 2024-03-01 Patrick Palka PR c++/104919 PR c++/106009 * module.cc (depset::hash::sneakoscope): Remove. (trees_out::decl_node): Always add a dependency on a local type. (depset::hash::find_dependencies): Remove sneakoscope stuff. 2024-03-01 Nathaniel Shead PR c++/114170 * module.cc (has_definition): Fall back to DECL_INITIALIZED_P when DECL_INITIAL is not set on a template. (module_state::write_inits): Only increment count when initializers are actually written. 2024-03-01 Nathaniel Shead PR c++/114005 * init.cc (create_temporary_var): Use current_scope instead of current_function_decl. 2024-03-01 Patrick Palka * decl.cc (maybe_register_incomplete_var): Restrict second branch to static data members from a not-yet-complete class. 2024-03-01 Marek Polacek PR c++/110358 PR c++/109642 * call.cc (no_dangling_p): New. (reference_like_class_p): Use it. (do_warn_dangling_reference): Use it. Don't warn when the function or its enclosing class has attribute gnu::no_dangling. * tree.cc (cxx_gnu_attributes): Add gnu::no_dangling. (handle_no_dangling_attribute): New. 2024-03-01 Patrick Palka PR c++/110025 PR c++/114138 * cp-tree.h (make_cast_auto): Declare. * parser.cc (cp_parser_functional_cast): If the type is an auto, replace it with a level-less one via make_cast_auto. * pt.cc (find_parameter_packs_r): Don't treat level-less auto as a type parameter pack. (tsubst) : Generalize CTAD placeholder auto handling to all level-less autos. (make_cast_auto): Define. (do_auto_deduction): Handle replacement of a level-less auto. 2024-03-01 Jakub Jelinek PR c++/92687 * decl.cc (lookup_decomp_type): Return NULL_TREE if decomp_type_table doesn't have entry for V. * semantics.cc (finish_decltype_type): If ptds.saved, assert DECL_HAS_VALUE_EXPR_P is true and decide on tuple vs. non-tuple based on if lookup_decomp_type is NULL or not. 2024-02-29 Marek Polacek PR c++/113987 * call.cc (conv_binds_to_reference_parm_p): New. * cp-tree.h (conv_binds_to_reference_parm_p): Declare. * init.cc (find_uninit_fields_r): Call it. 2024-02-29 Nathaniel Shead PR c++/111710 * cp-tree.h (DECL_MODULE_KEYED_DECLS_P): Remove tree checking. (struct lang_decl_base): Update comments and fix whitespace. * module.cc (trees_out::lang_decl_bools): Always write module_keyed_decls_p flag... (trees_in::lang_decl_bools): ...and always read it. (trees_out::decl_value): Handle all kinds of keyed decls. (trees_in::decl_value): Likewise. (trees_in::tree_value): Deduplicate LAMBDA_EXPRs. (maybe_key_decl): Also support lambdas attached to fields, parameters, and types. Key lambdas attached to fields to their class. (trees_out::get_merge_kind): Likewise. (trees_out::key_mergeable): Likewise. (trees_in::key_mergeable): Support keyed decls in a TYPE_DECL container. * parser.cc (cp_parser_class_head): Start a lambda scope when parsing base classes. 2024-02-28 Jakub Jelinek Patrick Palka PR c++/113976 * decl.cc (grokdeclarator): Don't call cp_apply_type_quals_to_decl on DECL_TEMPLATE_INSTANTIATED VAR_DECLs. 2024-02-28 Nathaniel Shead PR c++/113970 PR c++/114013 * decl.cc (make_rtl_for_nonlocal_decl): Don't defer inline variables. 2024-02-23 Jakub Jelinek PR c++/113083 * cp-gimplify.cc (cp_fold): For targetm.cxx.cdtor_returns_this () wrap r into a COMPOUND_EXPR and return folded CALL_EXPR_ARG (x, 0). 2024-02-19 Patrick Palka PR c++/113966 * constraint.cc (tsubst_compound_requirement): Don't check the noexcept condition or the return-type-requirement when partially substituting. 2024-02-17 Marek Polacek PR c++/113158 * search.cc (maybe_check_overriding_exception_spec): Defer checking when a noexcept couldn't be instantiated & evaluated to false/true. 2024-02-16 Marek Polacek DR 1351 * search.cc (maybe_check_overriding_exception_spec): Don't error about a looser exception specification if the overrider is deleted. 2024-02-16 Marek Polacek PR c++/113789 PR c++/113853 * typeck.cc (treat_lvalue_as_rvalue_p): Update code to better reflect [expr.prim.id.unqual]#4.2. 2024-02-16 Jakub Jelinek PR c++/113929 * parser.cc (cp_parser_parameter_declaration): Diagnose this specifier on template parameter declaration. 2024-02-16 Patrick Palka * module.cc (trees_out::core_bools): Stream TREE_UNAVAILABLE. (trees_in::core_bools): Likewise. (trees_out::core_vals): Stream LAMBDA_EXPR_REGEN_INFO. (trees_in::core_vals): Likewise. 2024-02-14 Nathaniel Shead PR c++/113708 * decl.cc (make_rtl_for_nonlocal_decl): Defer inline variables. * decl2.cc (import_export_decl): Support inline variables. 2024-02-14 Patrick Palka PR c++/113908 PR c++/113332 * method.cc (synthesized_method_walk): Use maybe_push_to_top_level. 2024-02-14 Nathaniel Shead PR c++/99573 * decl.cc (start_enum): Reorder check for redeclaring in module. Add missing auto_diagnostic_groups. 2024-02-13 Marek Polacek DR 1693 PR c++/113760 * parser.cc (cp_parser_member_declaration): Only pedwarn about an extra semicolon in C++98. 2024-02-13 Tobias Burnus PR middle-end/113904 * parser.cc (cp_parser_omp_context_selector): Handle splitting of OMP_TRAIT_PROPERTY_EXPR into OMP_TRAIT_PROPERTY_{DEV_NUM,BOOL}_EXPR. 2024-02-13 Patrick Palka * Make-lang.in (CFLAGS-cp/module.o): Add $(ZLIBINC). * module.cc: Include . (bytes::calc_crc): Use crc32 from zlib. (bytes_out::set_crc): Use crc32_combine from zlib. 2024-02-13 Patrick Palka * module.cc (depset::hash::add_specializations): Use STRIP_TEMPLATE consistently. (get_originating_module_decl): Handle class-scope CONST_DECL. 2024-02-13 Patrick Palka * lambda.cc (lambda_function): Call get_class_binding_direct instead of lookup_member to sidestep lazy loading. * name-lookup.cc (check_local_shadow): Punt if we're in a function context that's not actual parsing. 2024-02-13 Jason Merrill PR c++/113612 * pt.cc (process_partial_specialization): Return early on redeclaration. 2024-02-13 Marek Polacek PR c++/112436 * except.cc (expand_start_catch_block): Pass tf_warning_or_error to is_admissible_throw_operand_or_catch_parameter. (build_throw): Pass complain to is_admissible_throw_operand_or_catch_parameter. (complete_ptr_ref_or_void_ptr_p): Add a tsubst_flags_t parameter. Use it. Return bool. Call complete_type_or_maybe_complain instead of complete_type_or_else. (is_admissible_throw_operand_or_catch_parameter): Add a tsubst_flags_t parameter. Use it. Guard error calls. 2024-02-13 Alex Coplan PR c++/113658 * cp-objcp-common.cc (cp_feature_table): Remove entry for cxx_constexpr_string_builtins. 2024-02-12 Marek Polacek PR c++/113545 * constexpr.cc (cxx_eval_switch_expr): If the condition doesn't reduce to an INTEGER_CST, consider it non-constant. 2024-02-10 Marek Polacek DR 2237 PR c++/107126 PR c++/97202 * parser.cc (cp_parser_unqualified_id): Downgrade the DR2237 error to a pedwarn. (cp_parser_constructor_declarator_p): Likewise. 2024-02-10 Jakub Jelinek * tree.cc (debug_binfo): Use HOST_WIDE_INT_PRINT_DEC instead of "%ld" and casts to long. * pt.cc (print_template_statistics): Use HOST_SIZE_T_PRINT_DEC and casts to fmt_size_t instead of "%ld" and casts to long. * class.cc (dump_class_hierarchy_1): Use HOST_WIDE_INT_PRINT_UNSIGNED instead of "%lu" and casts to unsigned long. For TYPE_ALIGN, use %u instead of %lu and drop casts to unsigned long. * parser.cc (cp_lexer_peek_nth_token): Use HOST_SIZE_T_PRINT_DEC and casts to fmt_size_t instead of "%ld" and casts to long. 2024-02-09 Marek Polacek PR c++/113834 * semantics.cc (finish_type_pack_element): Perform range checking before tree_to_shwi. 2024-02-09 Marek Polacek PR c++/98388 * coroutines.cc (coro_rewrite_function_body): Pass tf_warning_or_error to build_throw. (morph_fn_to_coro): Likewise. * cp-tree.h (build_throw): Adjust. * except.cc (expand_end_catch_block): Pass tf_warning_or_error to build_throw. (build_throw): Add a tsubst_flags_t parameter. Use it. Remove redundant variable. Guard an inform call. * parser.cc (cp_parser_throw_expression): Pass tf_warning_or_error to build_throw. * pt.cc (tsubst_expr) : Pass complain to build_throw. 2024-02-09 Patrick Palka PR c++/112580 * module.cc (trees_in::read_class_def): When streaming in an anonymous union field of an as-base class, don't overwrite ANON_AGGR_TYPE_FIELD. 2024-02-08 Patrick Palka PR c++/113649 * pt.cc (do_class_deduction): Add outer_targs parameter. Substitute outer arguments into the CTAD template. (do_auto_deduction): Pass outer_targs to do_class_deduction. 2024-02-08 Jason Merrill * pt.cc (create_template_parm_object): Pass TARGET_EXPR to cxx_constant_value. 2024-02-06 Jakub Jelinek PR c++/113788 * parser.cc (CP_PARSER_FLAGS_PARAMETER): New enumerator. (cp_parser_decl_specifier_seq): Parse RID_THIS only if CP_PARSER_FLAGS_PARAMETER is set in flags. (cp_parser_parameter_declaration): Or in CP_PARSER_FLAGS_PARAMETER when calling cp_parser_decl_specifier_seq. 2024-02-06 Marek Polacek * method.cc (early_check_defaulted_comparison): Add auto_diagnostic_group. 2024-02-06 Jason Merrill PR c++/107291 * method.cc (early_check_defaulted_comparison): Fail if not friend. 2024-02-05 Jason Merrill PR c++/111286 * tree.cc (rvalue): Don't drop cv-quals from an array. 2024-02-03 Patrick Palka PR c++/110006 PR c++/112769 * constraint.cc (subst_info::quiet): Accomodate non-diagnostic tsubst flags. (tsubst_valid_expression_requirement): Likewise. (tsubst_simple_requirement): Return a substituted _REQ node when processing_template_decl. (tsubst_type_requirement_1): Accomodate non-diagnostic tsubst flags. (tsubst_type_requirement): Return a substituted _REQ node when processing_template_decl. (tsubst_compound_requirement): Likewise. Accomodate non-diagnostic tsubst flags. (tsubst_nested_requirement): Likewise. (tsubst_requires_expr): Don't defer partial substitution when processing_constraint_expression_p is true, in which case return a substituted REQUIRES_EXPR. * pt.cc (tsubst_expr) : Accomodate non-diagnostic tsubst flags. 2024-02-02 Jason Merrill PR c++/110084 * pt.cc (tsubst_function_decl): Only check a function defaulted outside the class if the class is complete. 2024-02-02 Jason Merrill PR c++/112439 * constexpr.cc (cxx_eval_store_expression): Check empty_base before marking a CONSTRUCTOR readonly. 2024-02-02 Jason Merrill PR c++/113638 * cp-tree.h: Adjust comment. * pt.cc (instantiate_template): Set VAR_HAD_UNKNOWN_BOUND for variable template. 2024-02-01 Marek Polacek * call.cc (reference_like_class_p): Consider even non-templates for std::span-like classes. 2024-02-01 Patrick Palka PR c++/112737 * pt.cc (iterative_hash_template_arg) : Adjust hashing to match cp_tree_equal. (ctp_hasher::hash): Also hash CLASS_PLACEHOLDER_TEMPLATE. * tree.cc (cp_tree_equal) : Return true for ttp TEMPLATE_DECLs if their TEMPLATE_TEMPLATE_PARMs are equivalent. * typeck.cc (structural_comptypes) : Use cp_tree_equal to compare CLASS_PLACEHOLDER_TEMPLATE. 2024-02-01 Marek Polacek PR c++/112437 * typeck.cc (treat_lvalue_as_rvalue_p): Bail out on sk_namespace in the move on throw of parms loop. 2024-01-30 Marek Polacek PR c++/110358 PR c++/109640 * call.cc (reference_like_class_p): Don't warn for std::span-like classes. 2024-01-30 Patrick Palka PR c++/113640 * call.cc (keep_unused_object_arg): Punt for an xobj member function. 2024-01-30 Patrick Palka PR c++/113644 * pt.cc (unify) : Handle NULL_TREE type. 2024-01-30 Nathaniel Shead PR c++/107594 * module.cc (get_module): Bail on empty name. 2024-01-29 Jason Merrill PR c++/113544 * pt.cc (instantiate_class_template): Don't partially instantiate. (tsubst_stmt): Likewise. 2024-01-26 Nathaniel Shead PR c++/113580 * module.cc (struct post_process_data): Create. (trees_in::post_decls): Use. (trees_in::post_process): Return entire vector at once. Change overload to take post_process_data instead of tree. (trees_out::write_function_def): Write needed flags from DECL_STRUCT_FUNCTION. (trees_in::read_function_def): Read them and pass to post_process. (module_state::read_cluster): Write flags into cfun. 2024-01-26 Nathaniel Shead PR c++/112899 * cp-tree.h (note_variable_template_instantiation): Rename to... (note_vague_linkage_variable): ...this. * decl2.cc (note_variable_template_instantiation): Rename to... (note_vague_linkage_variable): ...this. * pt.cc (instantiate_decl): Rename usage of above function. * module.cc (trees_in::read_var_def): Remember pending statics that we stream in. 2024-01-25 Jakub Jelinek PR c++/113599 * typeck2.cc (build_m_component_ref): Use convert instead of cp_convert for pointer conversion. 2024-01-25 Jason Merrill PR c++/113598 * init.cc (build_vec_init): Don't use {} for PMF. 2024-01-25 Jason Merrill PR c++/109227 * coroutines.cc (build_co_await): Use cxx_maybe_build_cleanup. (build_actor_fn, process_conditional, maybe_promote_temps) (morph_fn_to_coro): Likewise. (expand_one_await_expression): Use build_cleanup. 2024-01-25 Nathaniel Shead PR c++/113405 * module.cc (set_defining_module): Track partial specialisations for all declarations. 2024-01-25 Nathaniel Shead PR c++/100707 * name-lookup.cc (add_imported_namespace): Don't mark namespaces as imported. 2024-01-24 Patrick Palka PR c++/113529 * call.cc (add_operator_candidates): Propagate error_mark_node result after recursing to find rewritten candidates. 2024-01-23 Marek Polacek PR c++/113256 PR c++/111607 PR c++/109640 * call.cc (do_warn_dangling_reference): Don't warn if the temporary is of lambda type. 2024-01-23 Nathaniel Shead PR c++/112820 PR c++/102607 * module.cc (trees_out::lang_type_bools): Write interface_only and interface_unknown. (trees_in::lang_type_bools): Read the above flags. (trees_in::decl_value): Reset CLASSTYPE_INTERFACE_* except for extern templates. (trees_in::read_class_def): Remove buggy extern template handling. 2024-01-19 Jason Merrill PR c++/113498 * pt.cc (decl_template_info): New fn. (get_template_info): Use it. 2024-01-19 Jason Merrill PR c++/112632 PR c++/112594 PR c++/111357 PR c++/104594 PR c++/67898 * cp-tree.h (IMPLICIT_CONV_EXPR_FORCED): New. * pt.cc (expand_integer_pack): Remove 111357 workaround. (maybe_convert_nontype_argument): Add force parm. (convert_template_argument): Handle alias template args specially. (tsubst_expr): Don't ignore IMPLICIT_CONV_EXPR_NONTYPE_ARG. * error.cc (dump_expr) [CASE_CONVERT]: Handle null optype. 2024-01-18 Marek Polacek PR c++/113389 * decl.cc (grokdeclarator) : Set TREE_PURPOSE to NULL_TREE when emitting an error. 2024-01-17 Nathaniel Shead PR c++/112588 * module.cc (trees_in::read_function_def): Don't overwrite arguments. 2024-01-17 Patrick Palka PR c++/113242 PR c++/99493 * pt.cc (invalid_tparm_referent_p) : Suppress DECL_ARTIFICIAL rejection test for class NTTP objects. 2024-01-16 Nathaniel Shead PR c++/113292 * decl2.cc (get_tls_wrapper_fn): Set DECL_CONTEXT. (c_parse_final_cleanups): Suppress warning for no definition of TLS wrapper functions in header modules. * module.cc (trees_out::lang_decl_vals): Write wrapped variable for TLS wrapper functions. (trees_in::lang_decl_vals): Read it. (trees_out::decl_value): Write TLS model for thread-local vars. (trees_in::decl_value): Read it for new decls. Remember to emit definitions of TLS wrapper functions later. 2024-01-16 Nathaniel Shead * name-lookup.h (enum scope_kind): Add 'sk_count'. * name-lookup.cc (cp_binding_level_descriptor): Add missing scope kinds. Add assertion that the list is up to date. Fix handling of explicit_spec_p. 2024-01-16 Marek Polacek * decl.cc (grokdeclarator) : Tweak diagnostic messages. 2024-01-16 Marek Polacek PR c++/113340 * decl.cc (grokdeclarator) : Clear is_xobj_member_function in case of an error. 2024-01-16 waffl3x PR c++/113307 * parser.cc (cp_parser_parameter_declaration): Reject packs on xobj params. 2024-01-15 Marek Polacek PR c++/110065 * parser.cc (cp_parser_template_type_arg): Add auto checking. 2024-01-15 Patrick Palka * parser.cc (cp_parser_check_access_in_redeclaration): Don't check access for a partial or explicit specialization. * pt.cc (maybe_new_partial_specialization): Don't set TREE_PRIVATE or TREE_PROTECTED on the newly created partial specialization. 2024-01-15 Patrick Palka PR c++/104634 * pt.cc (maybe_new_partial_specialization): Propagate TREE_PUBLIC to the newly created partial specialization. 2024-01-15 Patrick Palka PR c++/109899 * init.cc (build_vec_delete_1): Assume expr_noexcept_p returns false in a template context. 2024-01-13 Jakub Jelinek * mangle.cc (write_nested_name): Mangle explicit object member functions with H as per https://github.com/itanium-cxx-abi/cxx-abi/issues/148 non-proposal. 2024-01-12 Jason Merrill PR c++/113038 * name-lookup.cc (lookup_elaborated_type): Look for bindings in the global namespace in the ABI namespace. 2024-01-12 Jason Merrill * call.cc (reversed_match): New. (enum class pmatch): New enum. (cand_parms_match): Add match_kind parm. (object_parms_correspond): Add fn parms. (joust): Adjust. * class.cc (xobj_iobj_parameters_correspond): Rename to... (iobj_parm_corresponds_to): ...this. Take the other type instead of a second function. (object_parms_correspond): Adjust. * cp-tree.h (iobj_parm_corresponds_to): Declare. 2024-01-11 Jason Merrill PR c++/113191 * class.cc (xobj_iobj_parameters_correspond): Add context parm. (object_parms_correspond): Factor out of... (add_method): ...here. * method.cc (defaulted_late_check): Use it. * call.cc (class_of_implicit_object): New. (object_parms_correspond): Overload taking two candidates. (cand_parms_match): Use it. (joust): Check reversed before comparing constraints. * cp-tree.h (object_parms_correspond): Declare. 2024-01-10 Tamar Christina * parser.cc (cp_parser_pragma): Initialize to false. 2024-01-09 Jason Merrill * semantics.cc (is_object_parameter): New. * cp-tree.h (is_object_parameter): Declare. * call.cc (maybe_warn_class_memaccess): Use it. * search.cc (field_access_p): Use it. (class_of_object_parm): New. (field_accessor_p): Adjust for explicit object parms. 2024-01-09 Jason Merrill * call.cc (build_over_call): Refactor handle_arg lambda. * class.cc (xobj_iobj_parameters_correspond): Fix FIXME. * method.cc (defaulted_late_check): Adjust comments. 2024-01-09 waffl3x PR c++/102609 PR c++/102609 C++23 P0847R7 (deducing this) - CWG2586. * decl.cc (copy_fn_p): Accept xobj copy assignment functions. (move_signature_fn_p): Accept xobj move assignment functions. * method.cc (do_build_copy_assign): Handle defaulted xobj member functions. (defaulted_late_check): Comment. (defaultable_fn_check): Comment. 2024-01-09 waffl3x PR c++/102609 PR c++/102609 C++23 P0847R7 (deducing this) - xobj lambdas. * lambda.cc (build_capture_proxy): Don't fold direct object types. * parser.cc (cp_parser_lambda_declarator_opt): Handle xobj lambdas, diagnostics. Comments also updated. * pt.cc (tsubst_function_decl): Handle xobj lambdas. Check object type of xobj lambda call operator, diagnose incorrect types. (tsubst_lambda_expr): Update comment. * semantics.cc (finish_decltype_type): Also consider by-value object parameter qualifications. 2024-01-09 waffl3x PR c++/102609 PR c++/102609 C++23 P0847R7 (deducing this) - diagnostics. * class.cc (resolve_address_of_overloaded_function): Diagnostics. * cp-tree.h (TFF_XOBJ_FUNC): Define. * decl.cc (grokfndecl): Diagnostics. (grokdeclarator): Diagnostics. * error.cc (dump_aggr_type): Pass TFF_XOBJ_FUNC. (dump_lambda_function): Formatting for xobj lambda. (dump_function_decl): Pass TFF_XOBJ_FUNC. (dump_parameters): Formatting for xobj member functions. (function_category): Formatting for xobj member functions. * parser.cc (cp_parser_decl_specifier_seq): Diagnostics. (cp_parser_parameter_declaration): Diagnostics. * search.cc (look_for_overrides_here): Make xobj member functions override. (look_for_overrides_r): Reject an overriding xobj member function and diagnose it. * semantics.cc (finish_this_expr): Diagnostics. * typeck.cc (cp_build_addr_expr_1): Diagnostics. 2024-01-09 waffl3x PR c++/102609 PR c++/102609 C++23 P0847R7 (deducing this) - initial functionality. * class.cc (xobj_iobj_parameters_correspond): New function, checks for corresponding object parameters between xobj and iobj member functions. (add_method): Handle object parameters of xobj member functions, use xobj_iobj_parameters_correspond. * call.cc (build_over_call): Refactor, handle xobj member functions. (cand_parms_match): Handle object parameters of xobj and iobj member functions, use xobj_iobj_parameters_correspond. * cp-tree.h (enum cp_decl_spec): Add ds_this, add comments. * decl.cc (grokfndecl): Add xobj_func_p parameter. For xobj member functions, Set xobj_flag, don't set static_function flag. (grokdeclarator): Handle xobj member functions, tell grokfndecl. (grok_op_properties): Don't error for xobj operators. * parser.cc (cp_parser_decl_specifier_seq): Handle this specifier. (cp_parser_parameter_declaration): Set default argument to "this_identifier" for xobj parameters. (set_and_check_decl_spec_loc): Add "this", add comments. * tree.cc (build_min_non_dep_op_overload): Handle xobj operators. * typeck.cc (cp_build_addr_expr_1): Handle address-of xobj member functions. 2024-01-09 waffl3x Jason Merrill PR c++/102609 * cp-tree.h (struct lang_decl_fn): New data member. (DECL_NONSTATIC_MEMBER_FUNCTION_P): Poison. (DECL_IOBJ_MEMBER_FUNCTION_P): Define. (DECL_FUNCTION_XOBJ_FLAG): Define. (DECL_XOBJ_MEMBER_FUNCTION_P): Define. (DECL_OBJECT_MEMBER_FUNCTION_P): Define. (DECL_FUNCTION_MEMBER_P): Don't use DECL_NONSTATIC_MEMBER_FUNCTION_P. (DECL_CONST_MEMFUNC_P): Likewise. (DECL_VOLATILE_MEMFUNC_P): Likewise. (DECL_NONSTATIC_MEMBER_P): Likewise. * module.cc (trees_out::lang_decl_bools): Handle xobj_flag. (trees_in::lang_decl_bools): Handle xobj_flag. * call.cc (build_this_conversion) (add_function_candidate) (add_template_candidate_real) (add_candidates) (maybe_warn_class_memaccess) (cand_parms_match) (joust) (do_warn_dangling_reference) * class.cc (finalize_literal_type_property) (finish_struct) (resolve_address_of_overloaded_function) * constexpr.cc (is_valid_constexpr_fn) (cxx_bind_parameters_in_call) * contracts.cc (build_contract_condition_function) * cp-objcp-common.cc (cp_decl_dwarf_attribute) * cxx-pretty-print.cc (cxx_pretty_printer::postfix_expression) (cxx_pretty_printer::declaration_specifiers) (cxx_pretty_printer::direct_declarator) * decl.cc (cp_finish_decl) (grok_special_member_properties) (start_preparsed_function) (record_key_method_defined) * decl2.cc (cp_handle_deprecated_or_unavailable) * init.cc (find_uninit_fields_r) (build_offset_ref) * lambda.cc (lambda_expr_this_capture) (maybe_generic_this_capture) (nonlambda_method_basetype) * mangle.cc (write_nested_name) * method.cc (early_check_defaulted_comparison) (skip_artificial_parms_for) (num_artificial_parms_for) * pt.cc (is_specialization_of_friend) (determine_specialization) (copy_default_args_to_explicit_spec) (check_explicit_specialization) (tsubst_contract_attribute) (check_non_deducible_conversions) (more_specialized_fn) (maybe_instantiate_noexcept) (register_parameter_specializations) (value_dependent_expression_p) * search.cc (shared_member_p) (lookup_member) (field_access_p) * semantics.cc (finish_omp_declare_simd_methods) * tree.cc (lvalue_kind) * typeck.cc (invalid_nonstatic_memfn_p): Don't use DECL_NONSTATIC_MEMBER_FUNCTION_P. 2024-01-09 Julian Brown * constexpr.cc (potential_consant_expression_1): Handle OMP_ARRAY_SECTION. * cp-tree.h (grok_omp_array_section, build_omp_array_section): Add prototypes. * decl2.cc (grok_omp_array_section): New function. * error.cc (dump_expr): Handle OMP_ARRAY_SECTION. * parser.cc (cp_parser_new): Initialize parser->omp_array_section_p. (cp_parser_statement_expr): Disallow array sections. (cp_parser_postfix_open_square_expression): Support OMP_ARRAY_SECTION parsing. (cp_parser_parenthesized_expression_list, cp_parser_lambda_expression, cp_parser_braced_list): Disallow array sections. (cp_parser_omp_var_list_no_open): Remove ALLOW_DEREF parameter, add MAP_LVALUE in its place. Support generalised lvalue parsing for OpenMP map, to and from clauses. Use OMP_ARRAY_SECTION code instead of TREE_LIST to represent OpenMP array sections. (cp_parser_omp_var_list): Remove ALLOW_DEREF parameter, add MAP_LVALUE. Pass to cp_parser_omp_var_list_no_open. (cp_parser_oacc_data_clause): Update call to cp_parser_omp_var_list. (cp_parser_omp_clause_map): Add sk_omp scope around cp_parser_omp_var_list_no_open call. * parser.h (cp_parser): Add omp_array_section_p field. * pt.cc (tsubst, tsubst_copy, tsubst_omp_clause_decl, tsubst_copy_and_build): Add OMP_ARRAY_SECTION support. * semantics.cc (handle_omp_array_sections_1, handle_omp_array_sections, cp_oacc_check_attachments, finish_omp_clauses): Use OMP_ARRAY_SECTION instead of TREE_LIST where appropriate. Handle more types of map expression. * typeck.cc (build_omp_array_section): New function. 2024-01-07 Nathaniel Shead * module.cc (trees_out::write_var_def): Only write initializers in header modules. 2024-01-07 Nathaniel Shead PR c++/109679 * module.cc (depset::hash::add_binding_entity): Don't skip names in the GMF if they've been exported with a using declaration. 2024-01-07 Nathaniel Shead PR c++/110808 * parser.cc (cp_parser_module_name): Rewrite to handle module-names and module-partitions independently. (cp_parser_module_partition): New function. (cp_parser_module_declaration): Parse module partitions explicitly. Don't change state if parsing module decl failed. (cp_parser_import_declaration): Handle different kinds of import-declarations locally. 2024-01-03 Patrick Palka PR c++/113064 * call.cc (reference_binding): Still try a conversion via a temporary if a direct conversion was bad. 2024-01-03 Kwok Cheung Yeung * parser.cc (cp_parser_omp_clause_name): Move handling of indirect clause to correspond to alphabetical order. Copyright (C) 2024 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved.