blob: 593627cb334fe367bb2c61a2fc8c5f1dd12fd0e9 [file] [log] [blame]
2020-12-24 Iain Sandoe <>
(enum stdcxxlib_kind): New.
(lang_specific_driver): Allow selection amongst multiple
c++ runtime libraries.
2020-12-23 Nathan Sidwell <>
PR c++/96045
* parser.c (cp_lexer_new_main): Adjust EOF token location.
2020-12-23 Jason Merrill <>
PR c++/97597
* class.c (is_empty_base_ref): New.
(build_base_path): Add NOP_EXPR after offset.
* cp-tree.h (is_empty_base_ref): Declare it.
* call.c (unsafe_return_slot_p): Call it.
2020-12-23 Jakub Jelinek <>
PR c++/98353
* init.c (build_zero_init_1): Use build_zero_cst for SCALAR_TYPE_P
zero initializers.
2020-12-23 Jason Merrill <>
PR c++/98332
* constexpr.c (unshare_constructor): Check for NULL.
(cxx_eval_vec_init_1): Always exit early if non-constant.
2020-12-22 Nathan Sidwell <>
* (has_definition): Check DECL_LANG_SPECIFIC.
2020-12-22 Jakub Jelinek <>
PR c++/93480
* method.c (common_comparison_type): If comps[i] is a TREE_LIST,
use its TREE_VALUE instead.
(build_comparison_op): Handle array members.
2020-12-22 Gerald Pfeifer <>
2020-12-22 Jason Merrill <>
* mangle.c (write_member_name): Add assert.
(write_expression): Add asserts.
2020-12-21 Nathan Sidwell <>
* (create_dirs): Add logging.
(finish_module_processing): Unlink before rename.
2020-12-21 Nathan Sidwell <>
PR bootstrap/98412
(module_client::open_module_client): Avoid std::stoul.
2020-12-18 Kwok Cheung Yeung <>
* cp-lang.c (cxx_get_decl_init): New.
(cxx_omp_finish_decl_inits): New.
* cp-tree.h (dynamic_initializers): New.
* decl.c (dynamic_initializers): New.
* decl2.c (c_parse_final_cleanups): Add initializer entries
from vars to dynamic_initializers.
2020-12-18 Nathan Sidwell <>
* (O_CLOEXEC, O_BINARY): Add window's support.
(elf_in::defrost, module_state::do_import)
(finish_module_processing): Use O_BINARY.
2020-12-18 Jakub Jelinek <>
PR c++/98343
* cp-gimplify.c (source_location_table_entry_hash::pch_nx): Override
static member functions from ggc_remove.
2020-12-18 Patrick Palka <>
* (satisfying_constraint): Move up definition
and give it bool type.
(failed_type_completion_count): Replace with ...
(failed_type_completions): ... this.
(note_failed_type_completion_for_satisfaction): Append the
supplied argument to failed_type_completions.
(some_type_complete_p): Define.
(sat_entry::maybe_unstable): Replace with ...
(sat_entry::ftc_begin, sat_entry::ftc_end): ... these.
(satisfaction_cache::ftc_count): Replace with ...
(satisfaction_cache::ftc_begin): ... this.
(satisfaction_cache::satisfaction_cache): Adjust accordingly.
(satisfaction_cache::get): Adjust accordingly, using
(satisfaction_cache::save): Adjust accordingly.
(satisfying_constraint_p): Remove unused function.
(satisfy_constraint): Set satisfying_constraint.
(satisfy_declaration_constraints): Likewise.
* decl.c (require_deduced_type): Call
2020-12-18 Patrick Palka <>
* (sat_entry::evaluating): New member.
(satisfaction_cache::get): If entry->evaluating, diagnose
self-recursive satisfaction. Otherwise, set entry->evaluating
if we're not reusing a cached satisfaction result.
(satisfaction_cache::save): Clear entry->evaluating.
(satisfy_atom): Set up diagnosing_failed_constraint before the
first call to get().
2020-12-18 Patrick Palka <>
* (failed_type_completion_count): New.
(note_failed_type_completion_for_satisfaction): New.
(sat_entry::constr): Rename to ...
(sat_entry::atom): ... this.
(sat_entry::location): New member.
(sat_entry::maybe_unstable): New member.
(sat_entry::diagnose_instability): New member.
(struct sat_hasher): Adjust after the above renaming.
(get_satisfaction, save_satisfaction): Remove.
(satisfaction_cache): Rewrite completely.
(satisfy_atom): When instantiation of the parameter mapping
fails, set diagnose_instability. Propagate location from
inst_cache.entry to cache.entry if the secondary lookup
(satisfy_declaration_constraints): When
failed_type_completion_count differs before and after
satisfaction, then don't cache the satisfaction result.
* cp-tree.h (note_failed_type_completion_for_satisfaction):
* pt.c (tsubst) <case TYPENAME_TYPE>: Use
complete_type_or_maybe_complain instead of open-coding it.
* typeck.c (complete_type_or_maybe_complain): Call
note_failed_type_completion_for_satisfaction when type
completion fails.
2020-12-17 Nathan Sidwell <>
PR c++/98340
* (uintset<T>::hash::add): Use uintset (0u).MEMBER,
rather than uintset::MEMBER.
2020-12-17 Nathan Sidwell <>
PR bootstrap/98300
* Fix ::read, ::write result signedness comparisons.
2020-12-16 Nathan Sidwell <>
* Remove early include of
sys/socket.h. Specify no CODY_NETWORKING instead.
2020-12-16 Nathan Sidwell <>
* parser.c (cp_parser_elaborated_type_specifier): Test
BOUND_TEMPLATE_TEMPLATE_PARM before checking for instantiation.
2020-12-16 Nathan Sidwell <>
* (dumper::push): Clangify offsetof use.
2020-12-16 Nathan Sidwell <>
* #include sys/socket before system.h
due to poisoned bcopy use.
2020-12-16 Nathan Sidwell <>
* (loc_spans): Make spans a pointer, not inline.
Adjust all accesses.
2020-12-16 Nathan Sidwell <>
* Include sys/socket.h before system.h.
2020-12-15 Patrick Palka <>
* pt.c (in_template_function): Inspect cfun->decl instead of
2020-12-15 Nathan Sidwell <>
* Replace stubs with implementation.
2020-12-15 Nathan Sidwell <>
* (CXX_AND_OBJCXX_OBJS): Add mapper-client &
* mapper-client.h: New.
* New.
* New.
2020-12-15 Nathan Sidwell <>
* name-lookup.c (do_namespace_alias): Set originating module
before pushing.
2020-12-11 Jason Merrill <>
PR libstdc++/97600
* call.c (build_user_type_conversion_1): Avoid considering
conversion functions that return a clearly unsuitable type.
2020-12-11 Jason Merrill <>
* cp-tree.h (make_binding_vec): Add CXX_MEM_STAT_INFO.
2020-12-11 Nathan Sidwell <>
* (gtfiles): Add cp/
* decl2.c (c_parse_final_cleanups): Add module support.
* lambda.c (record_lambda_scope): Call maybe_attach_decl.
* (maybe_attach_decl, lazy_load_specializations): Stubs.
(finish_module_procesing): Stub.
* pt.c (lookup_template_class_1): Lazy load specializations.
(instantiate_template_1): Likewise.
2020-12-11 Nathan Sidwell <>
* decl2.c (c_parse_final_cleanups): Refactor loop.
2020-12-11 Nathan Sidwell <>
* cp-tree.h (map_context_from, map_context_to): Declare.
* (map_context_from, map_context_to): Define.
* tree.c (cp_tree_equal): Check map_context_{from,to} for parm
context difference. Allow NON_LVALUE_EXPR and VIEW_CONVERT_EXPR
with null types.
2020-12-11 Nathan Sidwell <>
* cp-lang.c (LANG_HOOKS_PREPROCESS_MAIN_FILE): Override.
* cp-objcp-common.c (cp_register_dumps): Add module dump.
(cp_handle_option): New.
* cp-objcp-common.h (cp_handle_option): Declare.
* cp-tree.h (module_dump_id): Declare.
* (module_dump_id): Define.
(module_begin_main_file, handle_module_option)
(module_preproces_options): Stubs.
2020-12-11 Nathan Sidwell <>
* (lazy_specializations_p): Stub.
* name-lookup.h (append_imported_binding_slot)
(mergeable_namespacE_slots, lookup_class_binding)
(walk_module_binding, import_module_binding, set_module_binding)
(note_pending_specializations, load_pending_specializations)
(add_module_decl, add_imported_namespace): Declare.
(get_cxx_dialect_name): Declare.
(enum WMB_flags): New.
* name-lookup.c (append_imported_binding_slot)
(mergeable_namespacE_slots, lookup_class_binding)
(walk_module_binding, import_module_binding, set_module_binding)
(note_pending_specializations, load_pending_specializations)
(add_module_decl, add_imported_namespace): New.
(get_cxx_dialect_name): Make extern.
2020-12-11 Patrick Palka <>
PR c++/78173
* typeck.c (pointer_diff): Use complete_type_or_maybe_complain
instead of complete_type_or_else.
2020-12-10 Jason Merrill <>
* cp-tree.h (struct type_identity): New.
(make_temp_override): New.
* decl.c (grokdeclarator): Use it.
* except.c (maybe_noexcept_warning): Use it.
* parser.c (cp_parser_enum_specifier): Use it.
(cp_parser_parameter_declaration_clause): Use it.
(cp_parser_gnu_attributes_opt): Use it.
(cp_parser_std_attribute): Use it.
2020-12-10 Nathan Sidwell <>
* name-lookup.c (do_nonmember_using_decl): Add INSERT_P parm.
Deal with exporting using decls.
(finish_nonmember_using_decl): Examine BINDING_VECTOR.
2020-12-10 Nathan Sidwell <>
* cp-tree.h (visible_instantiation_path): Renamed.
* (get_originating_module_decl, lazy_load_binding)
(lazy_load_members, visible_instantiation_path): Stubs.
* name-lookup.c (STAT_TYPE_VISIBLE_P, STAT_VISIBLE): New.
(search_imported_binding_slot, init_global_partition)
(get_fixed_binding_slot): New.
(name_lookup::process_module_binding): New.
(name_lookup::search_namespace_only): Search BINDING_VECTOR.
(name_lookup::adl_namespace_fns): Likewise.
(name_lookip::search_adl): Search visible instantiation path.
(maybe_lazily_declare): Maybe lazy load members.
(implicitly_exporT_namespace): New.
(maybe_record_mergeable_decl): New.
(check_module_override): New.
(do_pushdecl): Deal with BINDING_VECTOR, check override.
(add_mergeable_namespace_entity): New.
(get_namespace_binding): Deal with BINDING_VECTOR.
(do_namespace_alias): Call set_originating_module.
(lookup_elaborated_type_1): Deal with BINDING_VECTOR.
(do_pushtag): Call set_originating_module.
(reuse_namespace): New.
(make_namespace_finish): Add FROM_IMPORT parm.
(push_namespace): Deal with BINDING_VECTOR & namespace reuse.
(maybe_save_operator_binding): Save when module CMI in play.
* name-lookup.h (add_mergeable_namespace_entity): Declare.
2020-12-10 Nathan Sidwell <>
* name-lookup.c: Include bitmap.h.
(enum binding_slots): New.
(maybe_add_fuzzy_binding): Return bool true if found.
(consider_binding_level): Add module support.
* (get_import_bitmap): Stub.
2020-12-10 Nathan Sidwell <>
* name-lookup.c (pop_local_binding): Check for IDENTIFIER_ANON_P.
(update_binding): Level may be null, don't add namespaces to
(newbinding_bookkeeping): New, broken out of ...
(do_pushdecl): ... here, call it. Don't push anonymous decls.
(pushdecl, add_using_namespace): Correct comments.
(do_push_nested_namespace): Remove assert.
(make_namespace, make_namespace_finish): New, broken out of ...
(push_namespace): ... here. Call them. Add namespace to level
2020-12-10 Nathan Sidwell <>
* error.c (dump_module_suffix): New.
(dump_aggr_type, dump_simple_decl, dump_function_name): Call it.
* ptree.c (cxx_print_decl): Print module information.
* (module_name, get_importing_module): Stubs.
2020-12-10 Nathan Sidwell <>
* name-lookup.h (set_class_bindings): Return vector, take signed
'extra' parm.
* name-lookup.c (maybe_lazily_declare): Break out ...
(get_class_binding): .. of here, call it.
(find_member_slot): Adjust get_class_bindings call.
(set_class_bindings): Allow -ve extra. Return the vector.
(set_identifier_type_value_with_scope): Remove checking assert.
(lookup_using_decl): Set decl's context.
(do_pushtag): Adjust set_identifier_type_value_with_scope handling.
2020-12-09 Nathan Sidwell <>
* parser.h (struct cp_token): Add main_source_p field.
* parser.c (cp_lexer_new_main): Pass thought module token filter.
Check macros.
(cp_lexer_get_preprocessor_token): Set main_source_p.
(enum module_parse): New.
(cp_parser_diagnose_invalid_type_name): Deal with unrecognized
(cp_parser_skip_to_closing_parenthesize_1): Skip module-directivres.
(cp_parser_skip_to_end_of_statement): Likewise.
(cp_parser_skiup_to_end_of_block_or_statement): Likewise.
(cp_parser_translation_unit): Add module parsing calls.
(cp_parser_module_name, cp_parser_module_declaration): New.
(cp_parser_import_declaration, cp_parser_module_export): New.
(cp_parser_declaration): Add module export detection.
(cp_parser_template_declaration): Adjust 'export' error message.
(cp_parser_function_definition_after_declarator): Add
module-specific logic.
* (import_module, declare_module)
(maybe_check_all_macros): Stubs.
2020-12-09 Marek Polacek <>
PR c++/97517
* cxx-pretty-print.c (cxx_pretty_printer::simple_type_specifier): Handle
(pp_cxx_type_specifier_seq): Likewise.
(cxx_pretty_printer::type_id): Likewise.
2020-12-09 Nathan Sidwell <>
* decl.c (duplicate_decls): Add module-specific redeclaration
(cxx_init_decl_processing): Export the global namespace, maybe
initialize modules.
(start_decl): Reject local-extern in a module, adjust linkage of
template var.
(xref_tag_1): Add module-specific redeclaration logic.
(start_enum): Likewise.
(finish_enum_value_list): Export unscoped members of an exported
(grokmethod): Implement p1779 linkage of in-class defined
* decl2.c (no_linkage_error): Imports are ok.
(c_parse_final_cleanups): Call fini_modules.
* lex.c (cxx_dup_lang_specific): Clear some module flags in the
* (module_kind): Define.
(module_may_redeclare, set_defining_module): Stubs.
(init_modules): Error on modules.
(fini_modules): Stub.
* rtti.c (push_abi_namespace): Save and reset module_kind.
(pop_abi_namespace): Restore module kind.
(build_dynamic_cast_1, tinfo_base_init): Adjust.
* semantics.c (begin_class_definition): Add module-specific logic.
(expand_or_defer_fn_1): Keep bodies of more fns when modules_p.
2020-12-09 Tobias Burnus <>
* parser.c (cp_parser_omp_allocate): New.
(cp_parser_omp_construct, cp_parser_pragma): Call it.
2020-12-09 Jason Merrill <>
PR c++/98019
* cvt.c (maybe_warn_nodiscard): Check c_inhibit_evaluation_warnings.
2020-12-09 Jason Merrill <>
PR c++/59238
* init.c (expand_default_init): Pass tf_no_cleanup when building
a TARGET_EXPR to go on the RHS of an INIT_EXPR.
* typeck.c (cp_build_modify_expr): Likewise.
2020-12-08 Marek Polacek <>
PR c++/98103
* constexpr.c (cxx_eval_dynamic_cast_fn): If the evaluating of vtable
yields a null pointer, give an error and return. Use objtype.
2020-12-08 Nathan Sidwell <>
* class.c (layout_class_type): Call set_instantiating_module.
(build_self_reference): Likewise.
* decl.c (grokfndecl): Call set_originating_module.
(grokvardecl): Likewise.
(grokdeclarator): Likewise.
* pt.c (maybe_new_partial_specialization): Call
set_instantiating_module, propagate DECL_MODULE_EXPORT_P.
(lookup_template_class_1): Likewise.
(tsubst_function_decl): Likewise.
(tsubst_decl, instantiate_template_1): Likewise.
(build_template_decl): Propagate module flags.
(tsubst_template_dcl): Likewise.
(finish_concept_definition): Call set_originating_module.
* (set_instantiating_module, set_originating_module): Stubs.
2020-12-08 Jason Merrill <>
PR c++/96299
* cp-tree.h (build_new_op): Add overload that omits some parms.
(genericize_spaceship): Add location_t parm.
* constexpr.c (cxx_eval_binary_expression): Pass it.
* cp-gimplify.c (genericize_spaceship): Pass it.
* method.c (genericize_spaceship): Handle class-type arguments.
(build_comparison_op): Fall back to op</== when appropriate.
2020-12-08 Jason Merrill <>
* call.c (build_new_op_1): Set *overload for ambiguity.
(build_new_method_call_1): Likewise.
2020-12-08 Bernd Edlinger <>
* decl2.c: (is_atomic_expensive_p): New helper function.
(build_atomic_load_byte): Rename to...
(build_atomic_load_type): ... and add new parameter type.
(get_guard_cond): Skip the atomic here if that is expensive.
Use the correct type for the atomic load on certain targets.
2020-12-08 Nathan Sidwell <>
* cp-tree.h (struct tinst_level): Add path & visible fields.
(build_cdtor_clones): Declare.
(match_mergeable_specialization): Use a spec_entry, add insert parm.
* class.c (build_cdtor_clones): Externalize.
* pt.c (push_tinst_level_loc): Clear new fields.
(match_mergeable_specialization): Adjust API.
2020-12-08 Nathan Sidwell <>
* decl2.c (start_objects): Refactor and adjust for named module
(finish_objects): Likewise.
(generate_ctor_or_dtor_function): Likewise.
* (module_initializer_kind)
(module_add_import_initializers): Stubs.
2020-12-08 Nathan Sidwell <>
* (MODULE_VERSION): Override when DEVPHASE not empty.
* Comment.
2020-12-08 Nathan Sidwell <>
* cp-tree.h (mangle_module_substitution, mangle_identifier)
(mangle_module_global_init): Declare.
* mangle.c (struct globals): Add mod field.
(mangle_module_substitution, mangle_identifier)
(mangle_module_global_init): Define.
(write_module, maybe_write_module): New.
(write_name): Call it.
(start_mangling): Clear mod field.
(finish_mangling_internal): Adjust.
* (mangle_module, mangle_module_fini)
(get_originating_module): Stubs.
2020-12-08 Nathan Sidwell <>
* cp-tree.h (module_token_pre, module_token_cdtor)
(module_token_lang): Declare.
* lex.c: Include langhooks.
(struct module_token_filter): New.
* cp-tree.h (module_token_pre, module_token_cdtor)
(module_token_lang): Define.
* (get_module, preprocess_module, preprocessed_module):
Nop stubs.
2020-12-08 Nathan Sidwell <>
* Add includes.
2020-12-08 Jakub Jelinek <>
PR c++/98187
* parser.c (cp_parser_omp_parallel): For parallel master with
-fopenmp-simd only, just call cp_parser_omp_master instead of
wrapping it in OMP_PARALLEL.
2020-12-07 Marek Polacek <>
PR c++/98043
* decl.c (pop_switch): If SWITCH_STMT_TYPE is a scoped enum type,
set it to the type of SWITCH_STMT_COND.
2020-12-07 Nathan Sidwell <>
* cp-tree.h (build_cplus_array_type): Add defaulted DEP parm.
* tree.c (set_array_type_common): Add DEP parm.
(build_cplus_array_type): Add DEP parm, determine dependency if
needed. Mark dependency of new types.
(cp_build_qualified_type_real): Adjust array-building call, assert
no surprising dependency.
(strip_typedefs): Likewise.
2020-12-07 Nathan Sidwell <>
PR c++/98116
* typeck.c (structural_comptypes): Move early outs to comptype.
Always check template-alias match when comparing_specializations.
(comptypes): Do early out checking here.
2020-12-05 Patrick Palka <>
PR c++/97093
* (parameter_mapping_equivalent_p): Add some
sanity checks. Clarify comment.
(tsubst_nested_requirement): Always perform satisfaction
quietly first. If that yields an erroneous result, emit a
context message and replay satisfaction noisily with the
diagnostic normal form.
(finish_nested_requirement): Normalize the constraint-expression
twice, once with diagnostic information and once without. Store
them in a TREE_LIST within the TREE_TYPE.
(diagnose_nested_requirement): When replaying satisfaction, use
the diagnostic normal form instead of renormalizing on the spot.
2020-12-05 Patrick Palka <>
PR c++/97093
* (struct sat_info): Define.
(tsubst_nested_requirement): Pass a sat_info object to
(satisfy_constraint_r): Take a sat_info argument instead of
(satisfy_conjunction): Likewise.
(satisfy_disjunction): Likewise. Instead of first evaluating
each branch quietly, evaluate each branch only with
unsatisfaction diagnostics disabled. Exit early if evaluation
of a branch returns error_mark_node.
(satisfy_atom): Take a sat_info argument instead of subst_info.
Fix a comment. Check diagnose_unsatisfaction_p() instead of
noisy() before replaying a substitution failure.
(satisfy_constraint): Take a sat_info argument instead of
(satisfy_associated_constraints): Likewise.
(satisfy_constraint_expression): Likewise.
(satisfy_declaration_constraints): Likewise.
(constraint_satisfaction_value): Likewise and adjust
accordingly. Fix formatting.
(constraints_satisfied_p): Pass a sat_info object to
(evaluate_concept_check): Pass a sat_info object to
(diagnose_nested_requirement): Likewise.
(diagnose_constraints): Pass an appropriate sat_info object to
2020-12-05 Jakub Jelinek <>
PR c++/98122
* constexpr.c (cxx_union_active_member): New function.
(cxx_fold_indirect_ref_1): Add ctx argument, pass it through to
recursive call. Handle UNION_TYPE.
(cxx_fold_indirect_ref): Add ctx argument, pass it to recursive calls
and cxx_fold_indirect_ref_1.
(cxx_eval_indirect_ref): Adjust cxx_fold_indirect_ref calls.
2020-12-04 Jason Merrill <>
PR c++/93083
* pt.c (convert_template_argument): Handle equivalent placeholders.
(do_class_deduction): Look through EXPR_PACK_EXPANSION, too.
2020-12-04 Jason Merrill <>
* decl2.c (clear_consteval_vfns): Remove *.
* pt.c (do_auto_deduction): Remove *.
* parser.c (cp_parser_late_parsing_default_args): Change loop
to use range 'for'.
2020-12-04 Nathan Sidwell <>
PR c++/98116
* cp-tree.h (comparing_typenames): Delete.
(cplus_build_array_type): Remove default parm.
* pt.c (comparing_typenames): Delete.
(spec_hasher::equal): Don't increment it.
* tree.c (set_array_type_canon): Remove dep parm.
(build_cplus_array_type): Remove dep parm changes.
(cp_build_qualified_type_real): Remove dependent array type
(strip_typedefs): Likewise.
* typeck.c (structural_comptypes): Revert comparing_typename
2020-12-04 Nathan Sidwell <>
* cp-tree.h: Add various inline module state predicates, and
declare the API that will be provided by
2020-12-04 Jakub Jelinek <>
PR c++/80780
* cp-gimplify.c (fold_builtin_source_location): Use 2 instead of 0
as last argument to cxx_printable_name.
2020-12-03 Jason Merrill <>
* cp-tree.h (releasing_vec::operator[]): Change parameter type to
2020-12-03 Nathan Sidwell <>
* cp-tree.h (OVL_EXPORT): New.
(class ovl_iterator): Add get_using, exporting_p.
* tree.c (ovl_insert): Extend using_or_hidden meaning to include
an exported using.
2020-12-03 Nathan Sidwell <>
* pt.c (push_template_decl): Set it.
(tsubst_friend_function): Clear it.
2020-12-03 Nathan Sidwell <>
* cp-tree.h (make_unbound_class_template_raw): Declare.
(canonical_type_parameter): Declare.
* decl.c (make_unbound_class_template_raw): Break out of ...
(make_unboud_class_template): ... here. Call it.
* pt.c (canonical_type_parameter): Externalize. Refactor & set
structural_equality for type parms.
2020-12-03 Nathan Sidwell <>
PR c++/98107
* tree.c (build_cplus_array_type): Mark dependency of new variant.
(cp_build_qualified_type_real, strip_typedefs): Assert
TYPE_DEPENDENT_P_VALID, or not a dependent type.
2020-12-03 Jakub Jelinek <>
PR libstdc++/93121
* cp-tree.h (cp_build_bit_cast): Declare.
* cp-tree.def (BIT_CAST_EXPR): New tree code.
* cp-objcp-common.c (names_builtin_p): Handle RID_BUILTIN_BIT_CAST.
(cp_common_init_ts): Handle BIT_CAST_EXPR.
* cxx-pretty-print.c (cxx_pretty_printer::postfix_expression):
* parser.c (cp_parser_postfix_expression): Handle
* semantics.c (cp_build_bit_cast): New function.
* tree.c (cp_tree_equal): Handle BIT_CAST_EXPR.
(cp_walk_subtrees): Likewise.
* pt.c (tsubst_copy): Likewise.
* constexpr.c (check_bit_cast_type, cxx_eval_bit_cast): New functions.
(cxx_eval_constant_expression): Handle BIT_CAST_EXPR.
(potential_constant_expression_1): Likewise.
* cp-gimplify.c (cp_genericize_r): Likewise.
2020-12-03 Jason Merrill <>
* parser.c (cp_parser_primary_expression): Distinguish
parms from vars in error.
(cp_parser_late_parsing_default_args): Pushdecl parms
as we go.
2020-12-03 Jason Merrill <>
* name-lookup.c (begin_scope): Set immediate_fn_ctx_p.
* parser.c (cp_parser_late_parsing_default_args): Push
sk_function_parms scope.
2020-12-03 Peter Bergner <>
PR c++/97947
* typeck2.c (digest_init_r): Handle OPAQUE_TYPE as an aggregate type.
2020-12-02 Jakub Jelinek <>
PR c++/80780
PR c++/93093
* cp-tree.h (source_location_current_p): Declare.
* tree.c (source_location_current_p): New function.
* call.c (immediate_invocation_p): New function.
(build_over_call): Use it to resolve LWG3396.
* constexpr.c (cxx_eval_builtin_function_call): Temporarily set
current_function_decl from ctx->call->fundef->decl if any.
* cp-gimplify.c (cp_genericize_r) <case CALL_EXPR>: Fold calls
to immediate function std::source_location::current ().
2020-12-02 Jason Merrill <>
* decl.c (grokdeclarator): Improve diagnostic for
disallowed CTAD placeholder.
2020-12-02 Jason Merrill <>
* decl.c (check_initializer): Also look through STMT_EXPR
2020-12-02 Nathan Sidwell <>
* cp-tree.h (comparing_typenames): Declare.
* pt.c (comparing_typenames): Define.
(spec_hasher::equal): Increment it around comparisons.
* typeck.c (structural_comptypes): Adjust TYPENAME resolution
2020-12-02 Marek Polacek <>
PR c++/97975
* constexpr.c (fold_non_dependent_init): Add a tree parameter.
Use it.
* cp-tree.h (fold_non_dependent_init): Add a tree parameter with
a default value.
* typeck2.c (store_init_value): Call fold_non_dependent_expr
only when checking the initializer for constexpr variables.
Call fold_non_dependent_init instead of maybe_constant_init.
2020-12-02 Marek Polacek <>
PR c++/97187
PR c++/97993
* pt.c (tsubst_copy_and_build) <case NEW_EXPR>: Return error_mark_node
if init is erroneous.
2020-12-02 Nathan Sidwell <>
(struct lang_decl_base): Shrink sel field. Add new
module-specific fields.
2020-12-02 Nathan Sidwell <>
* cp-tree.h (DECL_TINFO_P): Also for TYPE_DECLs.
(get_tinfo_decl_direct): Declare.
(get_pseudo_tinfo_index, get_pseudo_tinfo_type): Declare.
* rtti.c (get_tinfo_decl_direct): Externalize.
(get_tinfo_desc): Set DECL_TINFO_P on the typedef.
(get_pseudo_tinfo_index, get_pseudo_tinfo_type): New.
2020-12-02 Nathan Sidwell <>
* cp-tree.h (maybe_add_lang_decl_raw, maybe_add_lang_type_raw):
* lex.c (maybe_add_lang_decl_raw, maybe_add_lang_type_raw):
Externalize, reformat.
2020-12-02 Nathan Sidwell <>
* cp-tree.h (build_cplus_array_type): Add defaulted DEP parm.
* tree.c (set_array_type_common): Add DEP parm.
(build_cplus_array_type): Add DEP parm, determine dependency if
(cp_build_qualified_type_real): Adjust array-building call.
(strip_typedefs): Likewise.
2020-12-02 Nathan Sidwell <>
* ptree.c (cxx_print_xnode): Increase binding-vector prefix size.
2020-12-02 Nathan Sidwell <>
* cp-tree.def (BINDING_VECTOR): New.
* name-lookup.h (struct binding_slot): New.
(struct binding_index, struct binding_cluster): New.
(struct tree_binding_vec): New.
* cp-tree.h (enum cp_tree_node_structure_enum): Add
(union lang_tree_node): Add binding_vec field.
(make_binding_vec): Declare.
(named_decl_hash::hash, named_decl_hash::equal): Check for binding
* decl.c (cp_tree_node_structure): Add BINDING_VECTOR case.
* ptree.c (cxx_print_xnode): Add BINDING_VECTOR case.
* tree.c (make_binding_vec): New.
2020-12-01 Ville Voutilainen <>
PR c++/98054
* cxx-pretty-print.c (pp_cxx_trait_expression):
Add support for __is_nothrow_{assignable,constructible}.
2020-12-01 Jakub Jelinek <>
PR c++/98072
* parser.c (cp_parser_omp_depobj): Suppress location wrappers when
parsing depend clause.
2020-12-01 Nathan Sidwell <>
* lex.c (init_reswords): Maybe enable module keywords.
2020-12-01 Nathan Sidwell <>
* lang-specs.h: Add module-related options.
2020-12-01 Iain Sandoe <>
* parser.c (cp_parser_declaration): Add a not about where
attributes may be placed.
2020-11-27 Martin Sebor <>
* error.c (add_quotes): Revert previous change and use pragma to
suppress -Wformat-diag.
2020-11-26 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* g++spec.c (TIMELIB, TIME_LIBRARY): Remove.
(lang_specific_driver): Remove TIME_LIBRARY handling.
2020-11-26 Thomas Schwinge <>
* parser.c (cp_parser_omp_var_list_no_open): Assert that array
section's 'low_bound', 'length' are not location wrapper nodes.
(cp_parser_oacc_all_clauses, cp_parser_oacc_cache): Instantiate
2020-11-25 Martin Sebor <>
PR bootstrap/94982
* (debug_argument_list): Avoid -Wformat-diag.
* error.c (function_category): Same.
(print_template_differences): Same.
* (debug): Same.
* name-lookup.c (lookup_using_decl): Same.
* parser.c (maybe_add_cast_fixit): Same.
(cp_parser_template_introduction): Same.
* typeck.c (access_failure_info::add_fixit_hint): Same.
2020-11-25 Thomas Schwinge <>
* pt.c (tsubst_omp_clauses): Handle 'OMP_CLAUSE__CACHE_'.
(tsubst_expr): Handle 'OACC_CACHE'.
2020-11-24 Jason Merrill <>
PR c++/97899
* typeck2.c (store_init_value): Don't split_nonconstant_init in a
2020-11-24 Jakub Jelinek <>
PR tree-optimization/96929
* constexpr.c (cxx_eval_binary_expression): For shifts by constant
with MSB set, emulate older wide_int_binop behavior to preserve
diagnostics and -fpermissive behavior.
2020-11-23 Nathan Sidwell <>
* New dummy file.
* Add rules to build module.o
2020-11-23 Jozef Lawrynowicz <>
* decl.c (start_decl): Set DECL_INITIAL for initialized decls
before attribute processing.
2020-11-23 Richard Sandiford <>
PR c++/97904
* pt.c (tsubst): Use verify_type_context to check the type
of an array element.
2020-11-21 Marek Polacek <>
PR c++/94695
* parser.c (warn_for_range_copy): Warn when the loop variable is
initialized with a value of a different type resulting in a copy.
2020-11-21 Marek Polacek <>
PR c++/97846
* constexpr.c (potential_constant_expression_1): Reject
LABEL_EXPRs that use non-artifical LABEL_DECLs.
2020-11-21 Marek Polacek <>
PR c++/97881
* parser.c (warn_about_ambiguous_parse): Only assume "int" if we
actually saw any type-specifiers.
2020-11-21 Marek Polacek <>
PR c++/97839
* parser.c (cp_parser_lambda_declarator_opt): Don't require ().
2020-11-21 Marek Polacek <>
PR c++/97427
* constexpr.c (cxx_set_object_constness): New function.
(cxx_eval_call_expression): Set new_obj for destructors too.
Call cxx_set_object_constness to set/unset TREE_READONLY of
the object under construction/destruction.
2020-11-21 Aaron Sawdey <>
* error.c (dump_type): Handle opaque types.
(dump_type_prefix): Handle opaque types.
(dump_type_suffix): Handle opaque types.
(dump_expr): Handle opaque types.
* pt.c (tsubst): Allow opaque types in templates.
(unify): Allow opaque types in templates.
* typeck.c (structural_comptypes): Handle comparison
of opaque types.
2020-11-20 Jakub Jelinek <>
PR other/97911
* (c++.serial): Change from goal to a variable.
(.PHONY): Drop c++.serial and c++.prev.
(cc1plus$(exeext)): Depend on $(c++.serial) rather than c++.serial.
2020-11-19 Nathan Sidwell <>
* cp-tree.h (struct spec_entry): Moved from pt.c.
(walk_specializations, match_mergeable_specialization)
(add_mergeable_specialization): Declare.
* pt.c (struct spec_entry): Moved to cp-tree.h.
(walk_specializations, match_mergeable_specialization)
(add_mergeable_specialization): New.
2020-11-19 Nathan Sidwell <>
* cp-tree.h (struct constexpr_fundef): Moved from constexpr.c.
(maybe_save_constexpr_fundef): Declare.
(register_constexpr_fundef): Take constexpr_fundef object, return
* decl.c (mabe_save_function_definition): Delete, functionality
moved to maybe_save_constexpr_fundef.
(emit_coro_helper, finish_function): Adjust.
* constexpr.c (struct constexpr_fundef): Moved to cp-tree.h.
(constexpr_fundef_hasher::equal): Constify.
(constexpr_fundef_hasher::hash): Constify.
(retrieve_constexpr_fundef): Make non-static.
(maybe_save_constexpr_fundef): Break out checking and duplication
from ...
(register_constexpr_fundef): ... here. Just register the constexpr.
2020-11-19 Marek Polacek <>
PR c++/97523
* init.c (build_new): When value-initializing an array new,
leave the INIT as an empty vector.
2020-11-19 Marek Polacek <>
PR c++/97895
* pt.c (do_auto_deduction): Don't crash when the constructor has
zero elements.
2020-11-19 Nathan Sidwell <>
PR c++/97905
* decl.c (duplicate_decls): Relax new assert.
2020-11-18 Iain Sandoe <>
* parser.c (cp_parser_objc_valid_prefix_attributes): Check
for empty attributes.
2020-11-18 Jakub Jelinek <>
* (c++.serial): New goal.
(.PHONY): Add c++.serial c++.prev.
(cc1plus$(exeext)): Depend on c++.prev. Call LINK_PROGRESS.
2020-11-17 Nathan Sidwell <>
PR c++/97877
* decl.c (duplicate_decls): Deal with duplicated DECL_LOCAL_DECL_P
decls. Extend decl_lang_specific checking assert.
2020-11-17 Nathan Sidwell <>
* cp-tree.h (enum cp_tree_index): Reorder to place lazy fields
after newly-added CPTI_MODULE_HWM.
2020-11-17 Iain Sandoe <>
PR c++/97871
* parser.c (cp_parser_declaration): Remove checking assert.
2020-11-15 Jason Merrill <>
* decl.c (cp_finish_decl): Only check abstractness on definition.
(require_complete_types_for_parms): Check abstractness here.
(create_array_type_for_decl): Not here.
(grokdeclarator, grokparms, complete_vars): Not here.
* pt.c (tsubst, tsubst_arg_types, tsubst_function_type): Not here.
* typeck2.c (struct pending_abstract_type): Remove.
(struct abstract_type_hasher): Remove.
(abstract_pending_vars, complete_type_check_abstract): Remove.
(abstract_virtuals_error_sfinae): Handle arrays.
* call.c (conv_is_prvalue): Split out from...
(implicit_conversion_1): Rename from implicit_conversion.
(implicit_conversion): An abstract prvalue is bad.
(convert_like_internal): Don't complain if expr is already
2020-11-13 Jason Merrill <>
* cp-tree.h (USING_DECL_UNRELATED_P): New.
* class.c (handle_using_decl): If USING_DECL_UNRELATED_P,
clone the CONST_DECL.
* name-lookup.c (supplement_binding_1): A clone hides its
(lookup_using_decl): Rewrite to separate lookup and validation.
(do_class_using_decl): Adjust.
(finish_nonmember_using_decl): Adjust.
* parser.c (make_location): Add cp_token overload.
(finish_using_decl): Split out from...
(cp_parser_using_declaration): Don't look through enums.
(cp_parser_using_enum): New.
(cp_parser_block_declaration): Call it.
(cp_parser_member_declaration): Call it.
* semantics.c (finish_id_expression_1): Handle enumerator
used from class scope.
2020-11-13 Vladimir N. Makarov <>
* parser.c (cp_parser_asm_definition): Parse outputs for asm
goto too.
2020-11-13 Iain Sandoe <>
PR objc/77404
* parser.c (cp_parser_objc_class_interface): Pass the
location of the class name to the interface declaration.
2020-11-13 Patrick Palka <>
* semantics.c (finish_compound_literal): Don't wrap the original
compound literal in a TARGET_EXPR when inside a template.
2020-11-12 Jakub Jelinek <>
PR c++/97790
* constexpr.c (cxx_eval_constant_expression) <case CLEANUP_POINT_EXPR,
case TRY_FINALLY_EXPR, case CLEANUP_STMT>: Don't pass jump_target to
cxx_eval_constant_expression when evaluating the cleanups.
2020-11-11 Iain Sandoe <>
* parser.c (cp_parser_declaration): Unless we are compiling for
Ojective-C++, warn about and discard any attributes that prefix
a linkage specification.
2020-11-11 Patrick Palka <>
PR c++/88115
* mangle.c (write_expression): Mangle __alignof_ differently
from alignof when the ABI version is at least 15.
2020-11-11 Patrick Palka <>
PR c++/88115
* cp-tree.h (cxx_sizeof_or_alignof_expr): Add bool parameter.
* decl.c (fold_sizeof_expr): Pass false to
* parser.c (cp_parser_unary_expression): Pass std_alignof to
* pt.c (tsubst_copy): Pass false to cxx_sizeof_or_alignof_expr.
(tsubst_copy_and_build): Pass std_alignof to
* typeck.c (cxx_alignof_expr): Add std_alignof bool parameter
and pass it to cxx_sizeof_or_alignof_type. Set ALIGNOF_EXPR_STD_P
(cxx_sizeof_or_alignof_expr): Add std_alignof bool parameter
and pass it to cxx_alignof_expr. Assert op is either
2020-11-11 Marek Polacek <>
PR c++/97518
* pt.c (tsubst_qualified_id): Use EXPR_LOCATION of the qualified-id.
Use it to maybe_wrap_with_location the final expression.
2020-11-10 Marek Polacek <>
PR c++/97518
* cp-tree.h (finish_static_assert): Adjust declaration.
* parser.c (cp_parser_static_assert): Pass false to
* pt.c (tsubst_expr): Pass true to finish_static_assert.
* semantics.c (find_failing_clause_r): New function.
(find_failing_clause): New function.
(finish_static_assert): Add a bool parameter. Use
iloc_sentinel. Call contextual_conv_bool instead of
perform_implicit_conversion_flags. Don't check for INTEGER_CST before
calling integer_zerop. Call find_failing_clause and maybe use its
location. Print the original condition or the failing clause if
2020-11-10 Strager Neds <>
* decl.c (duplicate_decls): Use new overload of
* method.c (use_thunk): Same.
* optimize.c (maybe_clone_body): Same.
* (act_des_fn): Same.
2020-11-10 Jakub Jelinek <>
PR c/97748
* cvt.c (convert_to_void): Check (complain & tf_warning) in the outer
if rather than twice times in the inner one. Use warn_if_unused_value.
Formatting fix.
2020-11-10 Chung-Lin Tang <>
* parser.c (cp_parser_omp_target_data): Add use of
new c_omp_adjust_map_clauses function. Add GOMP_MAP_ATTACH_DETACH as
handled map clause kind.
(cp_parser_omp_target_enter_data): Likewise.
(cp_parser_omp_target_exit_data): Likewise.
(cp_parser_omp_target): Likewise.
* semantics.c (handle_omp_array_sections): Adjust COMPONENT_REF case to
use GOMP_MAP_ATTACH_DETACH map kind for C_ORT_OMP region type. Fix
interaction between reference case and attach/detach.
(finish_omp_clauses): Adjust bitmap checks to allow struct decl and
same struct field access to co-exist on OpenMP construct.
2020-11-09 Marek Polacek <>
DR 1914
* parser.c (cp_parser_check_std_attribute): Return bool. Add a
location_t parameter. Return true if the attribute wasn't duplicated.
Give a warning instead of an error. Check more attributes.
(cp_parser_std_attribute_list): Don't add duplicated attributes to
the list. Pass location to cp_parser_check_std_attribute.
2020-11-09 Patrick Palka <>
* (norm_info::norm_info): Initialize orig_decl.
(norm_info::orig_decl): New data member.
(normalize_atom): When caching an atom for the first time,
compute a list of template parameters used in the targets of the
parameter mapping and store it in the TREE_TYPE of the mapping.
(get_normalized_constraints_from_decl): Set current_function_decl
appropriately when normalizing. As an optimization, don't
set up a push_nested_class_guard when decl has no constraints.
(sat_hasher::hash): Use this list to hash only the template
arguments that are relevant to the atom.
(satisfy_atom): Use this list to compare only the template
arguments that are relevant to the atom.
* pt.c (keep_template_parm): Do a sanity check on the parameter's
index when flag_checking.
2020-11-09 Patrick Palka <>
* cp-tree.h (ATOMIC_CONSTR_MAP_INSTANTIATED_P): Define this flag
* (sat_hasher::hash): Use hash_atomic_constraint
if the flag is set, otherwise keep using a pointer hash.
(sat_hasher::equal): Return false if the flag's setting differs
on two atoms. Call atomic_constraints_identical_p if the flag
is set, otherwise keep using a pointer equality test.
(satisfy_atom): After instantiating the parameter mapping, form
another ATOMIC_CONSTR using the instantiated mapping and query
the cache again. Cache the satisfaction value of both atoms.
(diagnose_atomic_constraint): Simplify now that the supplied
atom has an instantiated mapping.
2020-11-09 Patrick Palka <>
* (atom_cache): Define this deletable hash_table.
(normalize_atom): Use it to cache ATOMIC_CONSTRs when not
generating diagnostics.
(sat_hasher::hash): Use htab_hash_pointer instead of
(sat_hasher::equal): Test for pointer equality instead of
* cp-tree.h (struct atom_hasher): Moved and renamed from ...
* (struct constraint_hash): ... here.
(clause::m_set): Adjust accordingly.
2020-11-09 Patrick Palka <>
PR c++/93907
* (tsubst_parameter_mapping): Also canonicalize
the type arguments of a TYPE_ARGUMENT_PACk.
2020-11-09 Jason Merrill <>
* pt.c (tsubst): Replace *_ARGUMENT_PACK code with
a call to tsubst_argument_pack.
2020-11-09 Jason Merrill <>
* class.c (handle_using_decl): Add an iloc_sentinel.
2020-11-09 Marek Polacek <>
PR c++/97762
* parser.c (warn_about_ambiguous_parse): Handle the case when
there is no type in the decl-specifiers.
2020-11-09 Nathan Sidwell <>
* name-lookup.c (class name_lookup): Add comments.
(name_lookup::adl_namespace_only): Replace with ...
(name_lookup::adl_class_fns): ... this and ...
(name_lookup::adl_namespace_fns): ... this.
(name_lookup::adl_namespace): Deal with inline nests here.
(name_lookup::adl_class): Complete the type here.
(name_lookup::adl_type): Call broken-out enum ..
(name_lookup::adl_enum): New. No need to call the namespace adl
if it is class-scope.
(name_lookup::search_adl): Iterate over collected scopes here.
2020-11-09 Nathan Sidwell <>
* name-lookup.c (lookup_qualified_name): Expose an overload of a
singleton with known type.
(lookup_name_1): Just check the overload's type to expose it.
* parser.c (cp_parser_lookup_name): Do not do that check here.
2020-11-08 Iain Sandoe <>
* parser.c (cp_parser_objc_at_property_declaration): Handle
class keywords in @property attribute context.
2020-11-06 Marek Polacek <>
PR c++/81660
* except.c (can_convert_eh): Change the return type to bool. If
the type TO and FROM are the same, return true.
2020-11-06 Iain Sandoe <>
* parser.c (cp_parser_objc_at_property_declaration):
Improve parsing fidelity. Associate better location info
with @property attributes. Clean up the interface to
objc_add_property_declaration ().
2020-11-06 Jakub Jelinek <>
PR c++/67453
* decl.c (duplicate_decls): Propagate DECL_ATTRIBUTES and
DECL_PRESERVE_P from olddecl to its clones if any.
2020-11-06 Nathan Sidwell <>
* cp-tree.h (DECL_UNDECLARED_BUILTIN_P): Delete.
* cp-objcp-common.c (names_bultin_p): Rename
* decl.c (decls_match): Likewise. Replace
(duplicate_decls): Likewise.
* decl2.c (collect_source_refs): Likewise.
* name-lookup.c (anticipated_builtin_p, print_binding_level)
(do_nonmember_using_decl): Likewise.
* pt.c (builtin_pack_fn_p): Likewise.
* typeck.c (error_args_num): Likewise.
2020-11-06 Nathan Sidwell <>
* parser.c (cp_parser_template_declaration): Adjust 'export' warning.
(cp_parser_explicit_specialization): Remove unneeded bool setting.
2020-11-06 Jan Hubicka <>
* tree.c (cp_fix_function_decl_p): Do not access ipa_ref_list dirrectly.
2020-11-06 Tobias Burnus <>
* parser.c (cp_parser_omp_atomic): Add openacc parameter and update
OpenACC matching.
(cp_parser_omp_construct): Update call.
2020-11-05 Marek Polacek <>
* except.c (check_handlers_1): Add auto_diagnostic_group.
2020-11-05 Marek Polacek <>
PR c++/78209
* pt.c (do_auto_deduction): If init is REFERENCE_REF_P, use its
first operand.
2020-11-05 Marek Polacek <>
PR c++/97675
* except.c (check_handlers_1): Use OPT_Wexceptions for the
warning. Use inform for the second part of the warning.
2020-11-05 Marek Polacek <>
PR c++/25814
* cp-tree.h (enum cp_tree_index): Add CPTI_EXPLICIT_VOID_LIST.
(explicit_void_list_node): Define.
(struct cp_declarator): Add function::parens_loc.
* decl.c (cxx_init_decl_processing): Initialize explicit_void_list_node.
(grokparms): Also break when explicit_void_list_node.
* parser.c (make_call_declarator): New location_t parameter. Use it
to set declarator->u.function.parens_loc.
(cp_parser_lambda_declarator_opt): Pass UNKNOWN_LOCATION to
(warn_about_ambiguous_parse): New function.
(cp_parser_init_declarator): Call warn_about_ambiguous_parse.
(cp_parser_declarator): Set *parenthesized_p to false rather than to
(cp_parser_direct_declarator): Create a location for the function's
parentheses and pass it to make_call_declarator.
(cp_parser_parameter_declaration_clause): Return explicit_void_list_node
for (void).
(cp_parser_parameter_declaration_list): Set PARENTHESIZED_LIST_P
in the parameters tree.
2020-11-04 Jakub Jelinek <>
PR c++/97670
* semantics.c (finish_omp_clauses): Look through array reductions to
find underlying decl to clear in the aligned_head bitmap. Use
DECL_UID (t) instead of DECL_UID (OMP_CLAUSE_DECL (c)) when clearing
in the bitmap. Only diagnose errors about allocate vars not being
privatized on the same construct on allocate clause if it has
2020-11-04 Iain Sandoe <>
* constexpr.c (potential_constant_expression_1): Handle
expressions known to be non-constant for Objective-C.
2020-11-03 Jason Merrill <>
* tree.c (is_byte_access_type): Don't use char_type_p.
2020-11-03 Jakub Jelinek <>
PR c++/97663
* parser.c (cp_parser_init_declarator): Don't try to parse
C++17 deduction guides if there are any type specifiers even when
type is NULL.
2020-11-03 Kamlesh Kumar <>
Jason Merrill <>
PR c++/97453
* pt.c (get_template_base): Consider closest base in template
deduction when base of base also matches.
2020-11-03 Nathan Sidwell <>
* pt.c (tsubst_expr): Simplify using decl instantiation, add
2020-11-03 Nathan Sidwell <>
* class.c (copy_fndecl_with_name): Always not top level.
(build_cdtor_clones): Add update_methods parm, use it to
conditionally update the method vec. Return void
(clone_cdtor): Adjust.
(clone_constructors_and_destructors): Adjust comment.
2020-11-03 Nathan Sidwell <>
* pt.c (primary_template_specialization_p): Use
(tsubst_template_decl): Check for FUNCTION_DECL, not !TYPE && !VAR
for registering a specialization.
2020-11-03 Nathan Sidwell <>
* cp-tree.h (fixup_deferred_exception_variants): Declare.
* parser.c (cp_parser_class_specifier_1): Call it when
completing deferred parses rather than creating a variant.
(cp_parser_member_declaration): Move comment from ...
(cp_parser_noexcept_specification_opt): ... here. Refactor the
deferred parse.
* tree.c (fixup_deferred_exception_variants): New.
2020-11-03 Nathan Sidwell <>
* pt.c (tsubst_lambda_expr): Reorder extra-scope handling to match
the non-template case.
(instantiate_body): Move a couple of declarations to their
2020-11-03 Nathan Sidwell <>
* decl.c (duplicate_decls): Return error_mark_node fo extern-c
2020-11-03 Marek Polacek <>
* constexpr.c (potential_constant_expression_1): Treat
__PRETTY_FUNCTION__ inside a template function as
* pt.c (uses_template_parms): Call
instantiation_dependent_expression_p instead of
(instantiation_dependent_expression_p): Check
potential_constant_expression before calling
2020-11-03 Marek Polacek <>
PR c++/97632
* init.c (build_new_1): Disable -Winit-list-lifetime for an unevaluated
2020-11-03 Nathan Sidwell <>
* tree.c (bind_template_template_parm): Mark the parm as a
template parm.
(cp_tree_equal): Refactor CALL_EXPR. Use comp_template_args for
2020-11-03 Nathan Sidwell <>
* rtti.c (init_rtti_processing): Move var decl to its init.
(get_tinfo_decl): Likewise. Break out creation to called helper
(get_tinfo_decl_direct): ... here.
(build_dynamic_cast_1): Move var decls to their initializers.
(tinfo_base_init): Set decl's location to BUILTINS_LOCATION.
(get_tinfo_desc): Only push ABI namespace when needed. Set type's
2020-11-02 Nathan Sidwell <>
* decl.c (start_decl_1): Refactor declarations. Fixup some
(lookup_and_check_tag): Fixup some whitespace.
2020-11-02 Nathan Sidwell <>
* decl.c (duplicate_decls): Refactor some template & builtin
2020-11-02 Nathan Sidwell <>
* cp-tree.h (struct cxx_int_tree_map): Delete.
(struct cxx_int_tree_map_hasher): Delete.
* cp-gimplify.c (cxx_int_tree_map_hasher::equal): Delete.
(cxx_int_tree_map_hasher::hash): Delete.
2020-11-02 Patrick Palka <>
* class.c (finish_struct_1): Don't call clear_satisfaction_cache.
* constexpr.c (clear_cv_and_fold_caches): Likewise. Remove bool
* (clear_satisfaction_cache): Remove definition.
* cp-tree.h (clear_satisfaction_cache): Remove declaration.
(clear_cv_and_fold_caches): Remove bool parameter.
* typeck2.c (store_init_value): Remove argument to
2020-11-01 Iain Sandoe <>
* parser.c (cp_parser_objc_at_property_declaration): Use any
exisiting syntax error to suppress complaints about a missing
closing parenthesis in parsing property attributes.
2020-10-30 Jakub Jelinek <>
* semantics.c (finish_omp_clauses) <case OMP_CLAUSE_ALLOCATE>: Handle
non-static members in methods.
* pt.c (tsubst_omp_clauses): Handle OMP_CLAUSE_ALLOCATE.
2020-10-29 Marek Polacek <>
DR 625
PR c++/97479
* parser.c (cp_parser_type_id_1): Reject using auto as
a template-argument in C++20.
2020-10-29 Marek Polacek <>
PR c++/93107
* pt.c (do_auto_deduction): Call resolve_nondeduced_context for
the elements of a { } list.
2020-10-29 Marek Polacek <>
* typeck.c (do_warn_enum_conversions): Don't warn for SPACESHIP_EXPR.
(cp_build_binary_op): Reject float <=> enum or enum <=> float. Use
2020-10-29 Patrick Palka <>
* (get_normalized_constraints): Remove 'args'
parameter. Pass NULL_TREE as the initial template arguments to
(get_normalized_constraints_from_info): Remove 'args' parameter
and adjust the call to get_normalized_constraints.
(get_normalized_constraints_from_decl): Remove 'args' local
variable and adjust call to get_normalized_constraints_from_info.
(normalize_concept_definition): Remove 'args' local variable
and adjust call to get_normalized_constraints.
(normalize_constraint_expression): Remove the two-parameter
overload. Remove 'args' parameter from the three-parameter
overload and update function comment accordingly. Remove
default argument from 'diag' parameter. Adjust call to
(finish_nested_requirement): Adjust call to
(strictly_subsumes): Remove 'args' parameter. Adjust call to
(weakly_subsumes): Likewise.
* cp-tree.h (strictly_subsumes): Remove 'args' parameter.
(weakly_subsumes): Likewise.
* pt.c (process_partial_specialization): Adjust call to
(is_compatible_template_arg): Adjust call to weakly_subsumes.
2020-10-29 Patrick Palka <>
PR c++/97412
* (normalize_concept_check): Don't call
tsubst_template_args when 'args' is NULL.
2020-10-29 Jason Merrill <>
PR c++/97388
* constexpr.c (cxx_eval_outermost_constant_expr): Revert to
original expression if evaluation sets non_constant_p.
2020-10-29 Jakub Jelinek <>
Jason Merrill <>
PR c++/97388
* constexpr.c (cxx_bind_parameters_in_call): Set non_constant_args
if the parameter type has a non-trivial destructor.
(cxx_eval_call_expression): Only unshare arguments if we're
memoizing this evaluation.
2020-10-29 Jakub Jelinek <>
PR c++/95808
* cp-tree.h (enum cp_tree_index): Add CPTI_HEAP_VEC_UNINIT_IDENTIFIER
(heap_vec_uninit_identifier, heap_vec_identifier): Define.
* decl.c (initialize_predefined_identifiers): Initialize those
* constexpr.c (cxx_eval_call_expression): Reject array allocations
deallocated with non-array deallocation or non-array allocations
deallocated with array deallocation.
(non_const_var_error): Handle heap_vec_uninit_identifier and
heap_vec_identifier too.
(cxx_eval_constant_expression): Handle also heap_vec_uninit_identifier
and in that case during initialization replace it with
(find_heap_var_refs): Handle heap_vec_uninit_identifier and
heap_vec_identifier too.
2020-10-29 Nathan Sidwell <>
* pt.c (push_template_decl): Do not give function-scope entities
other than implicit typedefs a template header. Do not readd
template info to a redeclared template.
2020-10-28 Marek Polacek <>
* decl.c (grokdeclarator): Offer a fix-it hint for the "unnecessary
parentheses in declaration" warning.
* parser.c (cp_parser_direct_declarator): When setting
declarator->parenthesized, use a location range.
2020-10-28 Marek Polacek <>
PR c++/97573
* call.c (build_conditional_expr_1): Warn about the deprecated
enum/real type conversion in C++20. Also warn about a non-enumerated
and enumerated type in ?: when -Wenum-conversion is on.
* typeck.c (do_warn_enum_conversions): New function.
(cp_build_binary_op): Call it.
2020-10-28 Marek Polacek <>
PR c++/96675
PR c++/96742
* pt.c (tsubst_copy_and_build): Call value_dependent_expression_p or
type_dependent_expression_p instead of type_dependent_expression_p_push.
But only call value_dependent_expression_p for expressions that are
2020-10-28 Marek Polacek <>
PR c++/94799
* parser.c (cp_parser_class_name): Use parser->scope when
setting typename_p.
2020-10-28 Marek Polacek <>
PR c++/86773
* parser.c (cp_parser_fold_expression): Return error_mark_node
if a left fold is preceded by an expression.
2020-10-28 Nathan Sidwell <>
* parser.c (cp_parser_omp_declare_reduction): Set
DECL_LOCAL_DECL_P before push_template_decl.
* pt.c (instantiate_body): Nested fns do not have template_info.
2020-10-28 Patrick Palka <>
PR c++/95132
* decl2.c (mark_used): Move up the constraints_satisfied_p check
so that we check constraints before calling maybe_instantiate_decl.
2020-10-28 Nathan Sidwell <>
* pt.c (push_template_decl): Refactor for some RAII.
2020-10-28 Jakub Jelinek <>
* parser.c (cp_parser_omp_clause_name): Handle allocate.
(cp_parser_omp_clause_allocate): New function.
(cp_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_ALLOCATE.
* semantics.c (finish_omp_clauses): Handle OMP_CLAUSE_ALLOCATE.
* pt.c (tsubst_omp_clauses): Likewise.
2020-10-27 Nathan Sidwell <>
* cp-tree.h (struct lang_type): Delete nested_udts field.
* name-lookup.h (binding_table, binding_entry): Delete typedefs.
(bt_foreach_proc): Likewise.
(struct binding_entry_s): Delete.
(binding_table_foreach, binding_table_find): Delete declarations.
* name-lookup.c (ENTRY_INDEX): Delete.
(free_binding_entry): Delete.
(binding_entry_make, binding_entry_free): Delete.
(struct binding_table_s): Delete.
(binding_table_construct, binding_table_free): Delete.
(binding_table_new, binding_table_expand): Delete.
(binding_table_insert, binding_table_find): Delete.
(binding_table_foreach): Delete.
(maybe_process_template_type_declaration): Delete
(do_pushtag): Likewise.
* decl2.c (bt_reset_linkage_1): Fold into reset_type_linkage_1.
(reset_type_linkage_2, bt_reset_linkage_2): Fold into
* pt.c (instantiate_class_template_1): Delete NESTED_UTDs comment.
(bt_instantiate_type_proc): Delete.
(do_type_instantiation): Instantiate implicit typedef fields.
Delete NESTED_UTD walk.
* search.c (lookup_field_r): Delete unreachable NESTED_UTD
2020-10-27 Nathan Sidwell <>
* parser.c (cp_parser_explicit_instantiation): Refactor some RAII.
* pt.c (bt_instantiate_type_proc): DATA is the tree, pass type to
(do_type_instantiation): Require T to be a type. Refactor for
some RAII.
2020-10-26 Ville Voutilainen <>
(is_nothrow_xible): Likewise.
* method.c (is_nothrow_xible): New.
(is_trivially_xible): Tweak.
* parser.c (cp_parser_primary_expression): Handle the new RID_*.
(cp_parser_trait_expr): Likewise.
* semantics.c (trait_expr_value): Handle the new RID_*.
(finish_trait_expr): Likewise.
2020-10-24 Marek Polacek <>
PR c++/96241
* constexpr.c (cxx_eval_array_reference): Set up ctx->ctor if we
are initializing an aggregate. Call free_constructor on the new
CONSTRUCTOR if it isn't returned from cxx_eval_constant_expression.
2020-10-23 Marek Polacek <>
PR c++/91741
* typeck.c (cp_build_binary_op): Implement -Wsizeof-array-div.
2020-10-22 Patrick Palka <>
PR c++/97328
* constexpr.c (init_subob_ctx): Don't punt on RANGE_EXPR
indexes, instead build a sub-aggregate initialization context
with no subobject.
2020-10-22 Patrick Palka <>
PR c++/96575
* constexpr.c (cxx_eval_constant_expression)
(potential_constant_expression_1) <case COMPOUND_EXPR>: Remove
now-redundant handling of COMPOUND_EXPR with EMPTY_CLASS_EXPR
second operand.
<case EMPTY_CLASS_EXPR>: Return true instead of false.
2020-10-22 Patrick Palka <>
PR c++/97511
* decl.c (duplicate_decls): Return NULL_TREE if
2020-10-20 Nathan Sidwell <>
* name-lookup.c (push_local_extern_decl_alias): Reconstextualize
alias' parm decls. Drop any default args.
2020-10-19 Iain Sandoe <>
PR c++/97438
* (struct coroutine_info): Add a field to
record that we emitted a promise type error.
(coro_promise_type_found_p): Check for the case that the
promise type contains both return_void and return_value.
Emit an error if so, with information about the wrong
type methods.
2020-10-16 Nathan Sidwell <>
PR c++/97460
* pt.c (push_template_decl): Check DECL_LANG_SPECIFIC in friend
2020-10-16 Nathan Sidwell <>
PR c++/96258
* parser.c (cp_parser_declaration): Make token2 point to EOF if
token1 was EOF.
2020-10-15 Jason Merrill <>
PR c++/95844
* decl.c (copy_fn_p): Return false for a function that is neither a
constructor nor an assignment operator.
(move_signature_fn_p): Likewise.
2020-10-15 Marek Polacek <>
PR c++/97406
PR c++/85901
* cxx-pretty-print.c (pp_cxx_type_specifier_seq): Handle OFFSET_TYPE.
(cxx_pretty_printer::abstract_declarator): Fix the printing of ')'.
(cxx_pretty_printer::direct_abstract_declarator): Handle OFFSET_TYPE.
(cxx_pretty_printer::type_id): Likewise. Print the abstract declarator
for pointers-to-members.
2020-10-14 Jason Merrill <>
PR c++/97358
* pt.c (check_for_bare_parameter_packs): Diagnose use of
capture pack.
2020-10-14 Nathan Sidwell <>
* cp-tree.h (struct lang_decl_fn): Adjust context comment.
(DECL_FRIEND_P): Replace with ...
* class.c (add_implicitly_declared_members): Detect friendly
spaceship from context.
* (remove_constraints): Use a checking assert.
(maybe_substitute_reqs_for): Use DECL_UNIQUE_FRIEND_P.
* decl.c (check_no_redeclaration_friend_default_args):
DECL_UNIQUE_FRIEND_P is signficant, not hiddenness.
(duplicate_decls): Adjust DECL_UNIQUE_FRIEND_P clearing.
(redeclaration_error_message): Use DECL_UNIQUE_FRIEND_P.
(start_preparsed_function): Correct in-class friend processing.
Refactor some initializers.
(grokmethod): Directly check friend decl-spec.
* decl2.c (grokfield): Check DECL_UNIQUE_FRIEND_P.
* friend.c (do_friend): Set DECL_UNIQUE_FRIEND_P first, remove
extraneous conditions. Don't re set it afterwards.
* name-lookup.c (lookup_elaborated_type_1): Simplify revealing
(do_pushtag): Likewise.
* pt.c (optimize_specialization_lookup_p): Check
(push_template_decl): Likewise. Drop unneeded friend setting.
(type_dependent_expression_p): Check DECL_UNIQUE_FRIEND_P.
2020-10-14 Nathan Sidwell <>
* name-lookup.c (push_local_extern_decl_alias): Push into alias's
namespace and use pushdecl.
(do_pushdecl_with_scope): Clarify behaviour.
2020-10-12 Martin Sebor <>
PR c++/97201
* error.c (dump_type_suffix): Handle both the C and C++ forms of
zero-length arrays.
2020-10-12 Martin Sebor <>
PR c++/96511
PR middle-end/96384
* init.c (warn_placement_new_too_small): Call builtin_objsize instead
of duplicating what it does.
2020-10-08 Jason Merrill <>
PR c++/96805
PR c++/96199
* pt.c (tsubst_aggr_type): Don't build a TYPENAME_TYPE when
(tsubst_template_decl): Use tsubst_aggr_type.
2020-10-08 Patrick Palka <>
PR c++/97052
* (build_type_constraint): Temporarily increment
processing_template_decl before calling build_concept_check.
* pt.c (make_constrained_placeholder_type): Likewise.
2020-10-08 Patrick Palka <>
PR c++/96229
* parser.c (cp_parser_class_specifier_1): Move call to
associate_classtype_constraints from here to ...
(cp_parser_class_head): ... here.
* pt.c (is_compatible_template_arg): Correct documentation to
say "argument is _no_ more constrained than the parameter".
2020-10-07 Marek Polacek <>
PR c++/97010
* pt.c (tsubst_copy_and_build) <case TEMPLATE_ID_EXPR>: Call
tsubst_copy_and_build explicitly instead of using the RECUR macro.
Handle a TEMPLATE_ID_EXPR with an IDENTIFIER_NODE as its operand.
<case CALL_EXPR>: Perform ADL for a TEMPLATE_ID_EXPR with an
IDENTIFIER_NODE as its operand.
2020-10-07 Patrick Palka <>
PR c++/88115
PR libstdc++/97273
* tree.c (cp_tree_equal) <case ALIGNOF_EXPR>: Return false if
2020-10-07 Nathan Sidwell <>
* cp-tree.h (struct language_function): Delete extern_decl_map.
* name-lookup.h (is_local_extern): Delete.
* name-lookup.c (set_local_extern_decl_linkage): Replace with ...
(push_local_extern_decl): ... this new function.
(do_pushdecl): Call new function after pushing new decl. Unhide
hidden non-functions.
(is_local_extern): Delete.
* decl.c (layout_var_decl): Do not allow VLA local externs.
* decl2.c (mark_used): Also mark DECL_LOCAL_DECL_ALIAS. Drop old
local-extern treatment.
* parser.c (cp_parser_oacc_declare): Deal with local extern aliases.
* pt.c (tsubst_expr): Adjust local extern instantiation.
* cp-gimplify.c (cp_genericize_r): Remap DECL_LOCAL_DECLs.
2020-10-07 Nathan Sidwell <>
* cp-tree.h (DECL_BUILTIN_P): Rename to ...
* decl.c (duplicate_decls): Adjust.
* name-lookup.c (anticipated_builtin_p): Adjust.
(do_nonmember_using_decl): Likewise.
2020-10-07 Nathan Sidwell <>
* tree.c (build_cp_fntype_variant): Clear
2020-10-06 Marek Polacek <>
PR c++/97297
* parser.c (cp_parser_direct_declarator): When checking if a
name is a function template declaration for the P0634R3 case,
look in uninstantiated templates too.
2020-10-05 Marek Polacek <>
* cp-tree.h (NON_UNION_CLASS_TYPE_P): Fix typo in a comment.
2020-10-05 Richard Biener <>
Jakub Jelinek <>
PR c++/97197
* error.c (dump_expr): Handle TARGET_MEM_REF.
2020-10-05 Nathan Sidwell <>
* name-lookup.c (maybe_add_fuzzy_decl): New.
(maybe_add_fuzzy_binding): New.
(consider_binding_level): Use intermediate sortable vector for
namespace bindings.
2020-10-02 Marek Polacek <>
PR c++/97014
* cxx-pretty-print.c (pp_cxx_template_argument_list): If the
argument is template_parm_object_p, print its DECL_INITIAL.
2020-10-02 Nathan Sidwell <>
* cp-tree.h (lang_decl_base): anticipated_p is not used for
* decl.c (duplicate_decls): Delete DECL_ANTICIPATED_management,
use was_hidden.
(cxx_builtin_function): Drop DECL_ANTICIPATED setting.
(xref_tag_1): Drop DECL_ANTICIPATED assert.
* name-lookup.c (name_lookup::adl_class_only): Drop
(name_lookup::search_adl): Always dedup.
(anticipated_builtin_p): Reimplement.
(do_pushdecl): Drop DECL_ANTICIPATED asserts & update.
(lookup_elaborated_type_1): Drop DECL_ANTICIPATED update.
(do_pushtag): Drop DECL_ANTICIPATED setting.
* pt.c (push_template_decl): Likewise.
(tsubst_friend_class): Likewise.
2020-10-02 Nathan Sidwell <>
* name-lookup.c (consider_decl): New, broken out of ...
(consider_binding_level): ... here. Iterate the hash table for
namespace bindings.
2020-10-02 Nathan Sidwell <>
* cp-tree.h (base_ctor_omit_inherited_parms): Declare.
* class.c (add_method): Refactor main loop, only pass fns to
(build_cdtor_clones): Rename bool parms.
(clone_cdtor): Call base_ctor_omit_inherited_parms.
* method.c (base_ctor_omit_inherited_parms): New, broken out of
(ctor_omit_inherited_parms): ... here, call it with
2020-10-02 Nathan Sidwell <>
* cp-tree.h (cp_fname_init): Delete declaration.
* decl.c (cp_fname_init): Merge into only caller ...
(cp_make_fname): ... here & refactor.
2020-10-02 Jason Merril <>
* call.c (build_operator_new_call): Set CALL_FROM_NEW_OR_DELETE_P.
(build_op_delete_call): Likewise.
* init.c (build_new_1, build_vec_delete_1, build_delete): Not here.
2020-10-02 Jason Merril <>
* lambda.c (call_from_lambda_thunk_p): New.
* cp-gimplify.c (cp_genericize_r): Use it.
* pt.c (tsubst_copy_and_build): Use it.
* typeck.c (check_return_expr): Use it.
* cp-tree.h: Declare it.
(CALL_FROM_NEW_OR_DELETE_P): Move to gcc/tree.h.
2020-10-01 Nathan Sidwell <>
* cp-tree.h (DECL_ANTICIPATED): Adjust comment.
* tree.c (ovl_insert): Delete DECL_HIDDEN_P assert.
(ovl_skip_hidden): Likewise.
2020-10-01 Nathan Sidwell <>
* name-lookup.c (pushdecl_top_level): Assert incoming context is
null, add global_namespace context.
(pushdecl_top_level_and_finish): Likewise.
* pt.c (get_template_parm_object): Clear decl context before
* semantics.c (finish_compound_literal): Likewise.
2020-10-01 Nathan Sidwell <>
* decl.c (lookup_and_check_tag): Refactor.
2020-10-01 Jakub Jelinek <>
PR c++/96994
* call.c (build_over_call): If obj_arg is non-NULL, return INIT_EXPR
setting obj_arg to call.
2020-10-01 Jakub Jelinek <>
PR c++/97195
* constexpr.c (cxx_eval_call_expression): Don't VERIFY_CONSTANT the
second argument.
2020-10-01 Marek Polacek <>
PR c++/90210
* pt.c (do_class_deduction): Don't prune explicit deduction guides
in copy-list-initialization. In copy-list-initialization, if an
explicit deduction guide was selected, give an error.
2020-09-30 Nathan Sidwell <>
* cp-tree.h (struct lang_decl_fn): Remove hidden_friend_p.
* call.c (add_function_candidate): Drop assert about anticipated
(build_new_op_1): Drop koenig lookup flagging for hidden friend.
* decl.c (duplicate_decls): Drop HIDDEN_FRIEND_P updating.
* name-lookup.c (do_pushdecl): Likewise.
(set_decl_namespace): Discover hiddenness from OVL_HIDDEN_P.
* pt.c (check_explicit_specialization): Record found_hidden
2020-09-29 Marek Polacek <>
PR c++/94695
* call.c (ref_conv_binds_directly_p): New function.
* cp-tree.h (ref_conv_binds_directly_p): Declare.
* parser.c (warn_for_range_copy): New function.
(cp_convert_range_for): Call it.
2020-09-29 Nathan Sidwell <>
* cp-tree.h (ovl_insert): Change final parm to hidden-or-using
* name-lookup.h (HIDDEN_TYPE_BINDING_P): New.
(struct cxx_binding): Add type_is_hidden flag.
* tree.c (ovl_insert): Change using_p parm to using_or_hidden,
(ovl_skip_hidden): Assert we never see a naked hidden decl.
* decl.c (xref_tag_1): Delete unhiding friend from here (moved to
* name-lookup.c (STAT_TYPE_HIDDEN_P, STAT_DECL_HIDDEN_P): New.
(name_lookup::search_namespace_only): Check new hidden markers.
(cxx_binding_make): Clear HIDDEN_TYPE_BINDING_P.
(update_binding): Update new hidden markers.
(lookup_name_1): Check HIDDEN_TYPE_BINDING_P and simplify friend
(lookup_elaborated_type_1): Use new hidden markers. Reveal the
decl here.
2020-09-29 Nathan Sidwell <>
* name-lookup.c (create_local_binding): Do not clear
(name_lookup::process_binding): Move done hidden-decl triage to ...
(name_lookup::search_namespace_only): ... here, its only caller.
(cxx_binding_make): Clear flags here.
(push_binding): Not here.
(pop_local_binding): RAII.
(update_binding): Refactor.
(do_pushdecl): Assert we're never revealing a local binding.
(do_pushdecl_with_scope): Directly call do_pushdecl.
(get_class_binding): Do not clear LOCAL_BINDING_P here.
* pt.c (push_template_decl): Set friend & anticipated before
2020-09-29 Nathan Sidwell <>
* name-lookup.c (update_binding): We never meet two implicit
(do_pushdecl): Adjust set_identifier_type_value_with_scope calls.
(set_identifier_type_value_with_scope): Do not update binding in
the namespace-case. Assert it is already there.
2020-09-25 Nathan Sidwell <>
* cp-tree.h (duplicate_decls): Replace 'is_friend' with 'hiding'
and add 'was_hidden'.
* name-lookup.h (pushdecl_namespace_level): Replace 'is_friend'
with 'hiding'.
(pushdecl): Likewise.
(pushdecl_top_level): Drop is_friend parm.
* decl.c (check_no_redeclaration_friend_default_args): Rename parm
(duplicate_decls): Replace 'is_friend' with 'hiding'
and 'was_hidden'. Do minimal adjustments in body.
(cxx_builtin_function): Pass 'hiding' to pushdecl.
* friend.c (do_friend): Pass 'hiding' to pushdecl.
* name-lookup.c (supplement_binding_1): Drop defaulted arg to
(update_binding): Replace 'is_friend' with 'hiding'. Drop
defaulted arg to duplicate_decls.
(do_pushdecl): Replace 'is_friend' with 'hiding'. Assert no
surprise hidhing. Adjust duplicate_decls calls to inform of old
decl's hiddennes.
(pushdecl): Replace 'is_friend' with 'hiding'.
(set_identifier_type_value_with_scope): Adjust update_binding
(do_pushdecl_with_scope): Replace 'is_friend' with 'hiding'.
(pushdecl_outermost_localscope): Drop default arg to
(pushdecl_namespace_level): Replace 'is_friend' with 'hiding'.
(pushdecl_top_level): Drop is_friend parm.
* pt.c (register_specialization): Comment duplicate_decls call
(push_template_decl): Commont pushdecl_namespace_level.
(tsubst_friend_function, tsubst_friend_class): Likewise.
2020-09-25 Nathan Sidwell <>
* name-lookup.h (enum tag_scope): Replace with ...
(enum class TAG_how): ... this. Add HIDDEN_FRIEND value.
(lookup_type_scope): Replace with ...
(lookup_elaborated_type): ... this.
(pushtag): Use TAG_how, not tag_scope.
* cp-tree.h (xref_tag): Parameter is TAG_how, not tag_scope.
* decl.c (lookup_and_check_tag): Likewise. Adjust.
(xref_tag_1, xref_tag): Likewise. adjust.
(start_enum): Adjust lookup_and_check_tag call.
* name-lookup.c (lookup_type_scope_1): Rename to ...
(lookup_elaborated_type_1) ... here. Use TAG_how, not tag_scope.
(lookup_type_scope): Rename to ...
(lookup_elaborated_type): ... here. Use TAG_how, not tag_scope.
(do_pushtag): Use TAG_how, not tag_scope. Adjust.
(pushtag): Likewise.
* parser.c (cp_parser_elaborated_type_specifier): Adjust.
(cp_parser_class_head): Likewise.
2020-09-25 Nathan Sidwell <>
* cp-tree.h (DECL_BUILTIN_P): New.
* decl.c (duplicate_decls): Use it. Do not treat omp-udr as a
* name-lookup.c (anticipated_builtin): Use it.
(set_decl_context_in_fn): Function-scope OMP UDRs have function context.
(do_nonmember_using_decl): Use DECL_BUILTIN_P.
* parser.c (cp_parser_omp_declare_reduction): Function-scope OMP
UDRs have function context. Assert we never find a valid duplicate.
* pt.c (tsubst_expr): Function-scope OMP UDRs have function context.
2020-09-24 Nathan Sidwell <>
* cp-tree.h (duplicate_decls): Default is_friend to false.
(xref_tag): Default tag_scope & tpl_header_p to ts_current & false.
(push_template_decl_real): Default is_friend to false. Rename to
(push_template_decl): ... here. Delete original decl.
* name-lookup.h (pushdecl_namespace_level): Default is_friend to
(pushtag): Default tag_scope to ts_current.
* (morph_fn_to_coro): Drop default args to xref_tag.
* decl.c (start_decl): Drop default args to duplicate_decls.
(start_enum): Drop default arg to pushtag & xref_tag.
(start_preparsed_function): Pass DECL_FRIEND_P to
(grokmethod): Likewise.
* friend.c (do_friend): Rename push_template_decl_real calls.
* lambda.c (begin_lamnbda_type): Drop default args to xref_tag.
(vla_capture_type): Likewise.
* name-lookup.c (maybe_process_template_type_declaration): Rename
push_template_decl_real call.
(pushdecl_top_level_and_finish): Drop default arg to
* pt.c (push_template_decl_real): Assert no surprising friend
functions. Rename to ...
(push_template_decl): ... here. Delete original function.
(lookup_template_class_1): Drop default args from pushtag.
(instantiate_class_template_1): Likewise.
* ptree.c (debug_overload): Print hidden and using markers.
* rtti.c (init_rtti_processing): Drop refault args from xref_tag.
(build_dynamic_cast_1, tinfo_base_init): Likewise.
* semantics.c (begin_class_definition): Drop default args to
2020-09-24 Nathan Sidwell <>
PR c++/97186
* pt.c (maybe_instantiate_noexcept): Local externs are never
member fns.
2020-09-23 Nathan Sidwell <>
* name-lookup.h (typedef cxx_binding): Delete tdef.
(typedef cp_binding_level): Likewise.
(struct cxx_binding): Flags are bools.
2020-09-23 Nathan Sidwell <>
PR c++/97171
* pt.c (tsubst_copy) [FUNCTION_DECL,VAR_DECL]: Retrieve local
specialization for DECL_LOCAL_P decls.
2020-09-22 Patrick Palka <>
PR c++/95310
* pt.c (corresponding_template_parameter): Define.
(keep_template_parm): Use it to adjust the given template
parameter to the corresponding in-scope one from ctx_parms.
2020-09-22 Nathan Sidwell <>
* cp-tree.h (xref_tag_from_type): Don't declare.
* decl.c (xref_tag_from_type): Delete.
* pt.c (lookup_template_class_1): Erroneously located class
definitions just give error_mark, don't try and inject it into the
2020-09-22 Jakub Jelinek <>
PR c++/97145
* constexpr.c (cxx_eval_builtin_function_call): Return void_node for
calls to __sanitize_ptr_{sub,cmp} builtins.
2020-09-22 Nathan Sidwell <>
* pt.c (instantiate_class_template_1): Do not repush and unhide
injected friend.
2020-09-21 Marek Polacek <>
PR c++/90583
DR 1722
* lambda.c (maybe_add_lambda_conv_op): Mark the conversion function
as noexcept.
2020-09-21 Marek Polacek <>
* pt.c (deduction_guides_for): Add a bool parameter. Set it.
(do_class_deduction): Warn when CTAD succeeds but the type doesn't
have any explicit deduction guides.
2020-09-21 Nathan Sidwell <>
* decl.c (xref_tag_1): Use IDENTIFIER_LAMBDA_P to detect lambdas.
* lambda.c (begin_lambda_type): Use ts_current to push the tag.
* name-lookup.h (enum tag_scope): Drop ts_lambda.
2020-09-21 Marek Polacek <>
PR c++/97099
* decl.c (redeclaration_error_message): Detect a redeclaration of
deduction guides.
2020-09-19 Sandra Loosemore <>
* cp-gimplify.c (enum bc_t, bc_label): Move to c-family.
(begin_bc_block, finish_bc_block, get_bc_label): Likewise.
(genericize_cp_loop): Likewise.
(genericize_for_stmt, genericize_while_stmt): Likewise.
(genericize_do_stmt, genericize_switch_stmt): Likewise.
(genericize_continue_stmt, genericize_break_stmt): Likewise.
(genericize_omp_for_stmt): Likewise.
(cp_genericize_r): Call c_genericize_control_stmt instead of
above functions directly.
(cp_genericize): Call save_bc_state and restore_bc_state instead
of manipulating bc_label directly.
* cp-objcp-common.c (cxx_block_may_fallthru): Defer to
c_block_may_fallthru instead of handling SWITCH_STMT here.
(cp_common_init_ts): Move handling of loop and switch-related
statements to c-family.
* cp-tree.def (FOR_STMT, WHILE_STMT, DO_STMT): Move to c-family.
(DO_COND, DO_BODY): Likewise.
* cxx-pretty-print.c (cxx_pretty_printer::statement): Move code
to handle structured loop and switch tree nodes to c-family.
* dump.c (cp_dump_tree): Likewise.
2020-09-19 Patrick Palka <>
PR c++/96531
PR c++/97103
* (map_arguments): Call template_parm_to_arg
in the self-mapping case.
(finish_shorthand_constraint): No need to build a TREE_LIST
before calling template_parm_to_arg.
* pt.c (template_parm_to_arg): Rewrite to handle TEMPLATE_PARM_P
nodes as well as DECL_TEMPLATE_PARM_P nodes, and to make the
overlying TREE_LIST node optional.
(keep_template_parm): Don't record a BOUND_TEMPLATE_TEMPLATE_PARM,
instead record its corresponding TEMPLATE_TEMPLATE_PARM.
(convert_generic_types_to_packs): Don't call
2020-09-19 Patrick Palka <>
PR c++/97051
* (satisfy_atom): Pass true as the
manifestly_const_eval argument to maybe_constant_value.
2020-09-18 Jason Merrill <>
PR bootstrap/97118
* decl.c (complete_vars): Only call layout_var_decl if completing
the type succeeded.
2020-09-18 Jason Merrill <>
* decl.c (complete_vars): Call layout_var_decl.
2020-09-17 Patrick Palka <>
PR c++/96409
PR c++/96410
* (tsubst_requires_expr): Use REQUIRES_EXPR_PARMS
add_extra_args and build_extra_args to defer substitution until
we have all the template arguments.
(finish_requires_expr): Adjust the call to build_min so that
* cp-tree.def (REQUIRES_EXPR): Give it a third operand.
(add_extra_args, build_extra_args): Declare.
2020-09-16 Nathan Sidwell <>
* cp-tree.h (cp_check_omp_declare_reduction): Return bool.
* semantics.c (cp_check_omp_declare_reduction): Return true on for
* pt.c (push_template_decl_real): OMP reductions do not get a
template header.
(tsubst_function_decl): Remove special casing for local decl omp
(tsubst_expr): Call instantiate_body for a local omp reduction.
(instantiate_body): Add nested_p parm, and deal with such
(instantiate_decl): Reject FUNCTION_SCOPE entities, adjust
instantiate_body call.
2020-09-16 Nathan Sidwell <>
* pt.c (instantiate_body): Remove 'nested' var, simplify
push_to_top logic.
2020-09-16 Nathan Sidwell <>
* pt.c (instantiate_body): New, broken out of ..
(instantiate_decl): ... here. Call it.
2020-09-15 Nathan Sidwell <>
* pt.c (push_template_decl_real): OMP reductions retain a template
(tsubst_function_decl): Likewise.
2020-09-15 Tobias Burnus <>
PR fortran/96668
* cp-gimplify.c (cxx_omp_finish_clause): Add bool openacc arg.
* cp-tree.h (cxx_omp_finish_clause): Likewise
* semantics.c (handle_omp_for_class_iterator): Update call.
2020-09-14 Marek Polacek <>
* pt.c (push_template_decl_real): Use VAR_OR_FUNCTION_DECL_P.
2020-09-14 Nathan Sidwell <>
* pt.c (push_template_decl_real): Don't attach a template head to
local externs.
(tsubst_function_decl): Add support for headless local extern
(tsubst_decl): Add support for headless local extern decls.
2020-09-11 Nathan Sidwell <>
* decl.c (grokfndecl): Don't attach to local extern.
2020-09-11 Nathan Sidwell <>
* parser.c (cp_parser_objc_method_definition_list): Reimplement
loop, make sure we pop scope.
2020-09-11 Marek Polacek <>
* cp-tree.h (LOOKUP_CONSTINIT): Remove.
* decl.c (duplicate_decls): Set DECL_DECLARED_CONSTINIT_P.
(check_initializer): Use DECL_DECLARED_CONSTINIT_P instead of
(cp_finish_decl): Don't set DECL_DECLARED_CONSTINIT_P. Use
(grokdeclarator): Set DECL_DECLARED_CONSTINIT_P.
* decl2.c (grokfield): Don't handle LOOKUP_CONSTINIT.
* parser.c (cp_parser_decomposition_declaration): Remove
(cp_parser_init_declarator): Likewise.
* pt.c (tsubst_expr): Likewise.
(instantiate_decl): Likewise.
* typeck2.c (store_init_value): Use DECL_DECLARED_CONSTINIT_P instead
2020-09-10 Nathan Sidwell <>
* cp-tree.h (TINFO_VAR_DECLARED_CONSTINIT): Replace with ...
* decl.c (start_decl): No need to retrofit_lang_decl for constinit
(cp_finish_decl): Use DECL_DECLARED_CONSTINIT_P.
* pt.c (tsubst_decl): No need to handle constinit flag
(tsubst_expr): Or here.
2020-09-10 Nathan Sidwell <>
* cp-tree.h (DECL_LOCAL_FUNCTION_P): Rename to ...
(DECL_LOCAL_DECL_P): ... here. Accept both fns and vars.
* decl.c (start_decl): Set DECL_LOCAL_DECL_P for local externs.
(omp_declare_variant_finalize_one): Use DECL_LOCAL_DECL_P.
(local_variable_p): Simplify.
* name-lookup.c (set_decl_context_in_fn): Assert DECL_LOCAL_DECL_P
is as expected. Simplify.
(do_pushdecl): Don't set decl_context_in_fn for friends.
(is_local_extern): Simplify.
* call.c (equal_functions): Use DECL_LOCAL_DECL_P.
* parser.c (cp_parser_postfix_expression): Likewise.
(cp_parser_omp_declare_reduction): Likewise.
* pt.c (check_default_tmpl_args): Likewise.
(tsubst_expr): Assert nested reduction function is local.
(type_dependent_expression_p): Use DECL_LOCAL_DECL_P.
* semantics.c (finish_call_expr): Likewise.
2020-09-09 Marek Polacek <>
PR c++/77841
* decl.c (reshape_init): If we're initializing a char array from
a string-literal that is enclosed in braces, unwrap it.
* init.c (build_new_1): Don't handle string-initializers here.
(build_new): Handle new-expression with paren-init when the
array bound is known. Always pass string constants to build_new_1
enclosed in braces. Don't handle string-initializers in any
special way.
2020-09-09 Marek Polacek <>
PR c++/95164
* decl.c (reshape_init_r): When initializing an aggregate member
with an initializer from an initializer-list, also consider
2020-09-09 Nathan Sidwell <>
* parser.c (cp_parser_omp_declare_reduction): Refactor to avoid
code duplication. Update DECL_TI_TEMPLATE's context.
* pt.c (tsubst_expr): For OMP reduction function, set context to
global_namespace before pushing.
(tsubst_omp_udr): Assert current_function_decl, add comment about
decl context.
2020-09-09 Patrick Palka <>
PR c++/96647
* class.c (resolve_address_of_overloaded_function): Check
constraints_satisfied_p and perform return-type deduction via
maybe_instantiate_decl when considering non-template functions
in the overload set.
* cp-tree.h (maybe_instantiate_decl): Declare.
* decl2.c (maybe_instantiate_decl): Remove static.
2020-09-04 Jason Merrill <>
* expr.c (mark_use): Use iloc_sentinel.
2020-09-03 Jakub Jelinek <>
PR c++/96901
* constexpr.c (fundef_copies_table): Change type from
hash_map<tree, tree> * to decl_tree_map *.
2020-09-03 Marek Polacek <>
PR c++/92812
* cp-tree.h (do_aggregate_paren_init): Declare.
* decl.c (do_aggregate_paren_init): New.
(grok_reference_init): Use it.
(check_initializer): Likewise.
* init.c (perform_member_init): Handle initializing an array from
a ()-list. Use do_aggregate_paren_init.
2020-09-03 Jakub Jelinek <>
PR c++/96862
* constexpr.c (cxx_eval_outermost_constant_expr): Temporarily disable
flag_rounding_math during manifestly constant evaluation.
2020-09-01 Marek Polacek <>
PR c++/77841
* init.c (build_new_1): Call reshape_init.
2020-09-01 Jakub Jelinek <>
PR c++/96867
* semantics.c (handle_omp_array_sections_1): Test
2020-08-31 Marek Polacek <>
Jason Merrill <>
PR c++/93529
* call.c (build_new_method_call_1): Use build_constructor_from_vec
instead of build_tree_list_vec + build_constructor_from_list.
* init.c (build_new_1): Handle new char[]{"foo"}. Use
build_constructor_from_vec instead of build_tree_list_vec +
(build_new): Deduce the array size in new-expression if not
present. Handle ()-init. Handle initializing an array from
a string literal.
* parser.c (cp_parser_new_type_id): Leave [] alone.
(cp_parser_direct_new_declarator): Allow [].
* pt.c (type_dependent_expression_p): In a NEW_EXPR, consider
array types whose dimension has to be deduced type-dependent.
2020-08-27 Martin Liska <>
* class.c (build_vtbl_initializer): Set exact argument of a vector
growth function to true.
* (get_mapped_args): Likewise.
* decl.c (cp_maybe_mangle_decomp): Likewise.
(cp_finish_decomp): Likewise.
* parser.c (cp_parser_omp_for_loop): Likewise.
* pt.c (canonical_type_parameter): Likewise.
* rtti.c (get_pseudo_ti_init): Likewise.
2020-08-26 Nathan Sidwell <>
* decl.c (poplevel): A local-binding tree list holds the name in
* name-lookup.c (update_local_overload): Add id to TREE_PURPOSE.
(lookup_name_1): Deal with local-binding error_mark_node marker.
(op_unqualified_lookup): Return error_mark_node for 'nothing
found'. Retain global binding, check class binding here.
(maybe_save_operator_binding): Reimplement to always cache a
(push_operator_bindings): Deal with 'ignore' marker.
2020-08-25 Tobias Burnus <>
PR c/96678
* semantics.c (handle_omp_array_sections_1): Talk about
array function parameter in the error message.
2020-08-25 Jakub Jelinek <>
PR c++/96721
* cp-tree.h (build_trivial_dtor_call): Add bool argument defaulted
to false.
* call.c (build_trivial_dtor_call): Add NO_PTR_DEREF argument. If
instance is a pointer and NO_PTR_DEREF is true, clobber the pointer
rather than what it points to.
* semantics.c (finish_call_expr): Call build_trivial_dtor_call with
true as NO_PTR_DEREF.
2020-08-25 Jason Merrill <>
PR c++/95428
* optimize.c (populate_clone_array): Revert PR70462 change.
(maybe_clone_body): Likewise.
2020-08-24 Nathan Sidwell <>
* ptree.c (debug_overload): New.
2020-08-19 Jason Merrill <>
DR 2369
* cp-tree.h (push_tinst_level, push_tinst_level_loc): Declare.
* (satisfy_declaration_constraints):
Use add_outermost_template_args and push_tinst_level.
* pt.c (add_outermost_template_args): Handle getting
a TEMPLATE_DECL as the first argument.
(push_tinst_level, push_tinst_level_loc): No longer static.
(fn_type_unification): Check satisfaction before non-dependent
2020-08-18 Nathan Sidwell <>
* cp-tree.h (SET_TYPE_TEMPLTE_INFO): Do not deal with ALIAS templates.
* pt.c (lookup_template_class_1): Special-case alias template
template_info setting.
2020-08-18 Jason Merrill <>
PR c++/96199
* pt.c (tsubst_aggr_type): Rewrite in C++17, too.
(maybe_dependent_member_ref): Likewise.
(build_deduction_guide): Re-substitute template parms.
* cp-tree.h (struct push_nested_class_guard): New.
* (get_normalized_constraints_from_decl): Use it.
2020-08-18 Jason Merrill <>
PR c++/96199
* pt.c (maybe_dependent_member_ref): New.
(tsubst_copy) [CONST_DECL]: Use it.
[VAR_DECL]: Likewise.
(tsubst_aggr_type): Handle nested type.
2020-08-18 Nathan Sidwell <>
* name-lookup.c (qualify_lookup): Drop lambda checking here.
Reorder namespace & type checking.
(lookup_name_1): Do hidden lambda checking here.
2020-08-14 Nathan Sidwell <>
* name-lookup.h (lookup_name_real, lookup_name_nonclass): Rename
to ...
(lookup_name): ... these new overloads.
* name-lookup.c (identifier_type_value_1): Rename lookup_name_real
(lookup_name_real_1): Rename to ...
(lookup_name_1): ... here.
(lookup_name_real): Rename to ...
(lookup_name): ... here. Rename lookup_name_real_1 call.
(lookup_name_nonclass): Delete.
* call.c (build_operator_new_call): Rename lookup_name_real call.
(add_operator_candidates): Likewise.
(build_op_delete_call): Rename lookup_name_nonclass call.
* parser.c (cp_parser_lookup_name): Likewise.
* pt.c (tsubst_friend_class, lookup_init_capture_pack): Likewise.
(tsubst_expr): Likewise.
* semantics.c (capture_decltype): Likewise.
2020-08-14 Nathan Sidwell <>
* cp-tree.h (LOOKUP_HIDDEN): Delete.
(LOOKUP_PREFER_RVALUE): Adjust initializer.
* name-lookup.h (enum class LOOK_want): Add HIDDEN_FRIEND and
(lookup_name_real): Drop flags parm.
(lookup_qualified_name): Drop find_hidden parm.
* name-lookup.c (class name_lookup): Drop hidden field, adjust
(name_lookup::add_overload): Check want for hiddenness.
(name_lookup::process_binding): Likewise.
(name_lookup::search_unqualified): Likewise.
(identifier_type_value_1): Adjust lookup_name_real call.
(set_decl_namespace): Adjust name_lookup ctor.
(qualify_lookup): Drop flags parm, use want for hiddenness.
(lookup_qualified_name): Drop find_hidden parm.
(lookup_name_real_1): Drop flags parm, adjust qualify_lookup
(lookup_name_real): Drop flags parm.
(lookup_name_nonclass, lookup_name): Adjust lookup_name_real
(lookup_type_scope_1): Adjust qualify_lookup calls.
* call.c (build_operator_new_call): Adjust lookup_name_real call.
(add_operator_candidates): Likewise.
* (morph_fn_to_coro): Adjust lookup_qualified_name
* parser.c (cp_parser_lookup_name): Adjust lookup_name_real calls.
* pt.c (check_explicit_specialization): Adjust
lookup_qualified_name call.
(deduction_guides_for): Likewise.
(tsubst_friend_class): Adjust lookup_name_real call.
(lookup_init_capture_pack): Likewise.
(tsubst_expr): Likewise, don't look in namespaces.
* semantics.c (capture_decltype): Adjust lookup_name_real. Don't
look in namespaces.
2020-08-14 Jason Merrill <>
PR c++/90254
PR c++/93711
* cp-tree.h (unsafe_return_slot_p): Declare.
* call.c (is_base_field_ref): Rename to unsafe_return_slot_p.
(build_over_call): Check unsafe_return_slot_p.
(build_special_member_call): Likewise.
* init.c (expand_default_init): Likewise.
* typeck2.c (split_nonconstant_init_1): Likewise.
2020-08-14 Nathan Sidwell <>
* name-lookup.h (enum class LOOK_want): New.
(operator|, operator&): Overloads for it.
(lookup_name_real): Replace prefer_type & namespaces_only with
LOOK_want parm.
(lookup_qualified_name): Replace prefer_type with LOOK_want.
(lookup_name_prefer_type): Replace with ...
(lookup_name): ... this. New overload with LOOK_want parm.
* name-lookup.c (struct name_lookup): Replace flags with want and
hidden fields. Adjust constructors.
(name_lookyp::add_overload): Correct hidden stripping test. Update
for new LOOK_want type.
(name_lookup::process_binding): Likewise.
(name_lookup::search_unqualified): Use hidden flag.
(identifier_type_value_1): Adjust lookup_name_real call.
(set_decl_namespace): Adjust name_lookup ctor.
(lookup_flags): Delete.
(qualify_lookup): Add LOOK_want parm, adjust.
(lookup_qualified_name): Replace prefer_type parm with LOOK_want.
(lookup_name_real_1): Replace prefer_type and namespaces_only with
LOOK_want parm.
(lookup_name_real): Likewise.
(lookup_name_nonclass, lookup_name): Adjust lookup_name_real call.
(lookup_name_prefer_type): Rename to ...
(lookup_name): ... here. New overload with LOOK_want parm.
(lookup_type_scope_1): Adjust qualify_lookup calls.
* call.c (build_operator_new_call)
(add_operator_candidates): Adjust lookup_name_real calls.
* (find_coro_traits_template_decl)
(find_coro_handle_template_decl, morph_fn_to_coro): Adjust
lookup_qualified_name calls.
* cp-objcp-common.c (identifier_global_tag): Likewise.
* decl.c (get_tuple_size, get_tuple_decomp_init): Likewise.
(lookup_and_check_tag): Use lookup_name overload.
* parser.c (cp_parser_userdef_numeric_literal): Adjust
lookup_qualified_name call.
(prefer_arg_type): Drop template_mem_access parm, return LOOK_want
(cp_parser_lookup_name): Adjust lookup_member, lookup_name_real
* pt.c (check_explicit_specialization): Adjust lookup_qualified_name
(tsubst_copy_and_build, tsubst_qualified_name): Likewise
(deduction_guides_for): Likewise.
(tsubst_friend_class): Adjust lookup_name_real call.
(lookup_init_capture, tsubst_expr): Likewise.
* rtti.c (emit_support_tinfos): Adjust lookup_qualified_name call.
* semantics.c (omp_reduction_lookup): Likewise.
(capture_decltype): Adjust lookup_name_real call.
2020-08-13 Nathan Sidwell <>
* name-lookup.h (enum class LOOK_where): New.
(operator|, operator&): Overloads for it.
(lookup_name_real): Replace NONCLASS & BLOCK_P parms with WHERE.
* name-lookup.c (identifier_type_value_w): Adjust
lookup_name_real call.
(lookup_name_real_1): Replace NONCLASS and BLOCK_P parameters
with WHERE bitmask. Don't search namespaces if not asked to.
(lookup_name_real): Adjust lookup_name_real_1 call.
(lookup_name_nonclass, lookup_name)
(lookup_name_prefer_type): Likewise.
* call.c (build_operator_new_call)
(add_operator_candidates): Adjust lookup_name_real calls.
* parser.c (cp_parser_lookup_name): Likewise.
* pt.c (tsubst_friend_class, lookup_init_capture_pack)
(tsubst_expr): Likewise.
* semantics.c (capture_decltype): Likewise.
2020-08-13 Marek Polacek <>
PR c++/92812
* typeck.c (build_static_cast_1): Implement P1975R0 by allowing
static_cast to aggregate type.
2020-08-10 Jakub Jelinek <>
PR c++/96497
* constexpr.c (cxx_eval_binary_expression): For SPACESHIP_EXPR, tail
call cxx_eval_constant_expression after genericize_spaceship to avoid
undesirable further VERIFY_CONSTANT.
2020-08-10 Patrick Palka <>
* pt.c (resolve_overloaded_unification): Drop functions with
unsatisfied constraints.
(resolve_nondeduced_context): Likewise.
2020-08-05 Patrick Palka <>
Jason Merrill <>
PR c++/96282
* constexpr.c (cxx_eval_vec_init_1): Truncate ctx->ctor and
then clear CONSTRUCTOR_NO_CLEARING on each appended element
initializer if we're initializing a previously zero-initialized
array object.
2020-08-04 Marek Polacek <>
PR c++/96082
* parser.c (cp_parser_elaborated_type_specifier): Allow
'template' following ::.
2020-08-04 Nathan Sidwell <>
* parser.c (cp_parser_explicit_specialization): Refactor
to avoid leak of num_template_parameter_lists value.
2020-08-04 Patrick Palka <>
PR c++/94024
* init.c (sort_mem_initializers): Preserve TREE_TYPE of the
member initializer list node.
(emit_mem_initializers): Set input_location when performing each
member initialization.
* parser.c (cp_parser_mem_initializer): Attach the source
location of this initializer to a dummy EMPTY_CLASS_EXPR
within the TREE_TYPE of the list node.
* pt.c (tsubst_initializer_list): Preserve TREE_TYPE of the
member initializer list node.
2020-08-03 Marek Polacek <>
* cp-tree.h (after_nsdmi_defaulted_late_checks): Remove.
2020-08-03 Marek Polacek <>
DR 2032
PR c++/96218
* pt.c (check_default_tmpl_args): Also consider variable
2020-07-31 Jakub Jelinek <>
PR c++/96182
* decl.c (finish_function): In constexpr functions use for C++14 and
later error instead of warning if no return statement is present and
diagnose it regardless of warn_return_type. Move the warn_return_type
diagnostics earlier in the function.
2020-07-31 Martin Sebor <>
PR c++/96003
* class.c (build_base_path): Set no-warning bit on the synthesized
conditional expression in static_cast.
2020-07-31 Richard Biener <>
PR debug/96383
* cp-objcp-common.h (LANG_HOOKS_FINALIZE_EARLY_DEBUG):
Define to c_common_finalize_early_debug.
2020-07-31 Patrick Palka <>
PR c++/96197
* constexpr.c (cxx_eval_constant_expression) <case CONST_DECL>:
Pass false to decl_constant_value and decl_really_constant_value
so that they don't unshare their result.
* cp-tree.h (decl_constant_value): New declaration with an added
bool parameter.
(decl_really_constant_value): Add bool parameter defaulting to
true to existing declaration.
* init.c (constant_value_1): Add bool parameter which controls
whether to unshare the initializer before returning. Call
unshare_expr at most once.
(scalar_constant_value): Pass true to constant_value_1's new
bool parameter.
(decl_really_constant_value): Add bool parameter and forward it
to constant_value_1.
(decl_constant_value): Likewise, but instead define a new
overload with an added bool parameter.
2020-07-30 Patrick Palka <>
PR c++/64194
* pt.c (resolve_overloaded_unification): If the function
template specialization has a placeholder return type,
then instantiate it before attempting unification.
2020-07-30 Patrick Palka <>
PR c++/95486
* pt.c (alias_ctad_tweaks): Call remove_constraints before
calling set_constraints.
2020-07-30 Patrick Palka <>
PR c++/96106
* pt.c (reduce_template_parm_level): Propagate DECL_VIRTUAL_P
from the original TEMPLATE_PARM_DECL to the new lowered one.
2020-07-30 Patrick Palka <>
PR c++/96164
* (constraints_satisfied_p): Return true if
* pt.c (do_type_instantiation): Update a paragraph taken from
[temp.explicit] to reflect the latest specification. Don't
instantiate a member with unsatisfied constraints.
2020-07-29 Jason Merrill <>
PR c++/91427
* cp-tree.h (IMPLICIT_RVALUE_P): New.
(enum cp_lvalue_kind_flags): Add clk_implicit_rval.
(implicit_rvalue_p, set_implicit_rvalue_p): New.
* call.c (reference_binding): Check clk_implicit_rval.
(build_over_call): Adjust C++20 implicit move.
* (finish_co_return_stmt): Simplify implicit move.
* except.c (build_throw): Adjust C++20 implicit move.
* pt.c (tsubst_copy_and_build) [STATIC_CAST_EXPR]: Propagate
* tree.c (lvalue_kind): Set clk_implicit_rval.
* typeck.c (treat_lvalue_as_rvalue_p): Overhaul.
(maybe_warn_pessimizing_move): Adjust.
(check_return_expr): Adjust C++20 implicit move.
2020-07-29 Jason Merrill <>
PR c++/91212
* call.c (build_over_call): Don't call a const ref
overload for implicit move.
2020-07-28 Nathan Sidwell <>
* cp-gimplify.c (cp_genericize_r): Set IMPORTED_DECL's context.
* cp-objcp-common.c (cp_pushdecl): Set decl's context.
* decl.c (grokfndecl): Make DECL_CONTEXT setting clearer.
2020-07-28 Nathan Sidwell <>
* class.c (fixup_type_variants): Copy TYPE_SIZE and
(finish_struct): Call it.
2020-07-28 Nathan Sidwell <>
* ptree.c (cxx_print_decl): Better indentation.
2020-07-28 Jakub Jelinek <>
Mark Wielaard <>
PR c++/96328
* parser.c (cp_lexer_safe_previous_token): Don't call
cp_lexer_previous_token, instead inline it by hand and return NULL
instead of failing assertion if all previous tokens until the first
one are purged.
(cp_parser_error_1): Optimize - only call cp_lexer_safe_previous_token
if token->type is CPP_NAME. Use cp_lexer_safe_previous_token instead
of cp_lexer_previous_token for the missing_token_desc != RT_NONE
case too.
2020-07-27 Nathan Sidwell <>
* cp-tree.h (enum cp_tree_index): Add CPTI_AS_BASE_IDENTIFIER.
(as_base_identifier): Define.
* decl.c (initialize_predifined_identifiers): Initialize as_base
* class.c (layout_class_type): Name the as-base type. Zap
NSDMI its fields may have.
2020-07-22 Nathan Sidwell <>
* class.c (maybe_add_class_template_decl_list): Don't add CONST_DECLs.
2020-07-22 Nathan Sidwell <>
* typeck.c (structural_comptypes): [DECLTYPE_TYPE] break
apart complex if.
2020-07-22 Nathan Sidwell <>
* decl.c (decls_match): Move variables into scopes
they're needed in.
(duplicate_decls): Use STRIP_TEMPLATE.
(build_typename_type): Move var decls to their assignments.
(begin_function_body): Likewise.
* decl2.c (get_guard): Likewise.
(mark_used): Use true for truthiness.
* error.c (dump_aggr_type): Hold the decl in a var called
'decl', not 'name'.
2020-07-22 Nathan Sidwell <>
* cp-tree.h (struct tree_lambda_expr): Shrink
default_capture_mode & discriminator.
2020-07-22 Nathan Sidwell <>
* mangle.c (decl_is_template_id): Rename to ...
(maybe_template_info): ... here. Return the template info,
rather than use a pointer. Adjust all callers.
(find_substitution): Use template_args_equal, rather than
local check.
2020-07-22 Tobias Burnus <>
* parser.c (cp_parser_omp_clause_hint): Require nonnegative hint.
(cp_parser_omp_critical): Permit hint(0) clause without named critical.
* pt.c (tsubst_expr): Re-check the latter for templates.
2020-07-21 Sunil K Pandey <>
PR target/95237
* decl.c (cp_finish_decl): Call target hook
lower_local_decl_alignment to lower local decl alignment.
2020-07-21 Nathan Sidwell <>
* parser.c (cp_lexer_consume_token): Drop PRAGMA_EOL assert.
(cp_parser_skip_to_closing_parenthesis_1): Only pass start token
to pragma skipper if recovering.
(cp_parser_skip_to_pragma_eol): Only purge and change pragma
state when recovering.
2020-07-20 Jason Merrill <>
* pt.c (type_dependent_expression_p): A pseudo-dtor can be
* semantics.c (finish_call_expr): Use build_trivial_dtor_call for
(finish_pseudo_destructor_expr): Leave type NULL for dependent arg.
2020-07-20 Jason Merrill <>
* mangle.c (write_base_ref): New.
(write_expression): Use it for base field COMPONENT_REFs.
* pt.c (invalid_tparm_referent_p): Canonicalize the type
of array offsets. Allow subobjects.
2020-07-20 Jason Merrill <>
* pt.c (collect_ctor_idx_types): Add 'const' when deducing from
a string constant.
2020-07-17 Marek Polacek <>
PR c++/79815
* decl.c (grokdeclarator): Detect cv-qual decltype(auto).
* pt.c (do_auto_deduction): Likewise.
2020-07-16 Iain Sandoe <>
PR c++/95591
PR c++/95599
PR c++/95823
PR c++/95824
PR c++/95895
* (struct coro_ret_data): Delete.
(coro_maybe_expand_co_return): Delete.
(co_return_expander): Delete.
(expand_co_returns): Delete.
(co_await_find_in_subtree): Remove unused name.
(build_actor_fn): Remove unused parm, remove handling
for co_return expansion.
(register_await_info): Demote duplicate info message to a
(coro_make_frame_entry): Move closer to use site.
(struct susp_frame_data): Add fields for final suspend label
and a flag to indicate await expressions with initializers.
(captures_temporary): Delete.
(register_awaits): Remove unused code, update comments.
(find_any_await): New.
(tmp_target_expr_p): New.
(struct interesting): New.
(find_interesting_subtree): New.
(struct var_nest_node): New.
(flatten_await_stmt): New.
(handle_nested_conditionals): New.
(process_conditional): New.
(replace_statement_captures): Rename to...
(maybe_promote_temps): ... this.
(maybe_promote_captured_temps): Delete.
(analyze_expression_awaits): Check for await expressions with
initializers. Simplify handling for truth-and/or-if.
(expand_one_truth_if): Simplify (map cases that need expansion
(await_statement_walker): Handle CO_RETURN_EXPR. Simplify the
handling for truth-and/or-if expressions.
(register_local_var_uses): Ensure that we create names in the
implementation namespace.
(morph_fn_to_coro): Add final suspend label to suspend frame
callback data and remove it from the build_actor_fn call.
2020-07-16 Marek Polacek <>
* call.c (convert_like): Remove macro and introduce a new
wrapper instead.
(convert_like_with_context): Likewise.
(convert_like_real): Rename to convert_like.
(convert_like_real_1): Rename to convert_like_internal. Call
convert_like instead of convert_like_real therein.
(perform_direct_initialization_if_possible): Call convert_like
instead of convert_like_real.
2020-07-16 Iain Sandoe <>
* Correct some spelling errors
in comments.
2020-07-15 Nathan Sidwell <>
* parser.c (cp_parser_declaration): Avoid copying tokens.
(cp_parser_block_declaration): RAII token pointer.
2020-07-15 Nathan Sidwell <>
* parser.c (cp_parser_skip_to_closing_parenthesis_1): Deal with
meeting a deferred pragma.
(cp_parser_skip_to_end_of_statement): Likewise.
(cp_parser_skip_to_end_of_block_or_statement): Likewise.
(cp_parser_skip_to_pragma_eol): We should never meet EOF.
(cp_parser_omp_declare_simd): Likewise.
(cp_parser_omp_declare_reduction, cp_parser_oacc_routine)
(pragma_lex): Likewise.
2020-07-14 Marek Polacek <>
PR c++/95789
PR c++/96104
PR c++/96179
* call.c (convert_like_real_1): Renamed from convert_like_real.
(convert_like_real): New wrapper for convert_like_real_1.
2020-07-14 Nathan Sidwell <>
* parser.c (cp_lexer_alloc): Do not deal with PCH here.
(cp_lexer_new_main): Deal with PCH here. Store the tokens directly
into the buffer.
(cp_lexer_new_from_tokens): Assert last token isn't purged either.
(cp_lexer_get_preprocessor_token): Change first arg to flags, adjust.
(cp_parser_new): Pass the lexer in, don't create it here.
(cp_parser_translation_unit): Initialize access checks here.
(cp_parser_initial_pragma): First token is provided by caller,
don't deal with PCH stopping here. Adjust error message.
(c_parse_file): Adjust, change error message to avoid C++20 module
2020-07-14 Nathan Sidwell <>
* ptree.c (cxx_print_type): Add TYPEOF_TYPE and BASES.
2020-07-14 Nathan Sidwell <>
* class.c (build_base_field_1): Cache CLASSTYPE_AS_BASE.
(build_self_reference): Rename value -> decl.
(dump_class_hierarchy_1): Cache CLASSTYPE_AS_BASE.
2020-07-14 Marek Polacek <>
PR c++/95820
* decl.c (grokdeclarator) <case cdk_function>: Check also
pointers/references/... to functions.
2020-07-14 Nathan Sidwell <>
* cp-tree.h: Correct some tree lang flag comments,
reformat some structure definitions. Note some structure
sizes. Clarify some comments.
(yyungetc): Delete. Not been a thing for some time.
* class.c (copy_fndecl_with_name): Comment.
(check_bases_and_members): Unnecessary {}.
(layout_class_type): Comment.
* cp-tree.def (UNBOUND_CLASS_TEMPLATE): Adjust comment.
* decl.c: Fix some formatting & whitespace issues.
(function_requirements_equivalent_p): Note why
substitutions are needed.
* decl2.c (no_linkage_error): Note that heroics about
'typedef struct { ... };' are no longer needed.
* method.c: Whitespace.
* name-lookup.c: Whitespace.
(add_decl_to_level): Reformat a line.
(print_binding_stack): Mark as DEBUG_FUNCTION.
(has_using_namespace_std_directive_p): Delete comment.
* pt.c: Whitespace
* ptree.c: Whitespace.
* rtti.c: Whitespace & comment.
* tree.c: Comment.
* typeck.c (structural_comptypes): Add comment.
2020-07-13 Nathan Sidwell <>
* (c++.disclean): Likewise.
2020-07-13 Marek Polacek <>
PR c++/96077
* parser.c (cp_parser_enum_specifier): Commit to tentative parse
after we've seen an opening brace.
2020-07-10 Jason Merrill <>
* tree.c (structural_type_p): Allow unions.
* mangle.c (write_expression): Express unions with a designator.
2020-07-10 Jason Merrill <>
* pt.c (convert_nontype_argument): Handle REAL_TYPE.
(invalid_nontype_parm_type_p): Allow all structural types.
* tree.c (structural_type_p): Use SCALAR_TYPE_P.
2020-07-10 Jason Merrill <>
PR c++/96105
PR c++/96052
PR c++/95976
* class.c (check_field_decls): An array of empty classes is not an
empty data member.
(layout_empty_base_or_field): Handle explicit alignment.
Fix union handling.
2020-07-09 Julian Brown <>
Thomas Schwinge <>
PR middle-end/95270
* semantics.c (finish_omp_clauses): Likewise.
2020-07-09 Patrick Palka <>
PR c++/96132
* constexpr.c (potential_constant_expression_1) <case PARM_DECL>:
Restore dependent_type_p check that guarded the call to
2020-07-08 Patrick Palka <>
PR c++/95497
* constexpr.c (potential_constant_expression_1) <case PARM_DECL>:
When processing_template_decl, check COMPLETE_TYPE_P before
calling is_really_empty_class. Don't check dependent_type_p.
2020-07-08 Marek Polacek <>
PR c++/96103
* parser.c (cp_parser_decltype): Print error about using decltype(auto)
in C++11. Check that the token following "auto" is ")".
2020-07-07 Patrick Palka <>
PR c++/95303
* cxx-pretty-print.c (pp_cxx_unqualified_id): Check
PRIMARY_TEMPLATE_P before printing the innermost template
2020-07-07 Martin Sebor <>
PR c++/96063
* parser.c (class_decl_loc_t::diag_mismatched_tags): Print notes only
if warning_at returns nonzero.
2020-07-06 Martin Sebor <>
PR c++/95984
* call.c (build_over_call): Check calls only when tf_warning is set.
2020-07-06 Nathan Sidwell <>
* decl.c (push_library_fn): Return the decl pushdecl_toplevel returns.
* except.c (verify_library_fn): Replace with ...
(declare_library_fn_1): ... this fn. Always push the fn.
(declare_library_fn): Call it.
(build_throw): Call declare_library_fn_1.
2020-07-06 Jonathan Wakely <>
PR c++/96068
* parser.c (cp_parser_toplevel_declaration): Only do pedwarn for
empty-declaration in C++98.
2020-07-02 Jason Merrill <>
Jakub Jelinek <>
* decl.c (grokfndecl): Allow consteval virtual.
* search.c (check_final_overrider): Check consteval mismatch.
* constexpr.c (cxx_eval_thunk_call): New.
(cxx_eval_call_expression): Call it.
* cvt.c (cp_get_fndecl_from_callee): Handle FDESC_EXPR.
* decl2.c (mark_vtable_entries): Track vtables with consteval.
(maybe_emit_vtables): Pass consteval_vtables through.
(clear_consteval_vfns): Replace consteval with nullptr.
(c_parse_final_cleanups): Call it.
2020-07-01 Nathan Sidwell <>
* class.c (copy_fndecl_with_name): Add additional predicate args, do
not deduce them locally.
(copy_operator_fn): Adjust copy_fndecl_with_name call.
(build_clone): Add vtt and inherited predicate args. Pass through
to copy_fndecl_with_name call.
(build_cdtor_clones): Likewise, pass through to build_clone as
(build_cdtor): Determine vtt and inherited here.
* cp-tree.h (DECL_NEEDS_CTT_PARM_P): Delete.
2020-06-30 Nathan Sidwell <>
* cp-tree.h (copy_fndecl_with_name): Rename to ...
(copy_operatorn_fn): ... this. Change arg type.
(clone_function_decl): Rename to ...
(clone_cdtor): ... this.
* class.c (copy_fndecl_with_name): Make static.
(copy_operator_fn): New wrapper.
(build_clones): Rename to ...
(build_cdtor_clones): ... this.
(clone_function_decl): Rename to ...
(clone_cdtor): ... this. Adjust build_clones calls.
(clone_constructors_and_destructors): Adjust clone_function_decl
* method.c (implicitly_declare_fn): Adjust copy_fndecl_with_name
(lazily_declare_fn): Adjust clone_function_decl call.
* pt.c (tsubst_function_decl): Likewise.
(instantiate_template_1): Likewise.
2020-06-30 Iain Sandoe <>
* (morph_fn_to_coro): Remove trailing
space in a diagnostic.
2020-06-30 Iain Sandoe <>
* (expand_one_await_expression): Remove
code dealing with initial suspend.
(build_actor_fn): Remove code special-casing initial
and final suspend. Handle the final suspend and marking
of the coroutine as done.
(coro_rewrite_function_body): New.
(bind_expr_find_in_subtree): Remove.
(coro_body_contains_bind_expr_p): Remove.
(morph_fn_to_coro): Split the rewrite of the original
function into coro_rewrite_function_body and call it.
2020-06-29 Marek Polacek <>
PR c++/94553
* decl.c (duplicate_decls): Make sure a concept or a variable
template is unique in its declarative region.
2020-06-29 Marek Polacek <>
PR c++/95568
* pt.c (collect_ctor_idx_types): Use TREE_TYPE.
2020-06-28 Iain Sandoe <>
PR c++/95711
* (register_local_var_uses): Skip past
namespace decls.
2020-06-27 Iain Sandoe <>
PR c++/95736
* (get_awaitable_var): New helper.
(build_co_await): Check more carefully before
copying an awaitable.
(expand_one_await_expression): No initializer
is required when the awaitable is not a temp.
(register_awaits): Remove handling that is now
completed when the await expression is built.
2020-06-27 Iain Sandoe <>
* (morph_fn_to_coro): Diagnose unavailable
2020-06-26 Iain Sandoe <>
PR c++/95519
* (struct coroutine_info):Add a field
to hold computed p.return_void expressions.
(coro_build_promise_expression): New.
(get_coroutine_return_void_expr): New.
(finish_co_yield_expr): Build the promise expression
using coro_build_promise_expression.
(finish_co_return_stmt): Likewise.
(build_init_or_final_await): Likewise.
(morph_fn_to_coro): Likewise, for several cases.
2020-06-26 Iain Sandoe <>
* (morph_fn_to_coro): Handle error
returns in building g-r-o-o-a-f expressions.
2020-06-24 Nicholas Krause <>
PR c++/95672
* typeck2.c (cxx_incomplete_type_diagnostic): Add missing
TYPE_EXPANSION_PACK check for diagnosing incomplete types in
2020-06-24 Iain Sandoe <>
PR c++/95518
PR c++/95813
* (act_des_fn): Copy function
attributes onto the outlined coroutine helpers.
2020-06-24 Jason Merrill <>
* call.c (build_over_call): Only call build_base_path once.
2020-06-24 Jason Merrill <>
PR c++/95719
* call.c (build_over_call): Look up the overrider in base_binfo.
* class.c (lookup_vfn_in_binfo): Look through BINFO_PRIMARY_P.
2020-06-23 Jason Merrill <>
PR c++/93976
Implement C++20 P2082R1, Fixing CTAD for aggregates.
* cp-tree.h (TPARMS_PRIMARY_TEMPLATE): Split out from...
(builtin_guide_p): Declare.
* decl.c (reshape_init_class): Handle bases of a template.
(reshape_init_r): An array with dependent bound takes a single
* pt.c (tsubst_default_argument): Shortcut {}.
(unify_pack_expansion): Allow omitted arguments to trailing pack.
(builtin_guide_p): New.
(collect_ctor_idx_types): Give a trailing pack a {} default
argument. Handle arrays better.
2020-06-23 Iain Sandoe <>
PR c++/95477
* (morph_fn_to_coro): Apply a cleanup to
the get return object when the DTOR is non-trivial.
2020-06-20 Iain Sandoe <>
PR c++/95505
* (morph_fn_to_coro): Update handling of
get-return-object-on-allocation-fail and diagnose missing
2020-06-20 Jason Merrill <>
* call.c (joust): Only compare constraints for non-template
candidates with matching parameters.
* pt.c (tsubst_pack_expansion): Fix getting a type parameter
(more_specialized_fn): Only compare constraints for candidates with
matching parameters.
2020-06-19 Jason Merrill <>
* method.c (early_check_defaulted_comparison): Allow defaulting
comparison outside class. Complain if non-member operator isn't a
2020-06-18 Jason Merrill <>
* method.c (early_check_defaulted_comparison): Check for &&.
(build_comparison_op): Allow empty union. Diagnose non-category
(common_comparison_type): Remove handling for non-category type.
2020-06-18 Marek Polacek <>
PR c++/95735
* pt.c (finish_template_variable): Return if
coerce_innermost_template_parms return error_mark_node.
2020-06-18 Marek Polacek <>
PR c++/95728
* pt.c (tsubst_copy_and_build) <case NEW_EXPR>: Return error_mark_node
if placement is erroneous.
2020-06-17 Jonathan Wakely <>
PR c++/66159
* parser.c (cp_parser_elaborated_type_specifier): Do not warn
unless in a declaration.
2020-06-17 Jason Merrill <>
* cp-tree.h (copy_fndecl_with_name): Declare.
* class.c (copy_fndecl_with_name): Split out from...
(add_implicitly_declared_members): Add op== to TYPE_FIELDS.
* method.c (implicitly_declare_fn): Use copy_fndecl_with_name.
2020-06-17 Jason Merrill <>
* call.c (build_new_op_1): Don't look for a CALL_EXPR when
calling a consteval function.
2020-06-17 Jason Merrill <>
* decl2.c (grokfield): Pass SD_DEFAULTED and SD_DELETED.
* decl.c (duplicate_decls): Reduce error for delete
after earlier declaration to pedwarn.
2020-06-17 Marek Polacek <>
PR c++/95508
* constexpr.c (maybe_fold_non_dependent_expr): New.
* cp-tree.h (maybe_fold_non_dependent_expr): Declare.
* typeck.c (cp_build_array_ref): Call maybe_fold_non_dependent_expr
instead of maybe_constant_value.
2020-06-16 Marek Polacek <>
PR c++/95369
* call.c (add_list_candidates): Return if a designated initializer
is used with a non-aggregate.
(implicit_conversion_error): Give an error for the case above.
2020-06-16 Marek Polacek <>
PR c++/95560
* name-lookup.c (check_local_shadow): Check if types are
non-null before calling same_type_p.
2020-06-16 Jakub Jelinek <>
* semantics.c (handle_omp_for_class_iterator): Adjust
c_omp_check_loop_iv_exprs caller.
(finish_omp_for): Likewise. Don't call fold_build_cleanup_point_expr
before calling c_finish_omp_for and c_omp_check_loop_iv, move it
after those calls.
* pt.c (tsubst_omp_for_iterator): Handle non-rectangular loops.
2020-06-16 Jakub Jelinek <>
* parser.c (cp_parser_omp_clause_schedule): Reject modifier separated
from kind by comma rather than colon.
2020-06-16 Patrick Palka <>
* pt.c (perform_instantiation_time_access_checks): No need to
tsubst into decl.
* semantics.c (enforce_access): Verify that decl is not
2020-06-16 Patrick Palka <>
PR c++/41437
PR c++/47346
* cp-tree.h (qualified_typedef_usage_s): Delete.
(qualified_typedef_usage_t): Delete.
(deferred_access_check): Move up in file.
(tree_template_info::typedefs_needing_access_checking): Delete.
(tree_template_info::deferred_access_checks): New field.
(TI_DEFERRED_ACCESS_CHECKS): ... this, and adjust accordingly.
* pt.c (perform_typedefs_access_check): Rename to ...
(perform_instantiation_time_access_checks): ... this, and adjust
accordingly. Remove unnecessary tree tests.
(instantiate_class_template_1): Adjust accordingly.
(instantiate_decl): Likewise.
* semantics.c (enforce_access): Likewise.
2020-06-16 Patrick Palka <>
PR c++/41437
PR c++/47346
* call.c (enforce_access): Move to semantics.c.
* cp-tree.h (enforce_access): Delete.
(get_types_needing_access_check): Delete.
(add_typedef_to_current_template_for_access_check): Delete.
* decl.c (make_typename_type): Adjust accordingly. Use
check_accessibility_of_qualified_id instead of directly using
* parser.c (cp_parser_template_declaration_after_parameters):
Don't push a dk_no_check access state when parsing a template.
* pt.c (get_types_needing_access_check): Delete.
(append_type_to_template_for_access_check_1): Delete.
(perform_typedefs_access_check): Adjust. If type_decl is a
FIELD_DECL, also check its DECL_CONTEXT for dependence. Use
tsubst_copy instead of tsubst to substitute into type_decl so
that we substitute into the DECL_CONTEXT of a FIELD_DECL.
(append_type_to_template_for_access_check): Delete.
* search.c (accessible_p): Remove the processing_template_decl
early exit.
* semantics.c (enforce_access): Moved from call.c. If we're
parsing a template and the access check failed, add the check to
(perform_or_defer_access_check): Adjust comment.
(add_typedef_to_current_template_for_access_check): Delete.
(check_accessibility_of_qualified_id): Adjust accordingly.
Exit early if the scope is dependent.
2020-06-11 Patrick Palka <>
PR c++/93467
* (associate_classtype_constraints): If there is a
discrepancy between the current template depth and the template
depth of the original declaration, then adjust the template
parameter depth within the current constraints appropriately.
* pt.c (tsubst_friend_class): Substitute into and set the
constraints on the injected declaration.
2020-06-11 Iain Sandoe <>
* (instantiate_coro_traits): Pass a reference
to lambda closure objects to traits instantiation.
(morph_fn_to_coro): Likewise for promise parameter
preview and allocator lookup.
2020-06-10 Iain Sandoe <>
PR c++/95440
* call.c (add_candidates): Use vec_safe_length() for
testing the arguments list.
(build_new_method_call_1): Use vec_safe_is_empty() when
checking for an empty args list.
2020-06-10 Marek Polacek <>
PR c++/95562
* parser.c (cp_parser_direct_declarator): Clear
CP_PARSER_FLAGS_DELAY_NOEXCEPT if the declarator kind is not
2020-06-09 Iain Sandoe <>
PR c++/95137
* (expand_one_await_expression): Build separate
DTOR trees for the awaitable object on the destroy and resume
2020-06-09 Jason Merrill <>
PR c++/95552
* cp-gimplify.c (predeclare_vla): Only predeclare a VLA if it's
wrapped in a pointer type.
2020-06-05 Marek Polacek <>
PR c++/95369
* call.c (build_converted_constant_expr_internal): Allow
2020-06-05 Iain Sandoe <>
* cp-tree.def (CO_RETURN_EXPR): Correct the class
to use tcc_statement.
2020-06-05 Jason Merrill <>
* error.c (dump_binary_op): Handle negative operand to
2020-06-04 Jason Merrill <>
PR c++/93310
* constexpr.c (cxx_eval_constant_expression) [OBJ_TYPE_REF]:
2020-06-04 Jason Merrill <>
PR c++/95158
* class.c (lookup_vfn_in_binfo): New.
* call.c (build_over_call): Use it.
* cp-tree.h (resolves_to_fixed_type_p): Add default argument.
(lookup_vfn_in_binfo): Declare.
2020-06-04 Iain Sandoe <>
PR c++/95346
* (morph_fn_to_coro): Ensure that the get-
return-object is constructed correctly; When it is not the
final return value, pass it to the CTOR of the return type
as an rvalue, per the standard comment.
2020-06-04 Jakub Jelinek <>
PR c++/82304
PR c++/95307
* constexpr.c (cxx_eval_constant_expression): Diagnose CONVERT_EXPR
conversions from pointer types to arithmetic types here...
(cxx_eval_outermost_constant_expr): ... instead of here.
2020-06-03 Mark Wielaard <>
* parser.c (cp_lexer_safe_previous_token): New function.
(cp_parser_error_1): Add name_hint if the previous token is
a string literal and next token is a CPP_NAME and we have a
missing header suggestion for the name.
2020-06-03 Patrick Palka <>
* pt.c (process_partial_specialization): Pass the full set of
generic template arguments to strictly_subsumes.
2020-06-03 Patrick Palka <>
PR c++/92103
* pt.c (most_specialized_partial_spec): Reorganize the loop over
DECL_TEMPLATE_SPECIALIZATIONS. Check constraints_satisfied_p on
the original template declaration, not on the tsubsted one.
2020-06-03 Iain Sandoe <>
PR c++/95345
* (finish_co_await_expr): Revise to allow for
parameter packs.
(finish_co_yield_expr): Likewise.
2020-06-03 Jason Merrill <>
PR c++/95232
* cp-tree.h (predeclare_vla): Declare.
* cp-gimplify.c (predeclare_vla): Handle getting a decl.
* pt.c (tsubst_expr) [DECL_EXPR]: Use it.
2020-06-03 Tobias Burnus <>
* cp-gimplify.c (cxx_omp_predetermined_mapping): New.
* cp-objcp-common.h (LANG_HOOKS_OMP_PREDETERMINED_MAPPING): Redfine.
* cp-tree.h (cxx_omp_predetermined_mapping): Declare.
2020-06-02 Jason Merrill <>
PR c++/95193
* pt.c (tsubst_decl): Relax assert.
2020-06-02 Iain Sandoe <>
PR c++/95050
* (build_co_await): Wrap the co_await expression
in a TARGET_EXPR, where needed.
(finish_co_yield_expr): Likewise.
2020-06-02 Patrick Palka <>
PR c++/92633
PR c++/92838
* pt.c (tsubst_function_decl): Don't do set_constraints when
regenerating a lambda.
(tsubst_lambda_expr): Substitute into the lambda's constraints
and do set_constraints here.
2020-06-01 Jason Merrill <>
PR c++/95466
PR c++/95311
PR c++/95221
* class.c (build_vfn_ref): Revert 95311 change.
* cp-ubsan.c (cp_ubsan_maybe_instrument_member_call): Build a
2020-06-01 Iain Sandoe <>
PR c++/95350
* (struct param_info): Remove rv_ref field.
(build_actor_fn): Remove specifial rvalue ref handling.
(morph_fn_to_coro): Likewise.
2020-05-31 Iain Sandoe <>
PR c++/95087
* (morph_fn_to_coro): If we see an
early fatal error, drop the erroneous function body.
2020-05-31 Iain Sandoe <>
* (build_co_await): Remove unused
(finish_co_await_expr): Likewise.
(finish_co_yield_expr): Likewise; revise comment.
2020-05-30 Iain Sandoe <>
* (morph_fn_to_coro): Revise initialization
of the frame pointer to avoid an unused value.
2020-05-30 Patrick Palka <>
PR c++/95386
* (satisfaction_value): Accept INTEGER_CST of any
boolean type.
2020-05-29 Patrick Palka <>
Jason Merrill <>
PR c++/95181
* class.c (add_method): Let special member function templates
coexist if they are not equivalently constrained, or in a class
2020-05-29 Jason Merrill <>
PR c++/95371
* pt.c (process_template_parm): Set DECL_TEMPLATE_INFO
2020-05-29 Marek Polacek <>
PR c++/95344
* cp-gimplify.c (cp_fold) <case MODIFY_EXPR>: Don't set
(cp_fold): Set it here along with TREE_NO_WARNING.
2020-05-29 Jason Merrill <>
PR c++/95311
PR c++/95221
* class.c (build_vfn_ref): Don't fold the INDIRECT_REF.
2020-05-29 Patrick Palka <>
PR c++/92652
PR c++/93698
PR c++/94128
* parser.c (cp_parser_requires_clause_expression): Temporarily
increment processing_template_decl only if it is 0.
(cp_parser_constraint_expression): Likewise.
(cp_parser_requires_expression): Likewise.
2020-05-29 Patrick Palka <>
PR c++/95241
* constexpr.c (get_or_insert_ctor_field): Add limited support
for RANGE_EXPR index lookups.
2020-05-28 Jakub Jelinek <>
PR c++/95328
* decl.c (cp_finish_decomp): Call complete_type before checking
2020-05-28 Jason Merrill <>
PR c++/94926
* decl.c (cp_finish_decl): Revert r9-297 change.
(check_static_variable_definition): Likewise.
* constexpr.c (ensure_literal_type_for_constexpr_object): Likewise.
* pt.c (instantiate_decl): Return early on type error.
2020-05-27 Jason Merrill <>
PR c++/95319
* decl.c (reshape_init_array_1): Don't reuse in overload context.
2020-05-27 Jason Merrill <>
PR c++/95242
* call.c (build_new_op_1): Suppress
warn_zero_as_null_pointer_constant across comparison of <=> result
to 0.
2020-05-27 Jason Merrill <>
PR c++/95222
* decl.c (grokdeclarator): Don't shift attributes in TYPENAME
2020-05-27 Nathan Sidwell <>
PR c++/95263
* pt.c (lookup_template_class_1): Restore alias template mutation.
2020-05-26 Jakub Jelinek <>
PR c++/95197
* cp-gimplify.c: Include omp-general.h.
(cp_genericize_r) <case OMP_DISTRIBUTE>: For class iteration
variables in composite distribute parallel for, instantiate copy
ctor of their types.
2020-05-23 Patrick Palka <>
PR c++/94038
* constexpr.c (cxx_eval_constant_expression)
<case TEMPLATE_ID_EXPR>: Don't evaluate the concept when
constexpr evaluation is uid-sensitive.
2020-05-22 Jason Merrill <>
* cp-gimplify.c (cp_gimplify_expr) [CALL_EXPR]: Don't preevaluate
the function address if the call used operator syntax.
2020-05-21 Jason Merrill <>
PR c++/95221
* cp-ubsan.c (cp_ubsan_maybe_instrument_member_call): For a virtual
call, instrument the OBJ_TYPE_REF.
* decl.c (compute_array_index_type_loc): Diagnose expressions
in a template that can't be constant.
* parser.c (cp_parser_direct_declarator): Don't check
non-constant array bounds here.
* cp-tree.h (is_rvalue_constant_expression): Declare.
* constexpr.c (is_rvalue_constant_expression): New.
* parser.c (cp_parser_constant_expression): Use it.
* decl.c (cp_finish_decl): Try to treat a constexpr initializer in a
template as constant.
* typeck.c (build_x_modify_expr): Handle error_mark_node arguments.
* decl.c (grokparms): Return NULL_TREE if any parms were erroneous.
2020-05-21 Iain Sandoe <>
* (finish_co_return_stmt): Revert change to use
2020-05-21 Patrick Palka <>
PR c++/94038
* constexpr.c (constexpr_ctx::uid_sensitive): Remove field.
(uid_sensitive_constexpr_evaluation_value): Define.
(uid_sensitive_constexpr_evaluation_true_counter): Define.
(uid_sensitive_constexpr_evaluation_p): Define.
(uid_sensitive_constexpr_evaluation_sentinel): Define its
(uid_sensitive_constexpr_evaluation_checker): Define its
constructor and its evaluation_restricted_p method.
(get_fundef_copy): Remove 'ctx' parameter. Use u_s_c_e_p
instead of constexpr_ctx::uid_sensitive.
(cxx_eval_call_expression): Use u_s_c_e_p instead, and test it
last. Adjust call to get_fundef_copy.
(instantiate_cx_fn_r): Test u_s_c_e_p so that we increment the
counter if necessary.
(cxx_eval_outermost_constant_expr): Remove 'uid_sensitive'
parameter. Adjust function body accordingly.
(maybe_constant_value): Remove 'uid_sensitive' parameter and
adjust function body accordingly. Set up a
uid_sensitive_constexpr_evaluation_checker, and use it to
conditionally update the cv_cache.
* cp-gimplify.c (cp_fold): Set up a
uid_sensitive_constexpr_evaluation_checker, and use it to
conditionally update the fold_cache.
* cp-tree.h (maybe_constant_value): Update declaration.
(struct uid_sensitive_constexpr_evaluation_sentinel): Define.
(struct sensitive_constexpr_evaluation_checker): Define.
* expr.c (fold_for_warn): Set up a
uid_sensitive_constexpr_evaluation_sentinel before calling
the folding subroutines. Drop all but the first argument to
2020-05-20 Marek Polacek <>
DR 2237
* parser.c (cp_parser_unqualified_id): Reject simple-template-id as
the declarator-id of a destructor.
(cp_parser_constructor_declarator_p): Reject simple-template-id as
the declarator-id of a constructor.
2020-05-20 Marek Polacek <>
DR 2289
PR c++/94553
* cp-tree.h (SD_DECOMPOSITION): New flag.
* decl.c (duplicate_decls): Make sure a structured binding is unique
in its declarative region.
(start_decl): If INITIALIZED is SD_DECOMPOSITION, call
(grokdeclarator): Compare INITIALIZED directly to SD_* flags.
* parser.c (cp_parser_decomposition_declaration): Pass SD_DECOMPOSITION
to start_decl.
2020-05-20 Patrick Palka <>
PR c++/95223
* typeck.c (structural_comptypes): Don't perform
context-dependent resolution of TYPENAME_TYPEs when
2020-05-19 Nathan Sidwell <>
* pt.c (lookup_template_class_1): Do not reinit template_info of an
alias here.
2020-05-18 Martin Sebor <>
PR c++/94923
* call.c ((maybe_warn_class_memaccess): Use is_byte_access_type.
* cp-tree.h (is_dummy_object): Return bool.
(is_byte_access_type): Declare new function.
* tree.c (is_dummy_object): Return bool.
(is_byte_access_type): Define new function.
2020-05-19 Patrick Palka <>
PR c++/87847
* pt.c (init_template_processing): Enable sanitization for
decl_specializations and type_specializations.
PR c++/66439
* pt.c (fn_type_unification): Pass 'fn' instead of NULL_TREE as
the 'in_decl' parameter to coerce_template_parms.
2020-05-18 Marek Polacek <>
PR c++/94955
* typeck.c (cp_build_binary_op): Use fold_for_warn instead of
2020-05-18 Marek Polacek <>
PR c++/94937
* cvt.c (cp_get_fndecl_from_callee): Return NULL_TREE if the function
type is not INDIRECT_TYPE_P.
* decl.c (omp_declare_variant_finalize_one): Call
cp_get_callee_fndecl_nofold instead of looking for the function decl
2020-05-18 Marek Polacek <>
PR c++/90915
* parser.c (cp_parser_has_attribute_expression): Sorry on a
type-dependent argument.
2020-05-18 Marek Polacek <>
DR 1512
PR c++/87699
* call.c (add_builtin_candidate) <case EQ_EXPR>: Create candidate
operator functions when type is std::nullptr_t for ==/!=.
* typeck.c (composite_pointer_type_r): Add a bool * parameter. Use it
to maybe add "const" to the pointer type.
(composite_pointer_type): Update the call to composite_pointer_type_r.
(cp_build_binary_op): Turn two warning_at into error_at. Print the
2020-05-18 Jason Merrill <>
* call.c (build_over_call): Remove unnecessary
2020-05-18 Marek Polacek <>
* call.c (add_builtin_candidate): Don't create a builtin overload
candidate for ++ when type is bool in C++17.
2020-05-18 Marek Polacek <>
* cfns.h: Regenerated.
2020-05-17 Iain Sandoe <>
* (morph_fn_to_coro): Initialize the gro variable.
2020-05-16 Iain Sandoe <>
* (finish_co_return_stmt): Implement rules
from [class.copy.elision] /3.
2020-05-16 Patrick Palka <>
PR c++/57943
* semantics.c (finish_decltype_type): Call
instantiate_non_dependent_expr_sfinae on the expression.
2020-05-15 Patrick Palka <>
2020-04-07 Patrick Palka <>
PR c++/90996
* typeck2.c (process_init_constructor_array): Propagate
CONSTRUCTOR_PLACEHOLDER_BOUNDARY up from each element initializer to
the array initializer.
2020-05-15 Jason Merrill <>
PR c++/93286 - ICE with __is_constructible and variadic template.
* pt.c (tsubst_tree_list): New.
(tsubst, tsubst_copy_and_build): Use it.
* decl2.c (is_late_template_attribute): Handle error_mark_node args.
2020-05-15 Nathan Sidwell <>
* pt.c (template_args_equal): Fix thinkos in previous 'cleanup'.
2020-05-14 Jason Merrill <>
PR c++/93901
* pt.c (maybe_instantiate_noexcept): Change clone handling.
2020-05-14 Patrick Palka <>
PR c++/78446
* call.c (build_op_call): Pass complain to lookup_fnfields.
(build_special_member_call): Likewise.
* class.c (type_requires_array_cookie): Pass tf_warning_or_error
to lookup_fnfields.
* cp-tree.h (lookup_fnfields): Add tsubst_flags_t parameter.
* except.c (build_throw): Pass tf_warning_or_error to
* init.c (build_new_1): Pass complain to lookup_fnfields.
* method.c (locate_fn_flags): Likewise.
* name-lookup.c (lookup_name_real_1): Pass tf_warning_or_error
to lookup_fnfields.
* pt.c (tsubst_baselink): Pass complain to lookup_fnfields.
* search.c (lookup_fnfields): New 'complain' parameter. Pass it
to lookup_member.
2020-05-14 Nathan Sidwell <>
* parser.c (cp_parser_diagnose_invalid_typename): Mention
std=c++20 not 2a, reformat dependent binfo inform loops.
* pt.c (tsubst_template_decl): Reorder and commonize some control
* pt.c (tsubst_friend_function): Simplify control flow.
* pt.c (lookup_template_class_1): Remove unnecessary else by
simply grabbing TYPE_NAME earlier.
* pt.c (push_template_decl_real): Adjust friend pushing logic.
Reinit template type.
* pt.c (build_template_decl): Init DECL_TEMPLATE_RESULT &
TREE_TYPE here ...
(process_partial_specialization): ... not here ...
(push_template_decl_real, add_inherited_template_parms)
(build_deduction_guide): ... or here.
2020-05-14 Jakub Jelinek <>
* cp-gimplify.c (cp_genericize_r): Set cfun->has_omp_target.
2020-05-13 Patrick Palka <>
PR c++/79706
* init.c (build_vec_delete_1): Just return error_mark_node if
deallocate_expr is error_mark_node.
(build_delete): Just return error_mark_node if do_delete is
2020-05-13 Patrick Palka <>
PR c++/95020
* (tsubst_requires_expr): Produce a new
requires-expression when processing_template_decl, even if
template arguments are not dependent.
2020-05-13 Marek Polacek <>
PR c++/95066
* decl.c (duplicate_decls): Set DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P.
2020-05-13 Nathan Sidwell <>
* pt.c (template_args_equal): Reorder category checking for
* pt.c (perform_typedefs_access_check): Cache expensively
calculated object references.
(check_auto_in_tmpl_args): Just assert we do not get unexpected
nodes, rather than silently do nothing.
(append_type_to_template_for_access): Likewise, cache expensie
object reference.
* pt.c (canonical_type_parameter): Simplify.
Formatting fixups & some simplifications.
* pt.c (spec_hash_table): New typedef.
(decl_specializations, type_specializations): Use it.
(retrieve_specialization): Likewise.
(register_specialization): Remove unnecessary casts.
(push_template_decl_real): Reformat.
(instantiate_class_template_1): Use more RAII.
(make_argument_pack): Simplify.
(instantiate_template_1): Use gcc_checking_assert for expensive
(instantiate_decl): Likewise.
(resolve_typename_type): Reformat comment.
* semantics.c (struct deferred_access): Remove unnecessary GTY on
(begin_class_definition): Fix formatting.
2020-05-13 Jason Merrill <>
* call.c, class.c, constexpr.c,, decl.c, init.c,
lambda.c, lex.c, method.c, name-lookup.c, parser.c, pt.c, tree.c,
typeck2.c: Change cxx2a to cxx20.
2020-05-12 Marek Polacek <>
PR c++/95074
* parser.c (cp_parser_postfix_expression) <case CPP_OPEN_PAREN>: When
looking for a block-scope function declaration, look through the whole
set, not just the first function in the overload set.
2020-05-12 Jakub Jelinek <>
PR c++/95063
* pt.c (tsubst_decl): Deal with DECL_OMP_PRIVATIZED_MEMBER for
a bit-field.
2020-05-11 Jason Merrill <>
Resolve C++20 NB comment CA104
* pt.c (determine_specialization): Compare constraints for
specialization of member template of class instantiation.
2020-05-11 Jason Merrill <>
PR c++/92583
PR c++/92654
* tree.c (cp_walk_subtrees): Stop at typedefs.
Handle TYPENAME_TYPE here.
* pt.c (find_parameter_packs_r): Not here.
(for_each_template_parm_r): Clear *walk_subtrees.
* decl2.c (min_vis_r): Look through typedefs.
2020-05-11 Jason Merrill <>
* call.c (implicit_conversion_error): Split out from...
(build_converted_constant_expr_internal): Use it.
2020-05-11 Jason Merrill <>
PR c++/90748
* parser.c (inject_parm_decls): Set current_class_ptr here.
(cp_parser_direct_declarator): And here.
(cp_parser_late_return_type_opt): Not here.
(cp_parser_noexcept_specification_opt): Nor here.
(cp_parser_late_noexcept_specifier): Remove unneeded parameters.
2020-05-11 Jason Merrill <>
* decl.c (cxx_init_decl_processing): Call declare_weak for
2020-05-11 Jason Merrill <>
* pt.c (instantiate_class_template_1): Call tsubst_expr for
* ptree.c (cxx_print_xnode): Handle STATIC_ASSERT.
2020-05-11 Jason Merrill <>
* pt.c (find_parameter_packs_r) [LAMBDA_EXPR]: Remove redundant
walking of capture list.
2020-05-11 Jason Merrill <>
* cp-tree.h (LOOKUP_EXPLICIT_TMPL_ARGS): Remove.
* call.c (build_new_function_call): Don't set it.
(build_new_method_call_1): Likewise.
(build_over_call): Check cand->explicit_targs instead.
2020-05-11 Jason Merrill <>
* decl.c (compute_array_index_type_loc): Stabilize before building
2020-05-11 Jason Merrill <>
* decl.c (grokdeclarator): Adjust deprecated_state here.
(start_decl): Not here.