2025-07-04 Jason Merrill PR c++/120575 PR c++/116064 * parser.cc (cp_parser_abort_tentative_parse): Check seen_error instead of errorcount. 2025-07-03 Jason Merrill PR c++/120716 * lambda.cc (finish_lambda_function): Pass cur_stmt_list to prune_lambda_captures. 2025-07-03 Jason Merrill PR c++/120748 * lambda.cc (lambda_expr_this_capture): Don't return a FIELD_DECL. * parser.cc (cp_parser_primary_expression): Ignore THIS_FORBIDDEN if cp_unevaluated_operand. 2025-07-03 Jakub Jelinek PR c++/120940 * typeck.cc (cp_build_array_ref): Fix a pasto. 2025-07-03 Jason Merrill PR c++/120684 PR c++/118856 * constexpr.cc (cxx_eval_constant_expression) [TARGET_EXPR]: Clear the value first if is_complex. 2025-07-01 Jakub Jelinek PR c++/120471 * typeck.cc (cp_build_array_ref) : If idx is not INTEGER_CST, don't optimize the case (but cp_default_conversion on array early if it has ARRAY_TYPE) or use SAVE_EXPR , SAVE_EXPR , SAVE_EXPR as new op0 depending on flag_strong_eval_order and whether op1 and op2 are arrays with invariant address or tree invariant pointers. Formatting fixes. 2025-06-28 Nathaniel Shead * module.cc (trees_out::walking_bit_field_unit): New flag. (trees_out::trees_out): Initialize it. (trees_out::core_vals): Set it. (trees_out::get_merge_kind): Use it, move previous ad-hoc check into assertion. 2025-06-28 Nathaniel Shead PR c++/120644 * decl.cc (cp_finish_decl): Also propagate type to partial templates. * module.cc (trees_out::decl_value): Add assertion that the TREE_TYPE of a streamed template decl matches its inner. (trees_in::is_matching_decl): Clarify function return type deduction should only occur for non-TEMPLATE_DECL. * pt.cc (template_for_substitution): Handle partial specs. 2025-06-27 Marek Polacek PR c++/120756 * pt.cc (resolve_nondeduced_context): Pass complain to mark_used. 2025-06-27 Jakub Jelinek PR c++/120777 * constexpr.cc: Implement C++26 P3533R2 - constexpr virtual inheritance. (is_valid_constexpr_fn): Don't reject constexpr cdtors in classes with virtual bases for C++26, adjust error wording. (cxx_bind_parameters_in_call): Add ORIG_FUN argument, add values for __in_chrg and __vtt_parm arguments when needed. (cxx_eval_dynamic_cast_fn): Adjust function comment, HINT -1 should be possible. For C++26 if obj is cast from POINTER_PLUS_EXPR, attempt to use cxx_fold_indirect_ref to simplify it and if successful, build ADDR_EXPR of that. (cxx_eval_call_expression): Add orig_fun variable, set it to fun before looking through clones, pass it to cxx_bind_parameters_in_call. (reduced_constant_expression_p): Add SZ argument, pass DECL_SIZE of FIELD_DECL e.index to recursive calls and don't return false if SZ is non-NULL and there are unfilled fields with bit position at or above SZ. (cxx_fold_indirect_ref_1): Handle reading of vtables using ptrdiff_t dynamic type instead of some pointer type. Set el_sz to DECL_SIZE_UNIT value rather than TYPE_SIZE_UNIT of DECL_FIELD_IS_BASE fields in classes with virtual bases. (cxx_fold_indirect_ref): In canonicalize_obj_off lambda look through COMPONENT_REFs with DECL_FIELD_IS_BASE in classes with virtual bases and adjust off correspondingly. Remove assertion that off is integer_zerop, pass tree_to_uhwi (off) instead of 0 to the cxx_fold_indirect_ref_1 call. * cp-tree.h (publicly_virtually_derived_p): Declare. (reduced_constant_expression_p): Add another tree argument defaulted to NULL_TREE. * method.cc (synthesized_method_walk): Don't clear *constexpr_p if there are virtual bases for C++26. * class.cc (build_base_path): Compute fixed_type_p and virtual_access before checks for build_simple_base_path instead of after that and conditional cp_build_addr_expr. Use build_simple_path if !virtual_access even when v_binfo is non-NULL. (layout_virtual_bases): For build_base_field calls use access_public_node rather than access_private_node if publicly_virtually_derived_p. (build_vtbl_initializer): Revert 2018-09-18 and 2018-12-11 changes. (publicly_virtually_derived_p): New function. 2025-06-27 Jason Merrill * class.cc (fixed_type_or_null): Handle class-type CALL_EXPR. * parser.cc (cp_parser_binary_expression): Fix decltype_p handling. 2025-06-27 Nathaniel Shead PR c++/98735 PR c++/118904 * cp-gimplify.cc (source_location_id): Remove. (fold_builtin_source_location): Use generate_internal_label. * module.cc (enum tree_tag): Add 'tt_internal_id' enumerator. (trees_out::tree_value): Adjust assertion, write definitions of uncontexted VAR_DECLs. (trees_in::tree_value): Read variable definitions. (trees_out::tree_node): Write internal labels, adjust assert. (trees_in::tree_node): Read internal labels. 2025-06-27 Nathaniel Shead PR c++/120040 * constexpr.cc (cxx_eval_constant_expression): Handle TYPE_NAME now being a TYPE_DECL rather than just an IDENTIFIER_NODE. * init.cc (build_new_constexpr_heap_type): Build a TYPE_DECL for the returned type; mark the type as artificial. * module.cc (trees_out::type_node): Add some assertions. 2025-06-27 Nathaniel Shead PR c++/98735 PR c++/120040 * module.cc (trees_out::tree_value): Write TYPE_DECLs. (trees_in::tree_value): Read TYPE_DECLs. (trees_out::tree_node): Support uncontexted TYPE_DECLs, and ensure that all parts of a by-value decl are marked for streaming. (trees_out::get_merge_kind): Treat members of uncontexted types as always unique. 2025-06-27 Nathaniel Shead * decl.cc (grokfndecl): Add explanation of how to attach to global module. 2025-06-26 David Malcolm * error.cc (cxx_initialize_diagnostics): Use diagnostic_context::set_adjust_diagnostic_info_callback. 2025-06-26 Jakub Jelinek * cp-trait.def: Implement C++26 P2830R10 - Constexpr Type Ordering. (TYPE_ORDER): New. * method.cc (type_order_value): Define. * cp-tree.h (type_order_value): Declare. * semantics.cc (trait_expr_value): Use gcc_unreachable also for CPTK_TYPE_ORDER, adjust comment. (finish_trait_expr): Handle CPTK_TYPE_ORDER. * constraint.cc (diagnose_trait_expr): Likewise. 2025-06-25 Martin Jambor * coroutines.h (class cp_coroutine_transform): Remove member orig_fn_body. 2025-06-24 Jakub Jelinek PR c++/120773 * decl.cc (grokfndecl): Implement C++26 P3618R0 - Allow attaching main to the global module. Only pedwarn for current_lang_name other than lang_name_cplusplus and adjust pedwarn wording. 2025-06-23 Tobias Burnus * parser.cc (OACC_WAIT_CLAUSE_MASK): Ass if clause. 2025-06-18 Iain Sandoe PR c++/115908 PR c++/118074 PR c++/95615 * coroutines.cc (coro_frame_refcount_id): New. (coro_init_identifiers): Initialise coro_frame_refcount_id. (build_actor_fn): Set up initial_await_resume_called. Handle decrementing of the frame reference count. Return directly to the caller if that is non-zero. (cp_coroutine_transform::wrap_original_function_body): Use a conditional eh-only cleanup around the initial await expression to release the body use on exception before initial await resume. (cp_coroutine_transform::build_ramp_function): Wrap the called body in a cleanup that releases a use of the frame when we return to the ramp. Implement frame, promise and argument copy destruction via conditional cleanups when the frame use count is zero. 2025-06-17 Iain Sandoe * coroutines.cc (struct coroutine_info): Update comments. (struct coro_aw_data): Remove self_handle and add in information to create the handle in lowering. (expand_one_await_expression): Build a temporary coroutine handle. (build_actor_fn): Remove reference to the frame copy of the coroutine handle. (cp_coroutine_transform::wrap_original_function_body): Remove reference to the frame copy of the coroutine handle. 2025-06-17 Iain Sandoe * coroutines.cc (analyze_expression_awaits): Elide assume attributes containing await expressions, since these have side effects. Emit a diagnostic that this has been done. 2025-06-17 Jason Merrill PR c++/120678 * cp-trait.def (IS_TRIVIALLY_DESTRUCTIBLE): Fix nargs. 2025-06-17 Jason Merrill * module.cc (module_state::write_diagnostic_classification): New. (module_state::write_begin): Call it. (module_state::read_diagnostic_classification): New. (module_state::read_initial): Call it. (dk_string, dump_dc_change): New. 2025-06-17 Iain Sandoe * coroutines.cc (finish_co_await_expr): Do not allow in an unevaluated context. (finish_co_yield_expr): Likewise. 2025-06-17 Iain Sandoe PR c++/120273 * coroutines.cc (cp_coroutine_transform::wrap_original_function_body): Use function start and end locations when synthesizing code. (cp_coroutine_transform::cp_coroutine_transform): Set the function end location. 2025-06-16 Jason Merrill * constraint.cc (failed_completions_map): New. (note_failed_type_completion): Rename from note_failed_type_completion_for_satisfaction. Add -Wsfinae-incomplete handling. (failed_completion_location): New. * class.cc (finish_struct_1): Add -Wsfinae-incomplete warning. * decl.cc (require_deduced_type): Adjust. (finish_function): Add -Wsfinae-incomplete warning. * typeck.cc (complete_type_or_maybe_complain): Adjust. (cxx_sizeof_or_alignof_type): Call note_failed_type_completion. * pt.cc (dependent_template_arg_p): No longer static. * cp-tree.h: Adjust. 2025-06-16 yxj-github-437 <2457369732@qq.com> * parser.cc (cp_parser_asm_operand_list): Check for unexpanded parameter packs. 2025-06-14 Iain Sandoe * coroutines.cc (build_co_await): Identify diagnostics for initial and final await expressions. (cp_coroutine_transform::wrap_original_function_body): Do not handle initial and final await expressions here ... (cp_coroutine_transform::apply_transforms): ... handle them here and avoid duplicate diagnostics. * coroutines.h: Declare inital and final await expressions in the transform class. Save the function closing brace location. 2025-06-13 Iain Sandoe PR c++/116775 * coroutines.cc (analyze_expression_awaits): When we see a builtin_constant_p call, and that contains one or more await expressions, then replace the call with its result and discard the unevaluated operand. 2025-06-13 Iain Sandoe * coroutines.cc (build_actor_fn): Set can_throw. 2025-06-12 Alfie Richards * decl.cc (maybe_version_functions): Change record_function_versions call to add_function_version. 2025-06-12 Jakub Jelinek * cp-tree.h (union lang_type::maybe_objc_info): New type. (struct lang_type): Use union maybe_objc_info info member instead of tree objc_info. * lex.cc (copy_lang_type): Use sizeof (struct lang_type) just for ObjC++ and otherwise offsetof (struct lang_type, info). (maybe_add_lang_type_raw): Likewise. (cxx_make_type): Formatting fix. 2025-06-09 Iain Sandoe PR c++/120495 PR c++/115605 * pt.cc (lookup_template_class): Honour provided namespace contexts when looking up class templates. 2025-06-06 Jason Merrill PR c++/120555 * decl2.cc (fn_being_defined, fn_template_being_defined): New. (mark_used): Check fn_template_being_defined. 2025-06-05 Patrick Palka PR c++/120224 * pt.cc (tsubst_function_decl): Return error_mark_node if substituting into the formal parameter list failed. (tsubst_decl) : Return error_mark_node upon TREE_TYPE substitution failure, when in a SFINAE context. Return error_mark_node upon DECL_CHAIN substitution failure. 2025-06-05 Patrick Palka PR c++/118340 * constexpr.cc (maybe_constant_value): First try looking up each operand in the cv_cache and reusing the result. 2025-06-05 Iain Sandoe * coroutines.cc (analyze_fn_parms): Move from free function.. (cp_coroutine_transform::analyze_fn_parms):... to method. (cp_coroutine_transform::apply_transforms): Adjust call to analyze_fn_parms. * coroutines.h: Declare analyze_fn_parms. 2025-06-05 Iain Sandoe * coroutines.cc (expand_one_await_expression): Set the initial_await_resume_called flag here. (build_actor_fn): Populate the frame accessor for the initial_await_resume_called flag. (cp_coroutine_transform::wrap_original_function_body): Do not modify the initial_await expression to include the initial_await_resume_called flag here. 2025-06-04 Jason Merrill PR c++/120502 * cp-gimplify.cc (cp_fold_r) [TARGET_EXPR]: Do constexpr evaluation before genericize. * constexpr.cc (cxx_eval_store_expression): Add comment. 2025-06-03 Jason Merrill * name-lookup.h (operator|, operator|=): Define for WMB_Flags. 2025-06-02 Jason Merrill PR c++/107600 * method.cc (destructible_expr): Fix refs and arrays of unknown bound. 2025-06-02 Jason Merrill PR c++/120506 * constexpr.cc (cxx_eval_outermost_constant_expr): Always check CONSTRUCTOR_NO_CLEARING. 2025-06-02 Iain Sandoe * coroutines.cc (build_actor_fn): Remove an unused label, guard the frame deallocation correctly, use simpler APIs to build if and return statements. 2025-06-02 Iain Sandoe PR c++/118903 * constexpr.cc (potential_constant_expression_1): Emit an error when co_await et. al. are used in constexpr contexts. 2025-06-02 Iain Sandoe * error.cc (dump_expr): Add co_await, co_yield and co_return. 2025-06-02 Jason Merrill PR c++/107600 * method.cc (destructible_expr): Handle non-classes. (constructible_expr): Check for abstract class here... (is_xible_helper): ...not here. 2025-06-02 Jason Merrill PR c++/107600 * semantics.cc (trait_expr_value) [CPTK_HAS_TRIVIAL_DESTRUCTOR]: Add cp_unevaluated. 2025-06-02 Sandra Loosemore * cp-tree.h (maybe_convert_cond): Declare. * parser.cc (cp_parser_omp_context_selector): Call maybe_convert_cond and fold_build_cleanup_point_expr on the expression for OMP_TRAIT_PROPERTY_BOOL_EXPR. * pt.cc (tsubst_omp_context_selector): Likewise. * semantics.cc (maybe_convert_cond): Remove static declaration. 2025-05-30 Jason Merrill PR c++/113563 * lambda.cc (lambda_capture_field_type): Handle 'this' normally. (build_capture_proxy): Special-case 'this' by-ref capture more. (nonlambda_method_basetype): Look through xobj lambdas. 2025-05-30 Julian Brown Tobias Burnus * constexpr.cc (reduced_constant_expression_p): Add OMP_DECLARE_MAPPER case. (cxx_eval_constant_expression, potential_constant_expression_1): Likewise. * cp-gimplify.cc (cxx_omp_finish_mapper_clauses): New function. * cp-objcp-common.h (LANG_HOOKS_OMP_FINISH_MAPPER_CLAUSES, LANG_HOOKS_OMP_MAPPER_LOOKUP, LANG_HOOKS_OMP_EXTRACT_MAPPER_DIRECTIVE, LANG_HOOKS_OMP_MAP_ARRAY_SECTION): Define langhooks. * cp-tree.h (lang_decl_base): Add omp_declare_mapper_p field. Recount spare bits comment. (DECL_OMP_DECLARE_MAPPER_P): New macro. (omp_mapper_id): Add prototype. (cp_check_omp_declare_mapper): Add prototype. (omp_instantiate_mappers): Add prototype. (cxx_omp_finish_mapper_clauses): Add prototype. (cxx_omp_mapper_lookup): Add prototype. (cxx_omp_extract_mapper_directive): Add prototype. (cxx_omp_map_array_section): Add prototype. * decl.cc (check_initializer): Add OpenMP declare mapper support. (cp_finish_decl): Set DECL_INITIAL for OpenMP declare mapper var decls as appropriate. * decl2.cc (mark_used): Instantiate OpenMP "declare mapper" magic var decls. * error.cc (dump_omp_declare_mapper): New function. (dump_simple_decl): Use above. * parser.cc (cp_parser_omp_clause_map): Add KIND parameter. Support "mapper" modifier. (cp_parser_omp_all_clauses): Add KIND argument to cp_parser_omp_clause_map call. (cp_parser_omp_target): Call omp_instantiate_mappers before finish_omp_clauses. (cp_parser_omp_declare_mapper): New function. (cp_parser_omp_declare): Add "declare mapper" support. * pt.cc (tsubst_decl): Adjust name of "declare mapper" magic var decls once we know their type. (tsubst_omp_clauses): Call omp_instantiate_mappers before finish_omp_clauses, for target regions. (tsubst_expr): Support OMP_DECLARE_MAPPER nodes. (instantiate_decl): Instantiate initialiser (i.e definition) for OpenMP declare mappers. * semantics.cc (gimplify.h): Include. (omp_mapper_id, omp_mapper_lookup, omp_extract_mapper_directive, cxx_omp_map_array_section, cp_check_omp_declare_mapper): New functions. (finish_omp_clauses): Delete GOMP_MAP_PUSH_MAPPER_NAME and GOMP_MAP_POP_MAPPER_NAME artificial clauses. (omp_target_walk_data): Add MAPPERS field. (finish_omp_target_clauses_r): Scan for uses of struct/union/class type variables. (finish_omp_target_clauses): Create artificial mapper binding clauses for used structs/unions/classes in offload region. 2025-05-29 David Malcolm * error.cc (cxx_format_postprocessor::clone): Update to use unique_ptr. (cxx_dump_pretty_printer::cxx_dump_pretty_printer): Likewise. (cxx_initialize_diagnostics): Likewise. 2025-05-29 Jason Merrill PR c++/113563 * lambda.cc (build_capture_proxy): Check pointerness of the member, not the proxy type. (lambda_expr_this_capture): Don't assume current_class_ref. (nonlambda_method_basetype): Likewise. * semantics.cc (finish_non_static_data_member): Don't assume TREE_TYPE (object) is set. (finish_this_expr): Check current_class_type for lambda, not current_class_ref. 2025-05-29 Iain Sandoe PR c++/109283 * coroutines.cc (find_any_await): Only save the statement pointer if the caller passes a place for it. (flatten_await_stmt): When checking that ternary expressions have been handled, also check that they contain a co_await. 2025-05-29 Jason Merrill * decl.cc (start_decl): Also set invalid_constexpr for maybe_constexpr_fn. * parser.cc (cp_parser_jump_statement): Likewise. * constexpr.cc (potential_constant_expression_1): Ignore goto to an artificial label. 2025-05-29 Sandra Loosemore * parser.cc (cp_parser_omp_metadirective): Do not call cp_parser_skip_to_end_of_block_or_statement after an error. 2025-05-29 Sandra Loosemore PR c/120180 * parser.cc (cp_parser_omp_metadirective): Only consume the token if it is the expected close paren. 2025-05-29 Iain Sandoe * coroutines.cc (analyze_fn_parms): No longer create a parameter copy guard var. * coroutines.h (struct param_info): Remove the entry for the parameter copy destructor guard. 2025-05-29 Iain Sandoe PR c++/120453 * cp-tree.h (DECL_RAMP_P): New. * typeck.cc (check_return_expr): Use DECL_RAMP_P instead of DECL_RAMP_FN. 2025-05-29 Jason Merrill PR c++/107600 * cp-trait.def (IS_DESTRUCTIBLE, IS_NOTHROW_DESTRUCTIBLE) (IS_TRIVIALLY_DESTRUCTIBLE): New. * constraint.cc (diagnose_trait_expr): Explain them. * method.cc (destructible_expr): New. (is_xible_helper): Use it. * semantics.cc (finish_trait_expr): Handle new traits. (trait_expr_value): Likewise. Complain about asking whether a deleted dtor is trivial. 2025-05-28 Jason Merrill * module.cc (module_state::write_namespaces): Write using-directives. (module_state::read_namespaces): And read them. * name-lookup.cc (add_using_namespace): Add overload. Build a USING_DECL for modules. (name_lookup::search_usings, name_lookup::queue_usings) (using_directives_contain_std_p): Strip the USING_DECL. * name-lookup.h: Declare it. * parser.cc (cp_parser_import_declaration): Set MK_EXPORTING for export import. 2025-05-27 Iain Sandoe * coroutines.cc (cp_coroutine_transform::build_ramp_function): Replace TRUTH_AND_EXPR with TRUTH_ANDIF_EXPR in three places. 2025-05-26 Tobias Burnus PR c++/120413 * semantics.cc (finish_omp_target_clauses_r): Handle BIND_EXPR with empty BIND_EXPR_BLOCK. 2025-05-26 Jason Merrill * cp-tree.h: Declare tinst_dump_id. * cp-objcp-common.cc (cp_register_dumps): Set it. * pt.cc (push_tinst_level_loc): Dump it. (reopen_tinst_level): Here too. (tinst_complete_p): New. (instantiate_pending_templates): Don't reopen_tinst_level for already-complete instantiations. 2025-05-26 Jason Merrill * cp-tree.h (class cxx_dump_pretty_printer): New. * error.cc (cxx_dump_pretty_printer): Ctor/dtor definitions. 2025-05-25 Jason Merrill * error.cc (dump_template_bindings): Correct skipping of redundant bindings. 2025-05-23 Nathaniel Shead PR c++/120363 * decl2.cc (get_tls_init_fn): Set context as global_namespace. (get_tls_wrapper_fn): Likewise. 2025-05-23 Nathaniel Shead PR c++/120414 * module.cc (trees_in::tree_node): Allow reading a USING_DECL when streaming tt_data_member. 2025-05-23 Jason Merrill * mangle.cc (mangle_decl_string): Don't push_tinst_level. 2025-05-22 Jason Merrill PR c++/120935 * cp-gimplify.cc (cp_fold): Check always_inline. 2025-05-21 Iain Sandoe * coroutines.cc (cp_coroutine_transform::build_ramp_function): Replace ramp cleanup try-catch block with eh-only cleanup statements. 2025-05-21 Iain Sandoe * coroutines.cc (cp_coroutine_transform::build_ramp_function): Use decltype(auto) to determine the type of the temporary get_return_object. 2025-05-21 Iain Sandoe PR c++/119916 * coroutines.cc (cp_coroutine_transform::wrap_original_function_body): Do not initialise initial_await_resume_called here... (cp_coroutine_transform::build_ramp_function): ... but here. When the coroutine is not void, initialize a GRO object from promise.get_return_object(). Use this as the argument to the return expression. Use a regular cleanup for the GRO, since it is ramp-local. 2025-05-20 Nathaniel Shead PR c++/120349 * module.cc (trees_out::core_bools): Always mark vtables as DECL_EXTERNAL. 2025-05-20 Nathaniel Shead PR c++/120013 * module.cc (trees_in::install_entity): Handle re-registering the inner TYPE_DECL of a partial specialisation. 2025-05-20 Nathaniel Shead PR c++/120350 * rtti.cc (get_tinfo_decl_direct): Mark TREE_ADDRESSABLE. 2025-05-16 Ville Voutilainen * cp-gimplify.cc (cp_fold): Do the conversion unconditionally, even for same-type cases. 2025-05-16 Iain Sandoe * typeck.cc (check_return_expr): Suppress conversions for NVRO in coroutine ramp functions. 2025-05-16 Iain Sandoe * decl.cc (poplevel): Set BLOCK_OUTER_CURLY_BRACE_P on the body block for functions with no subblocks. 2025-05-16 Nathaniel Shead * module.cc (importer_interface): Adjust flags. (get_importer_interface): Rename flags. (trees_out::core_bools): Clean up special casing. (trees_out::write_function_def): Rename flag. 2025-05-15 Patrick Palka PR c++/120161 * pt.cc (unify) : When comparing specializations of a non-primary template, still perform a type comparison. 2025-05-15 Jason Merrill * module.cc (trees_out::lang_decl_bools): Stream implicit_constexpr. (trees_in::lang_decl_bools): Likewise. (trees_in::is_matching_decl): Check it. 2025-05-15 Jason Merrill PR c++/99599 * pt.cc (conversion_may_instantiate_p): Make sure classes are complete. 2025-05-14 Ville Voutilainen * cp-gimplify.cc (cp_fold): Remove a remnant comment. 2025-05-14 Nathaniel Shead PR c++/120125 * module.cc (trees_out::write_function_def): Only set DECL_NOT_REALLY_EXTERN if the importer might need to emit it. * optimize.cc (maybe_thunk_body): Don't assume 'fn' has a cgraph node created. 2025-05-14 Nathaniel Shead PR c++/119864 * decl2.cc (start_objects): Only use module initialized for host. (c_parse_final_cleanups): Don't always create an OMP offload init function in modules. 2025-05-14 Nathaniel Shead * name-lookup.cc (lookup_imported_hidden_friend): Add back lazy_load_pendings with comment. 2025-05-14 Ville Voutilainen * cp-gimplify.cc (cp_fold): Add to_underlying. 2025-05-14 Owen Avery Jason Merrill * method.cc (synthesized_method_walk): Check whether -Wvirtual-move-assign is enabled at the location of a base class's move assignment operator. 2025-05-12 Jason Merrill PR c++/120012 * class.cc (check_non_pod_aggregate): Check is_empty_class. 2025-05-10 Jason Merrill PR c++/120204 * pt.cc (tsubst_baselink): Always error if lookup fails. 2025-05-09 Jason Merrill * decl2.cc (determine_visibility): Ignore args for friend templates. 2025-05-09 Jason Merrill PR c++/99599 PR c++/120185 * class.cc (type_has_converting_constructor): Handle null parm. * pt.cc (fn_type_unification): Skip early non-dep checking if no concepts. 2025-05-08 Jason Merrill PR c++/99599 * cp-tree.h (type_has_converting_constructor): Declare. * class.cc (type_has_converting_constructor): New. * pt.cc (conversion_may_instantiate_p): Don't check completeness. 2025-05-05 Simon Martin * cp-tree.h (parsing_default_capturing_generic_lambda_in_template): Remove obsolete prototype. 2025-05-02 Jason Merrill PR c++/115207 * decl.cc (cp_finish_decl): Call layout_decl after CTAD. 2025-05-02 Jason Merrill PR c++/120012 * cp-tree.h (struct lang_type): Add non_aggregate_pod. (CLASSTYPE_NON_AGGREGATE_POD): New. * class.cc (check_bases_and_members): Set it. (check_non_pod_aggregate): Diagnose it. 2025-05-02 Jakub Jelinek PR c++/117827 * init.cc (build_vec_init): Push to *cleanup_flags clearing of rval instead of setting of iterator to maxindex. 2025-05-01 Patrick Palka * constexpr.cc (explain_invalid_constexpr_fn): In the DECL_CONSTRUCTOR_P branch pass the non-genericized body to require_potential_constant_expression. 2025-05-01 Patrick Palka PR c++/119034 PR c++/68942 * pt.cc (tsubst_expr) : Revert PR68942 fix. * semantics.cc (finish_call_expr): Ensure the callee of an ADL-enabled call is wrapped in an OVERLOAD. 2025-05-01 Jason Merrill * Make-lang.in: Don't pass the full path to gperf. * std-name-hint.h: Regenerate. 2025-05-01 Jason Merrill PR c++/119162 * constexpr.cc (find_deleted_heap_var): Remove. (cxx_eval_call_expression): Don't call it. Don't set TREE_STATIC on heap vars. (cxx_eval_outermost_constant_expr): Don't mess with varpool. 2025-04-30 Nathaniel Shead PR c++/120023 * module.cc (depset::hash::find_dependencies): Also call add_deduction_guides when walking one. 2025-04-30 Nathaniel Shead PR c++/119938 * pt.cc (get_template_parm_object): When !check_init, add assert that expr really is constant and mark decl as such. 2025-04-30 Nathaniel Shead PR c++/119551 PR c++/119996 * module.cc (depset::hash::make_dependency): Also mark inline variables referencing TU-local values as exposures here. (depset::hash::finalize_dependencies): Add error message for inline variables. 2025-04-30 Patrick Palka PR c++/119981 PR c++/119378 * pt.cc (tsubst) : Substitute into template parameter list first. When substituting the context, only set processing_template_decl if there's more than one level of introduced template parameters. 2025-04-28 David Malcolm * parser.cc: Include "analyzer/analyzer-language.h". (ana::cp_translation_unit): New class. (cp_parser_translation_unit): Add call to ana::on_finish_translation_unit. 2025-04-28 David Malcolm * cxx-pretty-print.cc: Drop include of "make-unique.h". Replace uses of ::make_unique with std::make_unique. * error.cc: Likewise. * name-lookup.cc: Likewise. * parser.cc: Likewise. 2025-04-28 David Malcolm * name-lookup.cc: Include "make-unique.h". (namespace_hints::convert_candidates_to_name_hint): Use ::make_unique rather than "new" when making show_candidate_location and suggest_alternatives. (namespace_hints::maybe_decorate_with_limit): Likewise when making namespace_limit_reached. (suggest_alternatives_for_1): Likewise when making suggest_missing_option. (maybe_suggest_missing_std_header): Likewise when making missing_std_header. (macro_use_before_def::maybe_make): Use std::unique_ptr. (macro_use_before_def::macro_use_before_def): Make public. (lookup_name_fuzzy): Use ::make_unique rather than "new" when making suggest_missing_header. * parser.cc: Include "make-unique.h". (cp_parser_error_1): Use ::make_unique rather than "new" when making suggest_missing_header. 2025-04-27 Nathaniel Shead PR c++/119939 * module.cc (trees_out::lang_decl_vals): Also stream lang->u.fn.context when DECL_UNIQUE_FRIEND_P. (trees_in::lang_decl_vals): Likewise. 2025-04-27 H.J. Lu PR middle-end/112877 * call.cc (type_passed_as): Remove the targetm.calls.promote_prototypes call. (convert_for_arg_passing): Likewise. * typeck.cc (cxx_safe_arg_type_equiv_p): Likewise. 2025-04-25 Jason Merrill PR c++/119764 PR c++/87185 * lambda.cc (insert_capture_proxy): Handle noexcept lambda. (prune_lambda_captures): Likewise, in ABI v21. 2025-04-25 Jason Merrill * cp-tree.h (struct tinst_level): Add had_errors bit. * pt.cc (push_tinst_level_loc): Clear it. (pop_tinst_level): Set it. (reopen_tinst_level): Check it. (instantiate_pending_templates): Call limit_bad_template_recursion. 2025-04-24 Jason Merrill PR c++/116954 * contracts.cc (remove_contract_attributes): Return early if not enabled. 2025-04-22 Nathaniel Shead * name-lookup.cc (lookup_imported_hidden_friend): Remove unnecessary lazy_load_pendings. 2025-04-22 Nathaniel Shead PR c++/119863 * name-lookup.cc (get_mergeable_namespace_binding): Remove no-longer-used function. (lookup_imported_hidden_friend): Also look for hidden imported decls in an attached decl's module. 2025-04-21 Jason Merrill * constexpr.cc (cxx_eval_outermost_constant_expr): Move verify_constant later. 2025-04-21 Jason Merrill PR c++/118775 * constexpr.cc (cxx_eval_call_expression): Add assert. (fold_to_constant): Handle processing_template_decl. * init.cc (build_new_1): Use fold_to_constant. 2025-04-21 Jason Merrill PR c++/99456 * constexpr.cc (cxx_eval_constant_expression): Check strict instead of manifestly_const_eval. (maybe_constant_init_1): Be strict for static constexpr vars. 2025-04-19 Jason Merrill * coroutines.cc (coro_build_expr_stmt) (coro_build_cvt_void_expr_stmt): Remove. (build_actor_fn): Use finish_expr_stmt. * semantics.cc (finish_expr_stmt): Avoid wrapping statement in EXPR_STMT. (finish_stmt_expr_expr): Add comment. 2025-04-17 Jason Merrill * constexpr.cc (is_valid_constexpr_fn): Improve diagnostic. 2025-04-17 Jason Merrill * constexpr.cc (cxx_eval_outermost_constant_expr): Give both expression and allocation location in allocated storage diagnostics. 2025-04-17 Jason Merrill * name-lookup.cc (name_lookup::preserve_state): Fix reserve call. * rtti.cc (get_tinfo_desc): Use vec_safe_grow_cleared. 2025-04-17 Jason Merrill * semantics.cc (finish_type_pack_element): Add more info to diagnostics. 2025-04-17 Jason Merrill * decl.cc (cp_make_fname_decl): Prevent silent failure. 2025-04-17 Jason Merrill * lex.cc (unqualified_name_lookup_error): Handle 'requires' better. 2025-04-17 Jason Merrill PR c++/113360 * cp-tree.h (struct language_function): Add erroneous bit. * constexpr.cc (explain_invalid_constexpr_fn): Return if set. (cxx_eval_call_expression): Quiet if set. * parser.cc (cp_parser_function_definition_after_declarator) * pt.cc (instantiate_body): Set it. 2025-04-16 Jason Merrill PR c++/114772 PR c++/101180 * pt.cc (apply_late_template_attributes): Also override target_option_current_node. 2025-04-16 Jason Merrill PR c++/116954 * contracts.cc (remove_contract_attributes): Preserve flags on the attribute list. 2025-04-15 Nathaniel Shead PR c++/119755 * lambda.cc (prune_lambda_captures): Remove pruned capture from function's BLOCK_VARS and BIND_EXPR_VARS. 2025-04-15 Jason Merrill PR c++/111075 * constexpr.cc (cxx_eval_call_expression): Allow trivial call from a thunk. 2025-04-15 Patrick Palka PR c++/119807 PR c++/112288 * pt.cc (tsubst_friend_function): Skip remapping an existing specialization if it doesn't match the shape of the new friend definition. 2025-04-15 Jason Merrill PR c++/113835 * constexpr.cc (cxx_eval_outermost_constant_expr): Bail out early for std::vector(N). 2025-04-14 Patrick Palka PR c++/99214 * constraint.cc (satisfy_declaration_constraints): Pass the original ARGS to push_tinst_level. 2025-04-13 Patrick Palka PR c++/115639 * constexpr.cc (struct constexpr_call): Add NSDMIs to each field. Replace 'result' data member with 3-element 'results' array and a 'result' accessor function. Remove 'manifestly_const_eval' data member. (constexpr_call_hasher::equal): Adjust after constexpr_call layout change. (cxx_eval_call_expression): Likewise. Define some local variables closer to their first use. Use unknown_type_node instead of NULL_TREE as the "in progress" result. After successully evaluating a call with mce_unknown, also cache the result in the corresponding mce_true and mce_false slots. 2025-04-13 Nathaniel Shead * module.cc (trees_in::is_matching_decl): Don't check for mismatches when importing a DECL_MAYBE_DELETED function over one that's already finished. 2025-04-13 Nathaniel Shead * module.cc (trees_in::is_matching_decl): Add custom errors for different kinds of mismatches. 2025-04-12 Patrick Palka PR c++/116416 * constexpr.cc (maybe_constant_init_1): Generalize type of of manifestly_const_eval parameter from bool to mce_value. (maybe_constant_init): Define 3-parameter version taking a manifestly_const_eval instead of bool parameter. (cxx_constant_init): Adjust. * cp-gimplify.cc (cp_fold_r) : Pass mce_false to maybe_constant_init during prvalue folding if ff_mce_false is set. * cp-tree.h (maybe_constant_init): Declare new overload. 2025-04-11 Jason Merrill PR c++/114970 * cp-gimplify.cc (cp_build_init_expr_for_ctor): Suppress warnings on return_this COMPOUND_EXPR. 2025-04-10 Jason Merrill PR c++/119345 * pt.cc (add_extra_args): Also register a specialization of the captured variable. 2025-04-10 Patrick Palka PR c++/119687 * pt.cc (alias_ctad_tweaks): Use lkp_range / lkp_iterator instead of ovl_iterator. 2025-04-10 Jakub Jelinek PR translation/119684 * error.cc (cp_print_error_function): Use G_ instead of _ for pp_printf arguments. (function_category): Use G_ instead of _. (print_instantiation_full_context): Use G_ instead of _ in pp_verbatim arguments. (print_location): Likewise. (print_instantiation_partial_context): Likewise. (maybe_print_constexpr_context): Likewise. (print_constrained_decl_info): Use G_() around pp_verbatim argument. (print_concept_check_info): Likewise. (print_constraint_context_head): Likewise. (print_requires_expression_info): Likewise. Merge separate pp_verbatim "in requirements " and "with " into one with conditional messages. 2025-04-10 Jason Merrill PR c++/119175 * mangle.cc (decl_mangling_context): Look through lambda type. 2025-04-09 Patrick Palka PR c++/119574 * pt.cc (add_extra_args): Remove checking assert. 2025-04-09 Jason Merrill PR c++/118698 * constraint.cc (struct norm_info): Add tf_partial. * pt.cc (any_template_parm_r): Handle LAMBDA_EXPR_EXTRA_ARGS. 2025-04-08 Jason Merrill PR c++/117530 * pt.cc (instantiate_template): Check retrieve_specialization after tsubst. 2025-04-07 Jason Merrill PR c++/119652 * constexpr.cc (cxx_eval_outermost_constant_expr): Also don't add a TARGET_EXPR around AGGR_INIT_EXPR. 2025-04-06 Patrick Palka PR c++/118626 * pt.cc (maybe_dependent_member_ref): Restrict TYPENAME_TYPE shortcut to non-typedef TYPE_DECL. 2025-04-06 Patrick Palka PR c++/118626 * pt.cc (maybe_dependent_member_ref): Substitute and return the stripped type if we decided to not rewrite it directly. 2025-04-05 Patrick Palka PR c++/118249 * constexpr.cc (potential_constant_expression_1) : Remove obsolete *this handling. 2025-04-05 Jason Merrill PR c++/118629 * name-lookup.cc (pushdecl_outermost_localscope): Look for an sk_block. 2025-04-04 Nathaniel Shead PR c++/119564 * decl.cc (cp_tree_node_structure): Add TU_LOCAL_ENTITY; fix formatting. 2025-04-04 Nathaniel Shead PR c++/119608 * module.cc (trees_out::decl_node): Maybe require by-value walking not just when streaming. 2025-04-04 Nathaniel Shead PR c++/119462 * module.cc (trees_in::is_matching_decl): Propagate exception spec and constexpr to DECL_MAYBE_DELETED; clear if appropriate. 2025-04-04 Jason Merrill PR c++/99546 PR c++/113925 PR c++/106976 PR c++/109961 PR c++/117336 * lambda.cc (build_lambda_object): Handle fake requires-expr processing_template_decl. * parser.cc (cp_parser_lambda_expression): Likewise. 2025-04-04 Patrick Palka PR c++/117849 * semantics.cc (finish_id_expression_1): Allow use of constraint variable outside an unevaluated context. 2025-04-03 Patrick Palka PR c++/119387 * constexpr.cc (p2280_active_p): New. (cxx_eval_constant_expression) : Use it to restrict P2280 relaxations. : Likewise. 2025-04-03 Jason Merrill * module.cc (module_state::read_cluster) (post_load_processing): Clear DECL_EXTERNAL if DECL_COMDAT. 2025-04-03 Jason Merrill * call.cc (add_candidates): Re-lookup ne_fns if we move into another namespace. 2025-04-03 Andrew Pinski Jakub Jelinek PR c++/119563 * call.cc (build_list_conv): Fix a typo in loop gathering summary information from subsubconvs. 2025-04-02 Sandra Loosemore PR middle-end/118965 * parser.cc (c_parser_omp_clause_init_modifiers): Adjust error message. (cp_parser_omp_clause_init): Remove code for recognizing clauses without modifiers. Diagnose missing target/targetsync modifier. (cp_finish_omp_declare_variant): Diagnose missing target/targetsync modifier. 2025-04-01 Nathaniel Shead PR c++/119551 * module.cc (trees_out::write_var_def): Only ignore non-inline variable initializers. 2025-04-01 Nathaniel Shead * parser.cc (cp_parser_diagnose_invalid_type_name): Replace fmodules-ts with fmodules. (cp_parser_template_declaration): Likewise. 2025-04-01 Marek Polacek PR c++/119383 * call.cc (build_over_call): Use force_lvalue to ensure op= returns an lvalue. * cp-tree.h (force_lvalue): Declare. * cvt.cc (force_lvalue): New. * typeck.cc (cp_build_indirect_ref_1): Revert r15-8011. 2025-03-31 Jason Merrill PR c++/119401 * pt.cc (regenerate_decl_from_template): Don't regenerate if the signature involves a lambda. 2025-03-31 Jakub Jelinek PR c++/119518 * decl.cc (finish_function): Don't set TREE_NOTHROW for functions with "noipa" attribute even when we can prove they can't throw. 2025-03-29 Jason Merrill * decl.cc (duplicate_decls): Don't clobber DECL_MODULE_IMPORT_P with an injected friend. * name-lookup.cc (check_module_override): Look at all reachable decls in decl's originating module. 2025-03-29 Jason Merrill PR c++/64500 PR c++/116285 * name-lookup.cc (push_to_top_level): Don't try to store_bindings for namespace levels. 2025-03-29 Jakub Jelinek * name-lookup.cc (maybe_lazily_declare): Fix comment typo, anout -> about. 2025-03-29 Nathaniel Shead PR c++/118961 * class.cc (copy_fndecl_with_name): Mark clones as non-abstract. * cp-tree.h (setup_explicit_instantiation_definition_linkage): Declare new function. * module.cc (trees_in::read_var_def): Use it. (module_state::read_cluster): Likewise. * pt.cc (setup_explicit_instantiation_definition_linkage): New function. (mark_decl_instantiated): Use it. 2025-03-27 Tobias Burnus * cp-tree.h (cp_finish_omp_init_prefer_type): Add. * decl.cc (omp_declare_variant_finalize_one): Call it. * pt.cc (tsubst_attribute): Minor rebustification for OpenMP append_args handling. * semantics.cc (cp_omp_init_prefer_type_update): Rename to ... (cp_finish_omp_init_prefer_type): ... this; remove static attribute and return modified tree. Move clause handling to ... (finish_omp_clauses): ... the caller. 2025-03-27 Nathaniel Shead PR c++/118920 * cp-tree.h (equal_abi_tags): Declare. * mangle.cc (equal_abi_tags): Make external, fix comparison. (tree_string_cmp): Make internal. * module.cc (trees_in::check_abi_tags): New function. (trees_in::decl_value): Use it. (trees_in::is_matching_decl): Likewise. 2025-03-27 Nathaniel Shead Jason Merrill PR c++/118920 * name-lookup.cc (lookup_imported_hidden_friend): Check for module entity rather than just module import. * module.cc (get_originating_module): Rename for_mangle parm to global_m1. * error.cc (dump_module_suffix): Don't decorate global module decls. 2025-03-26 Thomas Schwinge Jason Merrill * rtti.cc (throw_bad_typeid): Adjust implicit '__cxa_bad_typeid' prototype to reality. Adjust all users. 2025-03-25 Simon Martin PR c++/114525 * typeck2.cc (build_m_component_ref): Call cp_build_addr_expr instead of build_address. 2025-03-25 yxj-github-437 <2457369732@qq.com> * parser.cc (cp_parser_lambda_expression): Use cp_evaluated. 2025-03-24 Jason Merrill * semantics.cc (finish_type_pack_element): Pass mce_true to maybe_constant_value. 2025-03-23 Nathaniel Shead PR c++/119154 * decl2.cc (vague_linkage_p): Revert gnu_linkage handling. * module.cc (importer_interface): New enumeration. (get_importer_interface): New function. (trees_out::core_bools): Use it to determine interface. (trees_in::is_matching_decl): Propagate gnu_inline handling onto existing forward declarations. (trees_in::read_var_def): Also note explicit instantiation definitions of variable templates to be emitted. 2025-03-22 Patrick Palka PR c++/119379 * pt.cc (tsubst_decl) : Preserve structural-ness of a partially instantiated typedef. 2025-03-21 Paul-Antoine Arras Tobias Burnus * parser.cc (cp_parser_omp_clause_init): Make addressable. 2025-03-21 Jason Merrill * init.cc (throw_bad_array_new_length): Returns void. 2025-03-21 Thomas Schwinge * rtti.cc (throw_bad_cast): Adjust implicit '__cxa_bad_cast' prototype to reality. 2025-03-20 Richard Biener * module.cc (trees_out::core_bools): Convert scoped enum explicitly. 2025-03-20 Jakub Jelinek PR c++/119370 * decl2.cc (set_context_for_auto_vars_r): New function. (emit_partial_init_fini_fn): Call walk_tree with that function on &init before walk_tree with copy_tree_body_r. 2025-03-19 Jason Merrill PR c++/119316 * mangle.cc (write_expression) [NEW_EXPR]: Avoid using compute_array_index_type. (write_array_type): Add checking_assert. 2025-03-19 Jakub Jelinek PR target/118068 * cp-gimplify.cc (cp_fold_immediate): Use cp_walk_tree rather than cp_walk_tree_without_duplicates. (cp_fold_immediate_r): For IF_STMT_CONSTEVAL_P IF_STMT don't walk into THEN_CLAUSE subtree, only ELSE_CLAUSE. For non-call related stmts call data->pset.add and if it returns true, don't walk subtrees. (cp_fold_r): Don't call cp_fold_immediate_r here. (cp_fold_function): For C++20 or later call cp_walk_tree with cp_fold_immediate_r callback first before calling cp_walk_tree with cp_fold_r callback and call data.pset.empty () in between. (cp_fully_fold_init): Likewise. (cp_genericize_r) : Suppress -Wreturn-type warning if RETURN_EXPR has erroneous argument. 2025-03-18 Marek Polacek PR c++/119344 * typeck.cc (cp_build_binary_op): Use cp_save_expr instead of save_expr. 2025-03-18 Jason Merrill PR c++/119194 * decl2.cc (min_vis_expr_r) [ADDR_EXPR]: New case. 2025-03-18 Marek Polacek PR c++/118104 * pt.cc (use_pack_expansion_extra_args_p): Remove an assert. 2025-03-18 Jakub Jelinek PR c/116545 * parser.cc (cp_parser_statement): Call cp_parser_attributes_opt rather than cp_parser_std_attribute_spec_seq. (cp_parser_jump_statement): Diagnose gnu::musttail attributes with no arguments. 2025-03-18 Patrick Palka PR c++/119233 * pt.cc (mark_template_arguments_used): Also handle member function pointers. 2025-03-14 Jakub Jelinek PR target/119120 * cp-gimplify.cc (cp_genericize_r): Set DECL_NOT_GIMPLE_REG_P on {REAL,IMAG}PART_EXPR is_gimple_reg operand at -O0 if it is lhs of a MODIFY_EXPR. 2025-03-12 Jakub Jelinek PR c++/119150 * constexpr.cc (cxx_eval_call_expression): For DECL_IMMEDIATE_FUNCTION_P (fun) set manifestly_const_eval in new_ctx and new_call to mce_true and set ctx to &new_ctx. 2025-03-12 Nathaniel Shead PR c++/118799 * module.cc (depset::hash::is_tu_local_entity): Only types, functions, variables, and template (specialisations) can be TU-local. Explicit type aliases are TU-local iff the type they refer to are. (module_state::write_namespaces): Allow unnamed namespaces in named modules. (check_module_decl_linkage): Error for all exported declarations in an unnamed namespace. 2025-03-12 Nathaniel Shead PR c++/119154 * decl2.cc (vague_linkage_p): Don't treat gnu_inline functions as having vague linkage. * module.cc (trees_out::core_bools): Clear DECL_INTERFACE_KNOWN for vague-linkage entities. (read_var_def): Maybe set comdat linkage for imported var definitions. (module_state::read_cluster): Use expand_or_defer_fn instead of ad-hoc linkage management. (post_load_processing): Likewise. * semantics.cc (expand_or_defer_fn_1): Don't forget that we had a definition at all. 2025-03-12 Marek Polacek PR c++/117512 * typeck.cc (cp_build_indirect_ref_1): Only do the *&e -> e folding if the result would be an lvalue. 2025-03-12 Simon Martin PR c++/110584 * cp-tree.h (strip_normal_capture_proxy): Declare. * lambda.cc (strip_normal_capture_proxy): New function to look through normal capture proxies. (build_capture_proxy): Use it. * semantics.cc (process_outer_var_ref): Likewise. 2025-03-12 Marek Polacek PR c++/119134 * pt.cc (check_for_bare_parameter_packs): Check DECL_CONTEXT. 2025-03-12 Jakub Jelinek PR c++/119076 * module.cc (trees_out::start): Handle RAW_DATA_CST. (trees_in::start): Likewise. (trees_out::core_vals): Likewise. (trees_in::core_vals): Likewise. 2025-03-11 Jason Merrill PR c++/119162 * constexpr.cc (find_deleted_heap_var): New. (cxx_eval_call_expression): Don't cache a reference to heap_deleted. 2025-03-10 Nathaniel Shead * module.cc (trees_out::has_tu_local_dep): Also look at the TI_TEMPLATE if we don't find a dep for a decl. (depset::hash::is_tu_local_entity): Handle unnamed template types, treat lambdas specially. (is_exposure_of_member_type): New function. (depset::hash::add_dependency): Use it. (depset::hash::finalize_dependencies): Likewise. 2025-03-08 Sandra Loosemore * parser.cc (cp_parser_asm_definition): Make comment more explicit. (cp_parser_asm_operand_list): Likewise. Also correct the comment block at the top of the function to reflect reality. 2025-03-08 Jason Merrill Nathaniel Shead PR c++/114630 PR c++/114795 * pt.cc (reopen_tinst_level): Set or clear MK_PURVIEW. (mark_decl_instantiated): Call set_instantiating_module. (instantiate_pending_templates): Save and restore module_kind so it isn't affected by reopen_tinst_level. 2025-03-07 Marek Polacek PR c++/118775 * constexpr.cc (cxx_eval_call_expression): Check tree_fits_uhwi_p. 2025-03-07 Nathaniel Shead * constexpr.cc (potential_constant_expression_1): Handle TU_LOCAL_ENTITY. * pt.cc (expr_contains_tu_local_entity): Remove. (function_contains_tu_local_entity): Remove. (dependent_operand_p): Remove special handling for TU_LOCAL_ENTITY. (tsubst_expr): Handle TU_LOCAL_ENTITY when tsubsting OVERLOADs; remove now-unnecessary extra handling. (type_dependent_expression_p): Handle TU_LOCAL_ENTITY. 2025-03-06 Simon Martin * cp-tree.h (processing_contract_condition): Fix comment typo, paramter -> parameter. * parser.cc (cp_parser_requires_expression): Fix comment typo, delared -> declared. 2025-03-06 Jakub Jelinek PR c++/98533 PR c++/119123 * parser.cc (cp_parser_class_specifier): Update TYPE_FIELDS of variant types in case cp_parser_late_parsing_default_args etc. change TYPE_FIELDS on the main variant. Add switch_to_class lambda and use it to simplify repeated class switching code. 2025-03-06 Jakub Jelinek PR c++/119138 * pt.cc (apply_late_template_attributes): Set p to NULL if ATTR_FLAG_TYPE_IN_PLACE is not set in attr_flags. (tsubst) : Reuse original type even if TYPE_ATTRIBUTES is non-NULL, but all the attributes are non-dependent. 2025-03-06 Simon Martin PR c++/117504 * call.cc (perform_implicit_conversion_flags): Don't call mark_{l,r}value_use. 2025-03-05 Jason Merrill Jakub Jelinek PR c++/117364 PR c++/118874 * coroutines.cc (cp_coroutine_transform::build_ramp_function): For !aggregate_value_p return force return value into a local temp. 2025-03-05 Da Xie PR c++/100589 * decl.cc (grokdeclarator): Issue an error for a declarator with constrained auto type specifier and trailing return types. Include function names if available. 2025-03-05 Simon Martin PR c++/116740 * name-lookup.cc (set_identifier_type_value_with_scope): Don't fail assert with ill-formed input. 2025-03-05 Jakub Jelinek PR c++/119102 * module.cc (enum streamed_extensions): Add SE_OPENMP_SIMD and SE_OPENACC, change value of SE_OPENMP and SE_BITS. (CASE_OMP_SIMD_CODE, CASE_OMP_CODE, CASE_OACC_CODE): Define. (trees_out::start): Don't set SE_OPENMP extension for OMP_CLAUSE. Set SE_OPENMP_SIMD extension for CASE_OMP_SIMD_CODE, SE_OPENMP for CASE_OMP_CODE and SE_OPENACC for CASE_OACC_CODE. (trees_in::start): Don't fail for OMP_CLAUSE with missing SE_OPENMP extension. Do fail for CASE_OMP_SIMD_CODE and missing SE_OPENMP_SIMD extension, or CASE_OMP_CODE and missing SE_OPENMP extension, or CASE_OACC_CODE and missing SE_OPENACC extension. (module_state::write_readme): Write all of SE_OPENMP_SIMD, SE_OPENMP and SE_OPENACC extensions. (module_state::read_config): Diagnose missing -fopenmp, -fopenmp-simd and/or -fopenacc depending on extensions used. 2025-03-05 Jakub Jelinek * typeck.cc (check_return_expr): Fix comment typo, rom -> from. 2025-03-05 Jakub Jelinek PR c++/118787 * pt.cc (tsubst) : Use return t; only if it doesn't have any TYPE_ATTRIBUTES. Call apply_late_template_attributes. : Likewise. Formatting fix. 2025-03-04 Jason Merrill PR c++/119073 * call.cc (extend_temps_r): Preserve types of COND_EXPR arms. 2025-03-04 Marek Polacek PR c++/109431 * cp-tree.h (range_expr_nelts): Declare. * init.cc (build_vec_init): If the CONSTRUCTOR's index is a RANGE_EXPR, use range_expr_nelts to count how many elements were initialized. 2025-02-28 Marek Polacek PR c++/114913 PR c++/110822 * constexpr.cc (replace_decl_r): If we've replaced something inside of an ADDR_EXPR, call cxx_mark_addressable and recompute_tree_invariant_for_addr_expr on the resulting ADDR_EXPR. 2025-02-28 Marek Polacek PR c++/118986 * constexpr.cc (cxx_eval_call_expression): Check that the types match before calling replace_decl, if not, set *non_constant_p. (maybe_constant_init_1): Don't strip INIT_EXPR if it would change the type of the expression. 2025-02-28 Patrick Palka PR c++/119038 * lambda.cc (maybe_generic_this_capture): Consider xobj member functions as well, not just iobj. Update function comment. 2025-02-28 Jakub Jelinek PR c++/119045 * constexpr.cc (cxx_eval_store_expression) : Assert that refs->is_empty () rather than probe == target. (cxx_eval_store_expression) : Likewise. 2025-02-27 Marek Polacek PR c++/118928 * constexpr.cc (cxx_eval_constant_expression) : Remove an assert. 2025-02-27 Marek Polacek PR c++/118516 * parser.cc (cp_parser_template_argument): Don't call require_potential_constant_expression. 2025-02-25 Jakub Jelinek PR c++/118876 * cp-tree.h (register_dtor_fn): Add a bool argument defaulted to false. * decl.cc (start_cleanup_fn): Add OMP_TARGET argument, use "__omp_tcf" prefix rather than "__tcf" in that case. Add "omp declare target" and "omp declare target nohost" attributes to the fndecl. (register_dtor_fn): Add OMP_TARGET argument, pass it down to start_cleanup_fn. * decl2.cc (one_static_initialization_or_destruction): Add OMP_TARGET argument, pass it down to register_dtor_fn. (emit_partial_init_fini_fn): Pass omp_target to one_static_initialization_or_destruction. (handle_tls_init): Pass false to one_static_initialization_or_destruction. 2025-02-25 Jakub Jelinek PR c++/118923 * tree.cc (get_internal_target_expr): Use force_target_expr instead of build_target_expr_with_type. * typeck.cc (get_member_function_from_ptrfunc): Use get_internal_target_expr instead of force_target_expr. * decl.cc (cp_finish_decl): Likewise. * method.cc (build_comparison_op): Likewise. 2025-02-22 Sandra Loosemore * parser.cc (cp_finish_omp_declare_variant): Initialize append_args_last. 2025-02-17 Jason Merrill PR c++/118856 PR c++/118763 * cp-tree.h (TARGET_EXPR_INTERNAL_P): New. * call.cc (extend_temps_r): Check it instead of CLEANUP_EH_ONLY. * tree.cc (get_internal_target_expr): Set it instead. * typeck2.cc (maybe_push_temp_cleanup): Don't set CLEANUP_EH_ONLY. 2025-02-15 Nathaniel Shead PR c++/118846 * cp-tree.h (WILDCARD_TYPE_P): Include UNBOUND_CLASS_TEMPLATE. * decl2.cc (min_vis_expr_r): Don't assume a TEMPLATE_DECL will be a function or variable. 2025-02-15 Jason Merrill PR c++/118053 * constexpr.cc (cxx_eval_constant_expression): Generalize DECL_VALUE_EXPR invisiref handling. 2025-02-14 Marek Polacek * pt.cc (tsubst_expr) : Assign the result of force_paren_expr. 2025-02-14 Jason Merrill PR c++/118856 * call.cc (set_up_extended_ref_temp): Retain a TARGET_EXPR for cleanups if something later in initialization throws. (extend_temps_r): Don't extend eliding or EH-only TARGET_EXPRs. * cp-tree.h (get_internal_target_expr): Declare. * tree.cc (get_internal_target_expr): New. * decl.cc (cp_finish_decomp, expand_static_init): Use it. * except.cc (build_throw): Likewise. * init.cc (build_new_1, build_vec_init, build_delete): Likewise. (build_vec_delete): Likewise. * typeck2.cc (maybe_push_temp_cleanup): Likewise. 2025-02-14 Jason Merrill * init.cc (perform_member_init): Remove unicode from comment. 2025-02-14 Marek Polacek PR c++/116379 * pt.cc (tsubst_expr) : Use force_paren_expr to set REF_PARENTHESIZED_P. 2025-02-14 Nathaniel Shead * lambda.cc (record_lambda_scope): Clear mangling scope for otherwise unattached lambdas in class member templates. 2025-02-14 Nathaniel Shead PR c++/107741 * cp-tree.h (is_static_data_member_initialized_in_class): Declare new predicate. * decl2.cc (start_initialized_static_member): Push the TEMPLATE_DECL when appropriate. (is_static_data_member_initialized_in_class): New predicate. (finish_initialized_static_member): Use it. * lambda.cc (record_lambda_scope): Likewise. * parser.cc (cp_parser_init_declarator): Start the member decl early for static members so that lambda scope is set. (cp_parser_template_declaration_after_parameters): Don't register in-class initialized static members here. 2025-02-13 Jason Merrill * tree.cc (handle_init_priority_attribute): Use OPT_prio_ctor_dtor. 2025-02-13 Jason Merrill * decl.cc (omp_declare_variant_finalize_one): Use forward_parm. 2025-02-13 Jason Merrill PR c++/118856 * call.cc (struct extend_temps_data): Add var_map. (extend_all_temps): Adjust. (set_up_extended_ref_temp): Make walk_data void*. (extend_temps_r): Remap variables. Handle pset here. Extend all TARGET_EXPRs. 2025-02-13 Nathaniel Shead PR c++/118849 * decl2.cc (min_vis_expr_r): Constrain visibility according to the type of decl_constant_var_p decls. 2025-02-13 Jakub Jelinek PR c++/118822 PR c++/118833 * semantics.cc (adjust_loop_decl_cond): Allow multiple trailing CLEANUP_STMT levels in *BODY_P. Set *CLEANUP_P to the number of levels rather than one particular cleanup, keep the cleanups in *PREP_P. Set *BODY_P to the last stmt in the cur_stmt_list or NULL if *CLEANUP_P and the innermost cur_stmt_list is empty. (finish_loop_cond_prep): New function. (finish_while_stmt, finish_for_stmt): Use it. Don't call set_one_cleanup_loc. * constexpr.cc (cxx_eval_loop_expr): Adjust handling of {FOR,WHILE}_COND_{PREP,CLEANUP}. 2025-02-11 Jason Merrill PR c++/118574 PR c++/107637 * call.cc (struct extend_temps_data): New. (extend_temps_r, extend_all_temps): New. (set_up_extended_ref_temp): Handle tree walk case. (extend_ref_init_temps): Cal extend_all_temps. * decl.cc (initialize_local_var): Revert ext-temps change. * parser.cc (cp_convert_range_for): Likewise. (cp_parser_omp_loop_nest): Likewise. * pt.cc (tsubst_stmt): Likewise. * semantics.cc (finish_for_stmt): Likewise. 2025-02-11 Sandra Loosemore * parser.cc (cp_finish_omp_declare_variant): Update call to omp_check_context_selector. (cp_parser_omp_metadirective): Likewise. 2025-02-11 Simon Martin PR c++/118306 PR c++/118304 * decl.cc (maybe_strip_indirect_ref): New. (check_special_function_return_type): Take declarator as input. Call maybe_strip_indirect_ref and error out if it returns true. (grokdeclarator): Update call to check_special_function_return_type. 2025-02-11 Nathaniel Shead PR c++/118807 * pt.cc (reregister_specialization): Remove spec from DECL_TEMPLATE_INSTANTIATIONS. 2025-02-07 Jakub Jelinek PR c++/115586 * parser.cc (cp_parser_range_for): For name independent decls in structured bindings, only push the name/binding once per structured binding. 2025-02-07 Jakub Jelinek Jason Merrill PR c++/86769 * semantics.cc (set_one_cleanup_loc): New function. (set_cleanup_locs): Use it. (simplify_loop_decl_cond): Remove. (adjust_loop_decl_cond): New function. (begin_while_stmt): Add 2 further NULL_TREE operands to build_stmt. (finish_while_stmt_cond): Call adjust_loop_decl_cond instead of simplify_loop_decl_cond. (finish_while_stmt): Call do_poplevel also on WHILE_COND_PREP if non-NULL and also use pop_stmt_list rather than do_poplevel for WHILE_BODY in that case. Call set_one_cleanup_loc. (begin_for_stmt): Add 2 further NULL_TREE operands to build_stmt. (finish_for_cond): Call adjust_loop_decl_cond instead of simplify_loop_decl_cond. (finish_for_stmt): Call do_poplevel also on FOR_COND_PREP if non-NULL and also use pop_stmt_list rather than do_poplevel for FOR_BODY in that case. Call set_one_cleanup_loc. * constexpr.cc (cxx_eval_loop_expr): Handle {WHILE,FOR}_COND_{PREP,CLEANUP}. (check_for_return_continue): Handle {WHILE,FOR}_COND_PREP. (potential_constant_expression_1): RECUR on {WHILE,FOR}_COND_{PREP,CLEANUP}. 2025-02-07 Marek Polacek PR c++/117106 PR c++/118190 * pt.cc (maybe_instantiate_noexcept): Give an error if the noexcept hasn't been parsed yet. 2025-02-07 Simon Martin PR c++/118282 * call.cc (add_builtin_candidate): Also check for null_ptr_cst_p operands. 2025-02-07 Jakub Jelinek PR c++/118763 * init.cc (build_new_1): Don't set CLEANUP_EH_ONLY. 2025-02-07 Jakub Jelinek PR c++/118773 * decl.cc (grokdeclarator): Use cplus_decl_attributes rather than decl_attributes for std_attributes on pointer and array types. 2025-02-07 Jakub Jelinek PR c++/118661 * constexpr.cc (potential_constant_expression_1): Don't diagnose lvalue-to-rvalue conversion of volatile lvalue if it has NULLPTR_TYPE. * decl2.cc (decl_maybe_constant_var_p): Return true for constexpr decls with NULLPTR_TYPE even if they are volatile. 2025-02-05 Simon Martin PR c++/118319 * decl.cc (grokfndecl): Inspect all friend function parameters. If it's not valid for them to have a default value and we're processing a template, set the default value to error_mark_node and give a hard error. 2025-02-04 Jakub Jelinek PR c++/118671 * call.cc (build_list_conv): For RAW_DATA_CST, call implicit_conversion with INTEGER_CST representing first byte instead of the whole RAW_DATA_CST. If it is an optimizable trivial conversion, just save that to subconvs, otherwise allocate an artificial ck_list for all the RAW_DATA_CST bytes and create subsubconv for each of them. (convert_like_internal): For ck_list with RAW_DATA_CST, instead of doing all the checks for optimizable conversion just check kind and assert everything else, otherwise use subsubconversions instead of the subconversion for each element. 2025-02-04 Marek Polacek PR c++/117778 * parser.cc (cp_parser_late_return_type_opt): Maybe override auto_is_implicit_function_template_parm_p. (cp_parser_parameter_declaration): Move a make_temp_override below. 2025-02-04 Marek Polacek PR c++/118718 * parser.cc (warn_about_ambiguous_parse): Don't warn when a trailing return type is present. 2025-02-04 Simon Martin Jason Merrill PR c++/117114 PR c++/109918 * class.cc (warn_hidden): Keep track of overloaded and of hidden base methods. * error.cc (location_of): Skip over conv_op_marker. 2025-02-04 Simon Martin PR c++/114619 * init.cc (build_vec_init): Properly determine whether digest_init has been called. 2025-02-04 Jakub Jelinek PR c++/118719 * lambda.cc (add_capture): Only pedwarn about capturing structured binding if !explicit_init_p. 2025-02-04 Nathaniel Shead PR c++/108205 * contracts.cc (get_pseudo_contract_violation_type): Give names to generated FIELD_DECLs. (declare_handle_contract_violation): Mark contract_violation type as external linkage. (build_contract_handler_call): Ensure any builtin declarations created here aren't treated as attached to the current module. 2025-02-04 Nathaniel Shead PR c++/98893 * decl.cc (start_cleanup_fn): Make name from the mangled name of the passed-in decl. (register_dtor_fn): Pass decl to start_cleanup_fn. 2025-02-03 A J Ryan Solutions Ltd PR c++/118265 * pt.cc (find_parameter_packs_r) : Walk into the type of a parameter pack. 2025-02-03 Iain Sandoe Jason Merrill PR c++/116506 PR c++/116880 * coroutines.cc (build_co_await): Ensure that xvalues are materialised. Handle references/pointer values in awaiter access expressions. (is_stable_lvalue): New. * decl.cc (cxx_maybe_build_cleanup): Handle null arg. 2025-02-03 Jason Merrill PR c++/116914 PR c++/117231 PR c++/118470 PR c++/118491 * semantics.cc (finish_for_stmt): Don't wrap the result of pop_stmt_list in EXPR_STMT. 2025-02-03 Richard Biener PR c++/79786 * rtti.cc (emit_tinfo_decl): Fix DATA_ABI_ALIGNMENT invocation. 2025-01-31 Jakub Jelinek PR c++/117516 * class.cc (field_nonempty_p): Formatting fixes. Use integer_zerop instead of tree_int_cst_equal with size_zero_node. (struct flexmems_t): Change type of first member from tree to bool. (find_flexarrays): Add nested_p argument. Change pun argument type from tree to bool, adjust uses. Formatting fixes. If BASE_P or NESTED_P and T is RECORD_TYPE, start looking only at the last non-empty or array FIELD_DECL. Adjust recursive call, set first if it was a nested call and found an array. (diagnose_invalid_flexarray, diagnose_flexarrays, check_flexarrays): Formatting fixes. 2025-01-31 Marek Polacek PR c++/117501 * cp-gimplify.cc (cp_build_init_expr_for_ctor): New. (cp_fold_immediate_r): Call it. (cp_fold): Break out code into cp_build_init_expr_for_ctor. 2025-01-30 Patrick Palka * cp-tree.h (LAMBDA_EXPR_CAPTURES_THIS_P): Remove. 2025-01-30 Iain Sandoe PR c++/118673 * tree.cc (lvalue_kind): Mark CONST_DECLs as mergable when they are also TREE_STATIC. 2025-01-30 Tobias Burnus * parser.cc (cp_finish_omp_declare_variant): Modify how append_args is saved internally. * pt.cc (tsubst_attribute): Likewise. (tsubst_omp_clauses): Remove C_ORT_OMP_DECLARE_SIMD from interop handling as no longer called for it. * decl.cc (omp_declare_variant_finalize_one): Update append_args changes; fixes for ADL input. 2025-01-29 Jakub Jelinek PR c++/118655 * semantics.cc (trait_expr_value) : Return false for zero-sized arrays. 2025-01-28 Jason Merrill PR c++/118285 * constexpr.cc (cxx_eval_vec_init_1): Build INIT_EXPR for initializing a class. 2025-01-28 Jason Merrill PR c++/118673 * call.cc (maybe_init_list_as_array): Check for lvalue initializers. * cp-tree.h (enum cp_lvalue_kind_flags): Add clk_mergeable. * tree.cc (lvalue_kind): Return it. (non_mergeable_glvalue_p): New. (test_lvalue_kind): Adjust. 2025-01-28 Patrick Palka PR c++/117855 * cp-tree.h (DECL_FRIEND_CONTEXT): Exclude deduction guides. 2025-01-27 Jason Merrill PR c++/118632 * pt.cc (unify): Only strip conversion if deducible_expression. 2025-01-27 Simon Martin PR c++/114292 * pt.cc (for_each_template_parm_r) : Remove case now handled by cp_walk_subtrees. * tree.cc (cp_walk_subtrees): Walk the type of DECL_EXPR declarations, as well as the TYPE_{MIN,MAX}_VALUE of INTEGER_TYPEs. 2025-01-27 John David Anglin * module.cc: Test HAVE_MUNMAP and HAVE_MSYNC instead of _POSIX_MAPPED_FILES > 0. 2025-01-27 Jakub Jelinek PR c++/115769 * module.cc (module_state::write_inits): Verify STATIC_INIT_DECOMP_{,NON}BASE_P flags and stream changes in those out. (module_state::read_inits): Stream those flags in. 2025-01-27 Jakub Jelinek PR c++/115769 * cp-tree.h (STATIC_INIT_DECOMP_BASE_P): Define. (STATIC_INIT_DECOMP_NONBASE_P): Define. * decl.cc (cp_finish_decl): Mark nodes in {static,tls}_aggregates emitted for namespace scope structured bindings with STATIC_INIT_DECOMP_{,NON}BASE_P flags when needed. * decl2.cc (decomp_handle_one_var, decomp_finalize_var_list): New functions. (emit_partial_init_fini_fn): Use them. (prune_vars_needing_no_initialization): Assert STATIC_INIT_DECOMP_*BASE_P is not set on DECL_EXTERNAL vars to be pruned out. (partition_vars_for_init_fini): Use same priority for consecutive STATIC_INIT_DECOMP_*BASE_P vars and propagate those flags to new TREE_LISTs when possible. Formatting fix. (handle_tls_init): Use decomp_handle_one_var and decomp_finalize_var_list functions. 2025-01-25 Simon Martin PR c++/118239 * constexpr.cc (cx_check_missing_mem_inits): Don't skip fields with DECL_FIELD_IS_BASE. 2025-01-25 Jakub Jelinek PR c++/117827 * init.cc (build_new_1): Pass address of a make_tree_vector () initialized gc tree vector to build_vec_init and append build_disable_temp_cleanup to init_expr from it. 2025-01-25 Nathaniel Shead PR c++/116568 * module.cc (trees_out::get_merge_kind): Treat all lambdas without a mangling scope as un-mergeable. 2025-01-25 Nathaniel Shead PR c++/116568 * cp-tree.h (finish_concept_definition): Adjust parameters. (start_concept_definition): Declare. * module.cc (depset::hash::is_tu_local_entity): Use LAMBDA_EXPR_EXTRA_SCOPE to detect TU-local lambdas. * parser.cc (cp_parser_concept_definition): Start a lambda scope for concept definitions. * pt.cc (tsubst_lambda_expr): Namespace-scope lambdas may now have extra scope. (finish_concept_definition): Split into... (start_concept_definition): ...this new function. 2025-01-25 Nathaniel Shead PR c++/118245 * cp-tree.h (LAMBDA_EXPR_EXTRA_SCOPE): Adjust comment. * parser.cc (cp_parser_class_head): Start (and do not finish) lambda scope for all valid types. (cp_parser_class_specifier): Finish lambda scope after parsing members instead. * pt.cc (instantiate_class_template): Add lambda scoping. 2025-01-24 Marek Polacek PR c++/117153 * decl2.cc (build_anon_union_vars): Use FIELD for the second operand of a COMPONENT_REF. 2025-01-23 Marek Polacek PR c++/117602 * cp-tree.h (current_nonlambda_scope): Add a default argument. * lambda.cc (current_nonlambda_scope): New bool parameter. Use it. * parser.cc (cp_parser_lambda_introducer): Use current_nonlambda_scope to check if the lambda is non-local. 2025-01-23 Jakub Jelinek PR c++/118590 * typeck.cc (build_omp_array_section): If array_expr is type dependent or a TYPE_DECL, build OMP_ARRAY_SECTION with NULL type. 2025-01-23 Jakub Jelinek PR c++/118604 * parser.cc (cp_parser_omp_metadirective): Test !default_p first and use strcmp () != 0 rather than !strcmp () == 0. 2025-01-23 Nathaniel Shead * mangle.cc (write_expression): Update mangling for lambdas. 2025-01-23 Nathaniel Shead PR c++/107741 * cp-tree.h (start_initialized_static_member): Declare. (finish_initialized_static_member): Declare. * decl2.cc (start_initialized_static_member): New function. (finish_initialized_static_member): New function. * lambda.cc (record_lambda_scope): Support falling back to old ABI (maybe with warning). * parser.cc (cp_parser_member_declaration): Build decl early when parsing an initialized static data member. 2025-01-23 Nathaniel Shead PR c++/118582 * module.cc (trees_out::decl_value): Always stream imported_temploid_friends information. (trees_in::decl_value): Likewise. 2025-01-22 Jakub Jelinek PR c++/115769 * decl.cc: Partially implement CWG 2867 - Order of initialization for structured bindings. (cp_finish_decl): If need_decomp_init, for function scope structure binding bases, temporarily clear stmts_are_full_exprs_p before calling expand_static_init, after it call cp_finish_decomp and wrap code emitted by both into maybe_cleanup_point_expr_void and ensure cp_finish_decomp isn't called again. 2025-01-22 Marek Polacek PR c++/118396 * constexpr.cc (cxx_eval_outermost_constant_expr): Add an error call when !allow_non_constant. 2025-01-22 Simon Martin PR c++/118199 * typeck2.cc (split_nonconstant_init_1): Clear TARGET_EXPR_ELIDING_P if we need to use a copy constructor because of __no_unique_address__. 2025-01-22 Jakub Jelinek * parser.cc (cp_parser_objc_message_args): Use tree_cons with nreverse at the end for both sel_args and addl_args, instead of chainon with build_tree_list second argument. 2025-01-22 Jakub Jelinek * call.cc (add_list_candidates): Use append_ctor_to_tree_vector. 2025-01-22 Patrick Palka PR c++/116756 * lambda.cc (lambda_expr_this_capture): Call retrieve_local_specialization on the result of LAMBDA_EXPR_THIS_CAPTURE for a generic lambda. * parser.cc (cp_parser_lambda_expression): Don't clear LAMBDA_EXPR_THIS_CAPTURE. * pt.cc (tsubst_stmt) : Don't overwrite LAMBDA_EXPR_THIS_CAPTURE with the specialized capture. (tsubst_lambda_expr): Don't clear LAMBDA_EXPR_THIS_CAPTURE afterward. 2025-01-21 Andrew Pinski PR c++/118525 * cp-gimplify.cc (cp_fold): Check operands of unary, binary, cond/vec_cond and array_ref for error_mark before checking if the operands had changed. 2025-01-21 Jakub Jelinek PR objc++/118586 * parser.cc (cp_parser_objc_message_args): Handle CPP_EMBED. 2025-01-21 Marek Polacek PR c++/118396 PR c++/118523 * constexpr.cc (cxx_eval_outermost_constant_expr): For non-simple TARGET_EXPRs, return ctx.ctor rather than the result of cxx_eval_constant_expression. If TYPE and the type of R don't match, return the original expression. 2025-01-21 Simon Martin PR c++/118225 * typeck.cc (build_class_member_access_expr): Let errors that that have been reported go through. 2025-01-21 Jakub Jelinek * parser.cc (cp_lexer_new_main): Attempt to optimize large sequences of CPP_NUMBER with int type and values 0-255 separated by CPP_COMMA into CPP_EMBED with RAW_DATA_CST u.value. 2025-01-21 Jakub Jelinek * cp-objcp-common.cc (names_builtin_p): Return 1 for RID_VA_ARG. 2025-01-21 Jakub Jelinek PR c++/118532 * call.cc (add_list_candidates): Handle RAW_DATA_CST among init_list elts. * error.cc (dump_expr_init_vec): Handle RAW_DATA_CST among v elts. 2025-01-20 Nathaniel Shead * parser.cc (cp_parser_decomposition_declaration): Check linkage of structured bindings in modules. * tree.cc (decl_linkage): Structured bindings don't necessarily have no linkage. 2025-01-20 Nathaniel Shead PR c++/118101 * module.cc (trees_in::decl_value): Use structural equality when deduping partial specs with mismatching canonical types. 2025-01-18 Jakub Jelinek PR c++/118513 * decl2.cc (copy_linkage): If not TREE_PUBLIC, also set DECL_INTERFACE_KNOWN, assert it was set on decl and copy DECL_NOT_REALLY_EXTERN flags. 2025-01-18 Jakub Jelinek PR c++/118534 * constexpr.cc (find_array_ctor_elt): Don't return i early if i == end - 1 and the last elt's value is RAW_DATA_CST. 2025-01-17 Nathaniel Shead PR c++/118049 * module.cc (trees_in::is_matching_decl): Propagate FNDECL_USED_AUTO as well. 2025-01-17 Tobias Burnus PR fortran/118321 * decl.cc (omp_declare_variant_finalize_one): Shift adjust_args index by one for non-static class function's 'this' pointer. 2025-01-17 Nathaniel Shead PR c++/118147 * parser.cc (cp_parser_cache_defarg): Don't error when CPP_PRAGMA_EOL. 2025-01-17 Simon Martin PR c++/118255 * name-lookup.cc (pushdecl): Don't call check_template_shadow for hidden bindings. 2025-01-16 Patrick Palka PR c++/105440 * constexpr.cc (cxx_eval_call_expression): If any RESULT_DECLs get replaced in the call result, try further evaluating the result. 2025-01-16 Patrick Palka PR c++/107522 * constraint.cc (get_normalized_constraints_from_decl): Use the most general template for an explicit specialization of a member template. 2025-01-16 Patrick Palka PR c++/118454 * cp-tree.h (STF_KEEP_INJ_CLASS_NAME): Define. * pt.cc (iterative_hash_template_argument) : Clarify comment for when we'd see an alias template specialization here. (coerce_template_parms): Strip typedefs (except for injected-class-names) in the pack expansion early break cases that defer coercion. * tree.cc (strip_typedefs): Don't strip an injected-class-name if STF_KEEP_INJ_CLASS_NAME is set. 2025-01-16 Patrick Palka PR c++/116417 * cp-tree.h (finish_pseudo_destructor_expr): Add complain parameter. * parser.cc (cp_parser_postfix_dot_deref_expression): Pass complain=tf_warning_or_error to finish_pseudo_destructor_expr. * pt.cc (tsubst_expr): Pass complain to finish_pseudo_destructor_expr. * semantics.cc (finish_pseudo_destructor_expr): Check complain before emitting a diagnostic. 2025-01-16 Simon Martin PR c++/117775 * decl.cc (fold_sizeof_expr): Make sure the folded result has type size_type_node. 2025-01-16 Sandra Loosemore * parser.cc (cp_parser_omp_assumption_clauses): Give a more specific error message for invalid directives vs unknown names. 2025-01-16 Sandra Loosemore * decl2.cc (cplus_decl_attributes): Don't add "omp declare target block". 2025-01-16 Sandra Loosemore Kwok Cheung Yeung Sandra Loosemore PR middle-end/112779 PR middle-end/113904 * cp-tree.h (struct saved_scope): Add new field x_processing_omp_trait_property_expr. (processing_omp_trait_property_expr): New. * parser.cc (cp_parser_skip_to_end_of_block_or_statement): Add metadirective_p parameter and handle skipping over the parentheses in a "for" statement. (struct omp_metadirective_parse_data): New. (mangle_metadirective_region_label): New. (cp_parser_label_for_labeled_statement): Mangle label names in a metadirective body. (cp_parser_jump_statement): Likewise. (cp_parser_omp_context_selector): Allow arbitrary expressions in device_num and condition properties. (cp_parser_omp_assumption_clauses): Handle C_OMP_DIR_META. (analyze_metadirective_body): New. (cp_parser_omp_metadirective): New. (cp_parser_pragma): Handle PRAGMA_OMP_METADIRECTIVE. * parser.h (struct cp_parser): Add omp_metadirective_state field. * pt.cc (tsubst_omp_context_selector): New. (tsubst_stmt): Handle OMP_METADIRECTIVE. * semantics.cc (finish_id_expression_1): Don't diagnose use of parameter outside function body in dynamic selector expressions here. 2025-01-16 Jakub Jelinek PR c++/118214 * decl.cc (struct reshape_iter): Add raw_idx member. (cp_maybe_split_raw_data): Add inc_cur parameter, set *inc_cur, don't modify original CONSTRUCTOR, use d->raw_idx to track index into a RAW_DATA_CST d->cur->value. (consume_init): Adjust cp_maybe_split_raw_data caller, increment d->cur when cur_inc is true. (reshape_init_array_1): Don't modify original CONSTRUCTOR when handling RAW_DATA_CST d->cur->value and !reuse, instead use d->raw_idx to track index into RAW_DATA_CST. (reshape_single_init): Initialize iter.raw_idx. (reshape_init_class): Adjust for introduction of d->raw_idx, adjust cp_maybe_split_raw_data caller, do d->cur++ if inc_cur rather than when it returns non-NULL. (reshape_init_r): Check for has_designator_problem for second half of _Complex earlier, also check for error_operand_p (d->cur->value). Use consume_init instead of cp_maybe_split_raw_data with later conditional d->cur++. (reshape_init): Initialize d.raw_idx. 2025-01-16 Jakub Jelinek * parser.cc (cp_parser_lambda_declarator_opt, cp_parser_statement, cp_parser_selection_statement, cp_parser_jump_statement): Use -std=c++23 and -std=gnu++23 in diagnostics rather than -std=c++2b and -std=gnu++2b. * semantics.cc (finish_compound_literal): Likewise. * typeck2.cc (build_functional_cast_1): Likewise. * decl.cc (start_decl): Likewise. * constexpr.cc (ensure_literal_type_for_constexpr_object, potential_constant_expression_1): Likewise. 2025-01-15 Jakub Jelinek PR c++/118390 * cp-tree.h (count_ctor_elements): Declare. * call.cc (count_ctor_elements): No longer static. * pt.cc (unify): Use count_ctor_elements instead of CONSTRUCTOR_NELTS. 2025-01-15 Jakub Jelinek PR c++/118278 * mangle.cc (write_expression): Handle RAW_DATA_CST. 2025-01-15 Marek Polacek PR c++/118139 * cxx-pretty-print.cc (pp_cxx_nested_name_specifier): Handle a computed-type-specifier. 2025-01-15 Tobias Burnus PR c++/118486 * decl.cc (omp_declare_variant_finalize_one): When resolving the variant to use, handle variant calls with TARGET_EXPR. 2025-01-15 Jakub Jelinek PR c++/118387 * method.cc (build_comparison_op): Set bad if std::strong_ordering::equal doesn't convert to rettype. 2025-01-15 Jakub Jelinek PR c++/118124 * cp-tree.h (build_array_of_n_type): Change second argument type from int to unsigned HOST_WIDE_INT. * tree.cc (build_array_of_n_type): Likewise. * call.cc (count_ctor_elements): New function. (maybe_init_list_as_array): Use it instead of CONSTRUCTOR_NELTS. (convert_like_internal): Use length from init's type instead of len when handling the maybe_init_list_as_array case. 2025-01-15 Jakub Jelinek PR c++/118124 * call.cc (convert_like_internal): Handle RAW_DATA_CST in ck_list handling. Formatting fixes. 2025-01-14 Marek Polacek PR c++/118047 PR c++/118355 * typeck2.cc (massage_init_elt): Call fold_non_dependent_init unless for a CONSTRUCTOR in a template. 2025-01-14 Sandra Loosemore Kwok Cheung Yeung Sandra Loosemore Marcel Vollweiler PR middle-end/114596 PR middle-end/112779 PR middle-end/113904 * decl.cc (omp_declare_variant_finalize_one): Update for changes to omp-general.h interfaces. * parser.cc (cp_finish_omp_declare_variant): Likewise. 2025-01-14 Nathaniel Shead PR c++/117397 * module.cc (depset::hash::add_deduction_guides): Don't emit imported deduction guides. (depset::hash::finalize_dependencies): Add check for any bindings referring to imported entities. 2025-01-14 Andrew Pinski PR c++/118445 * constexpr.cc (cxx_eval_constant_expression): Handle VEC_DUPLICATE like a "normal" unary operator. (potential_constant_expression_1): Likewise. 2025-01-11 Nathaniel Shead PR c++/114630 * module.cc (trees_in::core_vals) : Chain a new node if DECL_CHAIN already is set. 2025-01-11 Jason Merrill * module.cc (trees_out::type_node): Write attributes for tt_derived_type, not tt_variant_type. (trees_in::tree_node): Likewise for reading. 2025-01-11 Jason Merrill * module.cc (trees_in::decl_value): Merge attributes. 2025-01-10 Paul-Antoine Arras * parser.cc (cp_parser_pragma): Replace call to cp_parser_omp_dispatch with cp_parser_omp_construct and check context. 2025-01-10 Jakub Jelinek PR c++/118387 * method.cc (genericize_spaceship): For tag == cc_last if type is not auto just return error_mark_node instead of failing checking assertion. 2025-01-10 Jason Merrill * module.cc (trees_out::core_bools): Write replaceable_operator. (trees_in::core_bools): Read it. 2025-01-10 Marek Polacek PR c++/117937 * pt.cc (tsubst_pack_index): tsubst the pack even when it's not PACK_EXPANSION_P. 2025-01-10 Jakub Jelinek PR c++/118277 * cp-tree.h (finish_asm_string_expression): Declare. * semantics.cc (finish_asm_string_expression): New function. (finish_asm_stmt): Use it. * parser.cc (cp_parser_asm_string_expression): Likewise. Wrap string into PAREN_EXPR in the ("") case. (cp_parser_asm_definition): Don't ICE if finish_asm_stmt returns error_mark_node. (cp_parser_asm_specification_opt): Revert 2024-06-24 changes. * pt.cc (tsubst_stmt): Don't ICE if finish_asm_stmt returns error_mark_node. 2025-01-10 Jakub Jelinek * module.cc (trees_out::core_vals): Note DECL_VALUE_EXPR even for vars outside of functions. (trees_in::core_vals): Read in DECL_VALUE_EXPR even for vars outside of functions. (trees_out::get_merge_kind): Make DECL_DECOMPOSITION_P MK_unique. 2025-01-10 Jason Merrill * error.cc (cxx_initialize_diagnostics): Improve comment. * module.cc (modules): Improve comment. (get_originating_module): Add function comment. 2025-01-10 Jason Merrill * module.cc (trees_out::write_function_def): Write returns* flags. (struct post_process_data): Add returns_* flags. (trees_in::read_function_def): Set them. (module_state::read_cluster): Use them. 2025-01-09 Jason Merrill * decl.cc (check_redeclaration_exception_specification): Be more lenient about ::operator new. 2025-01-09 Jason Merrill Torbjörn SVENSSON PR c/116060 * call.cc (standard_conversion): Preserve type name in ck_identity. (maybe_adjust_type_name): New. (convert_like_internal): Use it. Handle -Wsuggest-attribute=format here. (convert_for_arg_passing): Not here. 2025-01-09 Patrick Palka PR c++/118060 * constraint.cc (tsubst_valid_expression_requirement): Don't check convert_to_void during partial substitution. 2025-01-09 Patrick Palka PR c++/117887 * pt.cc (instantiate_template): Set tf_partial if arguments are dependent. 2025-01-09 Patrick Palka PR c++/117925 * constexpr.cc (potential_constant_expression_1) : Fix check for class conversion to literal type to properly look through the TREE_LIST operand of a CAST_EXPR. 2025-01-09 Patrick Palka PR c++/117925 * constexpr.cc (cxx_eval_constant_expression) : Relax ICE when encountering an unexpected tree code into a checking ICE guarded by flag_checking. 2025-01-09 Patrick Palka PR c++/117993 * search.cc (any_dependent_bases_p): Recurse into bases (of dependent type) that are not BINFO_DEPENDENT_BASE_P. Document default argument. 2025-01-09 Patrick Palka PR c++/117792 * pt.cc (type_dependent_expression_p): Consider the dependence of the address of each template argument of a function template-id. 2025-01-08 Jakub Jelinek PR c++/117825 * typeck.cc (cp_build_function_call_vec): Don't call check_function_arguments if complain doesn't have tf_warning bit set. 2025-01-08 Jason Merrill * cp-tree.h (build_nop): Add CXX_MEM_STAT_INFO. * typeck.cc (build_nop): Add MEM_STAT_DECL. 2025-01-08 Jason Merrill * call.cc (implicit_conversion): Check that FROM isn't a reference if we also got an EXPR argument. (convert_like_internal): Check that EXPR isn't a reference. (can_convert_arg): convert_from_reference if needed. 2025-01-08 Jason Merrill * method.cc (is_stub_object): New. * cp-tree.h (is_stub_object): Declare. * error.cc (dump_expr): Use it. 2025-01-08 Jason Merrill * call.cc (convert_like_internal): Add missing break. * coroutines.cc (cp_coroutine_transform::build_ramp_function): Build INIT_EXPR directly. * decl.cc (omp_declare_variant_finalize_one): Use build_stub_object. 2025-01-08 Marek Polacek PR c++/118169 * typeck2.cc (split_nonconstant_init): Call finish_expr_stmt instead of add_stmt. 2025-01-03 Tobias Burnus * parser.cc (cp_parser_omp_var_list_no_open, cp_parser_omp_var_list): For kind=0 (= OMP_CLAUSE_ERROR), store also the expression location in the tree list. (cp_parser_oacc_data_clause_deviceptr, cp_finish_omp_declare_variant): Use that location instead or input_location/the before-parsing location. * semantics.cc (finish_omp_threadprivate): Likewise. 2025-01-02 Paul-Antoine Arras * parser.cc (cp_parser_omp_dispatch): Handle INDIRECT_REF. Copyright (C) 2025 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.