re PR c/79153 (-Wimplicit-fallthrough missed warning)
[gcc.git] / gcc / cp / ChangeLog
index 2b6e3b68b3c60876e8b1bc228623f590a36cc121..31b69bf725531e62bae070804c7015c620e37f9b 100644 (file)
@@ -1,3 +1,784 @@
+2017-12-01  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/79153
+       * cp-gimplify.c (genericize_switch_stmt): Emit LABEL_EXPR for the
+       break label into SWITCH_BODY instead of after it and set
+       SWITCH_BREAK_LABEL_P on it.
+       * parser.c (cp_parser_objc_expression): Add FALLTHRU comment to avoid
+       -Wimplicit-fallthrough warning.
+
+2017-11-30  Jason Merrill  <jason@redhat.com>
+
+       PR c++/82219 - bogus -Wignored-qualifiers with template
+       * pt.c (tsubst_copy_and_build) [STATIC_CAST_EXPR]: Suppress
+       -Wignored-qualifiers.
+
+2017-11-29  David Malcolm  <dmalcolm@redhat.com>
+
+       * parser.c (cp_parser_unary_expression): Generate a location for
+       "noexcept".
+       (cp_parser_trait_expr): Generate and return a location_t,
+       converting the return type from tree to cp_expr.
+       (cp_parser_static_assert): Pass location of the condition to
+       finish_static_assert, rather than that of the "static_assert"
+       token, where available.
+
+2017-11-29  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/82293
+       * lambda.c (nonlambda_method_basetype): Don't use LAMBDA_TYPE_P
+       on a null type.
+
+2017-11-29  Jason Merrill  <jason@redhat.com>
+
+       PR c++/82760 - memory corruption with aligned new.
+       * call.c (build_operator_new_call): Update *args if we add the
+       align_arg.
+
+2017-11-28  Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/81275
+       * cp-tree.h (SWITCH_STMT_ALL_CASES_P): Define.
+       (SWITCH_STMT_NO_BREAK_P): Define.
+       (note_break_stmt, note_iteration_stmt_body_start,
+       note_iteration_stmt_body_end): Declare.
+       * decl.c (struct cp_switch): Add has_default_p, break_stmt_seen_p
+       and in_loop_body_p fields.
+       (push_switch): Clear them.
+       (pop_switch): Set SWITCH_STMT_CANNOT_FALLTHRU_P if has_default_p
+       and !break_stmt_seen_p.  Assert in_loop_body_p is false.
+       (note_break_stmt, note_iteration_stmt_body_start,
+       note_iteration_stmt_body_end): New functions.
+       (finish_case_label): Set has_default_p when both low and high
+       are NULL_TREE.
+       * parser.c (cp_parser_iteration_statement): Use
+       note_iteration_stmt_body_start and note_iteration_stmt_body_end
+       around parsing iteration body.
+       * pt.c (tsubst_expr): Likewise.
+       * cp-objcp-common.c (cxx_block_may_fallthru): Return false for
+       SWITCH_STMT which contains no BREAK_STMTs, contains a default:
+       CASE_LABEL_EXPR and where SWITCH_STMT_BODY isn't empty and
+       can't fallthru.
+       * semantics.c (finish_break_stmt): Call note_break_stmt.
+       * cp-gimplify.c (genericize_switch_stmt): Copy SWITCH_STMT_ALL_CASES_P
+       bit to SWITCH_ALL_CASES_P.  Assert that if SWITCH_STMT_NO_BREAK_P then
+       the break label is not TREE_USED.
+
+2017-11-28  Julia Koval  <julia.koval@intel.com>
+            Sebastian Peryt  <sebastian.peryt@intel.com>
+
+       * Make-lang.in (cp/cp-array-notation.o, cp/cp-cilkplus.o): Delete.
+       * call.c (convert_for_arg_passing, build_cxx_call): Remove cilkplus.
+       * constexpr.c (potential_constant_expression_1): Ditto.
+       * cp-array-notation.c: Delete.
+       * cp-cilkplus.c: Ditto.
+       * cp-cilkplus.h: Ditto.
+       * cp-gimplify.c (cp_gimplify_expr, cp_fold_r, cp_genericize): Remove
+       cilkplus condition.
+       * cp-objcp-common.c (ARRAY_NOTATION_REF): Delete.
+       * cp-tree.h (cilkplus_an_triplet_types_ok_p): Delete.
+       * decl.c (grokfndecl, finish_function): Remove cilkplus condition.
+       * error.c (dump_decl, dump_expr): Remove ARRAY_NOTATION_REF condition.
+       * lambda.c (cp-cilkplus.h): Remove.
+       * parser.c (cp_parser_cilk_simd, cp_parser_cilk_for,
+       cp_parser_cilk_simd_vectorlength): Delete.
+       (cp_debug_parser, cp_parser_ctor_initializer_opt_and_function_body,
+       cp_parser_postfix_expression,
+       cp_parser_postfix_open_square_expression,
+       cp_parser_statement, cp_parser_jump_statement,
+       cp_parser_direct_declarator,
+       cp_parser_late_return_type_opt, cp_parser_gnu_attribute_list,
+       cp_parser_omp_clause_name, cp_parser_omp_clause_aligned,
+       cp_parser_omp_clause_linear, cp_parser_omp_all_clauses,
+       cp_parser_omp_flush,
+       cp_parser_omp_for_cond, cp_parser_omp_for_incr,
+       cp_parser_omp_for_loop_init,
+       cp_parser_omp_for_loop,
+       cp_parser_omp_declare_simd): Remove cilkplus support.
+       (CILK_SIMD_FN_CLAUSE_MASK, cp_parser_late_parsing_cilk_simd_fn_info,
+       cp_parser_cilk_grainsize): Remove.
+       (cp_parser_pragma, c_parse_file): Remove cilkplus support.
+       (cp_parser_cilk_simd_vectorlength, cp_parser_cilk_simd_linear,
+       cp_parser_cilk_simd_clause_name, cp_parser_cilk_simd_all_clauses,
+       cp_parser_cilk_simd, cp_parser_cilk_for): Remove.
+       * parser.h (IN_CILK_SIMD_FOR, IN_CILK_SPAWN): Remove.
+       * pt.c (tsubst_attribute, tsubst_expr, tsubst_copy_and_build): Remove
+       cilkplus support.
+       * semantics.c (finish_goto_stmt, begin_while_stmt, finish_do_body,
+       finish_init_stmt, finish_switch_cond, simplify_aggr_init_expr,
+       finish_omp_clauses, finish_omp_clauses, finish_omp_for): Remove
+       cilkplus
+       support.
+       * tree.c (lvalue_kind): Remove ARRAY_NOTATION_REF conditon.
+       * typeck.c (cp_build_array_ref, cp_build_compound_expr,
+       check_return_expr): Remove cilkplus support.
+
+2017-11-28  Jakub Jelinek  <jakub@redhat.com>
+
+       * cp-gimplify.c (genericize_switch_stmt): Build SWITCH_EXPR using
+       build2_loc instead of build3_loc.
+
+2017-11-27  Martin Sebor  <msebor@redhat.com>
+
+       PR c++/83058
+       * init.c (warn_placement_new_too_small): Use offset_int instead of
+       HOST_WIDE_INT.
+
+2017-11-27  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/81888
+       * parser.c (cp_parser_decomposition_declaration): Reject just
+       BRACE_ENCLOSED_INITIALIZER_P initializers with nelts != 1 rather
+       than all such CONSTRUCTORs, and only if is_direct_init is true.
+
+2017-11-27  Jason Merrill  <jason@redhat.com>
+
+       * pt.c (primary_template_specialization_p): Rename from
+       primary_template_instantiation_p.  Don't check
+       DECL_TEMPLATE_INSTANTIATION.
+       * call.c, cp-tree.h, decl2.c: Adjust.
+
+2017-11-27  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/81675
+       * cp-gimplify.c (cp_fold) <case COND_EXPR>: Don't return immediately
+       for VOID_TYPE_P COND_EXPRs, instead fold the operands and if op0 is
+       INTEGER_CST, ensure that both op1 and op2 are non-NULL and fall
+       through into normal folding, otherwise just rebuild x if any op
+       changed.
+
+       * g++.dg/warn/pr81675.C: New test.
+
+2017-11-14  Boris Kolpackov  <boris@codesynthesis.com>
+
+       * Make-lang.in (c++.install-plugin): Install backend import library.
+
+2017-11-23  Jakub Jelinek  <jakub@redhat.com>
+
+       * parser.c (cp_parser_omp_declare): Change return type to bool from
+       void, return true for declare simd.
+       (cp_parser_pragma): Return cp_parser_omp_declare returned value
+       rather than always false.
+
+2017-11-23  Mike Stump  <mikestump@comcast.net>
+           Eric Botcazou  <ebotcazou@adacore.com>
+
+       * pt.c (tsubst_expr) <ANNOTATE_EXPR>: Recurse on 3rd operand.
+       * semantics.c (finish_while_stmt_cond): Pass 3rd operand to
+       ANNOTATE_EXPR.
+       (finish_do_stmt): Likewise.
+       (finish_for_cond): Likewise.
+
+2017-11-22  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/82401
+       * name-lookup.c (member_name_cmp): Return 0 if a == b.
+
+2017-11-22  David Malcolm  <dmalcolm@redhat.com>
+
+       PR c++/62170
+       * error.c (type_to_string): Add leading comment.  Add params
+       "postprocessed", "quote", and "show_color", using them to fix
+       quoting of the "aka" for types involving typedefs.
+       (arg_to_string): Update for new params to type_to_string.
+       (cxx_format_postprocessor::handle): Likewise.
+       (cp_printer): Convert penultimate param from bool to bool *.
+       Update call to type_to_string and calls to
+       defer_phase_2_of_type_diff.
+
+2017-11-22  Marek Polacek  <polacek@redhat.com>
+
+       PR c++/60336
+       PR middle-end/67239
+       PR target/68355
+       * class.c (layout_class_type): Set DECL_PADDING_P on padding.
+       * decl.c (cxx_init_decl_processing): Set TRANSLATION_UNIT_WARN_EMPTY_P.
+       (grokdeclarator): Set DECL_PADDING_P on unnamed bit-fields.
+
+2017-11-21  Martin Liska  <mliska@suse.cz>
+
+       * class.c (finalize_literal_type_property): Add quotes for
+       constexpr keyword.
+       (explain_non_literal_class): Likewise.
+       * constexpr.c (ensure_literal_type_for_constexpr_object): Likewise.
+       (is_valid_constexpr_fn): Likewise.
+       (check_constexpr_ctor_body): Likewise.
+       (register_constexpr_fundef): Likewise.
+       (explain_invalid_constexpr_fn): Likewise.
+       (cxx_eval_builtin_function_call): Likewise.
+       (cxx_eval_call_expression): Likewise.
+       (cxx_eval_loop_expr): Likewise.
+       (potential_constant_expression_1): Likewise.
+       * decl.c (check_previous_goto_1): Likewise.
+       (check_goto): Likewise.
+       (grokfndecl): Likewise.
+       (grokdeclarator): Likewise.
+       * error.c (maybe_print_constexpr_context): Likewise.
+       * method.c (process_subob_fn): Likewise.
+       (defaulted_late_check): Likewise.
+       * parser.c (cp_parser_compound_statement): Likewise.
+
+2017-11-21  Marc Glisse  <marc.glisse@inria.fr>
+
+       * constexpr.c (cxx_eval_constant_expression,
+       potential_constant_expression_1): Handle POINTER_DIFF_EXPR.
+       * cp-gimplify.c (cp_fold): Likewise.
+       * error.c (dump_expr): Likewise.
+       * typeck.c (pointer_diff): Use POINTER_DIFF_EXPR.
+
+2017-11-21  Jakub Jelinek  <jakub@redhat.com>
+
+       P0428R2 - familiar template syntax for generic lambdas
+       * parser.c (cp_parser_lambda_declarator_opt): Don't pedwarn
+       for cxx2a and above, reword pedwarn for C++14/C++17.
+
+2017-11-20  David Malcolm  <dmalcolm@redhat.com>
+
+       PR c/81404
+       * name-lookup.c: Include "c-family/known-headers.h"
+       (lookup_name_fuzzy): Call get_cp_stdlib_header_for_name and
+       potentially return a new suggest_missing_header hint.
+
+2017-11-20  David Malcolm  <dmalcolm@redhat.com>
+
+       PR c++/72786
+       * name-lookup.c (class macro_use_before_def): New class.
+       (lookup_name_fuzzy): Detect macro that were used before being
+       defined, and report them as such.
+
+2017-11-20  Jason Merrill  <jason@redhat.com>
+
+       * decl2.c (constrain_class_visibility): Don't warn about artificial
+       fields.
+
+2017-11-20  Jakub Jelinek  <jakub@redhat.com>
+
+       P0329R4: Designated Initialization
+       * parser.c (cp_parser_initializer_clause): List in comment grammar
+       designated-initializer-list.
+       (cp_parser_initializer_list): Allow .identifier = without pedwarn for
+       C++2A, parse .identifier { ... }.  Improve location_t argument to
+       pedwarn.  Add pedwarn for [cst] = designators.  Diagnose ... in
+       designated initializer list.  Diagnose mixing designated and
+       non-designated initializer clauses for C++2A.  Diagnose duplicated
+       identifiers in designators.
+       * name-lookup.h (search_anon_aggr): New declaration.
+       * name-lookup.c (fields_linear_search): Use search_anon_aggr.
+       (search_anon_aggr): New function.
+       * typeck2.c (process_init_constructor_record): Allow designator
+       to skip over some non-static data members.  Handle anonymous
+       aggregates.  Add diagnostics for designator order not matching
+       member declaration order.
+
+2017-11-20  David Malcolm  <dmalcolm@redhat.com>
+
+       * name-lookup.c: Define INCLUDE_UNIQUE_PTR before including system.h.
+       Include "c-family/name-hint.h"
+       (suggest_alternatives_for): Convert "fuzzy_name" from const char *
+       to name_hint, and rename to "hint".  Pass location to
+       lookup_name_fuzzy.
+       (lookup_name_fuzzy): Convert return type from const char *
+       to name_hint.  Add location_t param.
+       * parser.c: Define INCLUDE_UNIQUE_PTR before including system.h.
+       Include "c-family/name-hint.h"
+       (cp_parser_diagnose_invalid_type_name): Convert
+       "suggestion" from const char * to name_hint, and rename to "hint".
+       Pass location to lookup_name_fuzzy.
+
+2017-11-20  Nathan Sidwell  <nathan@acm.org>
+
+       PR c++/82878
+       PR c++/78495
+       * call.c (build_call_a): Don't set CALL_FROM_THUNK_P for inherited
+       ctor.
+       * cp-gimplify.c (cp_genericize_r): Restore THUNK dereference
+       inhibibition check removed in previous c++/78495 change.
+
+2017-11-20   Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/82781
+       * constexpr.c (cxx_eval_vector_conditional_expression): New function.
+       (cxx_eval_constant_expression) <case VEC_COND_EXPR>: Use it instead
+       of cxx_eval_conditional_expression.
+
+2017-11-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/66618
+       PR c/69960
+       * cp-gimplify.c (c_fully_fold): Add LVAL argument, call
+       cp_fold_maybe_rvalue instead of cp_fold_rvalue and pass it !LVAL.
+
+2017-11-16  Jason Merrill  <jason@redhat.com>
+
+       PR c++/79092 - non-type args of different types are different
+       * tree.c (cp_tree_equal): Check the type of constants.
+       * pt.c (unify) [TEMPLATE_PARM_INDEX]: Handle UNIFY_ALLOW_INTEGER
+       when comparing to previously deduced argument.
+       (maybe_convert_nontype_argument): New.
+       (convert_nontype_argument): Call it.
+       (tsubst_copy_and_build): Handle partial instantiation of
+       IMPLICIT_CONV_EXPR.
+       (unify): Ignore type when deducing from array bound.
+       (dependent_type_p_r): Handle DEFERRED_NOEXCEPT.
+       (value_dependent_expression_p): Any type-dependent expression is
+       value-dependent.  Handle IMPLICIT_CONV_EXPR.
+       * cp-tree.h (IMPLICIT_CONV_EXPR_NONTYPE_ARG): New.
+       * mangle.c (write_template_arg): Strip IMPLICIT_CONV_EXPR.
+
+2017-11-16  Nathan Sidwell  <nathan@acm.org>
+
+       PR c++/82836
+       PR c++/82737
+       * cp-objcp-common.h (LANG_HOOKS_OVERWRITE_DECL_ASSEMBLER_NAME):
+       Override.
+       * cp-tree.h (overwrite_mangling): Declare.
+       * decl2.c (struct mangled_decl_hash): Entries are deletable.
+       (overwrite_mangling): New.
+
+       PR c++/81060
+       * decl.c (xref_tag_1): Push lambda into current scope.
+       * name-lookup.c (do_pushtag): Don't deal with ts_lambda here.
+
+2017-11-15  Nathan Sidwell  <nathan@acm.org>
+
+       PR c++/81574
+       * lambda.c (lambda_capture_field_type): Function references are
+       always catured by reference.
+
+2017-11-15  Martin Liska  <mliska@suse.cz>
+
+       * decl.c (begin_destructor_body): Use cp_build_fold_indirect_ref
+       instead of cp_build_indirect_ref.
+
+2017-11-15  Martin Liska  <mliska@suse.cz>
+
+       * decl.c (begin_destructor_body): In case of VPTR sanitization
+       (with disabled recovery), zero vptr in order to catch virtual calls
+       after lifetime of an object.
+
+2017-11-14  Jason Merrill  <jason@redhat.com>
+
+       Use GTY((cache)) on some hash tables.
+       * decl.c (decomp_type_table): Use tree_cache_map.
+       * init.c (nsdmi_inst): Likewise.
+       * pt.c (defarg_ints): Likewise.
+       * cp-objcp-common.c (cp_get_debug_type): Likewise.
+
+2017-11-13  Jason Merrill  <jason@redhat.com>
+
+       Capture adjustments for P0588R1.
+       * semantics.c (process_outer_var_ref): Capture variables when
+       they are named; complain about non-capture uses when odr-used.
+       * expr.c (mark_use): Rvalue use looks through capture proxy.
+       * constexpr.c (potential_constant_expression_1): Improve error about
+       use of captured variable.
+       * lambda.c (need_generic_capture, dependent_capture_r)
+       (do_dependent_capture, processing_nonlambda_template): Remove.
+       * call.c (build_this): Remove uses of the above.
+       * decl.c (cp_finish_decl): Likewise.
+       * semantics.c (maybe_cleanup_point_expr)
+       (maybe_cleanup_point_expr_void, finish_goto_stmt)
+       (maybe_convert_cond): Likewise.
+       * typeck.c (check_return_expr): Likewise.
+
+       Defer folding of *&.
+       * typeck.c (cp_build_fold_indirect_ref): New.
+       (cp_build_indirect_ref_1): Split out from cp_build_indirect_ref.
+       Add 'fold' parameter.
+       * cp-tree.h: Declare cp_build_fold_indirect_ref.
+       * call.c, class.c, cp-ubsan.c, decl.c, except.c, init.c, lambda.c,
+       parser.c, rtti.c, tree.c, typeck.c, typeck2.c: Use it.
+       * parser.c (do_range_for_auto_deduction): Use RO_UNARY_STAR.
+       (cp_convert_range_for): Likewise.
+       * typeck2.c (build_x_arrow): Use RO_ARROW.
+
+       * cp-ubsan.c (cp_ubsan_check_member_access_r): Fix handling of
+       INDIRECT_REF of ADDR_EXPR.
+
+       PR c++/82360 - ICE with static_cast in template.
+       * call.c (perform_direct_initialization_if_possible): Check
+       processing_template_decl.
+       * typeck.c (build_static_cast_1): Likewise.
+
+2017-11-13  Ville Voutilainen  <ville.voutilainen@gmail.com>
+
+       Remove the null check from placement new in all modes
+       * init.c (build_new_1): Don't do a null check for
+       a namespace-scope non-replaceable placement new
+       in any mode unless -fcheck-new is provided.
+
+2017-11-07 Boris Kolpackov  <boris@codesynthesis.com>
+
+       * Make-lang.in (CP_PLUGIN_HEADERS): Add operators.def since included
+       in cp-tree.h.
+
+2017-11-07  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/82835
+       * cp-gimplify.c (cxx_omp_clause_apply_fn): For methods pass i - 1 to
+       convert_default_arg instead of i.
+
+2017-11-06  Jason Merrill  <jason@redhat.com>
+
+       P0704R1 - fixing const-qualified pointers to members
+       * typeck2.c (build_m_component_ref): Also accept in lower stds with
+       a pedwarn.
+
+2017-11-06  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/65579
+       * decl2.c (finish_static_data_member_decl): If there's an initializer,
+       complete the type and re-apply the quals.
+
+2017-11-06  Martin Liska  <mliska@suse.cz>
+
+       PR middle-end/82404
+       * constexpr.c (cxx_eval_builtin_function_call): Handle
+       __builtin_unreachable call.
+       (get_function_named_in_call): Declare function earlier.
+       (constexpr_fn_retval): Skip __builtin_unreachable.
+       * cp-gimplify.c (cp_ubsan_maybe_instrument_return): Rename to
+       ...
+       (cp_maybe_instrument_return): ... this.
+       (cp_genericize): Call the function unconditionally.
+
+2017-11-03  Nathan Sidwell  <nathan@acm.org>
+
+       PR c++/82710
+       * decl.c (grokdeclarator): Protect MAYBE_CLASS things from paren
+       warning too.
+
+2017-11-02  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/81957
+       * pt.c (make_pack_expansion): Add tsubst_flags_t parameter.
+       (expand_integer_pack, convert_template_argument, coerce_template_parms,
+       gen_elem_of_pack_expansion_instantiation, tsubst_pack_expansion,
+       unify): Adjust calls.
+       * tree.c (cp_build_qualified_type_real): Likewise.
+       * cp-tree.h (make_pack_expansion): Adjust declaration.
+
+2017-11-02  Nathan Sidwell  <nathan@acm.org>
+
+       * cp-tree.h (IDENTIFIER_NEWDEL_OP_P): Restore, adjust.
+       (IDENTIFIER_NEW_OP_P): New.
+       * decl.c (grokdeclarator): Restore IDENTIFIER_NEWDEL_OP_P use.
+       * pt.c (push_template_decl_real): Likewise.
+       * typeck.c (check_return_expr): Use IDENTIFIER_NEW_OP_P.
+
+       PR c++/82710
+       * decl.c (grokdeclarator): Don't warn when parens protect a return
+       type from a qualified name.
+
+2017-11-01  Nathan Sidwell  <nathan@acm.org>
+
+       * cp-tree.h (enum cp_identifier_kind): Delete cik_newdel_op.
+       Renumber and reserve udlit value.
+       (IDENTIFIER_NEWDEL_OP_P): Delete.
+       (IDENTIFIER_OVL_OP_P): New.
+       (IDENTIFIER_ASSIGN_OP_P): Adjust.
+       (IDENTIFIER_CONV_OP_P): Adjust.
+       (IDENTIFIER_OVL_OP_INFO): Adjust.
+       (IDENTIFIER_OVL_OP_FLAGS): New.
+       * decl.c (grokdeclarator): Use IDENTIFIER_OVL_OP_FLAGS.
+       * lex.c (get_identifier_kind_name): Adjust.
+       (init_operators): Don't special case new/delete ops.
+       * mangle.c (write_unqualified_id): Use IDENTIFIER_OVL_OP_P.
+       * pt.c (push_template_decl_real): Use IDENTIFIER_OVL_OP_FLAGS.
+       * typeck.c (check_return_expr): Likewise.
+
+       * cp-tree.h (assign_op_identifier, call_op_identifier): Use
+       compressed code.
+       (struct lang_decl_fn): Use compressed operator code.
+       (DECL_OVERLOADED_OPERATOR_CODE): Replace with ...
+       (DECL_OVERLOADED_OPERATOR_CODE_RAW): ... this.
+       (DECL_OVERLOADED_OPERATOR_CODE_IS): Use it.
+       * decl.c (duplicate_decls): Use DECL_OVERLOADED_OPERATOR_CODE_RAW.
+       (build_library_fn): Likewise.
+       (grok_op_properties): Likewise.
+       * mangle.c (write_unqualified_name): Likewise.
+       * method.c (implicitly_declare_fn): Likewise.
+       * typeck.c (check_return_expr): Use DECL_OVERLOADED_OPERATOR_IS.
+
+       * cp-tree.h (IDENTIFIER_CP_INDEX): Define.
+       (enum ovl_op_flags): Add OVL_OP_FLAG_AMBIARY.
+       (enum ovl_op_code): New.
+       (struct ovl_op_info): Add ovl_op_code field.
+       (ovl_op_info): Size by OVL_OP_MAX.
+       (ovl_op_mapping, ovl_op_alternate): Declare.
+       (OVL_OP_INFO): Adjust for mapping array.
+       (IDENTIFIER_OVL_OP_INFO): New.
+       * decl.c (ambi_op_p, unary_op_p): Delete.
+       (grok_op_properties): Use IDENTIFIER_OVL_OP_INFO and
+       ovl_op_alternate.
+       * lex.c (ovl_op_info): Adjust and static initialize.
+       (ovl_op_mappings, ovl_op_alternate): Define.
+       (init_operators): Iterate over ovl_op_info array and init mappings
+       & alternate arrays.
+       * mangle.c (write_unqualified_id): Use IDENTIFIER_OVL_OP_INFO.
+       * operators.def (DEF_OPERATOR): Remove KIND parm.
+       (DEF_SIMPLE_OPERATOR): Delete.
+       (OPERATOR_TRANSITION): Expand if defined.
+
+2017-10-31  David Malcolm  <dmalcolm@redhat.com>
+
+       * pt.c (listify): Use %< and %> for description of #include.
+
+2017-10-31  David Malcolm  <dmalcolm@redhat.com>
+
+       * class.c (explain_non_literal_class): Use UNKNOWN_LOCATION rather
+       than 0.
+       * name-lookup.c (suggest_alternatives_for): Update for renaming of
+       inform_at_rich_loc.
+       (maybe_suggest_missing_header): Likewise.
+       (suggest_alternative_in_explicit_scope): Likewise.
+       * parser.c (cp_parser_diagnose_invalid_type_name): Likewise for
+       renaming of error_at_rich_loc.
+       (cp_parser_string_literal): Likewise.
+       (cp_parser_nested_name_specifier_opt): Likewise.
+       (cp_parser_cast_expression): Likewise for renaming of
+       warning_at_rich_loc.
+       (cp_parser_decl_specifier_seq): Likewise for renaming of
+       error_at_rich_loc and warning_at_rich_loc.
+       (cp_parser_elaborated_type_specifier): Likewise for renaming of
+       pedwarn_at_rich_loc.
+       (cp_parser_cv_qualifier_seq_opt): Likewise for renaming of
+       error_at_rich_loc.
+       (cp_parser_virt_specifier_seq_opt): Likewise.
+       (cp_parser_class_specifier_1): Likewise.
+       (cp_parser_class_head): Likewise.
+       (cp_parser_member_declaration): Likewise for renaming of
+       pedwarn_at_rich_loc, warning_at_rich_loc, and error_at_rich_loc.
+       (cp_parser_enclosed_template_argument_list): Likewise for renaming
+       of error_at_rich_loc.
+       (set_and_check_decl_spec_loc): Likewise.
+       * pt.c (listify): Likewise.
+       * rtti.c (typeid_ok_p): Likewise.
+       * semantics.c (process_outer_var_ref): Use UNKNOWN_LOCATION rather
+       than 0.
+       * typeck.c (access_failure_info::maybe_suggest_accessor): Update
+       for renaming of inform_at_rich_loc.
+       (finish_class_member_access_expr): Likewise for renaming of
+       error_at_rich_loc.
+
+2017-10-31  Nathan Sidwell  <nathan@acm.org>
+
+       * cp-tree.h (struct operator_name_info_t): Rename to ...
+       (struct ovl_op_info_t): ... here.  Add tree_code field.
+       (operator_name_info, assignment_operator_name_info): Delete.
+       (ovl_op_info): Declare.
+       (OVL_OP_INFO): Adjust.
+       * decl.c (grok_op_properties): Use ovl_op_flags.
+       * lex.c (operator_name_info, assignment_operator_name_info):
+       Delete.
+       (ovl_op_info): Define.
+       (set_operator_ident): Adjust.
+       (init_operators): Set tree_code.
+       * mangle.c (write_unqualified_id): Adjust operator array scan.
+
+       * lex.c (init_operators): Allow NULL operator name.  Don't add
+       special cases.
+       * operators.def: Use NULL for mangling only operators.  Move to
+       after regular operators but move assignment operators last.
+
+       * cp-tree.h (enum ovl_op_flags): New.
+       (struct operator_name_info_t): Rename arity to flags.
+       * lex.c (set_operator_ident): New.
+       (init_operators): Use it.  Adjust for flags.
+       * mangle.c (write_unqualified_id): Adjust for flags.
+       * operators.def: Replace arity with flags.
+
+       * cp-tree.h (ovl_op_identifier): New.
+       (assign_op_identifier, call_op_identifier): Adjust.
+       (cp_operator_id, cp_assignment_operator_ide): Delete.
+       (SET_OVERLOADED_OPERATOR_CODE): Delete.
+       (OVL_OP_INFO): New.
+       * call.c (op_error): Use OVL_OP_INFO.
+       (build_conditional_expr_1): Use ovl_op_identifier.
+       (build_new_op_1): Use OVL_OP_INFO & ovl_op_identifier.
+       (build_op_delete_call): Likewise.
+       * class.c (type_requires_array_cookie): Use ovl_op_identifier.
+       * decl.c (duplicate_decls): Directly copy operator code.
+       (builtin_function_1): Do not set operator code.
+       (build_library_fn): Directly set operator code.
+       (push_cp_library_fn): Use ovl_op_identifier.
+       (grok_op_properties): Directly set operator code.
+       * decl2.c (maybe_warn_sized_delete): Use ovl_op_identifier.
+       * error.c (dump_expr): Use OVL_OP_INFO.
+       (op_to_string): Add assop arg. Use OVL_OP_INFO.
+       (assop_to_string): Delete.
+       (args_to_string): Adjust.
+       * init.c (build_new_1): Use ovl_op_identifier.
+       * mangle.c (write_unqualified_name): Use OVL_OP_INFO.
+       (write_expression): Likewise.
+       * method.c (synthesized_method_walk): Use ovl_op_identifier.
+       (implicitly_declare_fn): Use assign_op_identifier. Directly set
+       operator code.
+       * name-lookup.c (get_class_binding): Use assign_op_identifier.
+       * parser.c (cp_parser_operator): Use ovl_op_identifier.
+       (cp_parser_omp_clause_reduction): Likewise.
+       * semantics.c (omp_reduction_id): Likewise.
+       * typeck.c (cxx_sizeof_or_alignof_type): Use OVL_OP_INFO.
+
+       * cp-tree.h (assign_op_identifier, call_op_identifier): Define.
+       (LAMBDA_FUNCTION_P): Use DECL_OVERLOADED_OPERATOR_IS.
+       (DECL_OVERLOADED_OPERATOR_P): Just retuurn true/false.
+       (DECL_OVERLOADED_OPERATOR_CODE, DECL_OVERLOADED_OPERATOR_IS): Define.
+       * call.c (add_function_candidate): Use
+       DECL_OVERLOADED_OPERATOR_IS.
+       (build_op_call_1): Use call_op_identifier &
+       DECL_OVERLOADED_OPERATOR_IS.
+       (build_over_call): Likewise.
+       (has_trivial_copy_assign_p): Use assign_op_identifier.
+       (build_special_member_call): Likewise.
+       * class.c (dfs_declare_virt_assop_and_dtor): Likewise.
+       (vbase_has_user_provided_move_assign,
+       classtype_has_move_assign_or_move_ctor_p): Likewise.
+       * decl.c (duplicate_decls): Use DECL_OVERLOADED_OPERATOR_CODE.
+       (grok_special_member_properties): Use assign_op_identifier.
+       (start_preparsed_function): Use DECL_OVERLOADED_OPERATOR_IS.
+       * decl2.c (mark_used): Use DECL_CONV_FN_P.
+       * dump.c (dump_access): Delete prototype.
+       (dump_op): Delete.
+       (cp_dump_tree): Don't call it.
+       * lambda.c (lambda_function): Use call_op_identifier.
+       (maybe_add_lambda_conv_op): Not an overloaded operator.  Remove
+       unneeded braces.
+       * mangle.c (write_unqualified_name): Use DECL_OVERLOADED_OPERTOR_CODE.
+       * method.c (do_build_copy_assign): Use assign_op_identifier.
+       (synthesize_method): Use DECL_OVERLOADED_OPERATOR_IS.
+       (get_copy_assign): Use assign_op_identifier.
+       (synthesized_method_walk): Likewise.
+       (defaultable_fn_check): Use DECL_OVERLOADED_OPERATOR_IS.
+       * parser.c (cp_parser_lambda_declarator_opt): Use
+       call_op_identifier.
+       * semanitics.c (classtype_has_nothrow_assign_or_copy_p): Use
+       assign_op_identifier.
+       * tree.c (special_function_p):  Use DECL_OVERLOADED_OPERATOR_IS.
+       * typeck.c (check_return_expr): Use DECL_OVERLOADED_OPERATOR_CODE.
+       (check_return_expr): Use assign_op_identifier.
+
+2017-10-30  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/82085
+       * pt.c (tsubst_copy_and_build, [INDIRECT_REF]): For a REFERENCE_REF_P,
+       unconditionally call convert_from_reference.
+
+2017-10-30  Nathan Sidwell  <nathan@acm.org>
+
+       * call.c (build_op_call_1): Test for FUNCTION_DECL in same manner
+       as a few lines earlier.
+       * cp-tree.h (PACK_EXPANSION_PATTERN): Fix white space.
+       * decl.c (grokfndecl): Fix indentation.
+       (compute_array_index_type): Use processing_template_decl_sentinel.
+       (grok_op_properties): Move warnings to end.  Reorder other checks
+       to group similar entities.  Tweak diagnostics.
+       * lex.c (unqualified_name_lookup_error): No need to check name is
+       not ERROR_MARK operator.
+       * parser.c (cp_parser_operator): Select operator code before
+       looking it up.
+       * typeck.c (check_return_expr): Fix indentation and line wrapping.
+
+2017-10-27  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * pt.c (invalid_nontype_parm_type_p): Return a bool instead of an int.
+
+2017-10-26  Nathan Sidwell  <nathan@acm.org>
+
+       * decl.c (sort_labels): Restore function.
+       (pop_labels): Sort labels
+       (identify_goto): Add translation markup.
+
+2017-10-25  Nathan Sidwell  <nathan@acm.org>
+
+       Kill IDENTIFIER_LABEL_VALUE.
+       * cp-tree.h (lang_identifier): Delete label_value slot.
+       (IDENTIFIER_LABEL_VALUE, SET_IDENTIFIER_LABEL_VALUE): Delete.
+       (struct named_label_hasher): Rename to ...
+       (struct named_label_hash): ... here.  Reimplement.
+       (struct language_function): Adjust x_named_labels.
+       * name-lookup.h (struct cp_label_binding): Delete.
+       (struct cp_binding_level): Delete shadowed_labels slot.
+       * decl.c (struct named_label_entry): Add name and outer slots.
+       (pop_label): Rename to ...
+       (check_label_used): ... here.  Don't pop.
+       (note_label, sort_labels): Delete.
+       (pop_labels, pop_local_label): Reimplement.
+       (poplevel): Pop local labels as any other decl. Remove
+       shadowed_labels handling.
+       (named_label_hash::hash, named_label_hash::equal): New.
+       (make_label_decl): Absorb into ...
+       (lookup_label_1): ... here.  Add making_local_p arg, reimplement.
+       (lookup_label, declare_local_label): Adjust.
+       (check_goto, define_label): Adjust.
+       * lex.c (make_conv_op_name): Don't clear IDENTIFIER_LABEL_VALUE.
+       * ptree.c (cxx_print_identifier): Don't print identifier binding.
+
+       * decl.c (identifier_goto): Reduce duplication.
+       (check_previous_goto_1): Likewise.
+       (check_goto): Move var decls to initialization.
+       (check_omp_return, define_label_1, define_label): Likewise.
+
+2017-10-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR libstdc++/81706
+       * decl.c (duplicate_decls): Copy "omp declare simd" attributes from
+       newdecl to corresponding __builtin_ if any.
+
+2017-10-24  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/82466
+       * decl.c (duplicate_decls): Warn for built-in functions declared as
+       non-function, use OPT_Wbuiltin_declaration_mismatch.
+
+       * decl.c (duplicate_decls): Avoid redundant '+' in warning_at.
+
+2017-10-24  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/80991
+       * pt.c (value_dependent_expression_p, [TRAIT_EXPR]): Handle
+       a TREE_LIST as TRAIT_EXPR_TYPE2.
+
+2017-10-24  Mukesh Kapoor  <mukesh.kapoor@oracle.com>
+           Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/82307
+       * cvt.c (type_promotes_to): Implement C++17, 7.6/4, about unscoped
+       enumeration type whose underlying type is fixed.
+
+2017-10-23  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/80449
+       * semantics.c (finish_compound_literal): Check do_auto_deduction
+       return value for error_mark_node.
+
+2017-10-23  Jason Merrill  <jason@redhat.com>
+
+       PR c++/77369 - wrong noexcept handling in C++14 and below
+       * tree.c (strip_typedefs): Canonicalize TYPE_RAISES_EXCEPTIONS.
+
+2017-10-20  Nathan Sidwell  <nathan@acm.org>
+
+       * class.c (layout_class_type): Cleanup as-base creation, determine
+       mode here.
+       (finish_struct_1): ... not here.
+
+2017-10-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/82600
+       * typeck.c (check_return_expr): Don't call
+       maybe_warn_about_returning_address_of_local in templates.
+
+2017-10-17  Nathan Sidwell  <nathan@acm.org>
+
+       PR c++/82560
+       * call.c (build_over_call): Don't pass tf_no_cleanup to nested
+       calls.
+
+       PR middle-end/82546
+       * cp-objcp-common.c (cp_tree_size): Reformat.  Adjust returns size
+       of TYPE nodes.
+
 2017-10-13  Jason Merrill  <jason@redhat.com>
 
        PR c++/82357 - bit-field in template