X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gcc%2Fcp%2FChangeLog;h=dcac8e7d1063523d2afbdac894ce547e85331582;hb=f8ec35c322fefe5609439a0dcfff0da0acbc9f72;hp=df8a9d09bd2158e1427165f1f9953d24e33a3397;hpb=ff8ba86f447546c57e26bfab2a3437f14d6f2595;p=gcc.git diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index df8a9d09bd2..dcac8e7d106 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5106 +1,375 @@ -2018-12-07 Jakub Jelinek - - PR c++/87506 - * constexpr.c (adjust_temp_type): Handle EMPTY_CLASS_EXPR. - -2018-12-06 Paolo Carlini - - * class.c (check_bitfield_decl): In error message about non-integral - type print the type itself too. - * decl.c (grokdeclarator): Do not ICE on unnamed bit-fields declared - friends; when calling build_decl for a FIELD_DECL possibly pass the - declarator->id_loc. - -2018-12-06 Alexandre Oliva - - PR c++/86747 - * pt.c (tsubst_friend_class): Enter tsubsted class context. - - PR c++/86397 - * except.c (build_noexcept_spec): Resolve nondependent - expressions. - -2018-12-06 Jason Merrill - - PR c++/88136 - -Wdeprecated-copy false positives - * class.c (classtype_has_depr_implicit_copy): Rename from - classtype_has_user_copy_or_dtor. - * method.c (lazily_declare_fn): Adjust. - * decl2.c (cp_warn_deprecated_use): Refer to -Wdeprecated-copy-dtor - if deprecation is due to a destructor. - -2018-12-06 Marek Polacek - - PR c++/88373 - wrong parse error with ~. - * parser.c (cp_parser_template_name): Check tag_type for - none_type. - -2018-12-06 Segher Boessenkool - - * cp-tree.h (finish_asm_stmt): Update declaration. - * parser.c (cp_parser_asm_definition): Detect the inline keyword - after asm. Pass a flag for it to finish_asm_stmt. - * pt.c (tsubst_expr): Pass the ASM_INLINE_P flag to finish_asm_stmt. - * semantics.c (finish_asm_stmt): Add inline_p parameter. Use it to - set ASM_INLINE_P. - -2018-12-06 Segher Boessenkool - - PR inline-asm/55681 - * parser.c (cp_parser_asm_definition): Update grammar. Allow any - combination of volatile and goto, in any order, without repetitions. - -2018-12-06 David Malcolm - - PR c++/85110 - * call.c (conversion_null_warnings): Try to use the location of - the expression for the warnings. Add notes showing the parameter - of the function decl, where available. - (get_fndecl_argument_location): For implicitly-declared functions, - use the fndecl location rather than that of the param. - (maybe_inform_about_fndecl_for_bogus_argument_init): New function. - (convert_like_real): Use it in various places to avoid repetition. - (complain_about_bad_argument): Likewise. - * cp-tree.h (maybe_inform_about_fndecl_for_bogus_argument_init): - New declaration. - * decl2.c (check_default_args): Put all diagnostics for the fndecl - into a diagnostic group. Use the location of the parameter when - complaining about parameters with missing default arguments in - preference to that of the fndecl. Attempt to record the location - of the first parameter with a default argument and emit a note - for the first parameter that's missing one. - * typeck.c (convert_arguments): When complaining about parameters - with incomplete types, attempt to use the location of the - argument. Where available, add a note showing the pertinent - parameter in the fndecl. - (convert_for_assignment): When complaining about bad conversions - at function calls, use the location of the unstripped argument. - (convert_for_initialization): When checking for bogus references, - add an auto_diagnostic_group, and update the note to use the - location of the pertinent parameter, rather than just the callee. - -2018-12-06 Paolo Carlini - - * decl2.c (grokbitfield): Use DECL_SOURCE_LOCATION in error message; - print the type too; fix thinko in INDIRECT_TYPE_P use. - -2018-12-05 Alexandre Oliva - - PR c++/85569 - * constexpr.c (adjust_temp_type): Test for type equality with - same_type_p. - (constexpr_call_hasher::equal): Likewise. - -2018-12-04 Paolo Carlini - - PR c++/84636 - * decl.c (grokdeclarator): Avoid crashing on an anonymous bit-field - with function type. - -2018-12-04 Marek Polacek - - PR c++/88184 - ICE when treating name as template-name. - * pt.c (lookup_template_function): Always build the TEMPLATE_ID_EXPR - with unknown_type_node. - -2018-12-04 Julian Brown - - * parser.c (cp_parser_oacc_wait_list): Fix error message and avoid - duplicate diagnostic. - -2018-12-04 Jakub Jelinek - - PR c++/88103 - * typeck.c (build_class_member_access_expr): If unary_complex_lvalue - turned xvalue_p into non-xvalue_p, call move on it. - -2018-12-02 Jakub Jelinek - - PR c++/88258 - * parser.c (cp_parser_skip_to_closing_parenthesis_1, - cp_parser_skip_to_end_of_statement, - cp_parser_skip_to_end_of_block_or_statement, - cp_parser_skip_to_closing_brace, - cp_parser_skip_to_closing_square_bracket, - cp_parser_skip_balanced_tokens): Don't treat CPP_PRAGMA_EOL specially - if in_pragma is false. - -2018-12-01 Marek Polacek - - Implement P0634R3, Down with typename! - * parser.c (CP_PARSER_FLAGS_TYPENAME_OPTIONAL): New enumerator. - (cp_parser_type_name): Remove declaration. - (cp_parser_postfix_expression): Pass CP_PARSER_FLAGS_TYPENAME_OPTIONAL - to cp_parser_type_id. - (cp_parser_new_type_id): Pass CP_PARSER_FLAGS_TYPENAME_OPTIONAL to - cp_parser_type_specifier_seq. - (cp_parser_lambda_declarator_opt): Pass - CP_PARSER_FLAGS_TYPENAME_OPTIONAL to - cp_parser_parameter_declaration_clause. - (cp_parser_condition): Pass CP_PARSER_FLAGS_NONE to - cp_parser_declarator. - (cp_parser_simple_declaration): Pass CP_PARSER_FLAGS_NONE to - cp_parser_init_declarator. - (cp_parser_conversion_type_id): Pass CP_PARSER_FLAGS_NONE to - cp_parser_type_specifier_seq. - (cp_parser_default_type_template_argument): Pass - CP_PARSER_FLAGS_TYPENAME_OPTIONAL to cp_parser_type_id. - (cp_parser_template_parameter): Pass CP_PARSER_FLAGS_TYPENAME_OPTIONAL - to cp_parser_parameter_declaration. - (cp_parser_explicit_instantiation): Pass CP_PARSER_FLAGS_NONE to - cp_parser_declarator. - (cp_parser_simple_type_specifier): Adjust call to cp_parser_type_name - to relay if we should treat the typename keyword as optional. Maybe - call cp_parser_make_typename_type is parsing a template-id and it's - not a TYPE_DECL. - (cp_parser_type_name): Remove unused function. - (cp_parser_enum_specifier): Pass to CP_PARSER_FLAGS_NONE - cp_parser_type_specifier_seq. - (cp_parser_alias_declaration): Pass CP_PARSER_FLAGS_TYPENAME_OPTIONAL - to cp_parser_type_id. - (cp_parser_init_declarator): New parameter. Pass it down to - cp_parser_declarator. - (cp_parser_declarator): New parameter. Pass CP_PARSER_FLAGS_NONE to - cp_parser_declarator. Pass the new parameter to - cp_parser_direct_declarator. - (cp_parser_direct_declarator): New parameter. Pass it to - cp_parser_parameter_declaration_clause and cp_parser_declarator. - (cp_parser_declarator_id): - (cp_parser_type_id_1): New parameter. Pass it to - cp_parser_type_specifier_seq. Adjust call to cp_parser_declarator. - (cp_parser_type_id): New parameter. Pass it to cp_parser_type_id_1. - (cp_parser_template_type_arg): Pass CP_PARSER_FLAGS_NONE to - cp_parser_type_id_1. - (cp_parser_trailing_type_id): Pass CP_PARSER_FLAGS_TYPENAME_OPTIONAL - to cp_parser_type_id_1. - (cp_parser_type_specifier_seq): New parameter. - (function_being_declared_is_template_p): - (cp_parser_parameter_declaration_clause): New parameter. Pass it to - cp_parser_parameter_declaration_list. - (cp_parser_parameter_declaration_list): New parameter. Pass it to - cp_parser_parameter_declaration. - (cp_parser_parameter_declaration): New parameter. Pass it to - cp_parser_decl_specifier_seq. Pass CP_PARSER_FLAGS_NONE to - cp_parser_declarator. - (cp_parser_member_declaration): Adjust call to - cp_parser_decl_specifier_seq to also include - CP_PARSER_FLAGS_TYPENAME_OPTIONAL. Pass - CP_PARSER_FLAGS_TYPENAME_OPTIONAL to cp_parser_declarator. - (cp_parser_exception_declaration): Pass CP_PARSER_FLAGS_NONE to - cp_parser_type_specifier_seq and cp_parser_declarator. - (cp_parser_requirement_parameter_list): Pass CP_PARSER_FLAGS_NONE to - cp_parser_parameter_declaration_clause. - (cp_parser_constructor_declarator_p): Resolve the TYPENAME_TYPE. - (cp_parser_single_declaration): Pass CP_PARSER_FLAGS_TYPENAME_OPTIONAL - to cp_parser_decl_specifier_seq and cp_parser_init_declarator. - (cp_parser_cache_defarg): Pass CP_PARSER_FLAGS_NONE to - cp_parser_declarator and cp_parser_parameter_declaration_list. - (cp_parser_objc_method_tail_params_opt): Pass CP_PARSER_FLAGS_NONE to - cp_parser_parameter_declaration. - (cp_parser_objc_class_ivars): Pass CP_PARSER_FLAGS_NONE to - cp_parser_declarator. - (cp_parser_objc_try_catch_finally_statement): Pass CP_PARSER_FLAGS_NONE - to cp_parser_parameter_declaration - (cp_parser_objc_struct_declaration): Pass CP_PARSER_FLAGS_NONE to - cp_parser_declarator. - (cp_parser_omp_for_loop_init): Pass CP_PARSER_FLAGS_NONE to - cp_parser_declarator and cp_parser_type_specifier_seq. - -2018-11-30 David Malcolm - - * typeck2.c: Include "gcc-rich-location.h". - (cxx_incomplete_type_diagnostic): When complaining about possibly - missing parens, add a fix-it hint if the member function takes no - additional params. - -2018-11-30 James Norris - - * parser.c (cp_parser_oacc_enter_exit_data): Use existing local - variable. - -2018-11-29 Paolo Carlini - - * decl.c (compute_array_index_type_loc): New, like the current - compute_array_index_type but takes a location_t too. - (compute_array_index_type): Forward to the latter. - (create_array_type_for_decl): Use compute_array_index_type_loc. - -2018-11-29 David Malcolm - - PR c++/88121 - * cp-name-hint.h (suggest_alternative_in_scoped_enum): New decl. - * error.c (dump_scope): Ensure that we print any scope for values - of unscoped enums. Print the scope of values of scoped enums. - (qualified_name_lookup_error): Offer suggestions for failures - within scoped enums by calling suggest_alternative_in_scoped_enum. - * name-lookup.c (class namespace_hints): Update comment to mention - scoped enums. - (namespace_hints::namespace_hints): Call - maybe_add_candidate_for_scoped_enum. - (namespace_hints::maybe_add_candidate_for_scoped_enum): New member - (suggest_alternatives_for): Update comment to mention scoped - enums. - (suggest_alternative_in_scoped_enum): New function. - -2018-11-28 Marek Polacek - - Implement P1094R2, Nested inline namespaces. - * parser.c (cp_parser_namespace_definition): Parse the optional inline - keyword in a nested-namespace-definition. Adjust push_namespace call. - Formatting fix. - -2018-11-28 Nathan Sidwell - - PR c++/87531 - * class.c (finish_struct): In a template, add artificial using - decl for operator=. - -2018-11-28 Jan Hubicka - - * except.c (do_allocate_exception): Annotate __cxa_allocate_exception - as COLD. - -2018-11-28 Marek Polacek - - PR c++/88222 - ICE with bit-field with invalid type. - * decl.c (grokdeclarator): Check if declarator is null. - -2018-11-28 Jakub Jelinek - - PR c++/87476 - * typeck2.c (digest_init_r): Re-add handing of signed/unsigned char - strings and add it to the initialization of wide array from non-wide - string diagnostics too. - -2018-11-27 Jakub Jelinek - - PR c++/88187 - * decl.c (grokdeclarator): Don't diagnose deduction guide errors - if !funcdecl_p. - - PR c++/88181 - * class.c (fixup_attribute_variants): Also propagate TYPE_PACKED - to variants. - -2018-11-26 Marek Polacek - - PR c++/88120 - ICE when calling save_expr in a template. - * typeck.c (cp_build_binary_op): Call cp_save_expr instead of - save_expr. - -2018-11-22 Jakub Jelinek - - PR c++/87386 - * parser.c (cp_parser_operator): Use str.get_value () instead of just - str in USERDEF_LITERAL_VALUE and USERDEF_LITERAL_SUFFIX_ID arguments. - -2018-11-21 Jakub Jelinek - - PR c++/88122 - * method.c (maybe_explain_implicit_delete): If - FUNCTION_FIRST_USER_PARMTYPE (decl) is NULL, set const_p to false - instead of ICEing. - - PR c++/87386 - * parser.c (cp_parser_primary_expression): Use - id_expression.get_location () instead of id_expr_token->location. - Adjust the range from id_expr_token->location to - id_expressio.get_finish (). - (cp_parser_operator_function_id): Pass location of the operator - token down to cp_parser_operator. - (cp_parser_operator): Add start_loc argument, always construct a - location with caret at start_loc and range from start_loc to the - finish of the last token. - - PR c++/87393 - * parser.c (cp_parser_linkage_specification): Remove useless - dereference of the consume_open method result. - -2018-11-20 Martin Sebor - - * cp-tree.h (cp_check_const_attributes): Declare. - * decl2.c (cp_check_const_attributes): Declare extern. - * parser.c (cp_parser_has_attribute_expression): New function. - (cp_parser_unary_expression): Handle RID_HAS_ATTRIBUTE_EXPRESSION. - (cp_parser_gnu_attribute_list): Add argument. - -2018-11-20 Jakub Jelinek - - PR c++/88110 - * constexpr.c (cxx_eval_constant_expression) : Punt - if get_base_address of ADDR_EXPR operand is not a DECL_P. - -2018-11-19 Marek Polacek - - PR c++/87781 - detect invalid elaborated-type-specifier. - * parser.c (cp_parser_elaborated_type_specifier): Ensure that - typename follows a nested-name-specifier. - -2018-11-18 Paolo Carlini - - * decl2.c (grokfield): Remove obsolete _vptr check; fix - explicit template argument list error location. - -2018-11-16 Kamlesh Kumar - - DR 1207 - PR c++/52869 - * parser.c (cp_parser_noexcept_specification_opt): Call - inject_this_parameter. - -2018-11-16 Jason Merrill - - Implement P0479R5, [[likely]] and [[unlikely]]. - * tree.c (handle_likeliness_attribute): New. - (std_attribute_table): Add likely/unlikely. - * cp-gimplify.c (lookup_hotness_attribute, remove_hotness_attribute) - (process_stmt_hotness_attribute, first_stmt): New. - (genericize_if_stmt): Check for duplicate predictions. - * parser.c (cp_parser_statement): Call - process_stmt_hotness_attribute. - (cp_parser_label_for_labeled_statement): Apply attributes to case. - * decl.c (finish_case_label): Give label in template type void. - * pt.c (tsubst_expr) [CASE_LABEL_EXPR]: Copy attributes. - [PREDICT_EXPR]: Handle. - -2018-11-16 Nathan Sidwell - - Remove ovl_used, it is no longer needed - * cp-tree.h (OVL_USED_P): Delete. - (lookup_keep): Delete. - * friend.c (add_friend): Don't call it. - * parser.c (lookup_literal_operator): Likewise. - (cp_parser_primary_expression): Likewise. - * semantics.c (perform_koenig_lookup): Likewise. - * pt.c (tsubst_copy ): Don't assert OVL_USED_P. - * tree.c (ovl_copy): Delete. - (ovl_insert): Remove OVL_USED_P checks. - (ovl_iterator::reveal_node): Likewise. - (ovl_iterator::remove__node): Likewise. - (ovl_used, lookup_keep): Delete. - - PR c++/87269 - * parser.c (lookup_literal_operator): Mark overload for keeping - when inside template. Refactor. - -2018-11-15 Nathan Sidwell - - PR c++/86246 - PR c++/87989 - * typeck.c (finish_class_member_access_expr): Conversion operator - to dependent type is dependent. - -2018-11-15 Paolo Carlini - - * constexpr.c (ensure_literal_type_for_constexpr_object): Use - DECL_SOURCE_LOCATION in error_at calls. - -2018-11-15 Nathan Sidwell - - DR 2336 - * cp-tree.h (enum special_function_kind): Add sfk_virtual_destructor. - * method.c (type_has_trivial_fn): Add it. - (SFK_DTOR_P): Likewise. - (synthesized_method_base_walk): Don't check access of vbases of - abstract classes when sfk_virtual_destructor. - (synthesized_method_walk): Skip vbases of abstract classes except - when sfk_virtual_destructor. - (get_defaulted_eh_spec): Set sfk_virtual_destructor as needed. - - * cp-tree.h (enum special_function_kind): Reorder and comment. - * method.c (SFK_CTOR_P, SFK_DTOR_P, SFK_ASSIGN_P, SFK_COPY_P) - (SFK_MOVE_P): New predicates. - (walk_field_subobs, synthesized_method_base_walk): Drop - copy_arg_p, move_p, assign_p args. Use new SFK predicates. Order - parameters consistently. - (synthesized_method_walk): Drop ctor_p, copy_arg_p, move_p, - assign_p calculations. Use new SFK predicates. Adjust calls to - worker functions. - -2018-11-14 Paolo Carlini - - * parser.c (make_id_declarator): Add location_t parameter. - (cp_parser_lambda_declarator_opt): Adjust call. - (cp_parser_decomposition_declaration): Likewise. - (cp_parser_alias_declaration): Likewise. - (cp_parser_direct_declarator): Likewise. - (cp_parser_member_declaration): Likewise. - (cp_parser_objc_class_ivars): Likewise. - * decl.c (grokdeclarator): Use declarator->id_loc in two error - messages. - -2018-11-14 Jakub Jelinek - - P1236R1 - Signed integers are two's complement - * constexpr.c (cxx_eval_check_shift_p): Disable the signed LSHIFT_EXPR - checks for c++2a. - -2018-11-13 David Malcolm - - * call.c: Replace "source_location" with "location_t". - * cp-tree.h: Likewise. - * cvt.c: Likewise. - * name-lookup.c: Likewise. - * parser.c: Likewise. - * typeck.c: Likewise. - -2018-11-12 Jason Merrill - - Implement P0315R4, Lambdas in unevaluated contexts. - * decl2.c (min_vis_expr_r): Handle LAMBDA_EXPR. - * mangle.c (write_expression): Handle LAMBDA_EXPR. - * parser.c (cp_parser_lambda_expression): Allow lambdas in - unevaluated context. Start the tentative firewall sooner. - (cp_parser_lambda_body): Use cp_evaluated. - * pt.c (iterative_hash_template_arg): Handle LAMBDA_EXPR. - (tsubst_function_decl): Substitute a lambda even if it isn't - dependent. - (tsubst_lambda_expr): Use cp_evaluated. Always complain. - (tsubst_copy_and_build) [LAMBDA_EXPR]: Do nothing if tf_partial. - * semantics.c (begin_class_definition): Allow in template parm list. - * tree.c (strip_typedefs_expr): Pass through LAMBDA_EXPR. - (cp_tree_equal): Handle LAMBDA_EXPR. - - * pt.c (fn_type_unification): If we have a full set of explicit - arguments, go straight to substitution. - - * decl2.c (min_vis_expr_r, expr_visibility): New. - (min_vis_r): Call expr_visibility. - (constrain_visibility_for_template): Likewise. - - Implement P0722R3, destroying operator delete. - * call.c (std_destroying_delete_t_p, destroying_delete_p): New. - (aligned_deallocation_fn_p, usual_deallocation_fn_p): Use - destroying_delete_p. - (build_op_delete_call): Handle destroying delete. - * decl2.c (coerce_delete_type): Handle destroying delete. - * init.c (build_delete): Don't call dtor with destroying delete. - * optimize.c (build_delete_destructor_body): Likewise. - - Implement P0780R2, pack expansion in lambda init-capture. - * parser.c (cp_parser_lambda_introducer): Parse pack init-capture. - * pt.c (tsubst_pack_expansion): Handle init-capture packs. - (lookup_init_capture_pack): New. - (tsubst_expr) [DECL_EXPR]: Use it. - (tsubst_lambda_expr): Remember field pack expansions for - init-captures. - - * cp-tree.h (struct cp_evaluated): New. - * init.c (get_nsdmi): Use it. - * parser.c (cp_parser_enclosed_template_argument_list): Use it. - * pt.c (coerce_template_parms, tsubst_aggr_type): Use it. - -2018-11-09 Jakub Jelinek - - * parser.c (cp_parser_omp_clause_final, cp_parser_omp_clause_if): Use - cp_parser_assignment_expression instead of cp_parser_condition. - (cp_parser_omp_clause_num_threads, cp_parser_omp_clause_num_tasks, - cp_parser_omp_clause_grainsize, cp_parser_omp_clause_priority, - cp_parser_omp_clause_num_teams, cp_parser_omp_clause_thread_limit, - cp_parser_omp_clause_linear, cp_parser_omp_clause_device): Use - cp_parser_assignment_expression instead of cp_parser_expression. - (cp_parser_omp_clause_hint): Likewise. Formatting fix. - - * parser.c (cp_parser_omp_clause_reduction): Call sorry_at on - reduction clause with inscan modifier. - - * parser.c (cp_parser_omp_requires): Call sorry_at on requires - clauses other than atomic_default_mem_order. - -2018-11-09 Martin Sebor - - PR middle-end/81824 - * pt.c (warn_spec_missing_attributes): Move code to attribs.c. - Call decls_mismatched_attributes. - -2018-11-08 Jakub Jelinek - - * constexpr.c (potential_constant_expression_1): Handle OMP_DEPOBJ. - * cp-gimplify.c (cp_genericize_r): Handle - OMP_CLAUSE_{IN,TASK}_REDUCTION. - (cxx_omp_predetermined_sharing_1): Don't return - OMP_CLAUSE_DEFAULT_SHARED for const qualified decls with no mutable - member. Return OMP_CLAUSE_DEFAULT_FIRSTPRIVATE for this pointer. - * cp-objcp-common.c (cp_common_init_ts): Handle OMP_DEPOBJ. - * cp-tree.def (OMP_DEPOBJ): New tree code. - * cp-tree.h (OMP_ATOMIC_DEPENDENT_P): Return true also for first - argument being OMP_CLAUSE. - (OMP_DEPOBJ_DEPOBJ, OMP_DEPOBJ_CLAUSES): Define. - (cp_convert_omp_range_for, cp_finish_omp_range_for): Declare. - (finish_omp_atomic): Add LOC, CLAUSES and MO arguments. Remove - SEQ_CST argument. - (finish_omp_for_block): Declare. - (finish_omp_flush): Add MO argument. - (finish_omp_depobj): Declare. - * cxx-pretty-print.c (cxx_pretty_printer::statement): Handle - OMP_DEPOBJ. - * dump.c (cp_dump_tree): Likewise. - * lex.c (cxx_init): Likewise. - * parser.c: Include memmodel.h. - (cp_parser_for): Pass false as new is_omp argument to - cp_parser_range_for. - (cp_parser_range_for): Add IS_OMP argument, return before finalizing - if it is true. - (cp_parser_omp_clause_name): Handle nontemporal, in_reduction and - task_reduction clauses. - (cp_parser_omp_var_list_no_open): Handle - OMP_CLAUSE_{IN,TASK}_REDUCTION. For OMP_CLAUSE_DEPEND, parse clause - operands as either an array section, or lvalue assignment expression. - (cp_parser_omp_clause_if): Handle cancel and simd modifiers. - (cp_parser_omp_clause_defaultmap): Parse new kinds of defaultmap - clause. - (cp_parser_omp_clause_reduction): Add IS_OMP and KIND arguments. - Parse reduction modifiers. Pass KIND to c_parser_omp_variable_list. - (cp_parser_omp_clause_lastprivate, cp_parser_omp_iterators): New - functions. - (cp_parser_omp_clause_depend): Parse iterator modifier and handle - iterators. Parse mutexinoutset and depobj kinds. - (cp_parser_oacc_all_clauses): Adjust cp_parser_omp_clause_reduction - callers. - (cp_parser_omp_all_clauses): Likewise. Handle - PRAGMA_OMP_CLAUSE_NONTEMPORAL and - PRAGMA_OMP_CLAUSE_{IN,TASK}_REDUCTION. Call - cp_parser_omp_clause_lastprivate for OpenMP lastprivate clause. - (cp_parser_omp_atomic): Pass pragma_tok->location as - LOC to finish_omp_atomic. Parse hint and memory order clauses. - Handle default memory order from requires directive if any. Adjust - finish_omp_atomic caller. - (cp_parser_omp_critical): Allow comma in between (name) and hint - clause. - (cp_parser_omp_depobj): New function. - (cp_parser_omp_flush): Parse flush with memory-order-clause. - (cp_parser_omp_for_cond): Allow NE_EXPR even in OpenMP loops. - (cp_convert_omp_range_for, cp_finish_omp_range_for): New functions. - (cp_parser_omp_for_loop): Parse C++11 range for loops among omp - loops. Handle OMP_CLAUSE_IN_REDUCTION like OMP_CLAUSE_REDUCTION. - (OMP_SIMD_CLAUSE_MASK): Add if and nontemporal clauses. - (cp_parser_omp_simd, cp_parser_omp_for): Call keep_next_level before - begin_omp_structured_block and call finish_omp_for_block on - finish_omp_structured_block result. - (cp_parser_omp_master): Add p_name, mask and cclauses arguments. - Allow to be called while parsing combined parallel master. - Parse combined master taskloop{, simd}. - (cp_parser_omp_parallel): Parse combined - parallel master{, taskloop{, simd}} constructs. - (cp_parser_omp_single): Use SET_EXPR_LOCATION. - (OMP_TASK_CLAUSE_MASK): Add in_reduction clause. - (OMP_TASKWAIT_CLAUSE_MASK): Define. - (cp_parser_omp_taskwait): Handle taskwait with depend clauses. - (OMP_TASKGROUP_CLAUSE_MASK): Define. - (cp_parser_omp_taskgroup): Parse taskgroup clauses, adjust - c_finish_omp_taskgroup caller. - (cp_parser_omp_distribute): Call keep_next_level before - begin_omp_structured_block and call finish_omp_for_block on - finish_omp_structured_block result. - (cp_parser_omp_teams): Force a BIND_EXPR with BLOCK around teams - body. - (cp_parser_omp_target_data): Allow target data with only - use_device_ptr clauses. - (cp_parser_omp_target): Set OMP_REQUIRES_TARGET_USED bit in - omp_requires_mask. - (cp_parser_omp_requires): New function. - (OMP_TASKLOOP_CLAUSE_MASK): Add reduction and in_reduction clauses. - (cp_parser_omp_taskloop): Add forward declaration. Disallow - in_reduction clause when combined with parallel master. Call - keep_next_level before begin_omp_structured_block and call - finish_omp_for_block on finish_omp_structured_block result. - (cp_parser_omp_construct): Adjust cp_parser_omp_master caller. - (cp_parser_pragma): Handle PRAGMA_OMP_DEPOBJ and PRAGMA_OMP_REQUIRES. - * pt.c (tsubst_omp_clause_decl): Add iterators_cache argument. - Adjust recursive calls. Handle iterators. - (tsubst_omp_clauses): Handle OMP_CLAUSE_{IN,TASK}_REDUCTION and - OMP_CLAUSE_NONTEMPORAL. Adjust tsubst_omp_clause_decl callers. - (tsubst_decomp_names): - (tsubst_omp_for_iterator): Change orig_declv into a reference. - Handle range for loops. Move orig_declv handling after declv/initv - handling. - (tsubst_expr): Force a BIND_EXPR with BLOCK around teams body. - Adjust finish_omp_atomic caller. Call keep_next_level before - begin_omp_structured_block. Call cp_finish_omp_range_for for range - for loops and use {begin,finish}_omp_structured_block instead of - {push,pop}_stmt_list if there are any range for loops. Call - finish_omp_for_block on finish_omp_structured_block result. - Handle OMP_DEPOBJ. Handle taskwait with depend clauses. For - OMP_ATOMIC call tsubst_omp_clauses on clauses if any, adjust - finish_omp_atomic caller. Use OMP_ATOMIC_MEMORY_ORDER rather - than OMP_ATOMIC_SEQ_CST. Handle clauses on OMP_TASKGROUP. - (dependent_omp_for_p): Always return true for range for loops if - processing_template_decl. Return true if class type iterator - does not have INTEGER_CST increment. - * semantics.c: Include memmodel.h. - (handle_omp_array_sections_1): Handle OMP_CLAUSE_{IN,TASK}_REDUCTION - like OMP_CLAUSE_REDUCTION. - (handle_omp_array_sections): Likewise. Call save_expr on array - reductions before calling build_index_type. Handle depend clauses - with iterators. - (finish_omp_reduction_clause): Call save_expr for whole array - reduction sizes. Don't mark OMP_CLAUSE_DECL addressable if it has - reference type. Do mark decl_placeholder addressable if needed. - Use error_at with OMP_CLAUSE_LOCATION (c) as first argument instead - of error. - (cp_omp_finish_iterators): New function. - (finish_omp_clauses): Don't diagnose nonmonotonic clause with static, - runtime or auto schedule kinds. Diagnose nogroup clause used with - reduction clause(s). Handle depend clause with - OMP_CLAUSE_DEPEND_DEPOBJ. Diagnose bit-fields. Require - omp_depend_t type for OMP_CLAUSE_DEPEND_DEPOBJ kinds and - some different type for other kinds. Use cp_build_addr_expr - and cp_build_indirect_ref instead of cxx_mark_addressable. - Handle depend clauses with iterators. Only handle static data members - in the special case that const qualified vars may be specified in - firstprivate clause. Complain if const qualified vars without mutable - members are mentioned in data-sharing clauses other than firstprivate - or shared. Use error_at with OMP_CLAUSE_LOCATION (c) as first - argument instead of error. Diagnose more than one nontemporal clause - refering to the same variable. Use error_at rather than error for - priority and hint clause diagnostics. Fix pasto for hint clause. - Diagnose hint expression that doesn't fold into INTEGER_CST. - Diagnose if clause with modifier other than cancel. Handle - OMP_CLAUSE_{IN,TASK}_REDUCTION like OMP_CLAUSE_REDUCTION. Allow any - lvalue as OMP_CLAUSE_DEPEND operand (besides array section), adjust - diagnostics. - (handle_omp_for_class_iterator): Don't create a new TREE_LIST if one - has been created already for range for, just fill TREE_PURPOSE and - TREE_VALUE. Call cp_fully_fold on incr. - (finish_omp_for): Don't check cond/incr if cond is global_namespace. - Pass to c_omp_check_loop_iv_exprs orig_declv if non-NULL. Don't - use IS_EMPTY_STMT on NULL pre_body. Adjust c_finish_omp_for caller. - (finish_omp_for_block): New function. - (finish_omp_atomic): Add LOC argument, pass it through - to c_finish_omp_atomic and set it as location of OMP_ATOMIC* trees. - Remove SEQ_CST argument. Add CLAUSES and MO arguments. Adjust - c_finish_omp_atomic caller. Stick clauses if any into first argument - of wrapping OMP_ATOMIC. - (finish_omp_depobj): New function. - (finish_omp_flush): Add MO argument, if not - MEMMODEL_LAST, emit __atomic_thread_fence call with the given value. - (finish_omp_cancel): Diagnose if clause with modifier other than - cancel. - -2018-11-07 Nathan Sidwell - - PR c++/87904 - * cp-tree.h (struct tree_overload): Fix comment. - * tree.c (ovl_iterator::reveal_node): Propagate OVL_DEDUP_P. - -2018-11-04 Jason Merrill - - Implement UDL changes from P0732R2. - * cp-tree.h (struct releasing_vec): Move from mangle.c. - Add get_ref method. - * parser.c (cp_parser_userdef_string_literal): Use it. Handle - passing the string to a single template parameter of class type. - (cp_parser_template_declaration_after_parameters): Allow it. - Pedwarn about the character pack template that was proposed but not - accepted for C++14, and don't suggest it. - - Implement P0732R2, class types in non-type template parameters. - * error.c (dump_simple_decl): Look through a template parm object. - * mangle.c (write_template_arg): Likewise. - (mangle_template_parm_object): New. - * pt.c (template_parm_object_p, get_template_parm_object): New. - (invalid_tparm_referent_p): Factor from convert_nontype_argument. - (convert_nontype_argument, invalid_nontype_parm_type_p): Handle - class-type template arguments. - * tree.c (lvalue_kind): Likewise. - - * cvt.c (ocp_convert): Don't wrap a CONSTRUCTOR in a NOP_EXPR. - * constexpr.c (initialized_type): Fix AGGR_INIT_EXPR handling. - (cxx_eval_vec_init_1): Correct type of AGGR_INIT_EXPR. - (cxx_eval_outermost_constant_expr): Make sure a CONSTRUCTOR has the - right type. Don't wrap a CONSTRUCTOR if one was passed in. - * tree.c (build_aggr_init_expr): Check for void. - - PR c++/60503 - wrong lambda attribute syntax. - * parser.c (cp_parser_lambda_declarator_opt): Fix attribute - handling. - -2018-11-02 Nathan Sidwell - - * decl.c (duplicate_decls): Refactor checks. - -2018-11-01 Marek Polacek - - Implement P0846R0, ADL and function templates. - * decl.c (grokfndecl): Allow FUNCTION_DECL in assert. - * lex.c (unqualified_fn_lookup_error): Handle TEMPLATE_ID_EXPR. - * parser.c (cp_parser_postfix_expression): Do ADL for a template-name. - (cp_parser_template_id): Give errors if parsing the template argument - list didn't go well. Allow FUNCTION_DECL in assert. - (cp_parser_template_name): Consider a name to refer to a template if - it is an unqualified-id followed by a <. Don't return the identifier - if the decl is a function and dependent. - * pt.c (tsubst_copy) : Remove assert. - -2018-11-01 Nathan Sidwell - - * cp-tree.h (struct lang_function): Delete x_local_names field. - (struct lang_decl_base): Rename u2sel to spare. - (struct lang_decl_min): Remove lang_decl_u2 union. Keep access - field. - (LANG_DECL_U2_CHECK): Delete. - (DECL_DISCRIMINATOR_P): Require function scope. - (DECL_DISCRIMINATOR): Adjust. - (DECL_DISCRIMINATOR_SET_P): Delete. - (DECL_CAPTURED_VARIABLE, DECL_ACCESS, THUnK_VIRTUAL_OFFSET): Adjust. - (local_classes): Don't declare. - (determine_local_discriminator): Declare. - * decl.c (push_local_name): Delete. - (local_entities, determina_local_discrminator): New. - (duplicate_decls): Copy DECL_ACCESS. Fix formatting. - (cp_finish_decl): Use determine_local_discriminator. - (save_function_data): Drop x_local_names. - (finish_function): Drop local_names. - * decl2.c (finish_anon_union): Use determine_local_disciminator. - * mangle.c (write_unnamed_type_name): Use - discriminator_for_local_entity. - (local_class_index): Delete. - (discriminator_for_local_entity): Reimplement. - (write_local_name): Adjust discriminator code. - * name-lookup.c (do_pushtag): Call determine_local_discrimiator. - * semantics.c (finish_omp_threadprivate): Drop DECL_DISCRIMINATOR - handling. - * class.c (local_classes): Delete. - (init_class_processing): Don't init it. - -2018-11-01 Martin Liska - Jason Merrill - - PR c++/64266 - PR bootstrap/70422 - PR ipa/81277 - * cp-tree.h (DECL_FNAME_P): New macro. - * decl.c (cp_make_fname_decl): Set DECL_DECLARED_CONSTEXPR_P, - DECL_VALUE_EXPR, DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P. - (cp_finish_decl): - * lambda.c (is_capture_proxy): Use DECL_FNAME_P. - * pt.c (tsubst_expr): Handle DECL_PRETTY_FUNCTION_P. - -2018-10-31 Nathan Sidwell - - * cp-tree.h (OVL_DEDUP_P): New. - * name-lookup.c (name_lookup::add_overload): Check OVL_DEDUP_P. - (get_class_binding_direct): Likwise. - * tree.c (ovl_make): Propagate OVL_DEDUP_P. - (ovl_copy): Copy it. - (ovl_insert): Do not keep using-decls ordered. - (lookup_maybe_add): Adjust comment. - -2018-10-30 Marek Polacek - - Implement P0892R2, explicit(bool). - * call.c (add_template_candidate_real): Return if the declaration is - explicit and we're only looking for non-converting constructor. - * cp-tree.h (lang_decl_fn): Add has_dependent_explicit_spec_p bit. - (DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P): New macro. - (cp_decl_specifier_seq): Add explicit_specifier field. - (build_explicit_specifier, store_explicit_specifier): Declare. - * decl.c (grokdeclarator): Call store_explicit_specifier. - (build_explicit_specifier): New function. - * parser.c (cp_parser_function_specifier_opt) : - Parse C++20 explicit(bool). - * pt.c (store_explicit_specifier, lookup_explicit_specifier): New. - (tsubst_function_decl): Handle explicit(dependent-expr). - -2018-10-30 Paolo Carlini - - * decl.c (grokdeclarator): Use declarator->id_loc in diagnostic - about flexible array members. - -2018-10-29 David Malcolm - - * cp-name-hint.h: New file. - * cp-tree.h (expr_to_string): New decl. - (suggest_alternatives_for): Move to cp-name-hint.h, changing - return type from bool to name_hint. - (suggest_alternative_in_explicit_scope): Likewise. - * error.c: Define INCLUDE_UNIQUE_PTR. Include "cp-name-hint.h". - (expr_to_string): Make non-static. - (qualified_name_lookup_error): For the non-"::" case, take - responsibity for issuing any suggestion from - suggest_alternative_in_explicit_scope, as it changes from - returning a bool to returning a name_hint. Replace fallback call - to suggest_alternatives_for to a call to - suggest_alternatives_in_other_namespaces, capturing the fact that - we don't have enough location information to issue a fix-it hint - for this case. Update the error to support emitting a fix-it hint - where appropriate. For the "::" case, take responsibility for - issuing any suggestion from suggest_alternatives_for, supporting - emitting a fix-it hint. - * lex.c: Define INCLUDE_UNIQUE_PTR. Include "gcc-rich-location.h" - and "cp-name-hint.h". - (unqualified_name_lookup_error): Take responsibility for issuing - any suggestion from suggest_alternatives_for, supporting emitting - a fix-it hint. - * name-lookup.c (class namespace_limit_reached): New subclass of - deferred_diagnostic. - (class show_candidate_location): Likewise. - (class suggest_alternatives): Likewise. - (class namespace_hints): New class. - (suggest_alternatives_for): Convert return type from bool to - name_hint, replacing all direct diagnostic emission by setting - suggestions on the return value, or creating deferred diagnostics. - Specifically, split out initial traversal of namespaces into - namespace_hints' ctor, and maybe_decorate_with_limit, and move the - rest of the implementation to - namespace_hints::convert_candidates_to_name_hint and - suggest_alternatives_for_1. - (namespace_hints::namespace_hints): New ctor, adapted from - suggest_alternatives_for's initial namespace traversal, storing - location and name, and converting locals "candidates", "limited" - and "limit" into members. - (namespace_hints::convert_candidates_to_name_hint): New member - function. - (namespace_hints::maybe_decorate_with_limit): New member function. - (suggest_alternatives_for_1): New function, based on second half - of old implementation of suggest_alternatives_for, converting from - immediate emission of suggestions to using name_hint. - (suggest_alternatives_in_other_namespaces): New function. - (maybe_suggest_missing_std_header): Convert from immediate - emission of suggestions to using name_hint, moving emission - implementation to... - (class missing_std_header): New subclass of deferred_diagnostic. - (maybe_suggest_missing_header): Convert return type from bool to - name_hint. - (suggest_alternative_in_explicit_scope): Convert from immediate - emission of suggestions to using name_hint. - * parser.c: Replace include of "c-family/name-hint.h" with - "cp-name-hint.h". - (cp_parser_diagnose_invalid_type_name): Update - "is there a suggestion" logic for change to - name_hint::operator bool. Take responsibility for emitting - fix-it hints from suggest_alternative_in_explicit_scope. - (cp_parser_namespace_name): Take responsibility for emitting - fix-it hints from suggest_alternative_in_explicit_scope. Don't - emit the "expected namespace-name" error if we've already emitted - an "is not a namespace-name" error. - -2018-10-29 David Malcolm - - PR c++/56856 - * call.c (build_over_call): Eliminate the "arglocs" array, and the - call to maybe_constant_value when building "fargs". - -2018-10-29 Paolo Carlini - - * decl.c (create_array_type_for_decl): Add location_t parameter - and use it. - (grokdeclarator): Adjust call. - -2018-10-29 Marek Polacek - - PR c++/87594 - constexpr rejects-valid with range-based for. - * constexpr.c (potential_constant_expression_1): If the condition - can't be evaluated, return true. - -2018-10-29 Joseph Myers - Julian Brown - - PR c++/66053 - * semantics.c (handle_omp_array_sections_1): Allow array - sections with "this" pointer for OpenACC. - -2018-10-25 Jason Merrill - - * parser.c (cp_parser_sizeof_operand): Remove redundant use of - grokdeclarator. - -2018-10-24 Jakub Jelinek - - PR c++/86288 - * parser.c (cp_parser_std_attribute): Canonicalize attr_ns, and when - :: is not present and attr_ns non-NULL, canonicalize also attr_id. - (cp_parser_attribute_spec): Fix comment typo. - -2018-10-24 Martin Sebor - - PR c++/84851 - * call.c (maybe_warn_class_memaccess): Tighten up. - -2018-10-17 David Malcolm - - * Make-lang.in (selftest-c++): New. - (CPP_SELFTEST_FLAGS, CPP_SELFTEST_DEPS, s-selftest-c++) - (selftest-c++-gdb, selftest-c++-valgrind): Move here from - gcc/Makefile.in. - -2018-10-17 Paolo Carlini - - PR c++/84705 - * tree.c (build_cplus_new): Avoid duplicate diagnostic about - incomplete type, early return error_mark_node if the second - argument is error_mark_node. - -2018-10-12 Nathan Sidwell - - * parser.h (struct cp_parser): Drop implicit_extern_c. - * parser.c (cp_debug_parser): Drop implicit_extern_c. - (cp_parser_new): Likewise. - (cp_parser_translation_unit): Handle implicit extern c here. Call - cp_parser_toplevel_declaration. - (cp_parser_toplevel_declaration): New, broken out of ... - (cp_parser_declaration_seq_opt): ... here. Call it. Drop - implicit extern C handling. - -2018-10-11 Will Wray - - PR c++/87364 - * cxx-pretty-print.c (pp_cxx_enumeration_constant): New function. - (cxx_pretty_printer::constant): Use it. - -2018-10-11 David Malcolm - - PR c++/84993 - * call.c (enforce_access): Move diagnostics to... - (complain_about_access): ...this new function. - * cp-tree.h (class access_failure_info): Rename split out field - "m_field_decl" into "m_decl" and "m_diag_decl". - (access_failure_info::record_access_failure): Add tree param. - (access_failure_info::was_inaccessible_p): New accessor. - (access_failure_info::get_decl): New accessor. - (access_failure_info::get_diag_decl): New accessor. - (access_failure_info::get_any_accessor): New member function. - (access_failure_info::add_fixit_hint): New static member function. - (complain_about_access): New decl. - * typeck.c (access_failure_info::record_access_failure): Update - for change to fields. - (access_failure_info::maybe_suggest_accessor): Split out into... - (access_failure_info::get_any_accessor): ...this new function... - (access_failure_info::add_fixit_hint): ...and this new function. - (finish_class_member_access_expr): Split out "has no member named" - error-handling into... - (complain_about_unrecognized_member): ...this new function, and - check that the guessed name is accessible along the access path. - Only provide a spell-correction fix-it hint if it is; otherwise, - attempt to issue an accessor fix-it hint. - -2018-10-11 Nathan Sidwell - - * parser.c (cp_parser_translation_unit): Return void. Don't fail - at first extra }, simplify logic. - (c_parse_file): Call finish_translation_unit here. - -2018-10-11 Jakub Jelinek - - PR c++/87582 - * typeck.c (maybe_warn_about_returning_address_of_local): If - whats_returned is a structured binding identifier and the structured - binding is a reference, recurse on its initializer. - - PR c++/87547 - * rtti.c (get_tinfo_decl_dynamic): Use unlowered_expr_type instead - of TREE_TYPE. - -2018-10-10 Marek Polacek - - PR c++/87567 - constexpr rejects call to non-constexpr function. - * constexpr.c (potential_constant_expression_1) : Return - true if the condition is always false. - : Likewise. - -2018-10-09 Paolo Carlini - - PR c++/84423 - * pt.c (convert_template_argument): Immediately return error_mark_node - if the second argument is erroneous. - * parser.c (cp_parser_type_id): Add location_t * parameter. - (cp_parser_type_id_1): Likewise. - (cp_parser_alias_declaration): Adjust cp_parser_type_id call, - obtain the location of the type and save it. - (cp_parser_template_type_arg): Adjust. - (cp_parser_trailing_type_id): Likewise. - * decl.c (grokdeclarator): Improve error message for 'auto' in - alias declaration. - -2018-10-08 Paolo Carlini - - PR c++/71128 - * pt.c (do_decl_instantiation): Per 12.6.8/5, a concept cannot be - explicitly instantiated. - -2018-10-05 David Malcolm - - PR c++/56856 - * call.c (build_over_call): Build a vec of locations of the - arguments before the call to maybe_constant_value, and pass to - check_function_arguments. - * cp-lang.c (LANG_HOOKS_GET_SUBSTRING_LOCATION): Define as - c_get_substring_location. - * parser.c (cp_parser_string_literal): Capture string - concatenation locations. - -2018-10-04 Nathan Sidwell - - * lang-specs.h: Use string contatenation, not line splicing. - -2018-10-03 Jason Merrill - - Implement P0840, language support for empty objects. - * tree.c (handle_no_unique_addr_attribute): New. - (cxx_attribute_table): Add [[no_unique_address]]. - * class.c (field_poverlapping_p): New. - (layout_class_type): Check it. Adjust DECL_SIZE of potentially - overlapping fields. - (layout_empty_base_or_field): Rename from layout_empty_base, handle - FIELD_DECL as well. - (build_base_field, record_subobject_offsets): Adjust. - -2018-10-03 Martin Liska - - PR gcov-profile/86109 - * parser.c (cp_parser_lambda_declarator_opt): - Set DECL_LAMBDA_FUNCTION for lambdas. - -2018-10-02 Richard Biener - - * name-lookup.c (check_local_shadow): Do not test DECL_FROM_INLINE. - -2018-09-28 Eric Botcazou - Pierre-Marie de Rodat - - * method.c (use_thunk): Adjust call to cgraph_node::create_thunk. - -2018-09-28 Richard Biener - - * error.c (cp_print_error_function): Simplify by eliding - the BLOCK_ABSTRACT_ORIGIN chasing. - -2018-09-27 Paolo Carlini - - PR c++/84940 - * semantics.c (finish_unary_op_expr): Check return value of - build_x_unary_op for error_mark_node. - -2018-09-25 Jakub Jelinek - - PR c++/87398 - * constexpr.c (cxx_eval_constant_expression) : Only - look through COMPONENT_REFs with DECL_FIELD_IS_BASE FIELD_DECLs. - -2018-09-25 Martin Liska - - * name-lookup.c (namespace_scope_ht_size): Remove - unused function. - * parser.c (cp_lexer_next_token_is_not_keyword): Likewise. - -2018-09-24 Paolo Carlini - - PR c++/85070 - * method.c (lazily_declare_fn): During error-recovery add_method - may return false. - -2018-09-21 Marek Polacek - - PR c++/87372 - __func__ constexpr evaluation. - * constexpr.c (maybe_constant_init_1): Pass false for strict down to - cxx_eval_outermost_constant_expr. - -2018-09-20 Marek Polacek - - PR c++/87109 - wrong ctor with maybe-rvalue semantics. - * call.c (build_user_type_conversion_1): Refine the maybe-rvalue - check to only return if we're converting the return value to a base - class. - -2018-09-20 Allan Sandfeld Jensen - - * g++spec.c (lang_specific_driver): Handle -r like -nostdlib. - -2018-09-20 Jason Merrill - - PR c++/87075 - ICE with constexpr array initialization. - * constexpr.c (cxx_eval_vec_init_1): Handle trivial initialization. - -2018-09-19 Marek Polacek - - Add -Wclass-conversion. - * decl.c (grok_op_properties): Change a warning from -Wconversion to - -Wclass-conversion. Make it print the types. - -2018-09-19 Paolo Carlini - - PR c++/87324 - * parser.c (cp_parser_initializer_list): Assign error_mark_node - to the index upon error. - -2018-09-19 Marek Polacek - - PR c++/87357 - missing -Wconversion warning - * decl.c (grok_op_properties): Remove diagnostic parts mentioning - a conversion to a reference to void. Use - same_type_ignoring_top_level_qualifiers_p rather than comparing types - directly. - -2018-09-18 Marek Polacek - - P1064R0 - Allowing Virtual Function Calls in Constant Expressions - * call.c (build_over_call): No longer check if we're outside a template - function. - * class.c (build_vtbl_initializer): Build vtable's constructor with - indexes. - * constexpr.c (cxx_eval_constant_expression): Don't ignore _vptr's - initializer. Handle OBJ_TYPE_REF. - (potential_constant_expression_1): Handle OBJ_TYPE_REF. - * decl.c (maybe_commonize_var): Bail out for any DECL_ARTIFICIAL. - (initialize_artificial_var): Mark the variable as constexpr. - (grokdeclarator): Change error to pedwarn. Only warn when - pedantic and not C++2a. - -2018-09-18 Paolo Carlini - - PR c++/85065 - * cp-tree.h (NON_ERROR): New. - * pt.c (auto_hash::hash): Use it. - (do_auto_deduction): Likewise. - -2018-09-18 Nathan Sidwell - - PR c++/86881 - * name-lookup.c (check_local_shadow): Ignore auto types. - -2018-09-17 David Malcolm - - * error.c (range_label_for_type_mismatch::get_text): Update for - new param. - -2018-09-13 Bernd Edlinger - - * typeck2.c (digest_init_r): Fix overlength strings. - -2018-09-13 Ville Voutilainen - - PR c++/87093 - * method.c (constructible_expr): We're in an unevaluated context - in all cases, not just for class targets. - -2018-09-12 David Malcolm - - PR c++/85110 - * call.c (struct conversion_info): Add "loc" field. - (arg_conversion_rejection): Add "loc" param, using it to - initialize the new field. - (bad_arg_conversion_rejection): Likewise. - (explicit_conversion_rejection): Initialize the new field to - UNKNOWN_LOCATION. - (template_conversion_rejection): Likewise. - (add_function_candidate): Pass on the argument location to the new - param of arg_conversion_rejection. - (add_conv_candidate): Likewise. - (build_builtin_candidate): Likewise. - (build_user_type_conversion_1): Likewise. - (single_z_candidate): New function. - (maybe_get_bad_conversion_for_unmatched_call): New function. - (complain_about_bad_argument): New function, based on part of - convert_for_assignment. - (build_new_method_call_1): Split out handling of the "no viable - candidates" case into... - (complain_about_no_candidates_for_method_call): ...this new - function, and use the new functions above to special-case the - handling of a single non-viable candidate due to a bad argument. - * cp-tree.h (complain_about_bad_argument): New decl. - * typeck.c (convert_for_assignment): Split out one error-handling - case into complain_about_bad_argument. - -2018-09-09 Cesar Philippidis - Julian Brown - - PR middle-end/86336 - * semantics.c (finish_omp_clauses): Treat C++ references the same in - OpenACC as OpenMP. - -2018-08-28 Martin Liska - - * constexpr.c (cxx_eval_call_expression): Add quotes - to -fconstexpr-depth=. - -2018-09-10 Marek Polacek - - * class.c (build_vtbl_ref): Remove. - (build_vtbl_ref_1): Rename to build_vtbl_ref. - (build_vfn_ref): Call build_vtbl_ref instead of build_vtbl_ref_1. - -2018-09-08 Marek Polacek - - PR c++/87150 - wrong ctor with maybe-rvalue semantics. - * call.c (struct conversion): Update commentary. - (standard_conversion): Set rvaluedness_matches_p if LOOKUP_PREFER_RVALUE - for ck_base. - -2018-09-08 Jason Merrill - - PR c++/86678 - constexpr function with non-constant after return. - * constexpr.c (potential_constant_expression_1): Add jump_target. - (breaks): Check for BREAK_STMT. - (continues): Check for CONTINUE_STMT. - -2018-09-08 Marek Polacek - - * cxx-pretty-print.c (cxx_pretty_printer::statement) : Handle RANGE_FOR_INIT_STMT. - -2018-09-07 Marek Polacek - - PR c++/87152 - range-based for loops with initializer broken in templates. - * constexpr.c (potential_constant_expression_1) : - Recur into RANGE_FOR_INIT_STMT. - * cp-tree.def: Add RANGE_FOR_INIT_STMT to RANGE_FOR_STMT. - * cp-tree.h (RANGE_FOR_INIT_STMT): Define. - * dump.c (cp_dump_tree) : Also dump - RANGE_FOR_INIT_STMT. - * pt.c (tsubst_expr) : Recur into - RANGE_FOR_INIT_STMT. - * semantics.c (begin_range_for_stmt): Adjust call to build_stmt. - Do put the init statement in RANGE_FOR_INIT_STMT. - (finish_range_for_decl): Pop it for templates. - -2018-09-06 Bernd Edlinger - - * decl.c (check_initializer): Call cp_complete_array_type. - -2018-09-05 Marek Polacek - - PR c++/87109, wrong overload with ref-qualifiers. - * call.c (build_user_type_conversion_1): Use NULL instead of 0. Bail - out if performing the maybe-rvalue overload resolution and a conversion - function is getting called. - - PR c++/86982, -Wreturn-local-addr and std::move and std::forward. - * typeck.c (maybe_warn_about_returning_address_of_local): Handle calls - to std::move or std::forward. - (is_std_forward_p): New function. - -2018-09-05 Pádraig Brady - - PR c++/87185 - * lambda.c (prune_lambda_captures): Protect against const_vars.get - returning NULL. - -2018-09-04 Marek Polacek - - * cp-tree.h (treat_lvalue_as_rvalue_p): Declare. - * except.c (build_throw): Use it. Use CP_TYPE_VOLATILE_P. - * typeck.c (treat_lvalue_as_rvalue_p): No longer static. Add PARM_OK - parameter. - (maybe_warn_pessimizing_move): Adjust treat_lvalue_as_rvalue_p call. - (check_return_expr): Likewise. - -2018-09-03 Paolo Carlini - - PR c++/84980 - * constraint.cc (finish_shorthand_constraint): Early return if the - constraint is erroneous. - -2018-09-02 Bernd Edlinger - - * decl.c (eval_check_narrowing): Remove. - (check_initializer): Move call to braced_list_to_string from here ... - * typeck2.c (store_init_value): ... to here. - (digest_init_r): Remove handing of signed/unsigned char strings. - -2018-08-31 Nathan Sidwell - - PR c++/87155 - PR c++/84707 - * name-lookup.c (name_lookup::search_namespace): Don't look at - inlines when searching for NULL names. - - * decl.c (decls_match): Remove SYSTEM_IMPLICIT_EXTERN_C matching - of return types and parms. - * parser.c (cp_parser_parameter_declaration_clause): Likewise, - '()' always means '(void)'. - -2018-08-29 Jakub Jelinek - - PR c++/87095 - * decl.c (begin_destructor_body): If current_class_type has - virtual bases and the primary base is nearly empty virtual base, - voidify clearing of vptr and make it conditional on in-charge - argument. - -2018-08-29 Paolo Carlini - - PR c++/85265 - * parser.c (cp_parser_introduction_list): If cp_parser_identifier - returns error_mark_node early exit the loop. - (cp_parser_template_introduction): Improve error-recovery, remove - error call about empty introduction-list. - -2018-08-29 David Malcolm - - PR c++/85110 - * call.c (print_conversion_rejection): Add "fn" param and use it - for "no known conversion" messages to underline the pertinent - param. - (print_z_candidate): Supply "fn" to the new param above. - -2018-08-29 Jakub Jelinek - - PR c++/87122 - * pt.c (tsubst_expr) : If - processing_template_decl and decl is structured binding decl, call - cp_finish_decomp. - -2018-08-28 Paolo Carlini - - PR c++/86546 - * decl.c (finish_case_label): If the type is erroneous early - return error_mark_node. - -2018-08-27 David Malcolm - - PR c++/63392 - * parser.c (cp_parser_diagnose_invalid_type_name): Add fix-it - hint. - -2018-08-27 Jakub Jelinek - - PR c++/86993 - * cp-tree.h (cxx_readonly_error): Add location_t argument. - * typeck2.c (cxx_readonly_error): Add LOC argument, pass it to - ERROR_FOR_ASSIGNMENT macro and readonly_error. Add LOC argument - to ERROR_FOR_ASSIGNMENT macro, use error_at instead of error and - pass LOC to it. Formatting fixes. - * typeck.c (cp_build_unary_op): Pass location to cxx_readonly_error. - (cp_build_modify_expr): Pass loc to cxx_readonly_error. - * semantics.c (finish_asm_stmt): Pass input_location to - cxx_readonly_error. - -2018-08-27 David Malcolm - - PR c++/87091 - * decl.c (grokdeclarator): Update for conversion of show_caret_p - to a tri-state. - * error.c (cp_printer): Likewise. - * name-lookup.c (maybe_suggest_missing_std_header): Update call to - maybe_add_include_fixit to suggest overriding the location, as it - is for a note. - * parser.c (cp_parser_string_literal): Update for conversion of - show_caret_p to a tri-state. - (cp_parser_elaborated_type_specifier): Likewise. - (set_and_check_decl_spec_loc): Likewise. - * pt.c (listify): Update call to maybe_add_include_fixit to not - override the location, as it is for an error. - * rtti.c (typeid_ok_p): Likewise. - -2018-08-27 Martin Liska - - * call.c (build_call_a): Use new function - fndecl_built_in_p and remove check for FUNCTION_DECL if - possible. - (build_cxx_call): Likewise. - * constexpr.c (constexpr_fn_retval): Likewise. - (cxx_eval_builtin_function_call): Likewise. - (cxx_eval_call_expression): Likewise. - (potential_constant_expression_1): Likewise. - * cp-gimplify.c (cp_gimplify_expr): Likewise. - (cp_fold): Likewise. - * decl.c (decls_match): Likewise. - (validate_constexpr_redeclaration): Likewise. - (duplicate_decls): Likewise. - (make_rtl_for_nonlocal_decl): Likewise. - * name-lookup.c (consider_binding_level): Likewise. - (cp_emit_debug_info_for_using): Likewise. - * semantics.c (finish_call_expr): Likewise. - * tree.c (builtin_valid_in_constant_expr_p): Likewise. - -2018-08-26 Marek Polacek - - PR c++/87080 - * typeck.c (maybe_warn_pessimizing_move): Do nothing in a template. - - PR c++/87029, Implement -Wredundant-move. - * typeck.c (treat_lvalue_as_rvalue_p): New function. - (maybe_warn_pessimizing_move): Call convert_from_reference. - Warn about redundant moves. - -2018-08-24 Marek Polacek - - PR c++/67012 - PR c++/86942 - * decl.c (grokdeclarator): Disallow functions with trailing return - type with decltype(auto) as its type. Also check the function if - it's inner declarator doesn't exist - -2018-08-21 Marek Polacek - - PR c++/86499 - * parser.c (cp_parser_lambda_introducer): Give error if a non-local - lambda has a capture-default. - -2018-08-21 Paolo Carlini - - * decl.c (check_static_variable_definition): Change to return void. - -2018-08-21 Marek Polacek - - PR c++/86981, Implement -Wpessimizing-move. - * typeck.c (decl_in_std_namespace_p): New. - (is_std_move_p): New. - (maybe_warn_pessimizing_move): New. - (can_do_nrvo_p): New, factored out of ... - (check_return_expr): ... here. Warn about potentially harmful - std::move in a return statement. - - PR c++/65043 - * call.c (standard_conversion): Set check_narrowing. - * typeck2.c (check_narrowing): Use CP_INTEGRAL_TYPE_P rather - than comparing with INTEGER_TYPE. - - * cp-tree.h: Fix typo. - -2018-08-20 David Malcolm - - PR other/84889 - * call.c (build_user_type_conversion_1): Add auto_diagnostic_group - instance(s). - (print_error_for_call_failure): Likewise. - (build_op_call_1): Likewise. - (build_conditional_expr_1): Likewise. - (build_new_op_1): Likewise. - (build_op_delete_call): Likewise. - (convert_like_real): Likewise. - (build_over_call): Likewise. - (build_new_method_call_1): Likewise. - (joust): Likewise. - * class.c (check_tag): Likewise. - (finish_struct_anon_r): Likewise. - (one_inherited_ctor): Likewise. - (finalize_literal_type_property): Likewise. - (explain_non_literal_class): Likewise. - (find_flexarrays): Likewise. - (resolve_address_of_overloaded_function): Likewise. - * constexpr.c (ensure_literal_type_for_constexpr_object): Likewise. - (is_valid_constexpr_fn): Likewise. - (cx_check_missing_mem_inits): Likewise. - * cp-gimplify.c (cp_genericize_r): Likewise. - * cvt.c (maybe_warn_nodiscard): Likewise. - * decl.c (warn_extern_redeclared_static): Likewise. - (check_redeclaration_exception_specification): Likewise. - (check_no_redeclaration_friend_default_args): Likewise. - (duplicate_decls): Likewise. - (redeclaration_error_message): Likewise. - (warn_misplaced_attr_for_class_type): Likewise. - * decl2.c (finish_static_data_member_decl): Likewise. - (no_linkage_error): Likewise. - (cp_warn_deprecated_use): Likewise. - * error.c (qualified_name_lookup_error): Likewise. - * friend.c (make_friend_class): Likewise. - (do_friend): Likewise. - * init.c (perform_member_init): Likewise. - (build_new_1): Likewise. - (build_vec_delete_1): Likewise. - (build_delete): Likewise. - * lex.c (unqualified_name_lookup_error): Likewise. - * name-lookup.c (check_extern_c_conflict): Likewise. - (inform_shadowed): New function. - (check_local_shadow): Add auto_diagnostic_group instances, - replacing goto "inform_shadowed" label with call to subroutine. - (set_local_extern_decl_linkage): Add auto_diagnostic_group - instance(s). - * parser.c (cp_parser_diagnose_invalid_type_name): Likewise. - (cp_parser_namespace_name): Likewise. - * pt.c (check_specialization_namespace): Likewise. - (check_template_variable): Likewise. - (warn_spec_missing_attributes): Likewise. - (check_explicit_specialization): Likewise. - (process_partial_specialization): Likewise. - (lookup_template_class_1): Likewise. - (finish_template_variable): Likewise. - (do_auto_deduction): Likewise. - * search.c (check_final_overrider): Likewise. - (look_for_overrides_r): Likewise. - * tree.c (maybe_warn_parm_abi): Likewise. - * typeck.c (cxx_sizeof_expr): Likewise. - (cp_build_function_call_vec): Likewise. - (cp_build_binary_op): Likewise. - (convert_for_assignment): Likewise. - (maybe_warn_about_returning_address_of_local): Likewise. - * typeck2.c (abstract_virtuals_error_sfinae): Likewise. - (check_narrowing): Likewise. - -2018-08-17 David Malcolm - - * typeck.c (string_conv_p): Extract location from EXP and use it - in preference to input_location when issuing warnings. - -2018-08-15 David Malcolm - - * call.c: Include "gcc-rich-location.h". - (convert_like_real): Add range label for "invalid conversion" - diagnostic. - (perform_implicit_conversion_flags): Add type label to the - "could not convert" error. - * error.c: Include "gcc-rich-location.h". - (range_label_for_type_mismatch::get_text): New function. - * typeck.c (convert_for_assignment): Add type label to - the "cannot convert" error if a location is available. - -2018-08-15 Paolo Carlini - - * decl.c (check_previous_goto_1): When decl_jump_unsafe returns 2 - emit an error instead of a permerror. - -2018-08-13 Marek Polacek - - PR c++/57891 - * call.c (struct conversion): Add check_narrowing_const_only. - (build_converted_constant_expr): Set check_narrowing and - check_narrowing_const_only. Give error if expr is error node. - (convert_like_real): Pass it to check_narrowing. - * cp-tree.h (check_narrowing): Add a default parameter. - * decl.c (compute_array_index_type): Use input_location instead of - location_of. - * pt.c (convert_nontype_argument): Return NULL_TREE if tf_error. - * typeck2.c (check_narrowing): Don't warn for instantiation-dependent - expressions. Call maybe_constant_value instead of - fold_non_dependent_expr. Don't mention { } in diagnostic. Only check - narrowing for constants if CONST_ONLY. - -2018-08-13 Martin Sebor - - PR tree-optimization/71625 - * decl.c (check_initializer): Call braced_list_to_string. - (eval_check_narrowing): New function. - * gcc/cp/typeck2.c (digest_init_r): Accept strings literals - as initilizers for all narrow character types. - -2018-08-13 Marek Polacek - - P0806R2 - Deprecate implicit capture of this via [=] - * lambda.c (add_default_capture): Formatting fixes. Warn about - deprecated implicit capture of this via [=]. - - PR c++/86915 - * decl.c (create_array_type_for_decl): Handle null name. - -2018-08-10 Jason Merrill - - PR c++/86728 - C variadic generic lambda. - * parser.c (cp_parser_parameter_declaration): Don't turn 'auto' into - a pack if it's followed by a declarator-id. - -2018-08-08 Jakub Jelinek - - P0595R1 - is_constant_evaluated - * cp-tree.h (enum cp_built_in_function): New. - (maybe_constant_init): Add pretend_const_required argument. - * typeck2.c (store_init_value): Pass true as new argument to - maybe_constant_init. - * constexpr.c (constexpr_fn_retval): Check also DECL_BUILT_IN_CLASS - for BUILT_IN_UNREACHABLE. - (struct constexpr_ctx): Add pretend_const_required field. - (cxx_eval_builtin_function_call): Use DECL_IS_BUILTIN_CONSTANT_P - macro. Handle CP_BUILT_IN_IS_CONSTANT_EVALUATED. Check also - DECL_BUILT_IN_CLASS for BUILT_IN_UNREACHABLE. - (cxx_eval_outermost_constant_expr): Add pretend_const_required - argument, initialize pretend_const_required field in ctx. If the - result is TREE_CONSTANT and non_constant_p, retry with - pretend_const_required false if it was true. - (is_sub_constant_expr): Initialize pretend_const_required_field in - ctx. - (cxx_constant_value): Pass true as pretend_const_required to - cxx_eval_outermost_constant_expr. - (maybe_constant_value): Pass false as pretend_const_required to - cxx_eval_outermost_constant_expr. - (fold_non_dependent_expr): Likewise. - (maybe_constant_init_1): Add pretend_const_required argument, pass it - down to cxx_eval_outermost_constant_expr. Pass !allow_non_constant - instead of false as strict to cxx_eval_outermost_constant_expr. - (maybe_constant_init): Add pretend_const_required argument, pass it - down to maybe_constant_init_1. - (cxx_constant_init): Pass true as pretend_const_required to - maybe_constant_init_1. - * cp-gimplify.c (cp_gimplify_expr): Handle CALL_EXPRs to - CP_BUILT_IN_IS_CONSTANT_EVALUATED. - (cp_fold): Don't fold CP_BUILT_IN_IS_CONSTANT_EVALUATED calls. - * decl.c: Include langhooks.h. - (cxx_init_decl_processing): Register __builtin_is_constant_evaluated - built-in. - * tree.c (builtin_valid_in_constant_expr_p): Return true for - CP_BUILT_IN_IS_CONSTANT_EVALUATED. - * pt.c (declare_integer_pack): Initialize DECL_FUNCTION_CODE. - - PR c++/86836 - * pt.c (tsubst_expr): For structured bindings, call tsubst_decomp_names - before tsubst_init, not after it. - - PR c++/86738 - * constexpr.c (cxx_eval_binary_expression): For arithmetics involving - NULL pointer set *non_constant_p to true. - (cxx_eval_component_reference): For dereferencing of a NULL pointer, - set *non_constant_p to true and return t. - -2018-08-07 Paolo Carlini - - PR c++/59480, DR 136 - * decl.c (check_no_redeclaration_friend_default_args): New. - (duplicate_decls): Use the latter; also check that a friend - declaration specifying default arguments is a definition. - -2018-08-07 Ville Voutilainen - - PR c++/79133 - * name-lookup.c (check_local_shadow): Reject captures and parameters - with the same name. - -2018-08-06 Marek Polacek - - PR c++/86767 - * constexpr.c (cxx_eval_statement_list): Handle continue. - -2018-08-03 David Malcolm - Jonathan Wakely - - * decl.c: Include "gcc-rich-location.h". - (add_return_star_this_fixit): New function. - (finish_function): When warning about missing return statements in - functions returning non-void, add a "return *this;" fix-it hint for - assignment operators. - -2018-08-03 Jason Merrill - - PR c++/86706 - * class.c (build_base_path): Use currently_open_class. - -2018-08-02 David Malcolm - - * error.c (cxx_print_error_function): Duplicate "file" before - passing it to pp_set_prefix. - (cp_print_error_function): Use pp_take_prefix when saving the - existing prefix. - -2018-08-02 Richard Biener - - PR c++/86763 - * class.c (layout_class_type): Copy TYPE_TYPELESS_STORAGE - to the CLASSTYPE_AS_BASE. - -2018-08-01 Martin Sebor - - PR tree-optimization/86650 - * error.c (cp_printer): Move usage of EXPR_LOCATION (t) and - TREE_BLOCK (t) from within percent_K_format to this callsite. - -2018-08-01 Paolo Carlini - - PR c++/86661 - * class.c (note_name_declared_in_class): Use location_of in permerror - instead of DECL_SOURCE_LOCATION (for OVERLOADs). - -2018-07-31 Tom de Vries - - PR debug/86687 - * optimize.c (update_cloned_parm): Copy DECL_BY_REFERENCE. - -2018-07-31 Jakub Jelinek - - P1008R1 - prohibit aggregates with user-declared constructors - * class.c (check_bases_and_members): For C++2a set - CLASSTYPE_NON_AGGREGATE based on TYPE_HAS_USER_CONSTRUCTOR rather than - type_has_user_provided_or_explicit_constructor. - -2018-07-31 Martin Liska - - PR c++/86653 - * parser.c (cp_parser_condition): Initialize non_constant_p - to false. - -2018-07-28 David Malcolm - - * error.c (cp_printer): In the leading comment, move "%H" and "%I" - into alphabetical order, and add missing "%G" and "%K". Within - the switch statement, move cases 'G', 'H', 'I' and 'K' so that the - cases are in alphabetical order. - -2018-07-25 Jakub Jelinek - - * cp-tree.h (enum cp_tree_index): Add - CPTI_{ABI_TAG,ALIGNED,BEGIN,END,GET,TUPLE_{ELEMENT,SIZE}}_IDENTIFIER - and CPTI_{GNU,TYPE,VALUE,FUN,CLOSURE}_IDENTIFIER. - (abi_tag_identifier, aligned_identifier, begin_identifier, - end_identifier, get__identifier, gnu_identifier, - tuple_element_identifier, tuple_size_identifier, type_identifier, - value_identifier, fun_identifier, closure_identifier): Define. - * decl.c (initialize_predefined_identifiers): Initialize the above - identifiers. - (get_tuple_size): Use tuple_size_identifier instead of - get_identifier ("tuple_size") and value_identifier instead of - get_identifier ("value"). - (get_tuple_element_type): Use tuple_element_identifier instead of - get_identifier ("tuple_element") and type_identifier instead of - get_identifier ("type"). - (get_tuple_decomp_init): Use get__identifier instead of - get_identifier ("get"). - * lambda.c (maybe_add_lambda_conv_op): Use fun_identifier instead of - get_identifier ("_FUN"). - * parser.c (cp_parser_lambda_declarator_opt): Use closure_identifier - instead of get_identifier ("__closure"). - (cp_parser_std_attribute): Use gnu_identifier instead of - get_identifier ("gnu"). - (cp_parser_std_attribute_spec): Likewise. Use aligned_identifier - instead of get_identifier ("aligned"). - * class.c (check_abi_tags, inherit_targ_abi_tags): Use - abi_tag_identifier instead of get_identifier ("abi_tag"). - - PR c++/85515 - * cp-tree.h (enum cp_tree_index): Add - CPTI_FOR_{RANGE,BEGIN,END}{,_}_IDENTIFIER. - (for_range__identifier, for_begin__identifier, for_end__identifier, - for_range_identifier, for_begin_identifier, for_end_identifier): - Define. - * decl.c (initialize_predefined_identifiers): Initialize - for_{range,begin,end}{,_}_identifier. - * parser.c (build_range_temp): Use for_range__identifier instead of - get_identifier ("__for_range"). - (cp_convert_range_for): Use for_begin__identifier and - for_end__identifier instead of get_identifier ("__for_begin") and - get_identifier ("__for_end"). - * semantics.c (finish_for_stmt): Rename "__for_{range,begin,end} " - local symbols to "__for_{range,begin,end}". - -2018-07-23 Jakub Jelinek - - PR c++/86569 - * cp-gimplify.c (cp_fold): Don't fold comparisons into other kind - of expressions other than INTEGER_CST regardless of TREE_NO_WARNING - or warn_nonnull_compare. - -2018-07-19 Paolo Carlini - - Revert fix for c++/59480 (and testsuite followup) - - 2019-07-18 Paolo Carlini - - PR c++/59480, DR 136 - * decl.c (check_no_redeclaration_friend_default_args): New. - (duplicate_decls): Use the latter; also check that a friend - declaration specifying default arguments is a definition. - -2018-07-18 Jakub Jelinek - - PR c++/86550 - * parser.c (cp_parser_decl_specifier_seq): Diagnose invalid type - specifier if CP_PARSER_FLAGS_ONLY_MUTABLE_OR_CONSTEXPR. - -2018-07-18 Marek Polacek - - PR c++/86190 - bogus -Wsign-conversion warning - * typeck.c (cp_build_binary_op): Fix formatting. Add a warning - sentinel. - -2018-07-18 Paolo Carlini - - PR c++/59480, DR 136 - * decl.c (check_no_redeclaration_friend_default_args): New. - (duplicate_decls): Use the latter; also check that a friend - declaration specifying default arguments is a definition. - -2018-07-18 Paolo Carlini - - * class.c (note_name_declared_in_class): Prefer permerror + inform - to a pair of permerrors; use DECL_SOURCE_LOCATION. - -2018-07-18 Richard Biener - - PR debug/86523 - * decl2.c (c_parse_final_cleanups): Call write_out_vars before - start_static_storage_duration_function sets current_function_decl. - -2018-07-17 Jason Merrill - - PR c++/86480 - nested variadic lambda and constexpr if. - * pt.c (find_parameter_packs_r) [IF_STMT]: Don't walk into - IF_STMT_EXTRA_ARGS. - * tree.c (cp_walk_subtrees) [DECLTYPE_TYPE]: Set - cp_unevaluated_operand. - [ALIGNOF_EXPR] [SIZEOF_EXPR] [NOEXCEPT_EXPR]: Likewise. - -2018-07-16 Paolo Carlini - - * class.c (resolve_address_of_overloaded_function): Don't emit an - inform if the matching permerror returns false. - * pt.c (check_specialization_namespace): Likewise. - -2018-07-16 Jakub Jelinek - - PR c++/3698 - PR c++/86208 - * cp-gimplify.c (cp_genericize_r): When using extern_decl_map, or - in TREE_USED flag from stmt to h->to. - -2018-07-13 Nathan Sidwell - - PR c++/86374 - * pt.c (lookup_template_class_1): Use tsubst_aggr_type for - contexts that are classes. - * parser.c (cp_parser_template_id): Combine entering_scope decl & - initializer. - -2018-07-12 Jakub Jelinek - - * decl2.c (cplus_decl_attributes): Don't diagnose vars without mappable - type here, instead add "omp declare target implicit" attribute. Add - that attribute instead of "omp declare target" also when - processing_template_decl. - * decl.c (cp_finish_decl): Diagnose vars without mappable type here, - and before calling cp_omp_mappable_type call complete_type. - -2018-07-10 Jakub Jelinek - - PR sanitizer/86406 - * cp-gimplify.c (cp_maybe_instrument_return): Skip trailing - DEBUG_BEGIN_STMTs. - - PR c++/86443 - * semantics.c (handle_omp_for_class_iterator): Remove lastp argument, - instead of setting *lastp turn orig_declv elt into a TREE_LIST. - (finish_omp_for): Adjust handle_omp_for_class_iterator caller. - * pt.c (tsubst_omp_for_iterator): Allow OMP_FOR_ORIG_DECLS to contain - TREE_LIST for both the original class iterator and the "last" helper - var. - -2018-07-09 Paolo Carlini - - * decl.c (grokdeclarator): Use rich_location::add_range in three - more places; include gcc-rich-location.h. - -2018-07-07 Aldy Hernandez - - * decl.c (build_enumerator): Change overflow type to overflow_type. - * init.c (build_new_1): Same. - -2018-07-05 Nathan Sidwell - - * cp/decl.c (decls_match): Check SYSTEM_IMPLICIT_EXTERN_C not - NO_IMPLICIT_EXTERN_C. - * cp/parser.c (cp_parser_parameter_declaration_clause): Likewise. - -2018-07-04 Ville Voutilainen - - PR c++/86398 - * method.c (is_trivially_xible): Return false - if is_xible_helper returns a NULL_TREE. - -2018-07-03 Paolo Carlini - - * decl.c (min_location): New. - (smallest_type_quals_location): Use the latter. - (check_concept_fn): Use DECL_SOURCE_LOCATION. - (grokdeclarator): Use accurate locations in a number of error - messages involving ds_thread, ds_storage_class, ds_virtual, - ds_constexpr, ds_typedef and ds_friend; exploit min_location. - -2018-07-03 Marek Polacek - - PR c++/86201 - * typeck.c (cp_build_binary_op): Check c_inhibit_evaluation_warnings. - -2018-07-03 Jason Merrill - - PR c++/86378 - functional cast in noexcept-specifier. - * tree.c (strip_typedefs_expr) [TREE_LIST]: Fix iteration. - -2018-07-02 Paolo Carlini - - * parser.c (set_and_check_decl_spec_loc): Use rich_location::add_range - in error message about __thread and thread_local at the same time. - -2018-06-29 Marek Polacek - - PR c++/86184 - * tree.c (cp_save_expr): Don't call save_expr for TARGET_EXPRs. - -2018-06-28 David Malcolm - - * parser.c (cp_parser_error_1): After issuing a conflict marker - error, consume tokens until the end of the source line. - -2018-06-28 Jason Merrill - - PR c++/86342 - -Wdeprecated-copy and system headers. - * decl2.c (cp_warn_deprecated_use): Don't warn about declarations - in system headers. - -2018-06-27 David Malcolm - - PR c++/86329 - * name-lookup.c (consider_binding_level): Filter out names that - match anon_aggrname_p. - -2018-06-27 Jason Merrill - - * name-lookup.c (do_pushtag): If we skip a class level, also skip - its template level. - -2018-06-26 Jason Merrill - - PR c++/86320 - memory-hog with std::array of pair - * typeck2.c (process_init_constructor_array): Only compute a - constant initializer once. - - PR c++/80290 - memory-hog with std::pair. - * pt.c (fn_type_unification): Add convs parameter. - (check_non_deducible_conversion): Remember conversion. - (check_non_deducible_conversions): New. Do checks here. - (type_unification_real): Not here. Remove flags parm. - * call.c (add_function_candidate): Make convs a parameter. - Don't recalculate the conversion if it's already set. - (add_template_candidate_real): Allocate convs here. - (good_conversion, conv_flags): New. - -2018-06-26 Jakub Jelinek - - PR c++/86291 - * parser.c (cp_parser_omp_for_loop_init): Change for_block argument - type from vec * to vec *&. - -2018-06-23 Paolo Carlini - - * decl.c (bad_specifiers): Add const location_t* parameter and - use locations in error messages about 'inline' and 'virtual'. - (mark_inline_variable): Add location_t parameter and use it in - error_at and pedwarn messages. - (grokdeclarator): Use declspecs->locations[ds_constexpr], - declspecs->locations[ds_concept], declspecs->locations[ds_virtual], - declspecs->locations[ds_inline] in many error messages; adjust - bad_specifiers and mark_inline_variable calls. - (grokvardecl): Use declspecs->locations[ds_concept] in error message. - -2018-06-22 Jason Merrill - - PR c++/86219 - ICE with erroneous initializer in template. - * constexpr.c (fold_non_dependent_expr): Add complain parm. - * call.c, expr.c, init.c, pt.c, semantics.c, typeck.c, typeck2.c: - Pass it. - * call.c (build_cxx_call): Don't mess with builtins in a template. - * typeck2.c (store_init_value): If fold_non_dependent_expr didn't - produce a constant value, go back to the uninstantiated form. - - Avoid taking the address of something just because it's in parens. - * constexpr.c (same_type_ignoring_tlq_and_bounds_p): New. - (cxx_fold_indirect_ref): Use it. - (cxx_eval_constant_expression) [VIEW_CONVERT_EXPR]: Use it. - * cp-tree.h (REF_PARENTHESIZED_P): Allow VIEW_CONVERT_EXPR. - * semantics.c (force_paren_expr): Use VIEW_CONVERT_EXPR instead of - static_cast to reference type. - (maybe_undo_parenthesized_ref): Handle VIEW_CONVERT_EXPR. - -2018-06-21 Jason Merrill - - * pt.c (tsubst) [TEMPLATE_TYPE_PARM]: Use TEMPLATE_PARM_DESCENDANTS. - - * name-lookup.c (do_push_to_top_level): Don't allocate - current_lang_base. - (do_pop_from_top_level): Release current_lang_base. - - Let -fmem-report see callers of cxx_make_type. - * lex.c (cxx_make_type): Add MEM_STAT_DECL. - (make_class_type): Likewise. - (cxx_make_type_hook): New. - * cp-objcp-common.h (LANG_HOOKS_MAKE_TYPE): Use cxx_make_type_hook. - -2018-06-20 Nathan Sidwell - - PR c++/85634 - * friend.c (add_friend): Keep lookup sets of tempate sets. - -2018-06-20 Paolo Carlini - - * decl.c (grokfndecl): Add const cp_decl_specifier_seq* parameter; - tidy handling of a null location_t argument; use proper location - information in a few additional error messages. - (grokdeclarator): Update calls. - -2018-06-20 Chung-Lin Tang - Thomas Schwinge - Cesar Philippidis - - * parser.c (cp_parser_omp_clause_name): Add support for finalize - and if_present. Make present_or_{copy,copyin,copyout,create} aliases - to their non-present_or_* counterparts. Make 'self' an alias to - PRAGMA_OACC_CLAUSE_HOST. - (cp_parser_oacc_data_clause): Update GOMP mappings for - PRAGMA_OACC_CLAUSE_{COPY,COPYIN,COPYOUT,CREATE,DELETE}. Remove - PRAGMA_OACC_CLAUSE_{SELF,PRESENT_OR_*}. - (cp_parser_oacc_all_clauses): Handle finalize and if_present clauses. - Remove support for present_or_* clauses. - (OACC_KERNELS_CLAUSE_MASK): Remove PRESENT_OR_* clauses. - (OACC_PARALLEL_CLAUSE_MASK): Likewise. - (OACC_DECLARE_CLAUSE_MASK): Likewise. - (OACC_DATA_CLAUSE_MASK): Likewise. - (OACC_ENTER_DATA_CLAUSE_MASK): Remove PRESENT_OR_* clauses. - (OACC_EXIT_DATA_CLAUSE_MASK): Add FINALIZE clause. - (OACC_UPDATE_CLAUSE_MASK): Remove SELF, add IF_PRESENT. - (cp_parser_oacc_declare): Remove PRESENT_OR_* clauses. - * pt.c (tsubst_omp_clauses): Handle IF_PRESENT and FINALIZE. - * semantics.c (finish_omp_clauses): Handle IF_PRESENT and FINALIZE. - -2018-06-20 Marek Polacek - - PR c++/86240 - * constexpr.c (cxx_eval_constant_expression): Handle ABSU_EXPR. - (fold_simple_1): Likewise. - * error.c (dump_expr): Likewise. - -2018-06-20 Nathan Sidwell - - PR c++/85634 - * cp-tree.h (lookup_keep): Drop KEEP parm. - (lookup_list_keep): Delete. - (maybe_get_fns): Declare. - * parser.c (cp_parser_primary_expression): Call lookup_keep here. - (cp_parser_template_id): Not here ... - * decl.c (cp_finish_decl): ... nor here ... - * init.c (build_raw_new_expr): ... nor here ... - * pt.c (process_template_parm): ... nor here ... - * semantics.c (perform_koenig_lookup): Call lookup_keep. - (finish_call_expr): Not here. - * tree.c (ovl_cache): Delete. - (ovl_make, ovl_copy): No cache. - (lookup_keep): Always keep. - (lookup_list_keep): Delete. - (maybe_get_fns): New, broken out of ... - (get_fns): ... here. Call it. - (built_min_nt_loc, build_min, build_min_non_dep): Drop lookup_keep. - (build_min_nt_call_vec): Likewise. - -2018-06-19 Jason Merrill - - * cp-tree.h (CONSTRUCTOR_NO_IMPLICIT_ZERO): Remove. - * constexpr.c: Use CONSTRUCTOR_NO_CLEARING instead. - - PR c++/86182 - ICE with anonymous union passed to template. - * pt.c (tsubst_expr) [DECL_EXPR]: Handle an anonymous union type - used to declare a named variable. - -2018-06-18 Jason Merrill - - * tree.c (cp_expr_location): New. - * cp-tree.h (cp_expr_loc_or_loc): New. - * call.c, cvt.c, constexpr.c, constraint.cc, cp-gimplify.c, decl.c, - error.c, init.c, lex.c, parser.c, pt.c, semantics.c, typeck.c, - typeck2.c: Use it instead of EXPR_LOC_OR_LOC. - - * parser.c (cp_parser_lambda_expression): Use a range for - LAMBDA_EXPR_LOCATION. - - PR c++/86200 - ICE with unexpanded pack in lambda parameter. - * pt.c (find_parameter_packs_r) [LAMBDA_EXPR]: Also look into the - function type. - - PR c++/81060 - ICE with unexpanded parameter pack. - * pt.c (check_for_bare_parameter_packs): Add loc parameter. - * decl.c (grokdeclarator): Call it for qualifying_scope. - - PR c++/86171 - ICE with recursive alias instantiation. - * pt.c (tsubst_decl): Handle recursive alias instantiation. - -2018-06-18 Paolo Carlini - - * decl.c (duplicate_decls): Consistently use DECL_SOURCE_LOCATION - in errors about redefined default arguments; tidy. - -2018-06-16 Kugan Vivekanandarajah - - * constexpr.c (potential_constant_expression_1): Handle ABSU_EXPR. - * cp-gimplify.c (cp_fold): Likewise. - -2018-06-15 Jason Merrill - - PR c++/86147 - wrong capture for template argument. - * expr.c (mark_use): Look through NOP_EXPR. - - * name-lookup.c (do_pushtag): Don't look through complete types, but - don't add to them either. Get context from current_binding_level. - * pt.c (tsubst_default_argument): Use push_to/pop_from_top_level. - - * decl.c (start_enum): Do compare dependent underlying type. - - PR c++/82882 - ICE with lambda in template default argument. - * lambda.c (record_null_lambda_scope): New. - * pt.c (tsubst_lambda_expr): Use it. - * name-lookup.c (do_pushtag): Don't give a lambda DECL_CONTEXT of a - function that isn't open. - - * tree.c (maybe_warn_parm_abi): Inform the location of the class. - -2018-06-14 Marek Polacek - - PR c++/86063 - * decl2.c (cp_check_const_attributes): Skip trees that are not - TREE_LISTs. - -2018-06-14 Jakub Jelinek - - P0624R2 - Default constructible and assignable stateless lambdas - * method.c (synthesized_method_walk): For C++2a don't mark - sfk_constructor or sfk_copy_assignment as deleted if lambda has - no lambda-captures. - -2018-06-14 Paolo Carlini - - * decl.c (duplicate_decls): Use DECL_SOURCE_LOCATION in - OPT_Wshadow warning_at. - (grokfndecl): Consistently use the location_t argument in - literal operator diagnostic messages. - (grokdeclarator): Use declspecs->locations[ds_storage_class] - in error_at call. - * decl2.c (finish_static_data_member_decl): Use DECL_SOURCE_LOCATION - in permerror call. - -2018-06-13 Jason Merrill - - PR c++/86099 - ICE with trivial copy and non-trivial default ctor. - * constexpr.c (instantiate_cx_fn_r): Don't synthesize trivial - constructors. - - PR c++/86094 - wrong code with defaulted move ctor. - * class.c (classtype_has_non_deleted_move_ctor): New. - * tree.c (maybe_warn_parm_abi, type_has_nontrivial_copy_init): - Handle v12 breakage. - -2018-06-12 Jason Merrill - - PR c++/86098 - ICE with template placeholder for TTP. - * typeck.c (structural_comptypes) [TEMPLATE_TYPE_PARM]: Check - CLASS_PLACEHOLDER_TEMPLATE. - -2018-06-12 Paolo Carlini - - * decl2.c (coerce_new_type, coerce_delete_type): Add location_t - parameter and adjust error_at calls. - * decl.c (grok_op_properties): Adjust calls. - * cp-tree.h (oerce_new_type, coerce_delete_type): Adjust decls. - -2018-06-12 Marek Polacek - - Core issue 1331 - const mismatch with defaulted copy constructor - * class.c (check_bases_and_members): When checking a defaulted - function, mark it as deleted rather than giving an error. - -2018-06-11 Jason Merrill - - PR c++/85792 -Wctor-dtor-privacy and inherited constructor. - * class.c (maybe_warn_about_overly_private_class): Handle inherited - constructors. - - PR c++/85963 - -Wunused-but-set with ?: in template. - * pt.c (tsubst_copy_and_build) [COND_EXPR]: Call mark_rvalue_use. - -2018-06-11 Paolo Carlini - - * decl.c (grok_op_properties): Consistently use the location - of the decl; remove special casing of POSTINCREMENT_EXPR and - POSTDECREMENT_EXPR wrt default arguments. - -2018-06-05 Jason Merrill - - * constexpr.c (cxx_eval_binary_expression): Special case comparison - of pointers to members of the same union. - -2018-06-11 Jason Merrill - - PR c++/86094 - wrong code with defaulted move ctor. - * tree.c (type_has_nontrivial_copy_init): Fix move ctor handling. - -2018-06-10 Paolo Carlini - - * decl.c (grokfndecl): Use the location_t argument in two more places. - -2018-06-06 Marek Polacek - - PR c++/85977 - * pt.c (unify): If ELTTYPE has no deducible template parms, skip - deduction from the list elements. - (type_unification_real): Check convertibility of list elements. - -2018-06-06 Jason Merrill - - PR c++/86060 - ICE on range for with -std=c++98. - * parser.c (cp_parser_init_statement): Don't clobber *decl after - pedwarn. - - PR c++/85710 - ICE with -Wmemset-elt-size. - * semantics.c (finish_call_expr): Call warn_for_memset here. - * parser.c (cp_parser_postfix_expression): Not here. - (literal_integer_zerop): No longer static. - * pt.c (build_non_dependent_expr): Don't wrap CONST_DECL. - -2018-06-05 Marek Polacek - - PR c++/85976 - * tree.c (cp_tree_equal): Handle USING_DECL. - -2018-06-05 Jason Merrill - - PR c++/85731 - wrong error with qualified-id in template. - * semantics.c (finish_qualified_id_expr): build_qualified_name - for unbound names in the current class. - -2018-06-04 Jason Merrill - - PR c++/61806 - missed SFINAE with partial specialization. - * cp-tree.h (deferring_access_check_sentinel): Add deferring_kind - parameter to constructor. - * pt.c (instantiate_class_template_1): Enable access checking - before call to most_specialized_partial_spec. - - PR c++/85765 - SFINAE and non-type default template arg. - * pt.c (type_unification_real): Do full semantic processing if - substituting a partial args list replaces all template parms. - -2018-06-03 Jason Merrill - - PR c++/85739 - ICE with pointer to member template parm. - * cvt.c (perform_qualification_conversions): Use cp_fold_convert. - -2018-06-02 Jason Merrill - - PR c++/85761 - ICE with ill-formed use of const outer variable. - * expr.c (mark_use): Handle location wrappers. - -2018-06-01 Jason Merrill - - PR c++/85764 - bogus 'this' not captured error. - * lambda.c (resolvable_dummy_lambda): Use nonlambda_method_basetype. - (nonlambda_method_basetype): Handle NSDMI. - - CWG 1581: When are constexpr member functions defined? - * constexpr.c (instantiate_cx_fn_r, instantiate_constexpr_fns): New. - (cxx_eval_outermost_constant_expr): Call instantiate_constexpr_fns. - - PR c++/58281 - explicit instantiation of constexpr - * pt.c (mark_decl_instantiated): Clear DECL_EXTERNAL. - - * pt.c (instantiate_decl): Any defaulted function is defined. - -2018-05-30 Jonathan Wakely - - PR c++/77777 - * call.c (resolve_args): Use location of expression, not current input - location. - -2018-05-30 Ville Voutilainen - - Do not warn about zero-as-null when NULL is used. - * call.c (conversion_null_warnings): Check for pointer - types converted from zero constants. - (convert_like_real): Add a warning sentinel at the end. - * tree.c (maybe_warn_zero_as_null_pointer_constant): Also - check null_node_p. - -2018-05-30 Jason Merrill - - PR c++/85807 - ICE with call in template NSDMI. - * init.c (get_nsdmi): Use push_to/pop_from_top_level. - * tree.c (bot_manip): Don't set_flags_from_callee in a template. - - PR c++/85873 - constant initializer_list array not in .rodata. - * tree.c (build_target_expr): Set TREE_READONLY. - * call.c (set_up_extended_ref_temp): Set TREE_READONLY. - - * parser.c (cp_parser_check_condition_declarator): Handle - cp_error_declarator. - -2018-05-30 Jonathan Wakely - - * typeck.c (cxx_sizeof_or_alignof_type): Return size_one_node instead - of using it in dead store. - -2018-05-29 Jason Merrill - - PR c++/67445 - returning temporary initializer_list. - PR c++/67711 - assigning from temporary initializer_list. - PR c++/48562 - new initializer_list. - * typeck.c (maybe_warn_about_returning_address_of_local): Also warn - about returning local initializer_list. - * cp-tree.h (AUTO_TEMP_NAME, TEMP_NAME_P): Remove. - * call.c (build_over_call): Warn about assignment from temporary - init_list. - * init.c (build_new_1): Warn about 'new std::initializer_list'. - (find_list_begin, maybe_warn_list_ctor): New. - (perform_member_init): Use maybe_warn_list_ctor. - -2018-05-29 Marek Polacek - - PR c++/85883 - * init.c (build_new): Handle deducing a class with new - with more than one argument. - -2018-05-29 Jakub Jelinek - - PR c++/85952 - * init.c (build_aggr_init): For structured binding initialized from - array call mark_rvalue_use on the initializer. - -2018-05-28 Bernd Edlinger - - * decl2.c (start_static_storage_duration_function): Use - splay_tree_delete_pointers. - -2018-05-25 Jason Merrill - - PR c++/85815 - reference to member of enclosing template. - * search.c (lookup_base): Use currently_open_class. - (lookup_member): Use it regardless of -fconcepts. - * parser.c (cp_parser_postfix_dot_deref_expression): Check it. - - CWG 616, 1213 - value category of subobject references. - * tree.c (lvalue_kind): Fix handling of ARRAY_REF of pointer. - -2018-05-24 Jason Merrill - - PR c++/85842 - -Wreturn-type, constexpr if and generic lambda. - * pt.c (tsubst_lambda_expr): Copy current_function_returns_* to - generic lambda. - -2018-05-24 Ville Voutilainen - - Pedwarn on a non-standard position of a C++ attribute. - * parser.c (cp_parser_namespace_definition): Pedwarn about attributes - after the namespace name. - -2018-05-24 Paolo Carlini - - * cp-tree.h (INDIRECT_TYPE_P): New. - * call.c (build_trivial_dtor_call, maybe_warn_class_memaccess, - joust): Use it instead of POINTER_TYPE_P. - * class.c (update_vtable_entry_for_fn, find_flexarrays, - * fixed_type_or_null, resolves_to_fixed_type_p): Likewise. - * constexpr.c (cxx_eval_binary_expression, cxx_fold_indirect_ref, - * cxx_eval_increment_expression, potential_constant_expression_1): - Likewise. - * cp-gimplify.c (cp_gimplify_expr, cp_genericize_r): Likewise. - * cp-objcp-common.c (cxx_get_alias_set): Likewise. - * cp-ubsan.c (cp_ubsan_maybe_instrument_member_call, - cp_ubsan_maybe_instrument_downcast): Likewise. - * cvt.c (cp_convert_to_pointer, ocp_convert, - cp_get_fndecl_from_callee, maybe_warn_nodiscard, convert): Likewise. - * cxx-pretty-print.c (cxx_pretty_printer::abstract_declarator, - pp_cxx_offsetof_expression_1): Likewise. - * decl.c (grokparms, static_fn_type): Likewise. - * decl2.c (grokbitfield): Likewise. - * error.c (dump_expr): Likewise. - * except.c (initialize_handler_parm, check_noexcept_r): Likewise. - * init.c (warn_placement_new_too_small): Likewise. - * lambda.c (build_capture_proxy, add_capture): Likewise. - * parser.c (cp_parser_omp_for_loop): Likewise. - * pt.c (convert_nontype_argument, fn_type_unification, - uses_deducible_template_parms, check_cv_quals_for_unify, - dependent_type_p_r): Likewise. - * search.c (check_final_overrider): Likewise. - * semantics.c (handle_omp_array_sections, finish_omp_clauses, - finish_omp_for): Likewise. - * tree.c (cp_build_qualified_type_real): Likewise. - * typeck.c (build_class_member_access_expr, - finish_class_member_access_expr, build_x_indirect_ref, - cp_build_indirect_ref_1, cp_build_binary_op, build_const_cast_1): - Likewise. - -2018-05-24 Jason Merrill - - PR c++/85864 - literal template and default template arg. - * pt.c (instantiation_dependent_r): Handle NONTYPE_ARGUMENT_PACK. - -2018-05-24 Marek Polacek - - PR c++/85847 - * init.c (build_new_1): Use fold_non_dependent_expr. Use a dedicated - variable for its result. Fix a condition. - (build_new): Use fold_non_dependent_expr. Tweak a condition. - -2018-05-23 Jason Merrill - - Fix cast to rvalue reference from prvalue. - * cvt.c (diagnose_ref_binding): Handle rvalue reference. - * rtti.c (build_dynamic_cast_1): Don't try to build a reference to - non-class type. Handle xvalue argument. - * typeck.c (build_reinterpret_cast_1): Allow cast from prvalue to - rvalue reference. - * semantics.c (finish_compound_literal): Do direct-initialization, - not cast, to initialize a reference. - - CWG 616, 1213 - value category of subobject references. - * tree.c (lvalue_kind): A reference to a subobject of a prvalue is - an xvalue. - * typeck2.c (build_m_component_ref): Likewise. - * typeck.c (cp_build_addr_expr_1, lvalue_or_else): Remove diagnostic - distinction between temporary and xvalue. - -2018-05-23 Marek Polacek - - Implement P0614R1, Range-based for statements with initializer. - * parser.c (cp_parser_range_based_for_with_init_p): New. - (cp_parser_init_statement): Use it. Parse the optional init-statement - for a range-based for loop. - (cp_parser_skip_to_closing_parenthesis_1): Handle balancing ?:. - -2018-05-22 Jason Merrill - - PR c++/81420 - not extending temporary lifetime. - * call.c (extend_ref_init_temps_1): Handle ARRAY_REF. - * class.c (build_base_path): Avoid redundant move of an rvalue. - - PR c++/85866 - error with .* in default template arg. - * pt.c (tsubst_copy_and_build): Handle partial instantiation. - -2018-05-21 Paolo Carlini - - * parser.c (cp_parser_parameter_declaration_list): Remove - bool* parameter. - (cp_parser_parameter_declaration_clause): Adjust. - (cp_parser_cache_defarg): Likewise. - -2018-05-21 Paolo Carlini - - PR c++/84588 - * parser.c (cp_parser_maybe_commit_to_declaration, - cp_parser_check_condition_declarator): New. - (cp_parser_simple_declaration): Use the first above. - (cp_parser_condition): Use both the above; enforce - [stmt.stmt]/2 about the declarator not specifying - a function or an array; improve error-recovery. - -2018-05-20 Jason Merrill - - PR libstdc++/85843 - warning in logic_error copy constructor. - * class.c (type_has_user_nondefault_constructor): Check for a - user-provided ctor, not user-declared. - -2018-05-19 Jason Merrill - - * pt.c (tsubst_pack_expansion): Sorry rather than abort - on __integer_pack as subexpression of pattern. - -2018-05-18 Jason Merrill - - PR c++/58407 - deprecated implicit copy ops. - * call.c (build_over_call): Warn about deprecated trivial fns. - * class.c (classtype_has_user_copy_or_dtor): New. - (type_build_ctor_call): Check TREE_DEPRECATED. - (type_build_dtor_call): Likewise. - * decl2.c (cp_warn_deprecated_use): Move from tree.c. - Add checks. Return bool. Handle -Wdeprecated-copy. - (mark_used): Use it. - * decl.c (grokdeclarator): Remove redundant checks. - * typeck2.c (build_functional_cast): Likewise. - * method.c (lazily_declare_fn): Mark deprecated copy ops. - * init.c (build_aggr_init): Only set TREE_USED if there are - side-effects. - -2018-05-18 Cesar Philippidis - - PR c++/85782 - * cp-gimplify.c (cp_genericize_r): Call genericize_omp_for_stmt for - OACC_LOOPs. - -2018-05-18 Richard Sandiford - - * constexpr.c (cxx_eval_constant_expression): Remove FMA_EXPR handling. - (potential_constant_expression_1): Likewise. - -2018-05-16 Marek Polacek - - PR c++/85363 - * call.c (set_flags_from_callee): Handle AGGR_INIT_EXPRs too. - * tree.c (bot_manip): Call set_flags_from_callee for - AGGR_INIT_EXPRs too. - -2018-05-15 Jason Merrill - - * cp-tree.h (cp_expr): Remove copy constructor. - * mangle.c (struct releasing_vec): Declare copy constructor. - - * constexpr.c (cxx_eval_vec_init_1): Pass tf_none if ctx->quiet. - - PR c++/64372 - CWG 1560, gratuitous lvalue-rvalue conversion in ?: - * call.c (build_conditional_expr_1): Don't force_rvalue when one arm - is a throw-expression. - -2018-05-15 Paolo Carlini - - * cp-tree.h (DECL_MAYBE_IN_CHARGE_CDTOR_P): New. - (FOR_EACH_CLONE): Update. - * decl.c (grokdeclarator): Use it. - * decl2.c (vague_linkage_p): Likewise. - * mangle.c (mangle_decl): Likewise. - * method.c (lazily_declare_fn): Likewise. - * optimize.c (can_alias_cdtor, maybe_clone_body): Likewise. - * repo.c (repo_emit_p): Likewise. - * tree.c (decl_linkage): Likewise. - -2018-05-14 Jason Merrill - - Handle TYPE_HAS_LATE_RETURN_TYPE like ref-qualifier and eh spec. - * tree.c (build_cp_fntype_variant): New. - (build_ref_qualified_type, build_exception_variant) - (strip_typedefs, cxx_copy_lang_qualifiers): Use it. - (cxx_type_hash_eq, cp_check_qualified_type): Check - TYPE_HAS_LATE_RETURN_TYPE. - (cp_build_type_attribute_variant): Check cxx_type_hash_eq. - (cp_build_qualified_type_real): No need to preserve C++ qualifiers. - * class.c (build_clone): Use cxx_copy_lang_qualifiers. - (adjust_clone_args): Likewise. - * decl.c (grokfndecl): Add late_return_type_p parameter. Use - build_cp_fntype_variant. - (grokdeclarator): Pass late_return_type_p to grokfndecl. - (check_function_type): Use cxx_copy_lang_qualifiers. - (static_fn_type): Use cxx_copy_lang_qualifiers. - * decl2.c (build_memfn_type, maybe_retrofit_in_chrg) - (cp_reconstruct_complex_type, coerce_new_type, coerce_delete_type) - (change_return_type): Use cxx_copy_lang_qualifiers. - * mangle.c (write_type): Use cxx_copy_lang_qualifiers. - * parser.c (cp_parser_lambda_declarator_opt): Represent an explicit - return type on the declarator like a normal trailing return type. - * pt.c (tsubst_function_type): Use build_cp_fntype_variant. - (copy_default_args_to_explicit_spec): Use cxx_copy_lang_qualifiers. - * typeck.c (merge_types): Use build_cp_fntype_variant. - -2018-05-14 Paolo Carlini - - * cp-tree.h (TYPE_REF_P): New. - (TYPE_OBJ_P, TYPE_REF_OBJ_P, TYPE_REFFN_P): Update. - * call.c (build_list_conv, build_aggr_conv, standard_conversion, - direct_reference_binding, reference_binding, implicit_conversion, - add_builtin_candidate, build_user_type_conversion_1, build_op_call_1, - build_new_op_1, build_x_va_arg, conv_binds_ref_to_prvalue, - build_over_call, perform_implicit_conversion_flags, - extend_ref_init_temps, type_has_extended_temps): Use it. - * class.c (one_inheriting_sig, check_field_decls, - check_bases_and_members, find_flexarrays, finish_struct, - fixed_type_or_null): Likewise. - * constexpr.c (literal_type_p, cxx_bind_parameters_in_call, - non_const_var_error, cxx_eval_constant_expression, - potential_constant_expression_1): Likewise. - * cp-gimplify.c (omp_var_to_track, omp_cxx_notice_variable, - cp_genericize_r, cxx_omp_privatize_by_reference, - cxx_omp_const_qual_no_mutable, cxx_omp_finish_clause, - cp_fold_maybe_rvalue): Likewise. - * cp-ubsan.c (cp_ubsan_maybe_instrument_downcast): Likewise. - * cvt.c (build_up_reference, convert_to_reference, - convert_from_reference, convert_to_void, noexcept_conv_p, - fnptr_conv_p): Likewise. - * decl.c (poplevel, check_for_uninitialized_const_var, - check_initializer, initialize_local_var, cp_finish_decl, - get_tuple_decomp_init, cp_finish_decomp, grokdeclarator, copy_fn_p, - move_signature_fn_p, grok_op_properties, finish_function): Likewise. - * decl2.c (grok_array_decl, cp_reconstruct_complex_type, - decl_maybe_constant_var_p): Likewise. - * error.c (dump_type_prefix, dump_expr): Likewise. - * except.c (initialize_handler_parm, complete_ptr_ref_or_void_ptr_p, - is_admissible_throw_operand_or_catch_parameter): Likewise. - * expr.c (mark_use): Likewise. - * init.c (build_zero_init_1, build_value_init_noctor, - perform_member_init, diagnose_uninitialized_cst_or_ref_member_1, - build_new, build_delete): Likewise. - * lambda.c (build_lambda_object): Likewise. - * mangle.c (write_expression, write_template_arg): Likewise. - * method.c (forward_parm, do_build_copy_constructor, - do_build_copy_assign, build_stub_object, constructible_expr, - walk_field_subobs): Likewise. - * parser.c (cp_parser_omp_for_loop_init, - cp_parser_omp_declare_reduction_exprs, - cp_parser_omp_declare_reduction): Likewise. - * pt.c (convert_nontype_argument_function, convert_nontype_argument, - convert_template_argument, tsubst_pack_expansion, - tsubst_function_decl, tsubst_decl, tsubst, tsubst_copy_and_build, - maybe_adjust_types_for_deduction, check_cv_quals_for_unify, unify, - more_specialized_fn, invalid_nontype_parm_type_p, dependent_type_p_r, - value_dependent_expression_p, build_deduction_guide): Likewise. - * semantics.c (finish_handler_parms, finish_non_static_data_member, - finish_compound_literal, omp_privatize_field, - handle_omp_array_sections_1, handle_omp_array_sections, - cp_check_omp_declare_reduction, finish_omp_reduction_clause, - finish_omp_declare_simd_methods, cp_finish_omp_clause_depend_sink, - finish_omp_clauses, finish_decltype_type, capture_decltype, - finish_builtin_launder): Likewise. - * tree.c (lvalue_kind, cp_build_reference_type, move, - cp_build_qualified_type_real, stabilize_expr, stabilize_init): Likewise. - * typeck.c (cxx_safe_arg_type_equiv_p, build_class_member_access_expr, - cp_build_indirect_ref_1, convert_arguments, warn_for_null_address, - cp_build_addr_expr_1, maybe_warn_about_useless_cast, - build_static_cast_1, build_static_cast, build_reinterpret_cast_1, - build_const_cast_1, cp_build_c_cast, cp_build_modify_expr, - convert_for_initialization, - maybe_warn_about_returning_address_of_local, check_return_expr, - cp_type_quals, casts_away_constness, non_reference): Likewise. - * typeck2.c (cxx_readonly_error, store_init_value, - process_init_constructor_record, build_x_arrow, build_functional_cast, - add_exception_specifier): Likewise. - -2018-05-14 Jason Merrill - - * pt.c (tsubst) [ARRAY_TYPE]: Check valid_array_size_p. - (tsubst_copy_and_build) [NEW_EXPR]: Clear in_decl. - -2018-05-11 Jakub Jelinek - - PR c/85696 - * cp-tree.h (cxx_omp_predetermined_sharing_1): New prototype. - * cp-gimplify.c (cxx_omp_predetermined_sharing): New wrapper around - cxx_omp_predetermined_sharing_1. Rename old function to ... - (cxx_omp_predetermined_sharing_1): ... this. - * semantics.c (finish_omp_clauses): Use cxx_omp_predetermined_sharing_1 - instead of cxx_omp_predetermined_sharing. - -2018-05-10 Jason Merrill - - * decl.c (cp_finish_decl): Don't instantiate auto variable. - (check_static_variable_definition): Allow auto. - * constexpr.c (ensure_literal_type_for_constexpr_object): Likewise. - - * cp-tree.h (DECL_CONSTRUCTOR_P): Use DECL_CXX_CONSTRUCTOR_P. - (DECL_DESTRUCTOR_P): Use DECL_CXX_DESTRUCTOR_P. - - Core issue 2310 - conversion to base of incomplete type. - * class.c (build_base_path): Check COMPLETE_TYPE_P for source type. - - CWG 2267 - list-initialization of reference temporary - * call.c (reference_binding): List-initializing a reference - temporary is copy-list-initialization. - - * parser.c (cp_parser_class_head): Use num_template_headers_for_class. - - * pt.c (instantiate_decl): Make sure we aren't trying to do a nested - instantiation in template context. - - * class.c (vbase_has_user_provided_move_assign): Use - user_provided_p. - - * lambda.c (lambda_expr_this_capture): Improve logic. - - * decl.c (make_typename_type): s/parameters/arguments/. - * parser.c (cp_parser_nested_name_specifier_opt): Likewise. - * pt.c (make_pack_expansion): Correct error message. - -2018-05-10 Jakub Jelinek - - PR c++/85662 - * cp-gimplify.c (cp_fold): Use fold_offsetof rather than - fold_offsetof_1, pass TREE_TYPE (x) as TYPE to it and drop the - fold_convert. - -2018-05-10 Eric Botcazou - - PR c++/85400 - * decl2.c (adjust_var_decl_tls_model): New static function. - (comdat_linkage): Call it on a variable. - (maybe_make_one_only): Likewise. - -2018-05-09 Paolo Carlini - - PR c++/85713 - Revert: - 2018-05-08 Paolo Carlini - - PR c++/84588 - * parser.c (cp_parser_parameter_declaration_list): When the - entire parameter-declaration-list is erroneous maybe call - abort_fully_implicit_template. - -2018-05-08 Jason Merrill - - PR c++/85706 - class deduction under decltype - * pt.c (for_each_template_parm_r): Handle DECLTYPE_TYPE. Clear - *walk_subtrees whether or not we walked into the operand. - (type_uses_auto): Only look at deduced contexts. - -2018-05-08 Paolo Carlini - - PR c++/84588 - * parser.c (cp_parser_parameter_declaration_list): When the - entire parameter-declaration-list is erroneous maybe call - abort_fully_implicit_template. - -2018-05-08 Marek Polacek - - PR c++/85695 - * semantics.c (finish_if_stmt_cond): See through typedefs. - -2018-05-07 Jason Merrill - - PR c++/85646 - lambda visibility. - * decl2.c (determine_visibility): Don't mess with template arguments - from the containing scope. - (vague_linkage_p): Check DECL_ABSTRACT_P before looking at a 'tor - thunk. - -2018-05-07 Nathan Sidwell - - Remove fno-for-scope - * cp-tree.h (DECL_ERROR_REPORTED, DECL_DEAD_FOR_LOCAL) - (DECL_HAS_SHADOWED_FOR_VAR_P, DECL_SHADOWED_FOR_VAR) - (SET_DECL_SHADOWED_FOR_VAR): Delete. - (decl_shadowed_for_var_lookup, decl_shadowed_for_var_insert) - (check_for_out_of_scope_variable, init_shadowed_var_for_decl): - Don't declare. - * name-lookup.h (struct cp_binding_level): Remove - dead_vars_from_for field. - * cp-lang.c (cp_init_ts): Delete. - (LANG_HOOKS_INIT_TS): Override to cp_common_init_ts. - * cp-objcp-common.c (shadowed_var_for_decl): Delete. - (decl_shadowed_for_var_lookup, decl_shadowed_for_var_insert) - (init_shadowed_var_for_decl): Delete. - * decl.c (poplevel): Remove shadowed for var handling. - (cxx_init_decl_processing): Remove -ffor-scope deprecation. - * name-lookup.c (find_local_binding): Remove shadowed for var - handling. - (check_local_shadow): Likewise. - (check_for_out_of_scope_variable): Delete. - * parser.c (cp_parser_primary_expression): Remove shadowed for var - handling. - * pt.c (tsubst_decl): Remove DECL_DEAD_FOR_LOCAL setting. - * semantics.c (begin_for_scope): Always have a scope. - (begin_for_stmt, finish_for_stmt): Remove ARM-for scope handling. - (begin_range_for_stmt, finish_id_expression): Likewise. - -2018-05-07 Jason Merrill - - PR c++/85618 - ICE with initialized VLA. - * tree.c (vla_type_p): New. - * typeck2.c (store_init_value, split_nonconstant_init_1): Check it - rather than array_of_runtime_bound_p. - -2018-05-05 Paolo Carlini - - * cvt.c (ocp_convert): Early handle the special case of a - null_ptr_cst_p expr converted to a NULLPTR_TYPE_P type. - -2018-05-03 Jason Merrill - - PR c++/85600 - virtual delete failure. - * init.c (build_delete): Always save_expr when deleting. - -2018-05-03 Nathan Sidwell - - * decl.c (cxx_init_decl_processing): Remove flag_friend_injection. - * name-lookup.c (do_pushdecl): Likewise. - -2018-05-02 Paolo Carlini - Jason Merrill - - PR c++/68374 - * name-lookup.c (check_local_shadow): Don't handle static old - declarations in the block handling locals shadowing locals. - -2018-05-01 Jason Merrill - - PR c++/85587 - error with scoped enum in template. - * semantics.c (finish_qualified_id_expr): Don't return an - unqualified IDENTIFIER_NODE. - -2018-04-30 Jason Merrill - - PR c++/85580 - extern "C" and local variables - * name-lookup.c (check_extern_c_conflict): Ignore local decls. - - PR c++/84701 - unsigned typeof. - * decl.c (grokdeclarator): Overhaul diagnostics for invalid use - of long/short/signed/unsigned. - - PR c++/85305 - pack in lambda init-capture. - * parser.c (cp_parser_initializer): Add subexpression_p parm; don't - check_for_bare_parameter_packs in a subexpression. - (cp_parser_lambda_introducer): Use it. - - PR c++/61982 - dead stores to destroyed objects. - * call.c (build_trivial_dtor_call): New, assigns a clobber. - (build_over_call, build_special_member_call): Use it. - * cp-tree.h: Declare it. - * init.c (build_delete): Remove trivial path. - - * init.c (build_dtor_call): Use build_special_member_call. - (build_delete): Remove redundant uses of save_addr. - - * decl.c (build_clobber_this): Use build_clobber. - -2018-04-27 Jakub Jelinek - - PR c++/85553 - * init.c (build_zero_init_1): For zero initialization of - NULLPTR_TYPE_P type use build_int_cst directly. - -2018-04-27 David Malcolm - - PR c++/85515 - * name-lookup.c (consider_binding_level): Skip compiler-generated - variables. - * search.c (lookup_field_fuzzy_info::fuzzy_lookup_field): Flatten - nested if statements into a series of rejection tests. Reject - lambda-ignored entities as suggestions. - -2018-04-27 Jason Merrill - - * cvt.c (cp_fold_convert): Use convert_ptrmem. - * typeck.c (convert_ptrmem): Add a NOP even if no adjustment. - -2018-04-27 Paolo Carlini - - PR c++/84691 - * decl.c (grokdeclarator): Clear friendp upon definition in local - class definition error. - -2018-04-27 Jason Merrill - - PR c++/85545 - ICE with noexcept PMF conversion. - * cvt.c (cp_fold_convert): Pass PMF CONSTRUCTORs to - build_ptrmemfunc. - * typeck.c (build_ptrmemfunc): Don't build a NOP_EXPR for zero - adjustment. - (build_ptrmemfunc_access_expr): Special-case CONSTRUCTORs. - -2018-04-27 Nathan Sidwell - - * typeck.c (convert_ptrmem): Move local var decls to initialization. - - * cp-tree.h (TEMPLATE_INFO): Fix comments. - (TI_PENDING_TEMPLATE_FLAG): Check TEMPLATE_INFO. - (NON_DEFAULT_TEMPLATE_ARG_COUNT): Wrap line. - (dump, print_other_binding_stacks): Remove declarations. - * name-lookup.c (print_other_binding_stack): Make static. - * pt.c (build_template_decl): Make static. - -2018-04-26 Jason Merrill - - PR c++/85545 - ICE with noexcept PMF conversion. - * cvt.c (cp_fold_convert): Handle PMF CONSTRUCTORs directly. - -2018-04-25 Nathan Sidwell - - PR c++/85437 - PR c++/49171 - * cp-tree.h (REINTERPRET_CAST_P): New. - * constexpr.c (cxx_eval_constant_expression) : - Reject REINTERPET_CAST_P conversions. Use cplus_expand_constant - for non-trivial PTRMEM_CST cases. - * typeck.c (build_nop_reinterpret): New. - (build_reinterpret_cast_1): Use it. Set REINTERPRET_CAST_P on - NOP_EXPRs returned by cp_convert. - -2018-04-23 Jason Merrill - - PR c++/69560 - wrong alignof(double) on x86. - CWG 1879 - Inadequate definition of alignment requirement. - * cp-tree.h (ALIGNOF_EXPR_STD_P): New. - * typeck.c (cxx_sizeof_or_alignof_type): Add std_alignof parm. - (cxx_sizeof_expr, cxx_sizeof_nowarn, cxx_alignas_expr) - (cxx_alignof_expr): Pass it. - * parser.c (cp_parser_unary_expression): Pass it. - * pt.c (tsubst_copy): Copy it. - (tsubst_copy_and_build): Pass it. - * decl.c (fold_sizeof_expr): Pass it. - -2018-04-23 Jakub Jelinek - Jason Merrill - - PR c++/85470 - wrong error with static data member. - * decl.c (check_initializer): Check DECL_INITIALIZED_IN_CLASS_P. - * typeck2.c (store_init_value): Likewise. - -2018-04-20 Jakub Jelinek - - PR c++/85462 - * cp-tree.h (tinst_level): Remove in_system_header_p member, - change refcount member from unsigned char to unsigned short, - add refcount_infinity static data member, adjust comments. - * pt.c (tinst_level::refcount_infinity): Define. - (inc_refcount_use): Remove assert, don't increment if refcount - is already refcount_infinity, adjust comment. - (dec_refcount_use): Remove assert, don't decrement if refcount - is refcount_infinity, adjust comment. - (push_tinst_level_loc): Formatting fix. - -2018-04-19 Paolo Carlini - - PR c++/84611 - * pt.c (lookup_template_class_1): Check pushtag return value for - error_mark_node. - -2018-04-19 Alexandre Oliva - - PR c++/80290 - * cp-tree.h (tinst_level::free): Fix whitespace. - -2018-04-18 Paolo Carlini - - PR c++/84630 - * pt.c (tsubst_lambda_expr): Check begin_lambda_type return value - for error_mark_node. - -2018-04-18 Jakub Jelinek - - PR c++/84463 - * typeck.c (cp_build_addr_expr_1): Move handling of offsetof-like - tricks from here to ... - * cp-gimplify.c (cp_fold) : ... here. Only use it - if INDIRECT_REF's operand is INTEGER_CST cast to pointer type. - -2018-04-18 Alexandre Oliva - - PR c++/80290 - * cp-tree.h (struct tinst_level): Split decl into tldcl and - targs. Add private split_list_p, tree_list_p, and not_list_p - inline const predicates; to_list private member function - declaration; free public member function declaration; list_p, - get_node and maybe_get_node accessors, and refcount data - member. Narrow errors to unsigned short. - * error.c (print_instantiation_full_context): Use new - accessors. - (print_instantiation_partial_context_line): Likewise. Drop - const from tinst_level-typed parameter. - * mangle.c (mangle_decl_string): Likewise. - * pt.c (freelist): New template class. - (tree_list_freelist_head): New var. - (tree_list_freelist): New fn, along with specializations. - (tinst_level_freelist_head): New var. - (pending_template_freelist_head): Likewise. - (tinst_level_freelist, pending_template_freelist): New fns. - (tinst_level::to_list, tinst_level::free): Define. - (inc_refcount_use, dec_refcount_use): New fns for tinst_level. - (set_refcount_ptr): New template fn. - (add_pending_template): Adjust for refcounting, freelists and - new accessors. - (neglectable_inst_p): Take a NULL d as a non-DECL. - (limit_bad_template_recursion): Use new accessors. - (push_tinst_level): New overload to create the list. - (push_tinst_level_loc): Make it static, split decl into two - args, adjust tests and initialization to cope with split - lists, use freelist, adjust for refcounting. - (push_tinst_level_loc): New wrapper with the old interface. - (pop_tinst_level): Adjust for refcounting. - (record_last_problematic_instantiation): Likewise. - (reopen_tinst_level): Likewise. Use new accessors. - (instantiate_alias_template): Adjust for split list. - (fn_type_unification): Likewise. - (get_partial_spec_bindings): Likewise. - (instantiate_pending_templates): Use new accessors. Adjust - for refcount. Release pending_template to freelist. - (instantiating_current_function_p): Use new accessors. - -2018-04-16 Alexandre Oliva - - PR c++/85039 - * parser.c (cp_parser_builtin_offset): Reject type definitions. - * mangle.c (nested_anon_class_index): Avoid crash returning -1 - if we've seen errors. - -2018-04-12 David Malcolm - - PR c++/85385 - * name-lookup.c (macro_use_before_def::maybe_make): New function, - checking that the use is indeed before the definition. - (macro_use_before_def::macro_use_before_def): Make private. - (macro_use_before_def::~macro_use_before_def): Make private. Move - check for UNKNOWN_LOCATION to macro_use_before_def::maybe_make. - (lookup_name_fuzzy): Call macro_use_before_def::maybe_make rather - than using new directly. - -2018-04-12 Jason Merrill - - PR c++/85356 - ICE with pointer to member function. - * pt.c (maybe_instantiate_noexcept): Do instantiate in templates if - flag_noexcept_type. Build the new spec within the function context. - * except.c (build_noexcept_spec): Do get constant value in templates - if flag_noexcept_type. - * decl.c (check_redeclaration_exception_specification): Don't - instantiate noexcept on a dependent declaration. - -2018-04-12 Marek Polacek - - PR c++/85258 - * constexpr.c (reduced_constant_expression_p): Return false for null - trees. - -2018-04-11 Marek Polacek - - PR c++/85032 - * constexpr.c (potential_constant_expression_1): Consider conversions - from classes to literal types potentially constant. - -2018-04-10 Paolo Carlini - - PR c++/70808 - * init.c (build_zero_init_1): Handle NULLPTR_TYPE_P being true of - the type like TYPE_PTR_OR_PTRMEM_P. - -2018-04-10 Jason Merrill - - PR debug/65821 - wrong location for main(). - * call.c (clear_location_r, convert_default_arg): Revert. - * tree.c (break_out_target_exprs): Add clear_location parm. - (struct bot_data): New. - (bot_manip): Clear location if requested. - * init.c (get_nsdmi): Pass clear_location. - -2018-04-10 David Malcolm - - PR c++/85110 - * call.c (get_fndecl_argument_location): Make non-static. - * cp-tree.h (get_fndecl_argument_location): New decl. - * typeck.c (convert_for_assignment): When complaining due to - conversions for an argument, show the location of the parameter - within the decl. - -2018-04-10 Jakub Jelinek - - PR c++/85312 - P0962 cleanup - * parser.c (cp_parser_perform_range_for_lookup): Remove unreachable - diagnostics. - -2018-04-10 Jason Merrill - - PR debug/65821 - wrong location for main(). - * call.c (clear_location_r): New. - (convert_default_arg): Use it. - * tree.c (bot_manip): Remove builtin_LINE/FILE handling. - - PR c++/85285 - ICE with flexible array after substitution. - * pt.c (instantiate_class_template_1): Check for flexible array in - union. - -2018-04-09 Paolo Carlini - - PR c++/85227 - * decl.c (cp_finish_decomp): In a template, if the type is incomplete - issue a pedwarn and defer trying to do bindings. - -2018-04-09 Jason Merrill - - PR c++/85279 - dump_expr doesn't understand decltype. - * error.c (dump_expr): Handle DECLTYPE_TYPE. - - PR c++/85262 - ICE with redundant qualification on constructor. - * call.c (build_new_method_call_1): Move make_args_non_dependent - after A::A() handling. - - PR c++/85277 - ICE with invalid offsetof. - * semantics.c (finish_offsetof): Avoid passing non-DECL to %qD. - Adjust -Winvalid-offsetof diagnostic to say conditionally supported. - - PR c++/85264 - ICE with excess template-parameter-list. - * parser.c (cp_parser_check_template_parameters): Add template_id_p - parameter. Don't allow an extra template header if true. - (cp_parser_class_head): Pass template_id_p. - (cp_parser_elaborated_type_specifier): Likewise. - (cp_parser_alias_declaration): Likewise. - (cp_parser_check_declarator_template_parameters): Likewise. - -2018-04-09 Jakub Jelinek - - PR c++/85194 - * parser.c (cp_parser_simple_declaration): For structured bindings, - if *maybe_range_for_decl is NULL after parsing it, set it to - error_mark_node. - -2018-04-09 Jason Merrill - - PR c++/85256 - ICE capturing pointer to VLA. - * lambda.c (add_capture): Distinguish between variable-size and - variably-modified types. - -2018-04-06 Jason Merrill - - PR c++/85214 - ICE with alias, generic lambda, constexpr if. - * pt.c (extract_locals_r): Remember local typedefs. - -2018-04-06 David Malcolm - - PR c++/84269 - * name-lookup.c (struct std_name_hint): Move out of - get_std_name_hint; add field "min_dialect". - (get_std_name_hint): Add min_dialect values to all initializers. - Add , , , , , - , , , , , , - , , , and . - Add fstream, ifstream, and ofstream to . - Add istringstream, ostringstream, and stringstream to . - Add basic_string to . - Add tuple_element and tuple_size to . - Add declval to . - Fix ordering of and . - Return a std_name_hint, rather than a const char *. - (get_cxx_dialect_name): New function. - (maybe_suggest_missing_std_header): Detect names that aren't yet - available in the current dialect, and instead of suggesting a - missing #include, warn about the dialect. - -2018-04-06 Jakub Jelinek - - PR c++/85210 - * pt.c (tsubst_decomp_names): Return error_mark_node and assert - errorcount is set if tsubst doesn't return a VAR_DECL. - -2018-04-06 David Malcolm - - PR c++/85021 - * name-lookup.c (using_directives_contain_std_p): New function. - (has_using_namespace_std_directive_p): New function. - (suggest_alternatives_for): Simplify if/else logic using early - returns. If no candidates were found, and there's a - "using namespace std;" directive, call - maybe_suggest_missing_std_header. - (maybe_suggest_missing_header): Split later part of the function - into.. - (maybe_suggest_missing_std_header): New. - -2018-04-06 Jason Merrill - - PR c++/85242 - ICE with class definition in template parm. - * cp-tree.h (PROCESSING_REAL_TEMPLATE_DECL_P): False if - processing_template_parmlist. - - PR c++/85240 - LTO ICE with using of undeduced auto fn. - * cp-gimplify.c (cp_genericize_r): Discard using of undeduced auto. - -2018-04-05 Jakub Jelinek - - PR c++/85209 - * pt.c (tsubst_decomp_names): Don't fail or ICE if DECL_CHAIN (decl3) - is not prev, if prev == decl. - - PR c++/85208 - * decl.c (start_decl): For DECL_DECOMPOSITION_P decls, don't call - maybe_apply_pragma_weak here... - (cp_maybe_mangle_decomp): ... but call it here instead. - -2018-04-05 Jason Merrill - - PR c++/85136 - ICE with designated init in template. - * decl.c (maybe_deduce_size_from_array_init): Handle dependent - designated initializer. - (check_array_designated_initializer): Update ce->index with the - constant value. - - PR c++/83808 - ICE with VLA initialization. - * typeck2.c (process_init_constructor_array): Don't require a VLA - initializer to have VLA type. - -2018-04-05 Paolo Carlini - - PR c++/80956 - * call.c (convert_like_real): Fail gracefully for a broken - std::initializer_list, missing a definition. - - * name-lookup.c (do_pushtag): Tweak message, use %< and %>. - -2018-04-05 Paolo Carlini - - PR c++/84792 - * decl.c (grokdeclarator): Fix diagnostic about typedef name used - as nested-name-specifier, keep type and TREE_TYPE (decl) in sync. - -2018-04-05 Jason Merrill - - PR c++/82152 - ICE with class deduction and inherited ctor. - * pt.c (do_class_deduction): Ignore inherited ctors. - - PR c++/84665 - ICE with array of empty class. - * decl2.c (cp_check_const_attributes): Use fold_non_dependent_expr. - - PR c++/85228 - ICE with lambda in enumerator in template. - * pt.c (bt_instantiate_type_proc): Don't assume - CLASSTYPE_TEMPLATE_INFO is non-null. - -2018-04-05 Ville Voutilainen - - Implement P0969 - * decl.c (find_decomp_class_base): Check accessibility instead - of declared access, adjust diagnostic. - -2018-04-05 Ville Voutilainen - - Implement P0961 - * decl.c (get_tuple_decomp_init): Check the templatedness - of a member get. - -2018-04-05 Jason Merrill - - PR c++/85200 - ICE with constexpr if in generic lambda. - * pt.c (extract_locals_r): Don't record the local specs of variables - declared within the pattern. - -2018-04-05 Alexandre Oliva - - PR c++/84979 - * pt.c (check_auto_in_tmpl_args): New. - (tsubst_qualified_id): Use it to reject template args - referencing auto for non-type templates. - * parser.c (cp_parser_template_id): Likewise. - * cp-tree.h (check_auto_in_tmpl_args): Declare. - * typeck2.c (build_functional_cast): Report correct location - for invalid use of auto. - -2018-04-04 Jason Merrill - - PR c++/85215 - ICE with copy-init from conversion. - * call.c (merge_conversion_sequences): Fix type of direct binding - sequence. - - PR c++/84938 - ICE with division by ~-1. - * call.c (set_up_extended_ref_temp): Call cp_fully_fold. - - PR c++/84936 - ICE with unexpanded pack in mem-initializer. - * parser.c (cp_parser_mem_initializer_list): Call - check_for_bare_parameter_packs. - -2018-04-04 Jakub Jelinek - - PR inline-asm/85172 - * constexpr.c (cxx_eval_builtin_function_call): For calls to - builtin_valid_in_constant_expr_p functions, don't call - cxx_eval_constant_expression if argument is not - potential_constant_expression. - - PR c++/85146 - * cp-tree.h (calculate_bases, calculate_direct_bases): Add complain - argument. - * semantics.c (calculate_bases): Add complain argument. Use - complete_type_or_maybe_complain instead of just complete_type and - return an empty vector if it fails. Move make_tree_vector () call - after early return. Formatting fixes. - (calculate_direct_bases): Likewise. Call release_tree_vector at the - end. - (dfs_calculate_bases_post, calculate_bases_helper): Formatting fixes. - * pt.c (tsubst_pack_expansion): Adjust calculate_bases and - calculate_direct_bases callers, formatting fixes. - -2018-04-04 Jason Merrill - - PR c++/85006 - -fconcepts ICE with A return type - * pt.c (tsubst_pack_expansion): Allow unsubstituted auto pack. - - PR c++/85200 - ICE with constexpr if in generic lambda. - * tree.c (cp_walk_subtrees): Walk into DECL_EXPR in templates. - - PR c++/84221 - bogus -Wunused with attribute and template. - * decl2.c (is_late_template_attribute): Handle unused and used - normally on non-TYPE_DECL. - - PR c++/85135 - ICE with omitted template arguments. - * decl.c (grokdeclarator): Catch deduced class type in trailing - return type. - - PR c++/85133 - ICE with missing concept initializer. - * decl.c (cp_finish_decl): If a concept initializer is missing, use - true. - - PR c++/85118 - wrong error with generic lambda and std::bind. - * call.c (add_template_conv_candidate): Disable if there are any - call operators. - - PR c++/85141 - ICE with compound assignment and static member fn. - * typeck.c (cp_build_modify_expr): Call decay_conversion for RHS of - compound assignment. - - PR c++/85148 - ICE with 'this' in array NSDMI. - * tree.c (replace_placeholders_r): Use handled_component_p. - -2018-04-04 Ville Voutilainen - - PR c++/65923 - * decl.c (grokfndecl): Handle standard UDL diagnostics here.. - * parser.c (cp_parser_unqualified_id): ..not here. - -2018-04-04 Alexandre Oliva - - PR c++/84943 - * typeck.c (cp_build_addr_expr_1): Mark FUNCTION_DECL as - used. - * decl2.c (mark_used): Return without effects if tf_conv. - -2018-04-03 Jason Merrill - - PR c++/85092 - C++17 ICE with unused list constructor. - * call.c (conv_binds_ref_to_prvalue): Also count ck_identity - from a TARGET_EXPR. - - PR c++/85113 - ICE with constexpr and __builtin_constant_p. - * constexpr.c (cxx_eval_builtin_function_call): Only defer - __builtin_constant_p if ctx->quiet. - -2018-04-03 Paolo Carlini - - PR c++/84768 - * pt.c (rewrite_template_parm): If the first argument is - error_mark_node return it immediately. - (build_deduction_guide): Check the return value of the - latter for error_mark_node. - (do_class_deduction): Check the return value of the latter. - -2018-04-03 Jason Merrill - - * semantics.c (finish_if_stmt_cond): Use - instantiation_dependent_expression_p. - - PR c++/85149 - generic lambda and constexpr if. - * pt.c (build_extra_args, add_extra_args): Split from - tsubst_pack_expansion. - (tsubst_expr) [IF_STMT]: Use them. - * cp-tree.h (IF_STMT_EXTRA_ARGS): New. - - * typeck.c (merge_types): Limit matching attribute shortcut to - the default case. - -2018-04-03 Jakub Jelinek - - PR c++/85147 - * pt.c (fixed_parameter_pack_p_1): Punt if parm is error_mark_node. - - PR c++/85140 - * name-lookup.c (handle_namespace_attrs): Return early if attributes - is error_mark_node. - - PR c++/85134 - * decl.c (cp_finish_decl): If ensure_literal_type_for_constexpr_object - fails, after clearing DECL_DECLARED_CONSTEXPR_P don't return early, - instead for static data members clear init and set DECL_EXTERNAL. - -2018-04-02 Jason Merrill - - PR c++/64095 - auto... parameter pack. - * parser.c (cp_parser_parameter_declaration): Handle turning autos - into packs here. - (cp_parser_parameter_declaration_list): Not here. - -2018-03-31 Alexandre Oliva - - PR c++/85027 - * class.c (instantiate_type): Peel off SAVE_EXPR before - BASELINK. - -2018-03-30 Jason Merrill - - * typeck2.c (process_init_constructor_record): Use - init_list_type_node for the CONSTRUCTOR around an anonymous union - designated initializer. - -2018-03-30 Jakub Jelinek - - PR c++/84791 - * semantics.c (finish_omp_reduction_clause): If - OMP_CLAUSE_REDUCTION_PLACEHOLDER is error_mark_node, return true - even if processing_template_decl. - -2018-03-29 David Malcolm - - PR c++/84269 - * name-lookup.c (get_std_name_hint): Add names from , - , and . - -2018-03-29 Jason Merrill - - PR c++/85093 - too many template args with pack expansion. - * pt.c (coerce_template_parms): Keep pack expansion args that will - need to be empty. - -2018-03-29 Jason Merrill - - * pt.c (build_non_dependent_expr): Propagate expr location. - -2018-03-27 Jason Merrill - - PR c++/85060 - wrong-code with call to base member in template. - * search.c (any_dependent_bases_p): Check uses_template_parms - rather than processing_template_decl. - -2018-03-29 David Malcolm - - PR c++/85110 - * typeck.c (convert_for_assignment): When complaining due to - conversions for an argument, attempt to use the location of the - argument. - -2018-03-28 Paolo Carlini - - PR c++/85028 - * pt.c (tsubst_default_argument): Early return if the type of the - parameter is erroneous. - -2018-03-28 Alexandre Oliva - - PR c++/84973 - * decl2.c (note_vague_linkage_fn): Don't defer uninstantiated - templates. - - PR c++/84968 - * tree.c (strip_typedefs_expr): Reject STATEMENT_LISTs. - -2018-03-27 Paolo Carlini - - PR c++/85067 - * method.c (defaulted_late_check): Partially revert r253321 changes, - do not early return upon error. - -2018-03-27 Jakub Jelinek - - PR c++/85077 - * cp-gimplify.c (cp_fold) : For ctors with vector - type call fold to generate VECTOR_CSTs when possible. - - PR c++/85076 - * tree.c (cp_build_reference_type): If to_type is error_mark_node, - return it right away. - -2018-03-27 Volker Reichelt - - * search.c (check_final_overrider): Use inform instead of error - for the diagnostics of the overridden functions. Tweak wording. - -2018-03-27 Jakub Jelinek - - PR c++/85068 - * class.c (update_vtable_entry_for_fn): Don't ICE if base_binfo - is NULL. Assert if thunk_binfo is NULL then errorcount is non-zero. - -2018-03-27 Paolo Carlini - Jason Merrill - - PR c++/84632 - * init.c (build_aggr_init): When initializing from array, - reject anything but CONSTRUCTORs and TARGET_EXPRs. - (build_vec_init): Handle separately ARRAY_TYPEs. - -2018-03-26 Jason Merrill - - PR c++/85062 - ICE with alignas in wrong place. - * decl.c (grokdeclarator): Ignore attributes on type-specifiers - here. - - PR c++/85049 - ICE with __integer_pack. - * pt.c (unify_pack_expansion): Don't try to deduce generated packs. - * cp-tree.h (TEMPLATE_PARM_P): New. - -2018-03-23 Jason Merrill - - PR c++/78489 - wrong SFINAE behavior. - - PR c++/84489 - * pt.c (type_unification_real): Don't defer substitution failure. - -2018-03-23 Jakub Jelinek - - PR c++/85015 - * decl.c (compute_array_index_type): Set osize to mark_rvalue_use - result. - - PR c++/84942 - * pt.c (tsubst_copy_and_build) : Replace - cp_build_unary_op call with gcc_unreachable (). - -2018-03-23 Marek Polacek - - PR c++/85045 - * cxx-pretty-print.c (cxx_pretty_printer::multiplicative_expression): - Handle EXACT_DIV_EXPR and RDIV_EXPR. Tweak condition. - (cxx_pretty_printer::expression): Handle EXACT_DIV_EXPR and RDIV_EXPR. - -2018-03-23 Ville Voutilainen - - Implement P0962 - * parser.c (cp_parser_perform_range_for_lookup): Change - the condition for deciding whether to use members. - -2018-03-23 Marek Polacek - - PR c++/85033 - * semantics.c (finish_offsetof): Don't allow CONST_DECLs. - -2018-03-23 Alexandre Oliva - - PR c++/71251 - * parser.c (cp_parser_alias_declaration): Call - parser_check_template_parameters. - - PR c++/84789 - * pt.c (resolve_typename_type): Drop assert that stopped - simplification to template-independent types. Add assert to - verify the initial scope is template dependent. - * parser.c (cp_parser_parse_and_diagnose_invalid_type_name): - Reparse the id expression as a type-name, not a declarator. - - PR c++/84729 - * init.c (build_vec_init): Error at parenthesized array init. - - PR c++/84610 - PR c++/84642 - PR c++/84942 - * cp-tree.h (temp_override): New template class, generalizing - a cleanup that was only used... - * parser.c (cp_parser_parameter_declaration_clause): - ... here for auto_is_implicit_function_template_parm_p. - (cp_parser_gnu_attributes_opt): Use it here as well. - (cp_parser_std_attribute): Likewise. - -2018-03-22 Marek Polacek - - PR c++/84854 - * semantics.c (finish_if_stmt_cond): Check if the type of the condition - is boolean. - -2018-03-21 Jason Merrill - - PR c++/81311 - wrong C++17 overload resolution. - * call.c (build_user_type_conversion_1): Remove C++17 code. - (conv_binds_ref_to_prvalue): New. - (build_over_call): Handle C++17 copy elision. - (build_special_member_call): Only do C++17 copy elision here if the - argument is already the right type. - -2018-03-21 Alexandre Oliva - - PR c++/71965 - * init.c (build_vec_init): Silence error, former sorry, - without tf_error. - - PR c++/84610 - PR c++/84642 - * parser.c (abort_fully_implicit_template_p): New. - (cp_parser_skip_to_end_of_statement): Use it. - (cp_parser_skip_to_end_of_block_or_statement): Likewise. - (finish_fully_implicit_template_p): Clear - implicit_template_parms and implicit_template_scope. - -2018-03-21 Paolo Carlini - - PR c++/84972 - * decl.c (maybe_deduce_size_from_array_init): Set TREE_TYPE to - error_mark_node when check_array_designated_initializer fails. - -2018-03-21 Jakub Jelinek - - PR c++/84961 - * cp-tree.h (genericize_compound_lvalue): Declare. - * typeck.c (genericize_compound_lvalue): New function. - (unary_complex_lvalue, cp_build_modify_expr): Use it. - * semantics.c (finish_asm_stmt): Replace MODIFY_EXPR, PREINCREMENT_EXPR - and PREDECREMENT_EXPR in output and "m" constrained input operands with - COMPOUND_EXPR. Call cxx_mark_addressable on the rightmost - COMPOUND_EXPR operand. - -2018-03-21 Nathan Sidwell - - PR c++/85008 - * tree.c (decl_linkage): Use DECL_CLONED_FUNCTION_P. - * decl2.c (vague_linkage_p): Likewise. - -2018-03-21 David Malcolm - - PR c++/84994 - * constexpr.c (constexpr_fn_retval): Make non-"static". - * cp-tree.h (constexpr_fn_retval): New decl. - * search.c (direct_accessor_p): Update leading comment. - (reference_accessor_p): Likewise. - (field_accessor_p): Replace check that function body is a - RETURN_EXPR with a call to constexpr_fn_retval. Fix - indentation of "field_type" decl. - -2018-03-21 Nathan Sidwell - - PR c++/84804 - * name-lookup.c (do_pushtag): Permit lambdas to be pushed into - complete classes. - -2018-03-21 Martin Sebor - - PR c++/84850 - * call.c (first_non_public_field): New template and function. - (first_non_trivial_field): New function. - (maybe_warn_class_memaccess): Call them. - -2018-03-21 David Malcolm - - PR c++/84892 - * search.c (field_accessor_p): Use class_of_this_parm rather than - type_of_this_parm, to check that "this" is a "const T *", rather - than a "T *const". - -2018-03-21 Nathan Sidwell - - * class.c (finish_struct_anon_r): Refactor, deprecate anything - other than public non-static data members. - * parser.c (cp_parser_init_declarator): Deprecate attributes after - parenthesized initializer. - - PR c++/84836 - * name-lookup.c (update_binding): Correct logic for local binding - update. - -2018-03-21 Marek Polacek - - PR c++/71638, ICE with NSDMI and reference. - * constexpr.c (cxx_eval_bare_aggregate): Update constructor's flags - even when we replace an element. - -2018-03-20 Marek Polacek - - PR c++/84978, ICE with NRVO. - * constexpr.c (cxx_eval_constant_expression): Handle the case when - a RESULT_DECL isn't in the hash map. - -2018-03-20 Jason Merrill - - PR c++/84978, ICE with NRVO. - * cvt.c (cp_get_fndecl_from_callee): Add fold parameter. - (cp_get_callee_fndecl_nofold): New. - * cp-gimplify.c (cp_genericize_r): Use it instead. - * call.c (check_self_delegation): Likewise. - -2018-03-20 Nathan Sidwell - - PR c++/84962 - * name-lookup.c (pushdecl_class_level): Push anon-struct's - member_vec, if there is one. - - PR c++/84970 - * cp-tree.h (lookup_list_keep): Declare. - * tree.c (lookup_list_keep): New, broken out of ... - (build_min): ... here. Call it. - * decl.c (cp_finish_decl): Call lookup_list_keep. - -2018-03-19 Jason Merrill - - PR c++/84937 - ICE with class deduction and auto. - * pt.c (rewrite_template_parm): Fix auto handling. - -2018-03-19 Marek Polacek - - PR c++/84925 - * pt.c (enclosing_instantiation_of): Check if fn is null. - - PR c++/84927 - * constexpr.c (cxx_eval_bare_aggregate): Update constructor's flags - as we evaluate the elements. - (cxx_eval_constant_expression): Verify constructor's flags - unconditionally. - -2018-03-19 Jason Merrill - - PR c++/71834 - template-id with too few arguments. - * pt.c (coerce_template_parms): Check fixed_parameter_pack_p. - -2018-03-19 Nathan Sidwell - - PR c++/84835 - * lambda.c (maybe_add_lambda_conv_op): Force C++ linkage. - * pt.c (build_template_decl): Propagate language linkage. - - PR c++/84812 - * name-lookup.c (set_local_extern_decl_linkage): Defend against - ambiguous lookups. - -2018-03-16 Jakub Jelinek - - PR c/84910 - * parser.c (cp_parser_lambda_introducer): Remove trailing space from - diagnostics. - * method.c (synthesize_method): Likewise. - * pt.c (convert_nontype_argument): Likewise. - -2018-03-16 Jason Merrill - - PR c++/84720 - ICE with rvalue ref non-type argument. - * pt.c (invalid_nontype_parm_type_p): Prohibit rvalue reference. - (convert_nontype_argument): Revert earlier change. - - PR c++/80227 - SFINAE and negative array size. - * decl.c (compute_array_index_type): Use - build_converted_constant_expr and valid_constant_size_p. - - PR c++/84906 - silent wrong code with ambiguous conversion. - * call.c (build_user_type_conversion_1): Set need_temporary_p on - ambiguous conversion. - (convert_like_real): Check it. - - PR c++/83937 - wrong C++17 handling of init-list ctor argument. - * call.c (build_special_member_call): Don't convert an init-list - argument directly to the class type. - -2018-03-16 Jakub Jelinek - - PR c++/79937 - PR c++/82410 - * cp-tree.h (CONSTRUCTOR_PLACEHOLDER_BOUNDARY): Define. - (find_placeholder): Declare. - * tree.c (struct replace_placeholders_t): Add exp member. - (replace_placeholders_r): Don't walk into ctors with - CONSTRUCTOR_PLACEHOLDER_BOUNDARY flag set, unless they are equal to - d->exp. Replace PLACEHOLDER_EXPR with unshare_expr (x) rather than x. - (replace_placeholders): Initialize data.exp. - (find_placeholders_r, find_placeholders): New functions. - * typeck2.c (process_init_constructor_record, - process_init_constructor_union): Set CONSTRUCTOR_PLACEHOLDER_BOUNDARY - if adding NSDMI on which find_placeholder returns true. - * call.c (build_over_call): Don't call replace_placeholders here. - * cp-gimplify.c (cp_genericize_r): Set TARGET_EXPR_NO_ELIDE on - TARGET_EXPRs with CONSTRUCTOR_PLACEHOLDER_BOUNDARY set on - TARGET_EXPR_INITIAL. - (cp_fold): Copy over CONSTRUCTOR_PLACEHOLDER_BOUNDARY bit to new - ctor. - -2018-03-16 Jason Merrill - - PR c++/83911 - ICE with multiversioned constructor. - * cp-gimplify.c (cp_genericize_r): Replace versioned function with - dispatchere here. - * call.c (build_over_call): Not here. - -2018-03-16 Jakub Jelinek - - PR c++/84874 - * decl.c (reshape_init_class): Don't assert d->cur->index == field - if d->cur->index is a FIELD_DECL, instead set field to d->cur->index. - -2018-03-15 Jakub Jelinek - - PR c++/84222 - * cp-tree.h (cp_warn_deprecated_use): Declare. - * tree.c (cp_warn_deprecated_use): New function. - * typeck2.c (build_functional_cast): Use it. - * decl.c (grokparms): Likewise. - (grokdeclarator): Likewise. Temporarily push nested class scope - around grokparms call for out of class member definitions. - -2018-03-14 Jason Merrill - - PR c++/84820 - no error for invalid qualified-id. - * parser.c (cp_parser_make_indirect_declarator): Don't wrap - cp_error_declarator. - - PR c++/84801 - ICE with unexpanded pack in lambda. - * pt.c (check_for_bare_parameter_packs): Don't return early for a - lambda in non-template context. - - PR c++/81236 - auto variable and auto function - * pt.c (tsubst_baselink): Update the type of the BASELINK after - mark_used. - -2018-03-14 Jason Merrill - - PR c++/83916 - ICE with template template parameters. - * pt.c (convert_template_argument): Don't substitute into type of - non-type parameter if we don't have enough arg levels. - (unify): Likewise. - -2018-03-14 Marek Polacek - - PR c++/84596 - * semantics.c (finish_static_assert): Check - instantiation_dependent_expression_p instead of - {type,value}_dependent_expression_p. - -2018-03-13 Paolo Carlini - Jason Merrill - - PR c++/82336 - link error with list-init default argument. - * decl.c (check_default_argument): Unshare an initializer list. - -2018-03-13 Jakub Jelinek - - PR c++/84843 - * decl.c (duplicate_decls): For redefinition of built-in, use error - and return error_mark_node. For redeclaration, return error_mark_node - rather than olddecl if !flag_permissive. - -2018-03-13 Jason Merrill - - PR c++/82565 - ICE with concepts and generic lambda. - * pt.c (instantiate_decl): Clear fn_context for lambdas. - -2018-03-13 Jason Merrill - - PR c++/84720 - ICE with rvalue ref non-type argument. - * pt.c (convert_nontype_argument): Handle rvalue references. - - PR c++/84839 - ICE with decltype of parameter pack. - * pt.c (tsubst_pack_expansion): Set cp_unevaluated_operand while - instantiating dummy parms. - - * parser.c (cp_parser_simple_type_specifier): Pedwarn about auto - parameter even without -Wpedantic. - - PR c++/84798 - ICE with auto in abstract function declarator. - * parser.c (cp_parser_parameter_declaration_clause): Check - parser->default_arg_ok_p. - -2018-03-13 Jakub Jelinek - - PR c++/84808 - * constexpr.c (find_array_ctor_elt): Don't use elt reference after - first potential CONSTRUCTOR_ELTS reallocation. Convert dindex to - sizetype. Formatting fixes. - -2018-03-12 Jason Merrill - - PR c++/84355 - ICE with deduction for member class template. - * pt.c (tsubst) [TEMPLATE_TYPE_PARM]: Always substitute into - CLASS_PLACEHOLDER_TEMPLATE. - - PR c++/84802 - ICE capturing uninstantiated class. - * lambda.c (build_capture_proxy): Call complete_type. - -2018-03-09 Jason Merrill - - PR c++/84770 - ICE with typedef and parameter pack. - * pt.c (verify_unstripped_args_1): Split out from - verify_unstripped_args. - - PR c++/84785 - ICE with alias template and default targs. - * pt.c (type_unification_real): Set processing_template_decl if - saw_undeduced == 1. - - PR c++/84752 - ICE with capture of constexpr array. - * call.c (standard_conversion): Set rvaluedness_matches_p on the - identity conversion under ck_lvalue. - -2018-03-09 Jason Merrill - Paolo Carlini - - PR c++/71169 - PR c++/71832 - * pt.c (any_erroneous_template_args_p): New. - * cp-tree.h (any_erroneous_template_args_p): Declare it. - * parser.c (cp_parser_class_specifier_1): Use it. - -2018-03-09 Jason Merrill - - PR c++/84726 - unnecessary capture of constant vars. - * cp-tree.h (LAMBDA_CAPTURE_EXPLICIT_P) - (LAMBDA_EXPR_CAPTURE_OPTIMIZED): New. - * expr.c (mark_use): Set LAMBDA_EXPR_CAPTURE_OPTIMIZED. - * lambda.c (is_constant_capture_proxy) - (current_lambda_expr, var_to_maybe_prune, mark_const_cap_r) - (prune_lambda_captures): New. - (finish_lambda_function): Call prune_lambda_captures. - -2018-03-09 Jason Merrill - Jakub Jelinek - - PR c++/84076 - * call.c (convert_arg_to_ellipsis): Instead of cp_build_addr_expr - build ADDR_EXPR with REFERENCE_TYPE. - (build_over_call): For purposes of check_function_arguments, if - argarray[j] is ADDR_EXPR with REFERENCE_TYPE created above, use - its operand rather than the argument itself. - -2018-03-09 Jakub Jelinek - - PR c++/84724 - * decl.c (duplicate_decls): Don't override __* prefixed builtins - except for __[^b]*_chk, instead issue permerror and for -fpermissive - also a note and return olddecl. - -2018-03-09 Nathan Sidwell - - PR c++/84733 - * name-lookup.c (do_pushdecl_with_scope): Only clear - current_function_decl when pushing a non-class (i.e. namespace) - scope. - -2018-03-08 Jason Merrill - Jakub Jelinek - - PR c++/80598 - * call.c (build_over_call): In templates set TREE_USED (first_fn) when - not calling mark_used for the benefit of -Wunused-function warning. - -2018-03-06 Jason Merrill - - * lambda.c (is_capture_proxy_with_ref): Remove. - * constexpr.c, expr.c, cp-tree.h, semantics.c: Adjust. - -2018-03-06 Marek Polacek - - PR c++/84684 - * constexpr.c (cxx_bind_parameters_in_call): Unshare evaluated - arguments. - -2018-03-06 Alexandre Oliva - - PR c++/84231 - * tree.c (lvalue_kind): Use presence/absence of REFERENCE_TYPE - only while processing template decls. - * typeck.c (build_x_conditional_expr): Move wrapping of - reference type around type... - * call.c (build_conditional_expr_1): ... here. Rename - is_lvalue to is_glvalue. - * parser.c (cp_parser_fold_expression): Catch REFERENCE_REF_P - INDIRECT_REF of COND_EXPR too. - - PR c++/84593 - * init.c (build_zero_init_1): Zero-initialize references. - - PR c++/84492 - * semantics.c (finish_stmt_expr_expr): Reject unresolved - overloads used as stmt expr values. - -2018-03-05 Jason Merrill - - PR c++/84708 - ICE with lambda in local class NSDMI. - * lambda.c (lambda_expr_this_capture): Handle local class NSDMI - context. - -2018-03-05 Jakub Jelinek - - PR c++/84684 - * constexpr.c (constexpr_call_hasher::equal): Return false if - lhs->hash != rhs->hash. Change return 1 to return true and - return 0 to return false. - -2018-03-05 Nathan Sidwell - - PR c++/84702 - * pt.c (process_template_arg): Mark lookup_keep on a default arg. - -2018-03-05 Marek Polacek - - PR c++/84707 - * decl.c (duplicate_decls): Check DECL_NAME before accessing - UDLIT_OPER_P. - -2018-03-05 Nathan Sidwell - - PR c++/84694 - * friend.c (do_friend): Restore check for identifier_p inside - TEMPLATE_ID_EXPR. - -2018-03-05 Paolo Carlini - - PR c++/84618 - * parser.c (cp_parser_lambda_introducer): Reject any capture not - involving a VAR_DECL or a PARM_DECL. - -2018-03-05 Pádraig Brady - Jason Merrill - Nathan Sidwell - - PR c++/84497 - * decl2.c (get_tls_init_fn): Check TYPE_HAS_TRIVIAL_DFLT too. - -2018-03-03 Jason Merrill - - PR c++/84686 - missing volatile loads. - * cvt.c (convert_to_void): Call maybe_undo_parenthesized_ref. - -2018-03-03 Paolo Carlini - - PR c++/71464 - * optimize.c (maybe_thunk_body): Bail out immediately if either - fns[0] or fns[1] is null. - -2018-03-02 Marek Polacek - - PR c++/84578 - * constexpr.c (get_array_or_vector_nelts): New. - (cxx_eval_array_reference): Use it. - (cxx_eval_vec_init_1): Likewise. - (cxx_eval_store_expression): Likewise. - -2018-03-02 Jason Merrill - - * semantics.c (force_paren_expr): Remove redundant test. - -2018-03-02 Marek Polacek - - PR c++/84663 - * decl.c (cp_complete_array_type): Check error_mark_node. - - PR c++/84664 - * typeck.c (cp_perform_integral_promotions): Check the result of - mark_rvalue_use. - -2018-03-02 Jakub Jelinek - - PR c++/84662 - * pt.c (tsubst_copy_and_build) : Use - RETURN instead of return. - : Likewise. - : If op0 is error_mark_node, just return - it instead of wrapping it into CONVERT_EXPR. - -2018-03-02 Jason Merrill - - Fix MIPS16 ICE. - * pt.c (type_dependent_expression_p): Check DECL_LANG_SPECIFIC. - -2018-03-02 Marek Polacek - - PR c++/84590 - * cp-gimplify.c (cp_fully_fold): Unwrap TARGET_EXPR or a CONSTRUCTOR - wrapped in VIEW_CONVERT_EXPR. - -2018-03-01 Martin Sebor - - PR c++/84294 - * decl.c (check_redeclaration_no_default_args): Merge attributes - specified on redeclarations of the same function template. - Remove dead code. - -2018-03-01 Marek Polacek - Jason Merrill - - PR c++/84582 - * semantics.c (force_paren_expr): Create a PAREN_EXPR when in - a template. - (maybe_undo_parenthesized_ref): Unwrap PAREN_EXPR. - * typeck2.c (store_init_value): Call fold_non_dependent_expr instead - of instantiate_non_dependent_expr. - * tree.c (lvalue_kind): Handle PAREN_EXPR like NON_DEPENDENT_EXPR. - -2018-03-01 Nathan Sidwell - - PR c++/84434 - * name-lookup.c (member_vec_dedup): Remove manually peeled - iteration. Ignore dependent ctor inheritance. - -2018-03-01 Jason Merrill - - PR c++/71569 - decltype of template. - * parser.c (cp_parser_decltype_expr): Handle missing template args. - -2018-03-01 Marek Polacek - - PR c++/84596 - * constexpr.c (require_rvalue_constant_expression): New function. - * cp-tree.h: Declare it. - * semantics.c (finish_static_assert): Use it instead of - require_potential_rvalue_constant_expression. - -2018-03-01 Jason Merrill - Alexandre Oliva - - PR c++/71569 - ICE with redundant args on member variable template. - * decl.c (start_decl): Handle partial specialization of member - variable template. - * pt.c (determine_specialization): Allow partial specialization - of member variable template without specializing enclosing class. - (process_partial_specialization): Improve error message. - -2018-02-28 Jason Merrill - - PR c++/71784 - ICE with ref-qualifier and explicit specialization. - * pt.c (determine_specialization): Check ref-qualifier. - -2018-02-28 Jakub Jelinek - - PR c++/84609 - * parser.c (cp_parser_attributes_opt): Formatting fix. - (cp_parser_skip_balanced_tokens, cp_parser_skip_gnu_attributes_opt, - cp_parser_skip_std_attribute_spec_seq, cp_parser_skip_attributes_opt): - New functions. - (cp_parser_member_declaration): Use cp_parser_skip_attributes_opt - instead of tentative parse to peek over optional attribute tokens - to check for CPP_COLON after them. - - PR c++/83871 - PR c++/83503 - * pt.c (INCLUDE_STRING): Remove define. - (warn_spec_missing_attributes): Use pretty_printer instead of - std::string. Fix up inform call so that the list of attributes - is in %s argument. - -2018-02-28 Martin Sebor - - PR testsuite/84617 - * decl.c (duplicate_decls): Fully merge attributes const, pure, - and malloc. - -2018-02-28 Nathan Sidwell - - PR c++/84602 - * name-lookup.h (search_anon_aggr): Add defaulted WANT_TYPE arg. - * name-lookup.c (fields_linear_search): Look in an anon-aggr - regardless of want_type. - (search_anon_aggr): Just use get_class_binding_direct. - -2018-02-28 Jakub Jelinek - - * decl.c (cp_finish_decomp): Don't adjust eltscnt when calling - inform_n. - -2018-02-27 Martin Sebor - - * pt.c: Avoid including directly. - -2018-02-27 Martin Sebor - - PR c++/83871 - PR c++/83503 - * cp-tree.h (warn_spec_missing_attributes): New function. - ((check_explicit_specialization): Add an argument. Call the above - function. - * decl.c (duplicate_decls): Avoid applying primary function template's - attributes to its explicit specializations. - cp/pt.c (warn_spec_missing_attributes): Define. - -2018-02-27 Håkon Sandsmark - - PR c++/71546 - lambda init-capture with qualified-id. - * parser.c (cp_parser_lambda_introducer): Clear scope after - each lambda capture. - -2018-02-27 Nathan Sidwell - - PR c++/84426 - * name-lookup.h (get_member_slot): Rename ... - (find_member_slot): ... here. - (add_member_slot): New. - * name-lookup.c (member_vec_linear_search): No need to check for - NULL slot. - (get_member_slot): Rename ... - (find_member_slot): ... here. Don't add slot for incomplete class. - (add_member_slot): New. - * class.c (add_method): Adjust get_member_slot rename. Bail out - if push_class_level_binding fails. Create slot and grok - properties once we're committed to insertion. - -2018-02-27 Jason Merrill - - PR c++/84489 - dependent default template argument - * pt.c (type_unification_real): Handle early substitution failure. - -2018-02-26 Jason Merrill - - PR c++/84560 - ICE capturing multi-dimensional VLA. - * tree.c (array_of_runtime_bound_p): False if the element is - variably-modified. - - PR c++/84441 - ICE with base initialized from ?: - * call.c (unsafe_copy_elision_p): Handle COND_EXPR. - - PR c++/84520 - ICE with generic lambda in NSDMI. - * lambda.c (lambda_expr_this_capture): Don't look for fake NSDMI - 'this' in a generic lambda instantiation. - - PR c++/84559 - ICE with constexpr VLA. - * constexpr.c (ensure_literal_type_for_constexpr_object): Check - for constexpr variable with VLA type. - -2018-02-26 Jakub Jelinek - - PR c++/84558 - * constexpr.c (cxx_eval_vec_init_1): For reuse, treat NULL eltinit like - a valid constant initializer. Formatting fixes. - -2018-02-26 Paolo Carlini - - PR c++/84540 - * pt.c (tsubst_attributes): Handle correctly tsubst_attribute - returning NULL_TREE. - (apply_late_template_attributes): Likewise. - -2018-02-26 Jakub Jelinek - - PR c++/84557 - * parser.c (cp_parser_omp_var_list_no_open): Only call - cp_parser_lookup_name_simple on names satisfying identifier_p. - (cp_parser_oacc_routine): Likewise. - -2018-02-26 Jason Merrill - - PR c++/84551 - ICE with concepts and -g. - * parser.c (add_debug_begin_stmt): Do nothing in a concept. - -2018-02-26 Marek Polacek - - PR c++/84325 - * tree.c (replace_placeholders_r): Only check TREE_CONSTANT on - non-types. - -2018-02-26 Jason Merrill - - PR c++/84447 - ICE with deleted inherited ctor with default arg. - * call.c (build_over_call): Handle deleted functions in one place. - -2018-02-26 Paolo Carlini - - PR c++/84533 - * decl.c (redeclaration_error_message): Don't try to use - DECL_DECLARED_CONSTEXPR_P on CONST_DECLs. - -2018-02-26 Paolo Carlini - - * lambda.c (build_capture_proxy): Define static. - * cp-tree.h (build_capture_proxy): Remove. - -2018-02-26 Marek Polacek - - PR c++/84537 - * name-lookup.c (suggest_alternative_in_explicit_scope): Return false - if name is error node. - -2018-02-25 Jason Merrill - - PR c++/84015 - ICE with class deduction and auto template parm. - * pt.c (rewrite_template_parm): Use tf_partial in first tsubst. - -2018-02-24 Marek Polacek - - PR c++/83692 - * constexpr.c (maybe_constant_init_1): New function. - (maybe_constant_init): Make it a wrapper around maybe_constant_init_1. - (cxx_constant_init): New function. - * cp-tree.h (cxx_constant_init): Declare. - * typeck2.c (store_init_value): Call cxx_constant_init instead of - cxx_constant_value. Move the maybe_constant_init call under an 'else'. - -2018-02-22 Jason Merrill - - PR c++/70468 - ICE with constructor delegation via typedef. - * pt.c (tsubst_initializer_list): Check for other mem-initializers - with constructor delegation. - -2018-02-22 Jason Merrill - - PR c++/84424 - ICE with constexpr and __builtin_shuffle. - * constexpr.c (reduced_constant_expression_p): Handle CONSTRUCTOR of - VECTOR_TYPE. - -2018-02-22 Marek Polacek - - PR c++/84493 - * parser.c (cp_parser_braced_list): Use require_open instead of - consume_open. - -2018-02-21 Jason Merrill - - PR c++/84454 - ICE with pack expansion in signature. - * error.c (find_typenames_r): Also stop on EXPR_PACK_EXPANSION. - -2018-02-20 Siddhesh Poyarekar - - * cp-objcp-common.c (cxx_block_may_fallthru): Add case for - IF_STMT. - -2018-02-20 Paolo Carlini - - PR c++/84446 - * parser.c (cp_parser_init_declarator): Don't call start_lambda_scope - on error_mark_node. - -2018-02-20 Jakub Jelinek - - PR c++/84445 - * class.c (fixed_type_or_null) : Only test - TREE_HAS_CONSTRUCTOR if instance is not an internal function call. - - PR c++/84449 - * tree.c (bot_manip): If build_cplus_new or break_out_target_exprs - returns error_mark_node, return it immediately. - (break_out_target_exprs): If cp_walk_tree with bot_manip returns - error_mark_node, return error_mark_node. - - PR c++/84455 - * pt.c (tsubst_lambda_expr): If not nested, increment temporarily - function_depth to avoid GC during finish_lambda_function. - -2018-02-19 Jason Merrill - - PR c++/84429 - ICE capturing VLA. - * lambda.c (build_capture_proxy): Handle reference refs. - -2018-02-19 Jakub Jelinek - - PR c++/84448 - * parser.c (cp_parser_binary_expression): For no_toplevel_fold_p, if - either operand is error_mark_node, set current.lhs to that instead of - creating a binary op with error_mark_node operands. - - PR c++/84430 - * constexpr.c (potential_constant_expression_1): Handle OMP_SIMD. - -2018-02-19 Paolo Carlini - - PR c++/84348 - * decl.c (grokdeclarator): Early return error_mark_node upon - ill-formed friend declaration. - -2018-02-16 Marek Polacek - Jakub Jelinek - - PR c++/84192 - * constexpr.c (cxx_eval_constant_expression) : Don't - set *jump_target to anything if jump_target is NULL. - -2018-02-16 Jason Merrill - - PR c++/84151 - unnecessary volatile load with static member. - * call.c (build_new_method_call_1): Avoid loading from a volatile - lvalue used as the object argument for a static member function. - - PR c++/81853 - using-directive and constexpr. - * constexpr.c (cxx_eval_constant_expression): Handle USING_STMT. - - PR c++/84420 - ICE with structured binding in lambda. - * lambda.c (is_capture_proxy): Check DECL_DECOMPOSITION_P. - - PR c++/83835 - C++17 error with constructor ctors. - * call.c (build_special_member_call): Set TARGET_EXPR_DIRECT_INIT_P. - - PR c++/82664 - ICE with reference to function template parm. - * pt.c (convert_nontype_argument_function): Avoid obfuscationg - NOP_EXPRs. - - PR c++/82764 - C++17 ICE with empty base - * class.c (build_base_field_1): Set DECL_SIZE to zero for empty base. - -2018-02-16 Jason Merrill - - PR c++/84421 - type-dependent if constexpr - * semantics.c (finish_if_stmt_cond): Check type_dependent_expression_p. - -2018-02-16 Nathan Sidwell - - Deprecate -ffriend-injection. - * decl.c (cxx_init_decl_processing): Emit warning on option. - * name-lookup.c (do_pushdecl): Emit warning if we push a visible - friend. - -2018-02-16 Paolo Carlini - - PR c++/82468 - * decl.c (check_special_function_return_type): Reject template - template parameter in deduction guide. - -2018-02-16 Nathan Sidwell - - PR c++/84375 - * name-lookup.c (do_pushdecl): Bail out on bad local friend injection. - -2018-02-15 Jason Merrill - - PR c++/83227 - C++17 ICE with init-list derived-to-base conversion. - * call.c (convert_like_real): Don't use the copy-list-initialization - shortcut for ck_base. - - PR c++/84045 - ICE with typedef and noexcept. - * except.c (build_noexcept_spec): Use strip_typedefs_expr. - - PR c++/84376 - ICE with omitted template arguments. - * pt.c (dguide_name_p): Check for IDENTIFIER_NODE. - - PR c++/84368 - wrong error with local variable in variadic lambda. - * pt.c (tsubst_pack_expansion): Fix handling of non-packs in - local_specializations. - -2018-02-15 Paolo Carlini - - PR c++/84330 - * constraint.cc (tsubst_constraint_info): Handle an error_mark_node - as first argument. - -2018-02-14 Paolo Carlini - - PR c++/84350 - * pt.c (do_auto_deduction): Don't check the TREE_TYPE of a null - init, early return. - -2018-02-14 Nathan Sidwell - - * decl2.c (mark_vtable_entries): Set input_location to decl's. - (c_parse_final_cleanups): Restore input_location after emitting - vtables. - -2018-02-14 Paolo Carlini - - * cp-tree.h (do_auto_deduction (tree, tree, tree)): Remove. - (do_auto_deduction (tree, tree, tree, tsubst_flags_t, - auto_deduction_context, tree, int): Add defaults. - * pt.c (do_auto_deduction (tree, tree, tree)): Remove definition. - (tsubst_omp_for_iterator): Adjust do_auto_deduction call, forward - tsubst_flags_t argument. - * init.c (build_new): Likewise. - -2018-02-13 Jakub Jelinek - - PR c++/84364 - * typeck.c (check_return_expr): Don't emit -Weffc++ warning - about return other than *this in assignment operators if - retval is type dependent expression. - -2018-02-13 Paolo Carlini - - PR c++/84333 - * call.c (build_conditional_expr_1): Use cp_save_expr instead of - save_expr for the G++ extension. - -2018-02-13 Jason Merrill - - PR c++/84080 - ICE with return type deduction and specialization. - * pt.c (determine_specialization): Check uses_template_parms. - - Fix more variadic capture issues. - * pt.c (find_parameter_packs_r): Also look at explicit captures. - (check_for_bare_parameter_packs): Check current_class_type for - lambda context. - (extract_locals_r): Handle seeing a full instantiation of a pack. - (tsubst_pack_expansion): Likewise. Force lambda capture. - * parser.c (cp_parser_lambda_introducer): Don't - check_for_bare_parameter_packs. +2019-01-27 Marek Polacek + + PR c++/88815 - narrowing conversion lost in decltype. + PR c++/78244 - narrowing conversion in template not detected. + * cp-tree.h (CONSTRUCTOR_IS_DEPENDENT): New. + * pt.c (instantiation_dependent_r): Consider a CONSTRUCTOR with + CONSTRUCTOR_IS_DEPENDENT instantiation-dependent. + * semantics.c (finish_compound_literal): When the compound literal + isn't instantiation-dependent and the type isn't type-dependent, + fall back to the normal processing. Set CONSTRUCTOR_IS_DEPENDENT. + + PR c++/89024 - ICE with incomplete enum type. + * call.c (standard_conversion): When converting an + ARITHMETIC_TYPE_P to an incomplete type, return NULL. + +2019-01-25 Paolo Carlini + + PR c++/88969 + * call.c (build_op_delete_call): Implement 7.6.2.5/(10.1). + * decl2.c (coerce_delete_type): Use build_pointer_type instead + of TYPE_POINTER_TO. + +2019-01-24 Jason Merrill + + PR c++/89001 - mangling of reference temporaries + * cp-tree.h (struct saved_scope): Add ref_temp_count. + (current_ref_temp_count): New macro. + * mangle.c (mangle_ref_init_variable): Use it. + * typeck2.c (store_init_value): Clear it. + * call.c (make_temporary_var_for_ref_to_temp): Copy public and + comdat. + +2019-01-24 Jakub Jelinek + + PR c++/88976 + * semantics.c (finish_omp_cancel): Diagnose more than one if + on #pragma omp cancel with different modifiers. Use + maybe_convert_cond when not in template or build_x_binary_op + otherwise. + +2019-01-23 Marek Polacek + + PR c++/88757 - qualified name treated wrongly as type. + * parser.c (cp_parser_direct_declarator): Don't treat qualified-ids + in parameter-list as types if name lookup for declarator-id didn't + find one or more function templates. + +2019-01-23 Jakub Jelinek + + PR c/44715 + * cp-gimplify.c (genericize_cp_loop): Call begin_bc_block only + after genericizing cond and incr expressions. + + PR c++/88984 + * cp-gimplify.c (genericize_switch_stmt): Move cond genericization + before the begin_bc_block call. + +2019-01-21 Jason Merrill + + PR c++/87893 - constexpr ctor ICE on ARM. + PR c++/88293 - ICE with comma expression. + * constexpr.c (initialized_type): Don't shortcut non-void type. + Handle COMPOUND_EXPR. + (cxx_eval_outermost_constant_expr): Return early for void type. + +2019-01-21 Jakub Jelinek + + PR c++/88949 + * optimize.c (cxx_copy_decl): New function. + (clone_body): Use it instead of copy_decl_no_change. + + PR sanitizer/88901 + * typeck.c (cp_build_binary_op): Don't instrument + SANITIZE_POINTER_COMPARE if processing_template_decl. + (pointer_diff): Similarly for SANITIZE_POINTER_SUBTRACT. + +2019-01-18 Jason Merrill + + PR c++/88875 - error with explicit list constructor. + * call.c (reference_binding): Don't modify EXPR. Set + need_temporary_p on the ck_user conversion for a temporary. + (convert_like_real): Check it. - PR c++/84338 - wrong variadic sizeof. - * pt.c (argument_pack_select_arg): Like the macro, but look through - a pack expansion. - (tsubst, tsubst_copy, dependent_template_arg_p): Use it. - (extract_fnparm_pack): Do make_pack_expansion. - (extract_locals_r): Do strip a pack expansion. - * cp-tree.h (ARGUMENT_PACK_SELECT_ARG): Remove. +2019-01-18 H.J. Lu -2018-02-12 Jakub Jelinek + PR c/51628 + PR c/88664 + * call.c (convert_for_arg_passing): Upate the + warn_for_address_or_pointer_of_packed_member call. + * typeck.c (convert_for_assignment): Likewise. - PR c++/84341 - * parser.c (cp_parser_binary_expression): Use build_min instead of - build2_loc to build the no_toplevel_fold_p toplevel binary expression. +2019-01-17 Jason Merrill -2018-02-12 Nathan Sidwell + PR c++/86205 - ICE with ?: of throw and template-id. + * pt.c (resolve_nondeduced_context_or_error): Split out from... + * typeck.c (decay_conversion): ...here. + * call.c (build_conditional_expr_1): Use it. - PR c++/84263 - * parser.c (cp_parser_decltype): Push and pop - deferring_access_checks. Reorganize to avoid goto. + PR c++/86740, ICE with constexpr if and nested generic lambdas. + * tree.c (cp_walk_subtrees): Handle LAMBDA_EXPR. -2018-02-12 Richard Biener +2019-01-17 Paolo Carlini - PR c++/84281 - * constexpr.c (cxx_eval_vec_init_1): Use a RANGE_EXPR to compact - uniform constructors and delay allocating them fully. + * decl.c (grokdeclarator): Use typespec_loc in error messages + about 'auto' and trailing return type. -2018-02-09 Jason Merrill +2019-01-17 David Malcolm - PR c++/84036 - ICE with variadic capture. - Handle variadic capture proxies more like non-variadic. - * lambda.c (build_capture_proxy): Remove workaround. - * pt.c (find_parameter_packs_r): The proxy is a pack. - (instantiate_class_template_1): Remove dead lambda code. - (extract_fnparm_pack): Don't make_pack_expansion. - (extract_locals_r): Don't strip a pack expansion. - (tsubst_pack_expansion): Handle proxy packs. Use - PACK_EXPANSION_EXTRA_ARGS less. - (tsubst_decl) [FIELD_DECL]: Don't register_specialization. - (tsubst_copy) [FIELD_DECL]: Don't retrieve*_specialization. - [VAR_DECL]: Handle ARGUMENT_PACK_SELECT. - (tsubst_expr) [DECL_EXPR]: Handle proxy packs. - (tsubst_copy_and_build) [VAR_DECL]: Handle proxy packs normally. + PR c++/88699 + * class.c (add_method): Don't use DECL_DESTRUCTOR_P on + USING_DECLs. -2018-02-10 Jakub Jelinek +2019-01-17 Nathan Sidwell - PR sanitizer/83987 - * tree.c (cp_free_lang_data): Revert 2018-01-23 change. + PR c++/86610 + * semantics.c (process_outer_var_ref): Only skip dependent types + in templates. -2018-02-09 Jason Merrill +2019-01-17 Alexandre Oliva - PR c++/81917 - ICE with void_t and partial specialization. - * pt.c (instantiate_class_template_1): Set TYPE_BEING_DEFINED before - calling most_specialized_partial_spec. + PR c++/87768 + * cp-tree.h (saved_scope): Add suppress_location_wrappers. + * name-lookup.c (do_push_to_top_level): Save and reset it. + (do_pop_from_top_level): Restore it. -2018-02-09 Nathan Sidwell + PR c++/86648 + * pt.c (make_template_placeholder): Use auto_identifier. + (is_auto): Drop CLASS_PLACEHOLDER_TEMPLATE test. + * error.c (dump_type): Handle template placeholders. + * cxx-pretty-print.c (pp_cx_unqualified_id): Likewise. - PR c/84293 - * typeck.c (cp_build_indirect_ref_1, build_reinterpret_cast_1): - Pass expr location to strict_aliasing_warning. + PR c++/88146 + * cvt.c (convert_to_void): Handle all cdtor calls as if + returning void. -2018-02-09 Jason Merrill +2019-01-16 Paolo Carlini - PR c++/84296 - ICE with qualified-id in template. - PR c++/83714 - * pt.c (unknown_base_ref_p): New. - (instantiation_dependent_scope_ref_p): Use it instead of - any_dependent_bases_p. + * decl.c (grokdeclarator): Use locations[ds_storage_class] in + error messages about ill-formed uses of mutable. -2018-02-09 Marek Polacek - Jakub Jelinek +2019-01-16 Marek Polacek - PR c++/83659 - * constexpr.c (cxx_fold_indirect_ref): Sync some changes from - fold_indirect_ref_1, including poly_*int64. Verify first that - tree_fits_poly_int64_p (op01). Formatting fixes. + PR c++/78244 - narrowing conversion in template not detected. + * call.c (perform_implicit_conversion_flags): Set + IMPLICIT_CONV_EXPR_BRACED_INIT. + * cp-tree.h (IMPLICIT_CONV_EXPR_BRACED_INIT): New. + * pt.c (tsubst_copy_and_build): Use it. -2018-02-08 Paolo Carlini +2019-01-15 David Malcolm - * constexpr.c (cxx_eval_component_reference): Use INDIRECT_REF_P. - * lambda.c (build_capture_proxy): Likewise. - * search.c (field_access_p): Likewise. - * semantics.c (omp_clause_decl, omp_privatize_field, - finish_omp_clauses): Likewise. + PR c++/88795 + * pt.c (build_deduction_guide): Bail out if tsubst_arg_types + fails. -2018-02-08 Paolo Carlini +2019-01-15 Paolo Carlini - PR c++/83806 - * typeck.c (decay_conversion): Use mark_rvalue_use for the special - case of nullptr too. + * decl.c (start_decl): Improve error location. + * decl2.c (grokfield): Likewise. -2018-02-08 Nathan Sidwell +2019-01-15 Paolo Carlini - * class.c (finish_struct): Fix std:initializer_list diagnostic - formatting. + * decl.c (grokdeclarator): Move further up the location_t loc + declaration and use the location when building a TYPE_DECL for + a typedef name. + * decl2.c (grokbitfield): Use DECL_SOURCE_LOCATION in the error + about an ill-formed bit-field as typedef. -2018-02-08 Paolo Carlini +2019-01-14 Marek Polacek - PR c++/83204 - * pt.c (tsubst_copy_and_build): Use force_paren_expr for INDIRECT_REF. + PR c++/88830 - ICE with abstract class. + * decl2.c (maybe_emit_vtables): Check CLASSTYPE_LAZY_DESTRUCTOR. + Fix formatting. -2018-02-07 Jakub Jelinek + PR c++/88825 - ICE with bogus function return type deduction. + * typeck.c (can_do_nrvo_p): Check error_mark_node. - PR c++/84082 - * parser.c (cp_parser_dot_deref_incomplete): New function. - (cp_parser_postfix_dot_deref_expression): Use it. +2019-01-14 Tom Honermann -2018-02-07 David Malcolm + Implement P0482R5, char8_t: A type for UTF-8 characters and strings + * cvt.c (type_promotes_to): Handle char8_t promotion. + * decl.c (grokdeclarator): Handle invalid type specifier + combinations involving char8_t. + * lex.c (init_reswords): Add char8_t as a reserved word. + * mangle.c (write_builtin_type): Add name mangling for char8_t (Du). + * parser.c (cp_keyword_starts_decl_specifier_p) + (cp_parser_simple_type_specifier): Recognize char8_t as a simple + type specifier. + (cp_parser_string_literal): Use char8_array_type_node for the type + of CPP_UTF8STRING. + (cp_parser_set_decl_spec_type): Tolerate char8_t typedefs in system + headers. + * rtti.c (emit_support_tinfos): type_info support for char8_t. + * tree.c (char_type_p): Recognize char8_t as a character type. + * typeck.c (string_conv_p): Handle conversions of u8 string + literals of char8_t type. + (check_literal_operator_args): Handle UDLs with u8 string literals + of char8_t type. + * typeck2.c (ordinary_char_type_p): New. + (digest_init_r): Disallow initializing a char array with a u8 string + literal. - PR c++/81610 - PR c++/80567 - * name-lookup.c (suggest_rid_p): New function. - (lookup_name_fuzzy): Replace enum-rid-filtering logic with call to - suggest_rid_p. +2019-01-14 Martin Liska -2018-02-07 Jason Merrill + PR gcov-profile/88263 + * decl2.c (get_tls_wrapper_fn): Use DECL_SOURCE_LOCATION + as location of the TLS wrapper. - PR c++/84182 - ICE with captured lambda - PR c++/84181 - * pt.c (extract_locals_r, extract_local_specs): New. - (tsubst_pack_expansion): Use them. +2019-01-12 Paolo Carlini -2018-02-07 Martin Liska + * decl.c (cp_finish_decl): Improve error location. + * decl2.c (grokfield): Likewise, improve two locations. - PR c++/84059. - * class.c (add_method): Append argument value. - * cp-tree.h (maybe_version_functions): Add new argument. - * decl.c (decls_match): Call it if a declaration does not - have DECL_FUNCTION_VERSIONED. - (maybe_version_functions): record argument is added. +2019-01-11 Marek Polacek -2018-02-05 Marek Polacek + PR c++/88692, c++/87882 - -Wredundant-move false positive with *this. + * typeck.c (maybe_warn_pessimizing_move): Return if ARG isn't + ADDR_EXPR. - * class.c: Remove unused global variables. - (build_primary_vtable): Don't gather statistics. - (print_class_statistics): Remove. - * cp-tree.h (print_class_statistics): Remove. - * tree.c (cxx_print_statistics): Don't call print_class_statistics. +2019-01-11 Jason Merrill -2018-02-02 Paolo Carlini + PR c++/88312 - pack expansion of decltype. + * pt.c (instantiation_dependent_r): A template non-type parameter + pack is instantiation-dependent. - * class.c (is_really_empty_class): Use DECL_UNNAMED_BIT_FIELD. - * constexpr.c (cx_check_missing_mem_inits): Likewise. - * decl.c (next_initializable_field, find_decomp_class_base, - cp_finish_decomp): Likewise. - * typeck2.c (process_init_constructor_record): Likewise. +2019-01-11 Jason Merrill -2018-02-02 Jason Merrill + PR c++/88613 - ICE with use of const var in lambda. + * expr.c (mark_use): Fix location wrapper handling. + * cp-gimplify.c (cp_fold_maybe_rvalue): Call mark_rvalue_use. - PR c++/84181 - ICE with lambda parm in template argument. - * tree.c (strip_typedefs_expr): Use cp_tree_operand_length. +2019-01-11 Tobias Burnus -2018-02-01 Jason Merrill + PR C++/88114 + * decl2.c (maybe_emit_vtables): If needed, generate code for + the destructor of an abstract class. + (mark_used): Update comment for older function-name change. - PR c++/84160 - ICE with nested variadic capture. - * lambda.c (is_capture_proxy_with_ref): New. - (insert_capture_proxy): Don't set DECL_CAPTURED_VARIABLE from a - COMPONENT_REF. - * expr.c (mark_use): Use is_capture_proxy_with_ref. - * constexpr.c (potential_constant_expression_1): Likewise. - * semantics.c (process_outer_var_ref): Likewise. +2019-01-11 Paolo Carlini -2018-02-01 Marek Polacek + * decl.c (start_decl): Improve error location. + (grokdeclarator): Likewise, improve two locations. - PR c++/84125 - * typeck.c (build_address): Relax the assert when - processing_template_decl. +2019-01-09 Sandra Loosemore -2018-02-01 Jason Merrill + PR other/16615 - PR c++/84126 - ICE with variadic generic lambda - PR c++/84036 - PR c++/82249 - * pt.c (tsubst_pack_expansion): Handle function parameter_packs in - PACK_EXPANSION_EXTRA_ARGS. + * cp-tree.h: Mechanically replace "can not" with "cannot". + * parser.c: Likewise. + * pt.c: Likewise. + +2019-01-08 Paolo Carlini + + * decl.c (grok_reference_init): Improve error location. + (grokdeclarator): Likewise, improve two locations. + +2019-01-08 Marek Polacek + + PR c++/88538 - braced-init-list in template-argument-list. + * parser.c (cp_parser_template_argument): Handle braced-init-list when + in C++20. + + PR c++/88548 - this accepted in static member functions. + * parser.c (cp_debug_parser): Adjust printing of + local_variables_forbidden_p. + (cp_parser_new): Set local_variables_forbidden_p to 0 rather than false. + (cp_parser_primary_expression): When checking + local_variables_forbidden_p, use THIS_FORBIDDEN or + LOCAL_VARS_FORBIDDEN. + (cp_parser_lambda_body): Update the type of + local_variables_forbidden_p. Set it to 0 rather than false. + (cp_parser_condition): Adjust call to cp_parser_declarator. + (cp_parser_explicit_instantiation): Likewise. + (cp_parser_init_declarator): Likewise. + (cp_parser_declarator): New parameter. Use it. + (cp_parser_direct_declarator): New parameter. Use it to set + local_variables_forbidden_p. Adjust call to cp_parser_declarator. + (cp_parser_type_id_1): Adjust call to cp_parser_declarator. + (cp_parser_parameter_declaration): Likewise. + (cp_parser_default_argument): Update the type of + local_variables_forbidden_p. Set it to LOCAL_VARS_AND_THIS_FORBIDDEN + rather than true. + (cp_parser_member_declaration): Tell cp_parser_declarator if we saw + 'static' or 'friend'. + (cp_parser_exception_declaration): Adjust call to cp_parser_declarator. + (cp_parser_late_parsing_default_args): Update the type of + local_variables_forbidden_p. Set it to LOCAL_VARS_AND_THIS_FORBIDDEN + rather than true. + (cp_parser_cache_defarg): Adjust call to cp_parser_declarator. + (cp_parser_objc_class_ivars): Likewise. + (cp_parser_objc_struct_declaration): Likewise. + (cp_parser_omp_for_loop_init): Likewise. + * parser.h (cp_parser): Change the type of local_variables_forbidden_p + to unsigned char. + (LOCAL_VARS_FORBIDDEN, LOCAL_VARS_AND_THIS_FORBIDDEN, THIS_FORBIDDEN): + Define. -2018-02-01 Paolo Carlini +2019-01-08 Paolo Carlini - PR c++/83796 - * call.c (convert_like_real): If w're initializing from {} explicitly - call abstract_virtuals_error_sfinae. + * decl.c (start_decl): Improve permerror location. -2018-01-31 Jason Merrill +2019-01-08 Jonathan Wakely Jakub Jelinek - PR c++/83993 - * constexpr.c (cxx_eval_outermost_constant_expr): Build NOP_EXPR - around non-constant ADDR_EXPRs rather than clearing TREE_CONSTANT - on ADDR_EXPR. - -2018-01-31 Jakub Jelinek - - PR c++/83993 - * constexpr.c (diag_array_subscript): Emit different diagnostics - if TYPE_DOMAIN (arraytype) is NULL. - (cxx_eval_array_reference, cxx_eval_store_expression): For arrays - with NULL TYPE_DOMAIN use size_zero_node as nelts. - -2018-01-31 Paolo Carlini - - PR c++/84092 - * semantics.c (finish_qualified_id_expr): When handling an - UNBOUND_CLASS_TEMPLATE only adjust qualifying_class and expr. - -2018-01-31 Marek Polacek - - PR c++/84138 - * cp-gimplify.c (cp_fold): Check if X is an error node before - calling useless_type_conversion_p. - -2018-01-30 Jason Merrill - - PR c++/84091 - ICE with local class in lambda in template. - * decl2.c (determine_visibility): Look for outer containing template - instantiation. - - PR c++/84098 - ICE with lambda in template NSDMI. - * pt.c (instantiate_class_template_1): Ignore more lambdas. - -2018-01-29 Jason Merrill - - PR c++/68810 - wrong location for reinterpret_cast error. - * cvt.c (cp_convert_to_pointer): Always build a CONVERT_EXPR when - !dofold. - -2018-01-29 Marek Polacek - - PR c++/83996 - * constexpr.c (cxx_fold_indirect_ref): Compute ((foo *)&fooarray)[1] - => fooarray[1] in offset_int. - -2018-01-29 Jason Merrill - - PR c++/83942 - wrong unused warning with static_cast. - * cvt.c (ocp_convert): Call mark_rvalue_use. - -2018-01-26 Jason Merrill - - PR c++/83956 - wrong dtor error with anonymous union - * method.c (walk_field_subobs): Variant members only affect - deletedness. - (maybe_explain_implicit_delete): Pass &deleted_p for diagnostic. - - PR c++/84036 - ICE with variadic capture. - PR c++/82249 - * pt.c (tsubst_pack_expansion): When optimizing a simple - substitution, pull a single pack expansion out of its pack. - - PR c++/82514 - ICE with local class in generic lambda. - * pt.c (regenerated_lambda_fn_p): Remove. - (enclosing_instantiation_of): Don't use it. - (tsubst_function_decl): Call enclosing_instantiation_of. - - * pt.c (lookup_template_class_1): Add sanity check. - * name-lookup.c (do_pushtag): Don't add closures to local_classes. - -2018-01-25 Jakub Jelinek - - PR c++/84031 - * decl.c (find_decomp_class_base): Ignore unnamed bitfields. Ignore - recursive calls that return ret. - (cp_finish_decomp): Ignore unnamed bitfields. - -2018-01-23 Jason Merrill - - PR c++/82249 - wrong mismatched pack length error. - * pt.c (extract_fnparm_pack, tsubst_pack_expansion): Handle - unsubstituted function parameter pack. - -2018-01-23 Paolo Carlini - - PR c++/83921 - * decl.c (check_for_uninitialized_const_var): Not static; add - bool and tsubst_flags_t parameters; adjust to be used both in - constexpr context and not. - * constexpr.c (potential_constant_expression_1): Use the above. - * cp-tree.h (check_for_uninitialized_const_var): Declare. - -2018-01-23 Jason Merrill - - PR c++/83947 - ICE with auto declarations. - * pt.c (do_auto_deduction): Don't deduce from an auto decl. - * decl.c (undeduced_auto_decl): Limit to vars and fns. - -2018-01-23 David Malcolm - - PR c++/83974 - * pt.c (tsubst_copy_and_build) : Remove early bailout - for pointer to member function types. - -2018-01-23 Jakub Jelinek - - PR sanitizer/83987 - * tree.c (cp_free_lang_data): Change DECL_VALUE_EXPR of - DECL_OMP_PRIVATIZED_MEMBER vars to error_mark_node. - -2018-01-23 Nathan Sidwell - - PR c++/83988 - * pt.c (tsubst_baselink): Remove optype assert. - * ptree.c (cxx_print_xnode): Print BASELINK_OPTYPE. - -2018-01-23 Jakub Jelinek - - PR c++/83958 - * decl.c (cp_finish_decomp): Diagnose if reference structure binding - refers to incomplete type. - -2018-01-23 Nathan Sidwell - - Deprecate ARM-era for scope handling - * decl.c (poplevel): Flag_new_for_scope is a boolean-like. - (cxx_init_decl_processing): Deprecate flag_new_for_scope being - cleared. - * name-lookup.c (check_for_out_of_scope_variable): Deprecate and - cleanup handling. - * semantics.c (begin_for_scope): Flag_new_for_scope is - boolean-like. - (finish_for_stmt, begin_range_for_stmt): Likewise. - -2018-01-22 Jason Merrill - - PR c++/83720 - * decl2.c (determine_visibility): Fix template_decl handling - instead of blocking it. - - PR c++/83720 - ICE with lambda and LTO. - * decl2.c (determine_visibility): Clear template_decl for - function-scope decls. Propagate anonymous linkage from containing - function. - -2018-01-22 Marek Polacek - - PR c++/81933 - * typeck2.c (split_nonconstant_init_1): Return false if we didn't - split out anything. - -2018-01-22 Ville Voutilainen - - PR c++/83895 - * decl.c (grokdeclarator): Don't diagnose extra parens - on typedefs. - -2018-01-19 Jakub Jelinek - - PR c++/81167 - * call.c (joust): Use TREE_TYPE (source) if source is - a POINTER_TYPE_P rather than if ! DECL_CONSTRUCTOR_P (w->fn). - - PR c++/83919 - * typeck.c (convert_for_assignment): Suppress warn_ignored_qualifiers - for direct enum init. - * decl.c (reshape_init): Likewise. - -2018-01-19 Marek Polacek - - * constexpr.c (fold_simple): Simplify. - -2018-01-18 Jason Merrill - - PR c++/83714 - * search.c (any_dependent_bases_p): Handle null TREE_BINFO. - * pt.c (instantiation_dependent_scope_ref_p): True if - any_dependent_bases_p. - -2018-01-18 Paolo Carlini - - * cp-tree.h: Fix comment typo (DECL_NON_TRIVIALLY_INITIALIZED_P - vs DECL_NONTRIVIALLY_INITIALIZED_P). - -2018-01-18 Jason Merrill - - PR c++/82461 - constexpr list-initialized member - * constexpr.c (potential_constant_expression_1): Check - TARGET_EXPR_DIRECT_INIT_P. - -2018-01-18 Paolo Carlini - - PR c++/81013 - * decl.c (xref_basetypes): Early return upon error about derived - union. - -2018-01-18 Nathan Sidwell - - PR c++/83160 - * cp-tree.h (mark_use): Declare. - * expr.c (mark_use): Make extern. - * call.c (direct_reference_binding): Set inner conv's - rvaluedness_matches_p, if it is an identity. - (convert_like_real): Mark lvalue or rvalue use for identity as - rvaledness_matches_p demands. - -2018-01-18 Jakub Jelinek - - PR c++/83824 - * parser.c (attr_chainon): New function. - (cp_parser_label_for_labeled_statement, cp_parser_decl_specifier_seq, - cp_parser_namespace_definition, cp_parser_init_declarator, - cp_parser_type_specifier_seq, cp_parser_parameter_declaration, - cp_parser_gnu_attributes_opt): Use it. - (cp_parser_member_declaration, cp_parser_objc_class_ivars, - cp_parser_objc_struct_declaration): Likewise. Don't reset - prefix_attributes if attributes is error_mark_node. - -2018-01-17 Paolo Carlini - - PR c++/78344 - * decl.c (grokdeclarator): Do not append the error_mark_node - due to an erroneous optional attribute-specifier-seq. - -2018-01-17 Jakub Jelinek - - PR c++/83897 - * cp-gimplify.c (cp_maybe_instrument_return): Handle - CLEANUP_POINT_EXPR. - -2018-01-17 Paolo Carlini - - PR c++/81054 - * constexpr.c (ensure_literal_type_for_constexpr_object): Return - error_mark_node when we give an error. - * decl.c (cp_finish_decl): Use the latter. - -2018-01-17 Nathan Sidwell - - PR c++/83287 - * init.c (build_raw_new_expr): Scan list for lookups to keep. - -2018-01-17 David Malcolm - - PR c++/83814 - * expr.c (fold_for_warn): Move from c-common.c, reducing to just - the C++ part. If processing a template, call - fold_non_dependent_expr rather than fully folding. - -2018-01-17 Jason Merrill - - PR c++/81067 - redundant NULL warning. - * call.c (convert_like_real): Restore null_node handling. - -2018-01-17 Jason Merrill - - PR c++/81843 - ICE with variadic member template. - PR c++/72801 - * pt.c (unify_pack_expansion): Don't try to deduce enclosing - template args. - -2018-01-17 David Malcolm - - PR c++/83799 - * pt.c (type_dependent_expression_p): Strip any location wrapper - before testing tree codes. - (selftest::test_type_dependent_expression_p): New function. - (selftest::cp_pt_c_tests): Call it. - -2018-01-17 Nathan Sidwell - - PR c++/83739 - * pt.c (tsubst_expr) : Rebuild a range_for if - this not a final instantiation. - -2018-01-16 Jason Merrill - - PR c++/83714 - ICE checking return in template. - * typeck.c (check_return_expr): Call build_non_dependent_expr. - -2018-01-16 Jakub Jelinek - - PR c++/83817 - * pt.c (tsubst_copy_and_build) : If function - is AGGR_INIT_EXPR rather than CALL_EXPR, set AGGR_INIT_FROM_THUNK_P - instead of CALL_FROM_THUNK_P. - - PR c++/83825 - * name-lookup.c (member_vec_dedup): Return early if len is 0. - (resort_type_member_vec, set_class_bindings, - insert_late_enum_def_bindings): Use vec qsort method instead of - calling qsort directly. - -2018-01-15 Martin Sebor - - PR c++/83588 - * class.c (find_flexarrays): Make a record of multiple flexible array - members. - -2018-01-12 Jason Merrill - - PR c++/83186 - ICE with static_cast of list-initialized temporary. - * typeck.c (build_static_cast): Use build_non_dependent_expr. - -2018-01-12 Nathan Sidwell - - * cp-tree.h (mark_rvalue_use): Add parm name. - * expr.c (mark_lvalue_use, mark_lvalue_use_nonread): Move next to - mark_rvalue_use. - * call.c (convert_like_real): Fix formatting. - -2018-01-11 Jason Merrill - - PR c++/82728 - wrong -Wunused-but-set-variable - PR c++/82799 - PR c++/83690 - * call.c (perform_implicit_conversion_flags): Call mark_rvalue_use. - * decl.c (case_conversion): Likewise. - * semantics.c (finish_static_assert): Call - perform_implicit_conversion_flags. - -2018-01-11 Nathan Sidwell - - * method.c (enum mangling_flags): Delete long-dead enum. - -2018-01-10 Paolo Carlini - - * parser.c (cp_parser_std_attribute_spec): When - token_pair::require_open / require_close return false simply - return error_mark_node, avoid duplicate cp_parser_error about - expected '(' / ')', respectively. - -2018-01-10 David Malcolm - - PR c++/43486 - * call.c (null_ptr_cst_p): Strip location wrappers when - converting from '0' to a pointer type in C++11 onwards. - (conversion_null_warnings): Replace comparison with null_node with - call to null_node_p. - (build_over_call): Likewise. - * cp-gimplify.c (cp_fold): Remove the early bailout when - processing_template_decl. - * cp-lang.c (selftest::run_cp_tests): Call - selftest::cp_pt_c_tests and selftest::cp_tree_c_tests. - * cp-tree.h (cp_expr::maybe_add_location_wrapper): New method. - (selftest::run_cp_tests): Move decl to bottom of file. - (null_node_p): New inline function. - (selftest::cp_pt_c_tests): New decl. - (selftest::cp_tree_c_tests): New decl. - * cvt.c (build_expr_type_conversion): Replace comparison with - null_node with call to null_node_p. - * error.c (args_to_string): Likewise. - * except.c (build_throw): Likewise. - * mangle.c (write_expression): Skip location wrapper nodes. - * parser.c (literal_integer_zerop): New function. - (cp_parser_postfix_expression): Call maybe_add_location_wrapper on - the result for RID_TYPEID. Pass true for new "wrap_locations_p" - param of cp_parser_parenthesized_expression_list. When calling - warn_for_memset, replace integer_zerop calls with - literal_integer_zerop, eliminating the double logical negation - cast to bool. Eliminate the special-casing for CONST_DECL in - favor of the fold_for_warn within warn_for_memset. - (cp_parser_parenthesized_expression_list): Add "wrap_locations_p" - param, defaulting to false. Convert "expr" to a cp_expr, and call - maybe_add_location_wrapper on it when wrap_locations_p is true. - (cp_parser_unary_expression): Call maybe_add_location_wrapper on - the result for RID_ALIGNOF and RID_SIZEOF. - (cp_parser_builtin_offsetof): Likewise. - * pt.c: Include "selftest.h". - (tsubst_copy): Handle location wrappers. - (tsubst_copy_and_build): Likewise. - (build_non_dependent_expr): Likewise. - (selftest::test_build_non_dependent_expr): New function. - (selftest::cp_pt_c_tests): New function. - * tree.c: Include "selftest.h". - (lvalue_kind): Handle VIEW_CONVERT_EXPR location wrapper nodes. - (selftest::test_lvalue_kind): New function. - (selftest::cp_tree_c_tests): New function. - * typeck.c (string_conv_p): Strip any location wrapper from "exp". - (cp_build_binary_op): Replace comparison with null_node with call - to null_node_p. - (build_address): Use location of operand when building address - expression. - -2018-01-10 Marek Polacek - - PR c++/82541 - * call.c (build_conditional_expr_1): Check complain before warning. - * pt.c (tsubst_copy_and_build) : Suppress - -Wduplicated-branches. - -2018-01-10 Jakub Jelinek - - PR c++/81327 - * call.c (maybe_warn_class_memaccess): Add forward declaration. - Change last argument from tree * to const vec *, adjust - args uses and check number of operands too. Don't strip away any - nops. Use maybe_constant_value when looking for INTEGER_CST args. - Deal with src argument not having pointer type. Check - tree_fits_uhwi_p before calling tree_to_uhwi. Remove useless - test. - (build_over_call): Call maybe_warn_class_memaccess here on the - original arguments. - (build_cxx_call): Rather than here on converted arguments. - -2018-01-10 Paolo Carlini - - PR c++/81055 - * init.c (build_vec_init): Avoid building an INIT_EXPR with - error_mark_node as second argument. - -2018-01-09 Jakub Jelinek - - PR c++/83734 - * constexpr.c (cxx_eval_statement_list): Ignore DEBUG_BEGIN_STMTs - in STATEMENT_LIST. Remove unneeded assert. - -2018-01-03 Richard Sandiford - Alan Hayward - David Sherwood - - * constexpr.c (cxx_eval_array_reference): Handle polynomial - VECTOR_CST_NELTS. - (cxx_fold_indirect_ref): Handle polynomial TYPE_VECTOR_SUBPARTS. - * call.c (build_conditional_expr_1): Likewise. - * decl.c (cp_finish_decomp): Likewise. - * mangle.c (write_type): Likewise. - * typeck.c (structural_comptypes): Likewise. - (cp_build_binary_op): Likewise. - * typeck2.c (process_init_constructor_array): Likewise. - -2018-01-03 Jakub Jelinek + PR c++/88554 + * decl.c (finish_function): For -Wreturn-type don't add a return *this; + fixit hint if current_class_ref is NULL. Use a single if instead of + two nested ones. + +2019-01-07 Paolo Carlini + + * decl.c (start_decl): Improve two error_at locations. + (expand_static_init): Likewise. + +2019-01-07 Marek Polacek + + PR c++/88741 - wrong error with initializer-string. + * decl.c (cp_complete_array_type): Strip any location wrappers. + +2019-01-07 Bernd Edlinger + + PR c++/88261 + PR c++/69338 + PR c++/69696 + PR c++/69697 + * cp-tree.h (LOOKUP_ALLOW_FLEXARRAY_INIT): New flag value. + * typeck2.c (digest_init_r): Raise an error for non-static + initialization of a flexible array member. + (process_init_constructor, massage_init_elt, + process_init_constructor_array, process_init_constructor_record, + process_init_constructor_union, process_init_constructor): Add the + flags parameter and pass it thru. + (store_init_value): Pass LOOKUP_ALLOW_FLEXARRAY_INIT parameter to + digest_init_flags for static decls. + +2019-01-07 Jakub Jelinek + + PR c++/85052 + * cp-tree.h (cp_build_vec_convert): Declare. + * parser.c (cp_parser_postfix_expression): Parse + __builtin_convertvector. + * constexpr.c: Include fold-const-call.h. + (cxx_eval_internal_function): Handle IFN_VEC_CONVERT. + (potential_constant_expression_1): Likewise. + * semantics.c (cp_build_vec_convert): New function. + * pt.c (tsubst_copy_and_build): Handle CALL_EXPR to + IFN_VEC_CONVERT. - PR c++/83555 - * typeck.c (build_static_cast_1): For static casts to reference types, - call build_base_path with flag_delete_null_pointer_checks as nonnull - instead of always false. When -fsanitize=null, call - ubsan_maybe_instrument_reference on the NULL reference INTEGER_CST. - * cp-gimplify.c (cp_genericize_r): Don't walk subtrees of UBSAN_NULL - call if the first argument is INTEGER_CST with REFERENCE_TYPE. +2019-01-03 Jakub Jelinek -2018-01-03 Nathan Sidwell + PR c++/88636 + * decl.c (builtin_function_1): Return result of pushdecl_top_level + or pushdecl rather than decl. - PR c++/83667 - * method.c (make_alias_for): Copy DECL_CONTEXT. +2019-01-03 Paolo Carlini -2018-01-03 Marek Polacek + * tree.c (handle_nodiscard_attribute): Improve warning location. - PR c++/83592 - * decl.c (grokdeclarator): Don't warn about MVP in typename context. +2019-01-02 Marek Polacek -2018-01-03 Jakub Jelinek + PR c++/88612 - ICE with -Waddress-of-packed-member. + * call.c (convert_for_arg_passing): Only give warnings with tf_warning. + * typeck.c (convert_for_assignment): Likewise. - PR preprocessor/83602 - * name-lookup.c (lookup_name_fuzzy): Don't use macro_use_before_def - for builtin macros. + PR c++/88631 - CTAD failing for value-initialization. + * typeck2.c (build_functional_cast): Try deducing the template + arguments even if there are no arguments to deduce from. - PR c++/83634 - * cp-gimplify.c (cp_fold) : If the operand folds to - error_mark_node, return error_mark_node. +2019-01-01 Jakub Jelinek Update copyright years. - -2018-01-02 Jakub Jelinek - - PR c++/83556 - * tree.c (replace_placeholders_r): Pass NULL as last argument to - cp_walk_tree instead of d->pset. If non-TREE_CONSTANT and - non-PLACEHOLDER_EXPR tree has been seen already, set *walk_subtrees - to false and return. - (replace_placeholders): Pass NULL instead of &pset as last argument - to cp_walk_tree. - -2018-01-02 Nathan Sidwell - - * constexpr.c (cxx_bind_parameters_in_call): Remove unneeded local - lval var. -Copyright (C) 2018 Free Software Foundation, Inc. +Copyright (C) 2019 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright