view gcc/cp/ChangeLog-2015 @ 16:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
line wrap: on
line source

2015-12-24  Jason Merrill  <>

	PR c++/69005
	* call.c (add_template_candidate_real): Don't try to deduce X(X).

2015-12-22  Jason Merrill  <>

	PR c++/66921
	* decl.c (cp_complete_array_type): Allow an initializer that
	already has array type.

	PR c++/67257
	* parser.c (cp_parser_single_declaration): Reject a class template
	that also declares a variable.

	PR c++/67339
	* parser.c (cp_parser_elaborated_type_specifier): Use CLASS_TYPE_P
	rather than check for RECORD_TYPE.

2015-12-22  Patrick Palka  <>

	* pt.c (make_pack_expansion): Make sure to initialize

2015-12-21  David Malcolm  <>

	* typeck.c (cp_build_binary_op): Update for change in signature
	of build_binary_op.  Use error_at to replace an implicit use
	of input_location with param "location" in "invalid operands"
	(cp_build_binary_op): Replace an error with an error_at, using
	"location", rather than implicitly using input_location.

2015-12-20  Jason Merrill  <>

	PR c++/67411
	* decl2.c (decl_maybe_constant_var_p): Use DECL_HAS_VALUE_EXPR_P.

	PR c++/67411
	* lambda.c (generic_lambda_fn_p): Split out from...
	* semantics.c (process_outer_var_ref): Don't defer maybe-constant
	variables in a generic lambda.
	* pt.c (instantiate_non_dependent_or_null): New.
	* init.c (constant_value_1): Use it.
	* cp-tree.h: Declare it and generic_lambda_fn_p.

	PR c++/67411
	* decl2.c (decl_maybe_constant_var_p): A proxy isn't constant.

2015-12-18  Patrick Palka  <>

	PR c++/68978
	* tree.c (lvalue_kind) [MODOP_EXPR]: New case.

2015-12-18  Paolo Carlini  <>

	PR c++/67592
	* decl.c (grokdeclarator): Reject constexpr virtual member functions;
	in error messages, prefer %<virtual%> and %<constexpr%> to virtual
	and constexpr, respectively.

2015-12-18  Patrick Palka  <>

	PR c++/68831
	* init.c (build_delete): Use a warning sentinel to disable
	-Waddress warnings when building the conditional that tests
	if the operand is NULL.

2015-12-17  Jason Merrill  <>

	PR c++/67550
	* init.c (constant_value_1): Don't return a CONSTRUCTOR missing
	non-constant elements.

	PR c++/67576
	PR c++/25466
	* rtti.c (build_typeid): Use save_expr, not stabilize_reference.

2015-12-16  Patrick Palka  <>

	PR c++/16333
	PR c++/41426
	PR c++/59879
	PR c++/66895
	* typeck.c (convert_for_initialization): Don't perform an early
	decaying conversion if converting to a class type.

2015-12-16  Patrick Palka  <>

	* tree.c (cp_tree_operand_length): Define in terms of

2015-12-16  Martin Sebor  <>

	PR objc++/68932
	* decl.c (grokdeclarator): Avoid assuming ctype is non-null when
	checking the validity of a flexible array member.

2015-12-16  Paolo Carlini  <>

	* pt.c (comp_template_args): Remove.
	(comp_template_args_with_info): Rename to comp_template_args;
	not static.
	(add_pending_template): Adjust call.
	* cp-tree.h (comp_template_args): Add default arguments.

2015-12-16  Jason Merrill  <>

	PR c++/68309
	* pt.c (instantiate_decl): Revert earlier change.

	PR c++/63628
	* pt.c (tsubst_pack_expansion): Also make dummy decls if
	retrieve_local_specialization fails.

2015-12-16  David Malcolm  <>

	* parser.c (cp_lexer_peek_conflict_marker): New function.
	(cp_parser_error): Detect conflict markers and report them as

2015-12-15  Martin Sebor  <>

	PR c++/42121
	PR c++/68478
	PR c++/68613
	PR c++/68689
	PR c++/68710
	* class.c (walk_subobject_offsets): Avoid assuming type domain
	is non-null or has an upper bound.
	(layout_class_type): Include type size in error message.
	(flexmems_t): New type.
	(field_nonempty_p, find_flexarrays, diagnose_flexarrays)
	(check_flexarrays): New	functions.
	(finish_struct_1): Call check_flexarrays.
	* decl.c (compute_array_index_type): Distinguish flexible array
	members from zero-length arrays.
	(grokdeclarator): Reject flexible array members in unions.  Avoid
	rejecting members of incomplete types that are flexible array members.
	* error.c (dump_type_suffix): Handle flexible array members with null
	upper bound.
	* init.c (perform_member_init): Same.
	* pt.c (instantiate_class_template_1): Allow flexible array members.
	(tsubst): Handle flexible array members with null upper bound.
	* typeck2.c (digest_init_r): Warn for initialization of flexible
	array members.
	(process_init_constructor_record): Handle flexible array members.

2015-12-15  Patrick Palka  <>

	PR c++/21802
	PR c++/53223
	* cp-tree.h (cp_tree_code_length): Declare.
	(build_min_non_dep_op_overload): Declare.
	* tree.c (cp_tree_code_length): Define.
	(build_min_non_dep_op_overload): Define.
	(build_win_non_dep_call_vec): Copy the KOENIG_LOOKUP_P flag.
	* typeck.c (build_x_indirect_ref): Use
	build_min_non_dep_op_overload when the given expression
	has been resolved to an operator overload.
	(build_x_binary_op): Likewise.
	(build_x_array_ref): Likewise.
	(build_x_unary_op): Likewise.
	(build_x_compound_expr): Likewise.
	(build_x_modify_expr): Likewise.
	* decl2.c (grok_array_decl): Likewise.
	* call.c (build_new_op_1): If during template processing we
	chose an operator overload that is a hidden friend function, set
	the call's KOENIG_LOOKUP_P flag to 1.

2015-12-14  Jason Merrill  <>

	PR c++/68309
	* pt.c (instantiate_decl): Copy local_specializations for nested

2015-12-09  Paolo Carlini  <>

	PR c++/60218
	* semantics.c (calculate_bases_helper): Don't call dfs_walk_all
	when TYPE_BINFO (type) is null.
	(calculate_bases): Handle gracefully a null vector->length ().

2015-12-08  Martin Sebor  <>

	PR c++/68711
	* typeck.c (build_class_member_access_expr): Strip NOPs before
        testing a potentially null operand for equality to zero.

2015-12-07  Jakub Jelinek  <>

	PR c++/68760
	* error.c (dump_global_iord): Use DECL_SOURCE_FILE (t)
	instead of LOCATION_FILE (input_location).

2015-12-07  Ryan Burn  <>

	PR c++/68683
	* (satisfy_argument_deduction_constraint): Set

2015-12-07  Jason Merrill  <>

	PR c++/68464
	* cp-gimplify.c (cp_fold): Don't assume X has TREE_TYPE.
	(cp_genericize): Don't do cp_fold_r here.
	(cp_fold_function): New.
	* cp-tree.h: Declare it.
	* decl.c (finish_function): Call it and the pre-genericize plugin
	before NRV processing.

	PR c++/68170
	* pt.c (maybe_new_partial_specialization): The injected-class-name
	is not a new partial specialization.

	* (check-c++1z, check-c++-all): Use GXX_TESTSUITE_STDS.

2015-12-06  Jason Merrill  <>

	* parser.c (struct tentative_firewall): New.
	(cp_parser_template_id, cp_parser_decltype_expr): Use it.

	* parser.h (struct cp_token): Tell GTY that CPP_DECLTYPE uses
	* parser.c (cp_parser_decltype): Use tree_check_value.
	(saved_checks_value): New.
	(cp_parser_nested_name_specifier_opt): Use it.
	(cp_parser_template_id): Use it.
	(cp_parser_simple_type_specifier): Use it.
	(cp_parser_pre_parsed_nested_name_specifier): Use it.

	* semantics.c (finish_qualified_id_expr): Handle

	* parser.c (cp_parser_template_argument): Handle references in
	C++1z mode.
	* constexpr.c (potential_constant_expression_1): Don't error about
	TREE_THIS_VOLATILE on declarations.
	[COMPONENT_REF]: Don't consider the object if we're dealing with
	an overloaded function.

	* (strictly_subsumes): New.
	* cp-tree.h: Declare it.
	* pt.c (process_partial_specialization): Use it instead of
	(maybe_new_partial_specialization): Do compare null constraints.
	* search.c (lookup_member): Handle currently_open_class returning null.

	PR c++/68597, fix auto9.C and auto-neg1.C with -std=c++1z.
	* decl.c (check_tag_decl): Use ds_type_spec in auto diagnostic.
	* typeck.c (check_return_expr): Check for inconsistent deduction.
	* parser.c (class type_id_in_expr_sentinel): New.
	(cp_parser_primary_expression) [RID_VA_ARG]: Use it.
	(cp_parser_new_expression): Use it.
	(cp_parser_trait_expr): Use it.
	(cp_parser_type_id_1): Complain about auto if in_type_id_in_expr_p.
	(cp_parser_default_type_template_argument): Check for auto.
	(cp_parser_type_id_list): Likewise.
	(cp_parser_simple_type_specifier): Allow auto parms if flag_concepts.
	* pt.c (do_auto_deduction): Handle erroneous type.

2015-12-04  Jason Merrill  <>

	PR c++/68645
	* parser.c (cp_parser_direct_declarator)
	(cp_parser_late_return_type_opt): Put Cilk+ attributes on
	declarator->attributes, not std_attributes.

2015-12-04  David Malcolm  <>

	* cp-tree.h (class cp_expr): New class.
	(finish_parenthesized_expr): Convert return type and param to
	(perform_koenig_lookup): Convert return type and param from tree
	to cp_expr.
	(finish_increment_expr): Likewise.
	(finish_unary_op_expr): Likewise.
	(finish_id_expression): Likewise for return type.
	(build_class_member_access_expr): Likewise for param.
	(finish_class_member_access_expr): Likewise.
	(build_x_unary_op): Likewise.
	(build_c_cast): New decl.
	(build_x_modify_expr): Convert return type from tree to cp_expr.
	* cvt.c (cp_convert_and_check): When warning about conversions,
	attempt to use the location of "expr" if available, otherwise
	falling back to the old behavior of using input_location.
	* name-lookup.c (lookup_arg_dependent_1): Convert return type from
	tree to cp_expr.
	(lookup_arg_dependent): Likewise; also for local "ret".
	* name-lookup.h (lookup_arg_dependent): Likewise for return type.
	* parser.c (cp_lexer_previous_token): Skip past purged tokens.
	(struct cp_parser_expression_stack_entry): Convert field "lhs" to
	(cp_parser_identifier): Likewise for return type.  Use cp_expr
	ctor to preserve the token's location.
	(cp_parser_string_literal): Likewise, building up a meaningful
	location for the case where a compound string literal is built by
	(cp_parser_userdef_char_literal): Likewise for return type.
	(cp_parser_userdef_numeric_literal): Likewise.
	(cp_parser_statement_expr): Convert return type to cp_expr.
	Generate a suitable location for the expr and return it via the
	cp_expr ctor.
	(cp_parser_fold_expression): Convert return type to cp_expr.
	(cp_parser_primary_expression): Likewise, and for locals "expr",
	"lam", "id_expression", "decl".
	Use cp_expr ctor when parsing literals, to preserve the spelling
	location of the token.  Preserve the locations of parentheses.
	Preserve location when calling objc_lookup_ivar.
	Preserve the location for "this" tokens.  Generate suitable
	locations for "__builtin_va_arg" constructs and for
	Objective C 2.0 dot-syntax.  Set the location for the result of
	(cp_parser_primary_expression): Convert return type from tree to
	(cp_parser_id_expression): Likewise.
	(cp_parser_unqualified_id): Likewise.  Also for local "id".
	(cp_parser_postfix_expression): Likewise, also for local
	"postfix_expression".  Generate suitable locations for
	C++-style casts, "_Cilk_spawn" constructs.  Convert local
	"initializer" to cp_expr and use it to preserve the location of
	compound literals.  Capture the location of the closing
	parenthesis of a call site via
	cp_parser_parenthesized_expression_list, and use it to build
	a source range for a call.  Use cp_expr in ternary expression.
	(cp_parser_postfix_dot_deref_expression): Convert param from tree to
	cp_expr.  Generate and set a location.
	(cp_parser_parenthesized_expression_list): Add "close_paren_loc"
	out-param, and write back to it.
	(cp_parser_unary_expression): Convert return type from tree to
	cp_expr.  Also for locals "cast_expression" and "expression".
	Generate and use suitable locations for addresses of
	labels and for cast expressions.  Call cp_expr::set_location where
	necessary.  Preserve the locations of negated numeric literals.
	(cp_parser_new_expression): Generate meaningful locations/ranges.
	(cp_parser_cast_expression): Convert return type from tree to
	cp_expr; also for local "expr".  Use the paren location to generate a
	meaningful range for the expression.
	(cp_parser_binary_expression): Convert return type from tree to
	cp_expr; also for local "rhs".  Generate a meaningful location
	for the expression, and use it.  Replace call to
	protected_set_expr_location by converting a build2 to a build2_loc
	and using the location in the call to build_x_binary_op, adding a
	cp_expr::set_location to the latter case.
	(cp_parser_question_colon_clause): Convert param from tree to
	cp_expr; also for local "assignment_expr".  Set the spelling range
	of the expression.
	(cp_parser_assignment_expression): Likewise for return type and
	locals "expr" and "rhs".  Build a meaningful spelling range for
	the expression.  Remove saving of input_location in favor of a
	call to cp_expr::set_location.
	(cp_parser_expression): Convert return type and locals
	"expression" and "assignment_expression" to cp_expr.  Build a
	meaningful spelling range for assignment expressions.
	(cp_parser_constant_expression): Likewise for return type and
	local "expression".
	(cp_parser_builtin_offsetof): Convert return type and local "expr"
	to cp_expr.  Generate suitable locations.
	(cp_parser_lambda_expression): Convert return return type to
	(cp_parser_operator_function_id): Likewise.
	(cp_parser_operator): Likewise.  Generate a meaningful range,
	using cp_expr's ctor to return it.
	(cp_parser_template_id): When converting a token to
	CPP_TEMPLATE_ID, update the location.
	(cp_parser_initializer_clause): Convert return type and local
	"initializer" to cp_expr.
	(cp_parser_braced_list): Likewise for return type.  Generate
	suitable locations.
	(cp_parser_lookup_name): Likewise for return type.  Use cp_expr's
	ctor to preserve the location_t of the name.
	(cp_parser_simple_cast_expression): Likewise for return type.
	(cp_parser_functional_cast): Convert return type and local "cast"
	to cp_expr.  Generate suitable locations.
	(cp_parser_objc_expression): Convert return type to cp_expr.k  Generate
	(cp_parser_objc_message_expression): Generate suitable locations.
	(cp_parser_objc_encode_expression): Convert return type to
	cp_expr.  Generate suitable locations.
	(cp_parser_objc_protocol_expression): Generate suitable locations.
	(cp_parser_objc_selector_expression): Generate suitable locations.
	(cp_parser_omp_for_cond): Attempt to use the location
	of "cond" for the binary op.
	(cp_parser_transaction_expression): Issue the tm-not-enabled error
	at the location of the __transaction_foo token, rather than at
	* semantics.c (finish_parenthesized_expr): Convert return type and
	param to cp_expr.  Preserve location.
	(perform_koenig_lookup): Likewise for return type
	and param.
	(finish_increment_expr): Likewise.  Generate suitable locations.
	(finish_unary_op_expr): Likewise for return type and local "result".
	Generate suitable locations.
	(finish_id_expression): Convert return type to cp_expr and use
	cp_expr ctor to preserve location information.
	* typeck.c (build_class_member_access_expr): Convert param to
	(finish_class_member_access_expr): Likewise.
	(cp_build_binary_op): Convert a build2 to a build2_loc.
	(build_x_unary_op): Convert param from tree to cp_expr.
	(build_nop): Preserve the location of EXPR.
	(build_c_cast): Provide an overloaded variant that takes a cp_expr
	and returns a cp_expr.
	(build_x_modify_expr): Convert return type from tree to cp_expr.

2015-12-03  Cesar Philippidis  <>

	* parser.c (cp_ensure_no_oacc_routine): Update error message.
	(cp_parser_oacc_routine): Likewise.
	(cp_parser_late_parsing_oacc_routine): Likewise.  Update comment
	describing this function.
	(cp_finalize_oacc_routine): Update error message.

2015-12-02  Jason Merrill  <>

	* (check-c++1z, check-c++-all): New.

2015-12-02  Markus Trippelsdorf  <>

	PR c++/67337
	* mangle.c (write_template_prefix): Guard against context==NULL.

2015-12-02  Jason Merrill  <>

	* call.c (build_new_op_1): Don't fold arguments to
	warn_logical_operator or maybe_warn_bool_compare.

	* cp-gimplify.c (cp_fold_maybe_rvalue, cp_fold_rvalue): New.
	(c_fully_fold): Use cp_fold_rvalue.
	(cp_fold): Use them for rvalue operands.

	* cp-gimplify.c (c_fully_fold): Define.

	* cp-gimplify.c (cp_fold): Use fold_build*.

2015-12-02  Joseph Myers  <>

	PR c/68162
	* tree.c (c_build_qualified_type): Add extra arguments.

2015-12-02  Eric Botcazou  <>

	PR c++/68290
	* (make_constrained_auto): Move to...
	* pt.c (make_auto_1): Add set_canonical parameter and set
	TYPE_CANONICAL on the type only if it is true.
	(make_decltype_auto): Adjust call to make_auto_1.
	(make_auto): Likewise.
	(splice_late_return_type): Likewise.
	(make_constrained_auto):  Call make_auto_1 instead of
	make_auto and pass false.  Set TYPE_CANONICAL directly.

2015-12-02  Thomas Schwinge  <>

	* parser.c (cp_parser_omp_clause_name)
	(cp_parser_oacc_all_clauses): Alphabetical sorting.
	* pt.c (tsubst_omp_clauses): Handle OMP_CLAUSE_USE_DEVICE.

2015-12-02  Andreas Arnez  <>

	PR gcov-profile/68603
	* cp-gimplify.c (genericize_cp_loop): For the back-jump's location
	use the start of the loop body only if the loop is unconditional.

2015-11-26  Andreas Arnez  <>

	* cp-gimplify.c (genericize_cp_loop): Change LOOP_EXPR's location
	to start of loop body instead of start of loop.

2015-12-01  Julian Brown  <>
	    Cesar Philippidis  <>
	    James Norris  <>

	* cp-tree.h (finish_oacc_host_data): Add prototype.
	* parser.c (cp_parser_omp_clause_name): Add use_device support.
	(cp_parser_oacc_all_clauses): Add use_device support.
	(cp_parser_oacc_host_data): New function.
	(cp_parser_omp_construct): Add host_data support.
	(cp_parser_pragma): Add host_data support.
	* semantics.c (finish_omp_clauses): Add use_device support.
	(finish_oacc_host_data): New function.

2015-11-27  Martin Liska  <>

	PR c++/68312
	* cp-array-notation.c (expand_sec_reduce_builtin):
	(create_array_refs): Replace argument with const reference.
	(expand_an_in_modify_expr): Likewise.
	(cp_expand_cond_array_notations): Likewise.
	(expand_unary_array_notation_exprs): Likewise.

2015-11-27  Jakub Jelinek  <>

	PR c/63326
	* parser.c (cp_parser_statement): Clear in_compound after labels.

2015-11-27  Martin Liska  <>

	* parser.c (cp_parser_late_parsing_cilk_simd_fn_info):
	Release tokens.

2015-11-26  Andreas Arnez  <>

	* cp-gimplify.c (genericize_cp_loop): Change LOOP_EXPR's location
	to start of loop body instead of start of loop.

2015-11-26  Jakub Jelinek  <>

	PR c++/68508
	* cp-tree.h (cp_ubsan_maybe_instrument_downcast): Add INTYPE argument.
	* cp-ubsan.c (cp_ubsan_maybe_instrument_downcast): Likewise.  Use
	it instead of or in addition to TREE_TYPE (op).  Use
	is_properly_derived_from, return NULL_TREE if TREE_TYPE (intype) and
	TREE_TYPE (type) are the same type minus qualifiers.
	* typeck.c (build_static_cast_1): Adjust callers.

2015-11-25  Martin Sebor  <>

	PR c++/67876
	* pt.c (convert_template_argument): Make sure number of tree
	operands is greater than zero before attempting to extract one.

2015-11-25  Ryan Burn  <>

	PR c++/68434
	* pt.c (tsubst): Set PLACEHOLDER_TYPE_CONSTRAINTS before
	calling canonical_type_parameter.

2015-11-25  Jason Merrill  <>

	* lambda.c (maybe_add_lambda_conv_op): Only set
	no_sanitize_undefined if SANITIZE_NULL.

	PR c++/67941
	* lambda.c (maybe_add_lambda_conv_op): Mark _FUN as

	* cp-ubsan.c (cp_ubsan_instrument_vptr_p): Use

2015-11-25  Markus Trippelsdorf  <>
	    Paolo Carlini  <>

	PR c++/68087
	* constexpr.c (cxx_eval_array_reference): Use tree_fits_shwi_p before
	tree_to_shwi to avoid ICEs.

2015-11-24  Ilya Verbin  <>

	* parser.c (cp_parser_oacc_declare): Replace "ifdef ENABLE_OFFLOADING"

2015-11-23  Igor Zamyatin  <>

	PR c++/68001
	* cp-gimplify.c (cp_gimplify_expr): Stop the process if see an error.

2015-11-20  Jakub Jelinek  <>

	PR c++/67354
	* cp-tree.h (defer_mangling_aliases): Declare.
	(generate_mangling_aliases): New prototype.
	* decl2.c (defer_mangling_aliases): New variable.
	(note_mangling_alias): Use !defer_mangling_aliases
	instead of at_eof.
	(generate_mangling_aliases): No longer static. Clear
	* optimize.c (maybe_thunk_body): Defer emitting mangling aliases
	if !defer_mangling_aliases until the fns are put into the same
	comdat group.

2015-11-19  David Malcolm  <>

	* cp-tree.h (lookup_member_fuzzy): New decl.
	* search.c: Include spellcheck.h.
	(class lookup_field_fuzzy_info): New class.
	(lookup_field_fuzzy_info::fuzzy_lookup_fnfields): New.
	(lookup_field_fuzzy_info::fuzzy_lookup_field): New.
	(lookup_field_fuzzy_r): New.
	(lookup_member_fuzzy): New.
	* typeck.c (finish_class_member_access_expr): When issuing
	a "has no member named" error, call lookup_member_fuzzy, and
	offer any result as a suggestion.

2015-11-19  Torvald Riegel  <>

	* except.c (do_free_exception): Use transactional wrapper.

2015-11-19  Jason Merrill  <>

	PR c++/68422
	* cp-tree.h (PACK_EXPANSION_SIZEOF_P): New.
	* parser.c (cp_parser_sizeof_pack): Set it.
	* pt.c 	(tsubst_copy) [SIZEOF_EXPR]: Likewise.
	(tsubst_pack_expansion): Improve T... shortcut for expression packs.

2015-11-19  Ryan Burn  <>

	PR c++/68396
	* pt.c (find_parameter_packs_r) [DECLTYPE_TYPE]: When traversing
	the DECLTYPE_TYPE_EXPR, set type_pack_expansion_p to false.

2015-11-19  Jakub Jelinek  <>
	    Manuel López-Ibáñez  <>

	PR c++/67409
	* decl.c (identify_goto): Add LOC and DIAG_KIND arguments, call
	emit_diagnostic instead of permerror.
	(check_previous_goto_1): Adjust identify_goto callers, treat all
	cases but crossing initialization and entering scope of decl with
	non-trivial dtor as unconditional hard errors.
	(check_goto): Use identify_goto.  Treat all cases but crossing
	initialization and entering scope of decl with non-trivial dtor
	as unconditional hard errors.

2015-11-19  Cesar Philippidis  <>

	* parser.h (struct cp_omp_declare_simd_data): Add clauses member.
	(struct cp_parser): Change type the of oacc_routine to
	* parser.c (cp_ensure_no_oacc_routine): Rework to use
	(cp_parser_simple_declaration): Remove boolean first.  Update call to
	cp_parser_init_declarator. Don't NULL out oacc_routine.
	(cp_parser_init_declarator): Remove boolean first parameter.  Update
	calls to cp_finalize_oacc_routine.
	(cp_parser_late_return_type_opt): Handle acc routines.
	(cp_parser_member_declaration): Remove first variable.  Handle
	acc routines like omp declare simd.
	(cp_parser_function_definition_from_specifiers_and_declarator): Update
	call to cp_finalize_oacc_routine.
	(cp_parser_single_declaration): Update call to
	(cp_parser_save_member_function_body): Remove first_decl parameter.
	Update call to cp_finalize_oacc_routine.
	(cp_parser_finish_oacc_routine): Delete.
	(cp_parser_oacc_routine): Rework to use cp_omp_declare_simd_data.
	(cp_parser_late_parsing_oacc_routine): New function.
	(cp_finalize_oacc_routine): Remove first argument.  Add more error
	handling and set the acc routine and 'omp declare target' attributes.
	(cp_parser_pragma): Remove unnecessary call to

2015-11-17  Cesar Philippidis  <>

	* cp-gimplify.c (cp_fold_r): Add support for OACC_LOOP.

2015-11-17  Jason Merrill  <>

	PR bootstrap/68346
	* typeck.c (build_static_cast_1): Force a NOP when converting to
	the same type.

	* cp-tree.h (LITERAL_ZERO_P): Remove.
	* parser.c (cp_parser_postfix_expression, literal_zeros)
	(cp_parser_parenthesized_expression_list): Don't mess with it.

	* parser.c (cp_parser_unary_expression): Fold -constant here.
	* typeck.c (cp_build_unary_op): Not here.

	PR bootstrap/68361
	* cvt.c (cp_convert_and_check): Use warning_sentinel to suppress

2015-11-16  Jason Merrill  <>

	* constexpr.c (cxx_eval_builtin_function_call): Use cp_fully_fold
	to fold arguments to __builtin_constant_p.

2015-11-16  Kirill Yukhin  <>

	* parser.c (cp_parser_late_parsing_cilk_simd_fn_info): Look for
	"simd" attribute as well. Update error message.

2015-11-14  Trevor Saunders  <>

	* parser.c (cp_parser_omp_declare_target): Adjust.

2015-11-14  Trevor Saunders  <>

	* vtable-class-hierarchy.c (vtv_generate_init_routine): Adjust.

2015-11-14  Jason Merrill  <>

	PR bootstrap/68346
	* call.c (build_new_op_1): Don't fold arguments to

2015-11-14  Jakub Jelinek  <>

	* semantics.c (finish_omp_clauses): Don't mark

2015-11-13  Kai Tietz  <>
	    Marek Polacek  <>
	    Jason Merrill  <>

	* call.c (build_conditional_expr_1, convert_like_real)
	(convert_arg_to_ellipsis, convert_for_arg_passing): Don't fold.
	(build_new_op_1, build_over_call, build_cxx_call): Fold for warnings.
	* class.c (build_base_path, determine_primary_bases)
	(update_vtable_entry_for_fn, check_bitfield_decl)
	(layout_nonempty_base_or_field, layout_empty_base)
	(propagate_binfo_offsets, include_empty_classes)
	(layout_class_type, build_vbase_offset_vtbl_entries): Use
	* constexpr.c (cxx_eval_builtin_function_call): Fold away the NOP_EXPR.
	(cxx_eval_call_expression): Handle MEM_REF.
	(cxx_eval_pointer_plus_expression): Fold the second operand.
	(cxx_eval_constant_expression): Handle MEM_REF, UNARY_PLUS_EXPR.
	(fold_simple_1, fold_simple): New.
	(maybe_constant_value_1): Factor out from maybe_constant_value.
	(cv_cache, maybe_constant_value): Cache results.
	(maybe_constant_init): Handle null input.
	(potential_constant_expression_1): Handle RESULT_DECL, EMPTY_CLASS_EXPR.
	* cp-array-notation.c (build_array_notation_ref): Fold operands.
	* cp-gimplify.c (cp_fold_r, cp_fold): New.
	(cp_genericize_r): Use fold_convert.  Don't fold SIZEOF_EXPR.
	(cp_genericize): Fold everything.
	(contains_label_1, contains_label_p): New.
	(cp_fold, cp_fully_fold): New.
	* cp-tree.h (class cache_map): New.
	* cvt.c (cp_convert_to_pointer, ocp_convert): Use convert_to_*_nofold.
	(cp_convert_and_check): Use cp_fully_fold.
	(convert, convert_force): Don't fold.
	* decl.c (fold_sizeof_expr): Change from fold_sizeof_expr_r.
	(compute_array_index_type): Use cp_fully_fold.
	(build_enumerator): Use fold_convert.
	* decl2.c (get_guard_cond, set_guard): Use fold_convert.
	* init.c (build_zero_init_1): Fold zero-initializers.
	(build_new_1): Fold nelts calculations.
	(build_vec_delete_1): Fold conversions.
	(build_vec_init): Fold maxindex.
	* parser.c (cp_parser_binary_expression): Fold LHS of || and &&.
	(cp_parser_question_colon_clause): Fold LHS.
	* pt.c (convert_nontype_argument): Fold nullptr conversion.
	* semantics.c (finish_unary_op_expr): Fold for warnings.
	(handle_omp_array_sections_1): Fold length and low bound.
	(handle_omp_for_class_iterator): Fold various things.
	* tree.c (builtin_valid_in_constant_expr_p): Add
	(convert_bitfield_to_declared_type): Don't fold.
	(handle_init_priority_attribute): Fold.
	(fold_if_not_in_template): Remove.
	* typeck.c (decay_conversion, build_class_member_access_expr)
	(build_simple_component_ref, cp_build_array_ref, build_vec_cmp)
	(cp_pointer_int_sum, pointer_diff): Don't fold.
	(cp_build_binary_op): Fold for warnings and PMF ops.
	(cp_build_unary_op): Fold negation of a constant, nothing else.
	(expand_ptrmemfunc_cst): Fold operations.
	* typeck2.c (split_nonconstant_init): Fold initializer.
	(store_init_value): Likewise.
	(check_narrowing): Try folding.
	* (gtfiles): Add cp-gimplify.c.

2015-11-13  David Malcolm  <>

	* error.c (pedwarn_cxx98): Pass line_table to rich_location ctor.

2015-11-12  James Norris  <>

	* parser.c (cp_parser_oacc_declare): Remove unused.

2015-11-12  James Norris  <>
	    Joseph Myers  <>

	* parser.c (cp_parser_omp_clause_name): Handle 'device_resident'
	(cp_parser_oacc_data_clause): Handle PRAGMA_OACC_CLAUSE_DEVICE_RESIDENT
	(cp_paser_oacc_all_clauses): Handle PRAGMA_OACC_CLAUSE_DEVICE_RESIDENT
	(OACC_DECLARE_CLAUSE_MASK): New definition.
	(cp_parser_oacc_declare): New function.
	(cp_parser_pragma): Handle PRAGMA_OACC_DECLARE.
	* pt.c (tsubst_expr): Handle OACC_DECLARE.

2015-11-12  Jason Merrill  <>

	* pt.c (check_explicit_specialization): Check the namespace after
	we choose a template.

2015-11-11  Jason Merrill  <>

	* decl.c (duplicate_decls): When combining typedefs, remove the
	new type from the variants list.

2015-11-11  Jason Merrill  <>

	* pt.c (instantiate_class_template_1): Set function_depth around
	instantiation of lambda op().

2015-11-11  Marek Polacek  <>

	PR c/68107
	PR c++/68266
	* decl.c (grokdeclarator): Call valid_array_size_p.  Remove code
	checking the size of an array.

2015-11-11  Dominique d'Humieres <>

	PR bootstrap/68271
	* parser.h (cp_token): Update pragma_kind to 8.

2015-11-11  Andrew MacLeod  <>

	* call.c: Remove unused header files.
	* class.c: Likewise.
	* constexpr.c: Likewise.
	* cp-array-notation.c: Likewise.
	* cp-cilkplus.c: Likewise.
	* cp-gimplify.c: Likewise.
	* cp-lang.c: Likewise.
	* cp-objcp-common.c: Likewise.
	* cp-ubsan.c: Likewise.
	* cvt.c: Likewise.
	* cxx-pretty-print.c: Likewise.
	* decl.c: Likewise.
	* decl2.c: Likewise.
	* dump.c: Likewise.
	* error.c: Likewise.
	* except.c: Likewise.
	* expr.c: Likewise.
	* friend.c: Likewise.
	* g++spec.c: Likewise.
	* init.c: Likewise.
	* lambda.c: Likewise.
	* lex.c: Likewise.
	* mangle.c: Likewise.
	* method.c: Likewise.
	* name-lookup.c: Likewise.
	* optimize.c: Likewise.
	* parser.c: Likewise.
	* pt.c: Likewise.
	* ptree.c: Likewise.
	* repo.c: Likewise.
	* rtti.c: Likewise.
	* search.c: Likewise.
	* semantics.c: Likewise.
	* tree.c: Likewise.
	* typeck.c: Likewise.
	* typeck2.c: Likewise.
	* vtable-class-hierarchy.c: Likewise.

2015-11-09  Cesar Philippidis  <>

	* parser.c (cp_finalize_oacc_routine): New boolean first argument.
	(cp_ensure_no_oacc_routine): Update call to cp_finalize_oacc_routine.
	(cp_parser_simple_declaration): Maintain a boolean first to keep track
	of each new declarator.  Propagate it to cp_parser_init_declarator.
	(cp_parser_init_declarator): New boolean first argument.  Propagate it
	to cp_parser_save_member_function_body and cp_finalize_oacc_routine.
	(cp_parser_member_declaration): Likewise.
	(cp_parser_single_declaration): Update call to
	(cp_parser_save_member_function_body): New boolean first_decl argument.
	Propagate it to cp_finalize_oacc_routine.
	(cp_parser_finish_oacc_routine): New boolean first argument.  Use it to
	determine if multiple declarators follow a routine construct.
	(cp_parser_oacc_routine): Update call to cp_parser_finish_oacc_routine.

2015-10-19  Martin Sebor  <>

	PR c++/67913
	PR c++/67927
	* call.c (build_operator_new_call): Do not assume size_check
	is non-null, analogously to the top half of the function.
	* init.c (build_new_1): Detect and diagnose array sizes in
	excess of the maximum of roughly SIZE_MAX / 2.
	Insert a runtime check only for arrays with a non-constant size.
	(build_new): Detect and diagnose negative array sizes.

2015-11-09  Thomas Schwinge  <>
	    Cesar Philippidis  <>
	    James Norris  <>
	    Julian Brown  <>
	    Nathan Sidwell  <>

	* parser.h (struct cp_parser): Add oacc_routine field.
	* parser.c (cp_ensure_no_oacc_routine): New.
	(cp_parser_new): Initialize oacc_routine field.
	(cp_parser_linkage_specification): Call cp_ensure_no_oacc_routine.
	cp_parser_class_specifier_1): Likewise.
	(cp_parser_init_declarator): Call cp_finalize_oacc_routine.
	cp_parser_save_member_function_body): Likewise.
	(cp_parser_finish_oacc_routine, cp_parser_oacc_routine,
	cp_finalize_oacc_routine): New.
	(cp_parser_pragma): Adjust omp_declare_simd checking.  Call
	(cp_parser_pragma): Add OpenACC routine handling.

2015-11-08  Martin Sebor  <>

	PR c++/67942
	* cp/init.c (warn_placement_new_too_small): Convert integer
	operand of POINTER_PLUS_EXPR to ssize_t to determine its signed

2015-11-06  David Malcolm  <>

	* error.c (cp_printer): Update for new "caret_p" param for
	(pedwarn_cxx98): Update for change in signature of

2015-11-06  Jason Merrill  <>

	Support non-type constrained-type-specifiers.
	* parser.c (check_type_concept): Remove.
	(cp_parser_maybe_constrained_type_specifier): Don't call it.
	(synthesize_implicit_template_parm): Handle non-type and template
	template parameters.  Also compare extra args.  Return the decl.
	(cp_parser_template_argument): Handle constrained-type-specifiers for
	non-type template parameters.
	(finish_constrained_template_template_parm): Split out from
	(cp_parser_nonclass_name): Move some logic into
	(cp_parser_init_declarator): Fix error recovery.
	(get_concept_from_constraint): Remove.
	(cp_parser_simple_type_specifier): Adjust for
	synthesize_implicit_template_parm returning the decl.
	* (placeholder_extract_concept_and_args)
	(equivalent_placeholder_constraints): Also handle TYPE_DECL
	constrained parms.

	* pt.c (push_inline_template_parms_recursive): Don't recreate the

2015-11-06  Kyrylo Tkachov  <>

	* init.c (warn_placement_new_too_small): Use %wu format
	rather than %lu when printing bytes_avail.

2015-11-05  Cesar Philippidis  <>
	    Thomas Schwinge  <>
	    James Norris  <>

	* parser.c (cp_parser_omp_clause_name): Add support for
	(cp_parser_oacc_shape_clause): Allow pointer variables as gang static
	(cp_parser_oacc_clause_tile): New function.
	(cp_parser_omp_clause_default): Add is_oacc argument. Handle
	default(none) in OpenACC.
	(cp_parser_oacc_all_clauses): Add support for
	(cp_parser_omp_all_clauses): Update call to
	(cp_parser_oacc_update): Update the error message for missing clauses.
	* semantics.c (finish_omp_clauses): Add support for

2015-11-05  Martin Sebor  <>

	PR c++/67942
	* cp/init.c (warn_placement_new_too_small): Avoid assuming
	the size of the first operand of placement new or its type
	is known.

2015-11-05  Martin Sebor  <>

	PR c++/67942
	* cp/init.c (warn_placement_new_too_small): New function.
	(build_new_1): Call it.

2015-11-05  Paolo Carlini  <>

	PR c++/67846
	* parser.c (cp_parser_lambda_body): Check lambda_return_type
	return value.
	* typeck2.c (cxx_incomplete_type_diagnostic): Print member or
	member function used invalidly.

2015-11-05  Jakub Jelinek  <>
	    Ilya Verbin  <>

	* cp-tree.h (finish_omp_for): Add ORIG_INITS argument.
	(omp_privatize_field): Add SHARED argument.
	* parser.c: Include context.h.
	(cp_parser_omp_clause_schedule): Parse schedule
	modifiers, diagnose monotonic together with nonmonotonic.
	(cp_parser_omp_clause_linear): Add DECLARE_SIMD argument.  Parse
	parameter name as linear step as id-expression rather than expression.
	(cp_parser_omp_all_clauses): Adjust caller.
	(cp_parser_omp_for_loop_init): Add ORIG_INIT argument,
	initialize it.  Adjust omp_privatize_field caller.
	(cp_parser_omp_for_loop): Compute orig_inits, pass it's address
	to finish_omp_for.
	(OMP_DISTRIBUTE_CLAUSE_MASK): Add lastprivate clause.
	cp_parser_omp_target_exit_data): Allow GOMP_MAP_ALWAYS_POINTER
	(cp_parser_omp_target): Likewise.  Evaluate num_teams and
	thread_limit expressions on combined target teams before the target.
	(cp_parser_omp_declare_target): If decl has "omp declare target" or
	"omp declare target link" attribute, and cgraph or varpool node already
	exists, then set corresponding flags.  Call finish_omp_clauses
	in the parenthesized extended-list syntax case.  Call
	cp_parser_require_pragma_eol instead of cp_parser_skip_to_pragma_eol.
	(cp_parser_omp_end_declare_target): Call cp_parser_require_pragma_eol
	instead of cp_parser_skip_to_pragma_eol.
	* decl2.c (cplus_decl_attributes): Don't diagnose block scope vars
	inside declare target.
	* pt.c (tsubst_omp_clauses): If OMP_CLAUSE_LINEAR_VARIABLE_STRIDE,
	use tsubst_omp_clause_decl instead of tsubst_expr on
	OMP_CLAUSE_LINEAR_STEP.  Handle non-static data members in shared
	(tsubst_omp_for_iterator): Adjust omp_privatize_field caller.
	(tsubst_find_omp_teams): New function.
	(tsubst_expr): Evaluate num_teams and thread_limit expressions on
	combined target teams before the target.  Use OMP_FOR_ORIG_DECLS for
	all OpenMP/OpenACC/Cilk+ looping constructs.  Adjust finish_omp_for
	* semantics.c (omp_privatize_field): Add SHARED argument, if true,
	always create artificial var and never put it into the hash table
	or vector.
	(handle_omp_array_sections_1): Adjust omp_privatize_field caller.
	Allow non-zero low-bound on OMP_CLAUSE_REDUCTION array sections.
	(handle_omp_array_sections): For structure element
	based array sections use GOMP_MAP_ALWAYS_POINTER instead of
	GOMP_MAP_FIRSTPRIVATE_POINTER.  Encode low-bound into the MEM_REF,
	either into the constant offset, or for variable low-bound using
	(finish_omp_clauses): Adjust omp_privatize_field caller.  Drop
	generic_field_head, structure elements are now always mapped even
	as array section bases, diagnose same var in data sharing and
	mapping clauses.  For references map what they refer to using
	GOMP_MAP_ALWAYS_POINTER for structure elements and
	GOMP_MAP_FIRSTPRIVATE_REFERENCE otherwise.  Diagnose if linear step
	on declare simd is neither a constant nor a uniform parameter.
	Allow non-static data members on shared clauses.  Look through
	POINTER_PLUS_EXPR for array section reductions.  Diagnose nonmonotonic
	modifier on kinds other than dynamic or guided or nonmonotonic
	modifier together with ordered clause.  Diagnose the same var or
	function appearing multiple times on the same directive.  Fix up
	wording for the to clause if t is neither a FUNCTION_DECL nor a
	VAR_DECL, use special wording for OVERLOADs and TEMPLATE_ID_EXPR.
	(handle_omp_for_class_iterator): Add ORIG_DECLS argument.  Call
	c_omp_check_loop_iv_exprs on cond.
	(finish_omp_for): Add ORIG_INITS argument.  Call
	c_omp_check_loop_iv_exprs on ORIG_INITS elements.  Adjust
	handle_omp_for_class_iterator caller.  Call c_omp_check_loop_iv.
	Call add_stmt.
	(finish_omp_atomic): Adjust c_finish_omp_atomic caller.

2015-11-04  Cesar Philippidis  <>

	* (cp_parser_oacc_single_int_clause): New function.
	(cp_parser_oacc_clause_vector_length): Delete.
	(cp_parser_omp_clause_num_gangs): Delete.
	(cp_parser_omp_clause_num_workers): Delete.
	(cp_parser_oacc_all_clauses): Use cp_parser_oacc_single_int_clause
	for num_gangs, num_workers and vector_length.

2015-11-04  Mikhail Maltsev  <>

	* call.c (validate_conversion_obstack): Define unconditionally.
	* constexpr.c (maybe_constant_value, fold_non_dependent_expr): Use
	* cp-tree.h: Use CHECKING_P instead of ENABLE_CHECKING.
	* decl2.c (cxx_post_compilation_parsing_cleanups): Use flag_checking.
	* mangle.c (add_substitution): Likewise.
	* method.c (maybe_explain_implicit_delete): Likewise.
	* parser.c (cp_parser_template_argument_list): Remove conditional
	* pt.c (check_unstripped_args): Rename to...
	(verify_unstripped_args): ... this and remove conditional compilation.
	(retrieve_specialization): Guard call of verify_unstripped_args with
	(template_parm_to_arg): Remove conditional compilation.
	(template_parms_to_args, coerce_template_parameter_pack,
	coerce_template_parms): Likewise.
	(tsubst_copy): Use flag_checking.
	(type_unification_real): Remove conditional compilation.
	(build_non_dependent_expr): Use flag_checking.
	* tree.c (build_target_expr): Remove conditional compilation, use
	* typeck.c (comptypes): Likewise.
	* typeck2.c (digest_init_r): Likewise.

2015-11-03  Jason Merrill  <>

	* pt.c (struct find_parameter_pack_data): Add
	type_pack_expansion_p field.
	(find_parameter_packs_r): Use it to turn 'auto' into a parameter pack.
	(uses_parameter_packs, make_pack_expansion)
	(check_for_bare_parameter_packs, fixed_parameter_pack_p): Set it.

2015-11-03  Thomas Schwinge  <>
	    Chung-Lin Tang  <>

	* parser.c (cp_parser_omp_construct, cp_parser_pragma): Handle

2015-10-31  Ville Voutilainen  <>

	Remove the implementation of N3994, terse range-for loops.
	* parser.c (cp_parser_for_init_statement): Remove the parsing
	of a terse range-for.

2015-10-31  Jason Merrill  <>

	Implement multiple 'auto' feature from Concepts TS.
	* parser.c (cp_parser_type_id_1): Allow 'auto' if -fconcepts.
	(cp_parser_template_type_arg): Likewise.
	(get_concept_from_constraint): Split out most logic to...
	* (placeholder_extract_concept_and_args):
	(equivalent_placeholder_constraints, hash_placeholder_constraint): New.
	* cxx-pretty-print.c (pp_cxx_constrained_type_spec): New.
	* cxx-pretty-print.h: Declare it.
	* error.c (dump_type) [TEMPLATE_TYPE_PARM]: Call it.
	* pt.c (is_auto_r, extract_autos_r, extract_autos, auto_hash): New.
	(type_uses_auto): Use is_auto_r.
	(do_auto_deduction): Handle multiple 'auto's if -fconcepts.
	* typeck.c (structural_comptypes) [TEMPLATE_TYPE_PARM]: Compare

	* pt.c (for_each_template_parm_r): Use WALK_SUBTREE.
	Return a meaningful value rather than error_mark_node.
	(for_each_template_parm): Return a tree.
	(uses_template_parms_level): Return bool.
	* cp-tree.h: Adjust.

	* pt.c (unify): Don't diagnose no common base if we already have
	the same template.
	(do_auto_deduction): Explain deduction failure.

	* pt.c (hash_tmpl_and_args): Use iterative_hash_object on template

	* parser.c (synthesize_implicit_template_parm)
	(finish_fully_implicit_template): Make static.

2015-10-29  Andrew MacLeod  <>

	* call.c: Reorder #include's and remove duplicates.
	* class.c: Likewise.
	* constexpr.c: Likewise.
	* cp-array-notation.c: Likewise.
	* cp-cilkplus.c: Likewise.
	* cp-gimplify.c: Likewise.
	* cp-lang.c: Likewise.
	* cp-objcp-common.c: Likewise.
	* cp-ubsan.c: Likewise.
	* cvt.c: Likewise.
	* cxx-pretty-print.c: Likewise.
	* decl.c: Likewise.
	* decl2.c: Likewise.
	* dump.c: Likewise.
	* error.c: Likewise.
	* except.c: Likewise.
	* expr.c: Likewise.
	* friend.c: Likewise.
	* init.c: Likewise.
	* lambda.c: Likewise.
	* lex.c: Likewise.
	* mangle.c: Likewise.
	* method.c: Likewise.
	* name-lookup.c: Likewise.
	* optimize.c: Likewise.
	* parser.c: Likewise.
	* pt.c: Likewise.
	* ptree.c: Likewise.
	* repo.c: Likewise.
	* rtti.c: Likewise.
	* search.c: Likewise.
	* semantics.c: Likewise.
	* tree.c: Likewise.
	* typeck.c: Likewise.
	* typeck2.c: Likewise.
	* vtable-class-hierarchy.c: Likewise.

2015-10-29  Paolo Carlini  <>

	PR c++/67845
	* decl.c (grokfndecl): In case of erroneous cv-qualified non-member
	functions consistently reset TREE_TYPE (decl) too.

2015-10-28  Jason Merrill  <>

	DR 1518
	* class.c (type_has_user_provided_or_explicit_constructor): New.
	(check_bases_and_members): Use it.
	* cp-tree.h: Declare it.

2015-10-27  Cesar Philippidis  <>
	    Thomas Schwinge  <>
	    James Norris  <>
	    Joseph Myers  <>
	    Julian Brown  <>
	    Nathan Sidwell <>
	    Bernd Schmidt  <>

	* parser.c (cp_parser_omp_clause_name): Add auto, gang, seq,
	vector, worker.
	(cp_parser_oacc_simple_clause): New.
	(cp_parser_oacc_shape_clause): New.
	(cp_parser_oacc_all_clauses): Add auto, gang, seq, vector, worker.
	* semantics.c (finish_omp_clauses): Add auto, gang, seq, vector,
	worker. Unify the handling of teams, tasks and vector_length with
	the other loop shape clauses.

2015-10-27  Thomas Schwinge  <>
	    James Norris  <>
	    Cesar Philippidis  <>

	PR c/64765
	PR c/64880
	* cp-tree.h (finish_oacc_kernels, finish_oacc_parallel): Don't
	declare functions.
	(finish_omp_construct): Declare function.
	* parser.c (cp_parser_oacc_loop): Add p_name, mask, cclauses
	formal parameters, and handle these.  Adjust all users.
	(cp_parser_oacc_kernels, cp_parser_oacc_parallel): Merge functions
	(cp_parser_oacc_kernels_parallel): ... this new function.  Adjust
	all users.
	* semantics.c (finish_oacc_kernels, finish_oacc_parallel): Merge functions into...
	(finish_omp_construct): ... this new function.

2015-10-25  Jason Merrill  <>

	DR 2179
	* pt.c (process_partial_specialization): Handle error_mark_node
	from most_specialized_partial_spec.

2015-10-23  Jason Merrill  <>

	DR 1518
	DR 1630
	PR c++/54835
	PR c++/60417
	* call.c (convert_like_real): Value-initialization can't use
	explicit constructors in C++11 and up.

	PR c++/67813
	* constexpr.c (cxx_eval_store_expression): Always use *valp if

2015-10-22  Jason Merrill  <>

	* call.c (add_template_conv_candidate): Pass DEDUCE_CALL.
	(add_template_candidate_real): Handle it.
	* pt.c (fn_type_unification): Handle it.

	* call.c (add_conv_candidate): Remove first_arg parm.
	(add_template_conv_candidate): Likewise.
	(add_template_candidate_real): Don't pass it.
	(build_op_call_1): Likewise.

2015-10-22  Richard Biener  <>

	* semantics.c (cp_finish_omp_clause_depend_sink): Properly convert
	before folding a MINUS_EXPR.
	(finish_omp_clauses): Likewise.

2015-10-21  Paolo Carlini  <>

	PR c++/66781
	* parser.c (cp_parser_enum_specifier): Upon error_at set
	nested_name_specifier to error_mark_node; improve error message.

2015-10-21  Paolo Carlini  <>

	PR c++/67847
	* parser.c (cp_parser_enum_specifier): Reject a nested_name_specifier
	which doesn't name a class or namespace.

2015-10-21  Ilya Enkovich  <>

	* call.c (build_conditional_expr_1): Use boolean vector
	type for vector comparison.
	* typeck.c (build_vec_cmp): New.
	(cp_build_binary_op): Use build_vec_cmp for comparison.

2015-10-20  Jason Merrill  <>

	PR c++/66583
	* init.c (innermost_aggr_scope): New.
	(build_field_list): Change uses_unions_p to uses_unions_or_anon_p.
	(sort_mem_initializers): Handle initializers for entire anonymous

2015-10-20  Marek Polacek  <>

	* parser.c (is_cilkplus_vector_p): Don't define here.

2015-10-19  Jason Merrill  <>

	PR c++/67064
	* semantics.c (force_paren_expr): Don't mess with hard register vars.

	Implement N4268, Do constant evaluation of all non-type template args.
	* parser.c (cp_parser_template_argument): For C++1z just parse a
	* pt.c (convert_nontype_argument): For C++1z always call

	* constexpr.c (cxx_eval_constant_expression): Expand PTRMEM_CST
	only when necessary.
	(cxx_eval_component_reference): Like here.
	* decl2.c (lower_var_init): And here.
	(c_parse_final_cleanups): Call it.
	* typeck2.c (digest_init_r): Not here.
	* decl.c (complete_vars): Or here.
	(cp_finish_decl): Add local statics to symbol table.

2015-10-17  Jason Merrill  <>

	PR c++/68006
	* decl.c (implicit_default_ctor_p): New.
	(start_preparsed_function): Don't clobber on entry to one.

2015-10-16  Paolo Carlini  <>

	PR c++/67926
	* constexpr.c (potential_constant_expression_1): Handle

2015-10-13  Jakub Jelinek  <>
	    Aldy Hernandez  <>

	* class.c (finish_struct_1): Call finish_omp_declare_simd_methods.
	* cp-gimplify.c (cp_gimplify_expr): Handle OMP_TASKLOOP.
	(cp_genericize_r): Likewise.
	(cxx_omp_finish_clause): Don't diagnose references.
	(cxx_omp_disregard_value_expr): New function.
	* cp-objcp-common.h (LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR): Redefine.
	* cp-tree.h (OMP_FOR_GIMPLIFYING_P): Document for OMP_TASKLOOP.
	(finish_omp_declare_simd_methods, push_omp_privatization_clauses,
	pop_omp_privatization_clauses, save_omp_privatization_clauses,
	restore_omp_privatization_clauses, omp_privatize_field,
	cxx_omp_disregard_value_expr): New prototypes.
	(finish_omp_clauses): Add two new arguments.
	(finish_omp_for): Add ORIG_DECLV argument.
	* parser.c (cp_parser_lambda_body): Call
	save_omp_privatization_clauses and restore_omp_privatization_clauses.
	(cp_parser_omp_clause_name): Handle OpenMP 4.5 clauses.
	(cp_parser_omp_var_list_no_open): Handle structure elements for
	map, to and from clauses.  Handle array sections in reduction
	clause.  Parse this keyword.  Formatting fixes.
	(cp_parser_omp_clause_if): Add IS_OMP argument, handle parsing of
	if clause modifiers.
	(cp_parser_omp_clause_num_tasks, cp_parser_omp_clause_grainsize,
	cp_parser_omp_clause_priority, cp_parser_omp_clause_hint,
	cp_parser_omp_clause_defaultmap): New functions.
	(cp_parser_omp_clause_ordered): Parse optional parameter.
	(cp_parser_omp_clause_reduction): Handle array reductions.
	(cp_parser_omp_clause_schedule): Parse optional simd modifier.
	(cp_parser_omp_clause_nogroup, cp_parser_omp_clause_orderedkind):
	New functions.
	(cp_parser_omp_clause_linear): Parse linear clause modifiers.
	(cp_parser_omp_clause_depend_sink): New function.
	(cp_parser_omp_clause_depend): Parse source/sink depend kinds.
	(cp_parser_omp_clause_map): Parse release/delete map kinds and
	optional always modifier.
	(cp_parser_oacc_all_clauses): Adjust cp_parser_omp_clause_if
	and finish_omp_clauses callers.
	(cp_parser_omp_all_clauses): Likewise.  Parse OpenMP 4.5 clauses.
	Parse "to" as OMP_CLAUSE_TO_DECLARE if on declare target directive.
	(cp_parser_omp_critical): Parse critical clauses.
	(cp_parser_omp_for_incr): Use cp_tree_equal if
	(cp_parser_omp_for_loop_init): Return tree instead of bool.  Handle
	non-static data member iterators.
	(cp_parser_omp_for_loop): Handle doacross loops, adjust
	finish_omp_for and finish_omp_clauses callers.
	(cp_omp_split_clauses): Adjust finish_omp_clauses caller.
	(OMP_SIMD_CLAUSE_MASK): Add simdlen clause.
	(cp_parser_omp_simd): Allow ordered clause if it has no parameter.
	(OMP_FOR_CLAUSE_MASK): Add linear clause.
	(cp_parser_omp_for): Disallow ordered clause when combined with
	distribute.  Disallow linear clause when combined with distribute
	and not combined with simd.
	(cp_parser_omp_ordered): Add CONTEXT argument, return bool instead
	of tree, parse clauses and if depend clause is found, don't parse
	a body.
	(cp_parser_omp_parallel): Disallow copyin clause on target parallel.
	Allow target parallel without for after it.
	(OMP_TASK_CLAUSE_MASK): Add priority clause.
	(OMP_TARGET_DATA_CLAUSE_MASK): Add use_device_ptr clause.
	(cp_parser_omp_target_data): Diagnose no map clauses or clauses with
	invalid kinds.
	(OMP_TARGET_UPDATE_CLAUSE_MASK): Add depend and nowait clauses.
	(cp_parser_omp_target_enter_data, cp_parser_omp_target_exit_data): New
	(OMP_TARGET_CLAUSE_MASK): Add depend, nowait, private, firstprivate,
	defaultmap and is_device_ptr clauses.
	(cp_parser_omp_target): Parse target parallel and target simd.  Set
	OMP_TARGET_COMBINED on combined constructs.  Parse target enter data
	and target exit data.  Diagnose invalid map kinds.
	(cp_parser_oacc_cache): Adjust finish_omp_clauses caller.
	(cp_parser_omp_declare_target): Parse OpenMP 4.5 forms of this
	(cp_parser_omp_taskloop): New function.
	(cp_parser_omp_construct): Don't handle PRAGMA_OMP_ORDERED here,
	(cp_parser_pragma): Handle PRAGMA_OMP_ORDERED here directly,
	handle PRAGMA_OMP_TASKLOOP, call push_omp_privatization_clauses
	and pop_omp_privatization_clauses around parsing calls.
	(cp_parser_cilk_for): Adjust finish_omp_clauses caller.
	* pt.c (apply_late_template_attributes): Adjust tsubst_omp_clauses
	and finish_omp_clauses callers.
	(tsubst_omp_clause_decl): Return NULL if decl is NULL.
	Use tsubst_expr instead of tsubst_copy, undo convert_from_reference
	(tsubst_omp_clauses): Add ALLOW_FIELDS argument.  Handle new
	OpenMP 4.5 clauses.  Use tsubst_omp_clause_decl for more clauses.
	If ALLOW_FIELDS, handle non-static data members in the clauses.
	Clear OMP_CLAUSE_LINEAR_STEP if it has been cleared before.
	(omp_parallel_combined_clauses): New variable.
	(tsubst_omp_for_iterator): Add ORIG_DECLV argument, recur on
	OMP_FOR_ORIG_DECLS, handle non-static data member iterators.
	Improve handling of clauses on combined constructs.
	(tsubst_expr): Call push_omp_privatization_clauses and
	pop_omp_privatization_clauses around instantiation of certain
	OpenMP constructs, improve handling of clauses on combined
	constructs, handle OMP_TASKLOOP, adjust tsubst_omp_for_iterator,
	tsubst_omp_clauses and finish_omp_for callers, handle clauses on
	critical and ordered, handle OMP_TARGET_{ENTER,EXIT}_DATA.
	(instantiate_decl): Call save_omp_privatization_clauses and
	restore_omp_privatization_clauses around instantiation.
	(dependent_omp_for_p): Fix up comment typo.  Handle SCOPE_REF.
	* semantics.c (omp_private_member_map, omp_private_member_vec,
	omp_private_member_ignore_next): New variables.
	(finish_non_static_data_member): Return dummy decl for privatized
	non-static data members.
	(omp_clause_decl_field, omp_clause_printable_decl,
	omp_note_field_privatization, omp_privatize_field): New functions.
	(handle_omp_array_sections_1): Fix comment typo.
	Add IS_OMP argument, handle structure element bases, diagnose
	bitfields, pass IS_OMP recursively, diagnose known zero length
	array sections in depend clauses, handle array sections in reduction
	clause, diagnose negative length even for pointers.
	(handle_omp_array_sections): Add IS_OMP argument, use auto_vec for
	types, pass IS_OMP down to handle_omp_array_sections_1, handle
	array sections in reduction clause, set
	length array section, use GOMP_MAP_FIRSTPRIVATE_POINTER for IS_OMP.
	(finish_omp_reduction_clause): Handle array sections and arrays.
	Use omp_clause_printable_decl.
	(finish_omp_declare_simd_methods, cp_finish_omp_clause_depend_sink):
	New functions.
	(finish_omp_clauses): Add ALLOW_FIELDS and DECLARE_SIMD arguments.
	Handle new OpenMP 4.5 clauses and new restrictions for the old
	ones, handle non-static data members, reject this keyword when not
	(push_omp_privatization_clauses, pop_omp_privatization_clauses,
	save_omp_privatization_clauses, restore_omp_privatization_clauses):
	New functions.
	(handle_omp_for_class_iterator): Handle OMP_TASKLOOP class iterators.
	Add collapse and ordered arguments.  Fix handling of lastprivate
	iterators in doacross loops.
	(finish_omp_for): Add ORIG_DECLV argument, handle doacross loops,
	adjust c_finish_omp_for, handle_omp_for_class_iterator and
	finish_omp_clauses callers.  Fill in OMP_CLAUSE_LINEAR_STEP on simd
	loops with non-static data member iterators.

2015-10-12  Ville Voutilainen  <>

	PR c++/58566
	* lambda.c (lambda_return_type): Return error_mark_node
	instead of void_type_node for the error cases.

2015-10-08  Jason Merrill  <>

	* cp-tree.h (SIMPLE_TARGET_EXPR_P): New.
	* init.c (get_nsdmi): Use it.
	* typeck2.c (massage_init_elt): Use it.

2015-10-07  Jason Merrill  <>

	PR c++/67557
	* call.c (is_base_field_ref): New.
	(unsafe_copy_elision_p): New.
	(build_over_call): Use it.

2015-10-07  Marek Polacek  <>

	PR sanitizer/67867
	* search.c (accessible_p): Initialize OTYPE to NULL_TREE.

2015-10-07  Marek Polacek  <>

	* cp-gimplify.c (genericize_if_stmt): Use protected_set_expr_location.
	(genericize_cp_loop): Likewise.
	* decl.c (cxx_maybe_build_cleanup): Likewise.
	* parser.c (cp_parser_binary_expression): Likewise.
	(cp_parser_omp_for_loop): Likewise.
	(cp_parser_omp_construct): Likewise.
	* semantics.c (finish_transaction_stmt): Likewise.
	(build_transaction_expr): Likewise.

2015-10-06  Jason Merrill  <>

	PR c++/67810
	* parser.c (cp_parser_fold_expr_p): Remove.
	(is_binary_op): New.
	(cp_parser_fold_expression): Take LHS as parameter.
	(cp_parser_primary_expression): Call it after parsing an expression.
	(cp_parser_binary_expression, cp_parser_assignment_operator_opt)
	(cp_parser_expression): Ignore an operator followed by '...'.
	(is_binary_op): New.
	* pt.c (tsubst_unary_left_fold, tsubst_binary_left_fold)
	(tsubst_unary_right_fold, tsubst_binary_right_fold): Handle errors.

2015-10-06  Marek Polacek  <>

	PR c++/67863
	* call.c (build_conditional_expr_1): Build the COND_EXPR with
	a location.

2015-10-05  Paolo Carlini  <>

	PR c++/53856
	* pt.c (check_default_tmpl_args): Per [temp.param]/9, do not
	reject default template arguments in out of class definitions
	of members of non-template classes.

2015-10-05  Richard Sandiford  <>

	* tree.c (cp_tree_equal): Use real_equal instead of

2015-10-04  Jason Merrill  <>

	Implement N4514, C++ Extensions for Transactional Memory.
	* cp-tree.h (struct cp_declarator): Add tx_qualifier field.
	(BCS_NORMAL, BCS_TRANSACTION): New enumerators.
	* lex.c (init_reswords): Limit TM kewords to -fgnu-tm.
	* parser.c (cp_lexer_get_preprocessor_token): Fix @synchronized.
	(make_call_declarator): Take tx_qualifier.
	(cp_parser_tx_qualifier_opt): New.
	(cp_parser_lambda_declarator_opt): Use it.
	(cp_parser_direct_declarator): Likewise.
	(cp_parser_statement): Handle atomic_noexcept, atomic_cancel.
	(cp_parser_compound_statement): Change in_try parameter to bcs_flags.
	(cp_parser_std_attribute): Map optimize_for_synchronized to
	(cp_parser_transaction): Take the token.  Handle atomic_noexcept.
	* lambda.c (maybe_add_lambda_conv_op): Handle transaction-safety.
	* call.c (enum conversion_kind): Add ck_tsafe.
	(standard_conversion): Handle transaction-safety conversion.
	(convert_like_real, resolve_address_of_overloaded_function): Likewise.
	(check_methods): Diagnose transaction_safe_dynamic on non-virtual
	(look_for_tm_attr_overrides): Don't inherit transaction_safe_dynamic.
	* cvt.c (tx_safe_fn_type_p, tx_unsafe_fn_variant)
	(can_convert_tx_safety): New.
	* typeck.c (composite_pointer_type): Handle transaction-safety.
	* name-lookup.h (enum scope_kind): Add sk_transaction.
	* name-lookup.c (begin_scope): Handle it.
	* semantics.c (begin_compound_stmt): Pass it.
	* decl.c (check_previous_goto_1): Check it.
	(struct named_label_entry): Add in_transaction_scope.
	(poplevel_named_label_1): Set it.
	(check_goto): Check it.
	(duplicate_decls): A specialization can be transaction_safe
	independently of its template.
	(grokdeclarator): Handle tx-qualifier.
	* rtti.c (ptr_initializer): Handle transaction-safe.
	* search.c (check_final_overrider): Check transaction_safe_dynamic.
	Don't check transaction_safe.
	* mangle.c (write_function_type): Mangle transaction_safe here.
	(write_CV_qualifiers_for_type): Not here.
	(write_type): Preserve transaction_safe when stripping attributes.
	* error.c (dump_type_suffix): Print transaction_safe.

2015-10-02  Marek Polacek  <>

	PR c/64249
	* parser.c (cp_parser_statement): Add CHAIN parameter and pass it
	down to cp_parser_selection_statement.
	(cp_parser_selection_statement): Add CHAIN parameter.  Add code to
	warn about duplicated if-else-if conditions.
	(cp_parser_implicitly_scoped_statement): Add CHAIN parameter and pass
	it down to cp_parser_statement.

2015-10-01  Ville Voutilainen  <>

	PR c++/54430
	* name-lookup.c (push_binding): Make non-static.
	* name-lookup.h (push_binding): Declare it.
	* parser.c (cp_parser_range_for): Use it, get the range
	declaration away from the scope until the range expression
	has been parsed, then restore the declaration.

2015-09-23  Ville Voutilainen  <>

	Fix small typos in the coding rule enforcement warnings.
	* parser.c (cp_parser_namespace_definition): Replace 'namepace'
	with 'namespace'.

2015-09-22  Nathan Sidwell  <>

	* decl.c (xref_basetypes): Check virtual and/or multiple
	inheritance warning.
	* parser.c (cp_parser_namespace_definition): Check namespaces
	* pt.c (push_template_decl_real): Check templates warning.

2015-09-22  Jason Merrill  <>

	* mangle.c (abi_warn_or_compat_version_crosses): New.
	Use it instead of abi_version_crosses.
	(mangle_decl): Deal with -fabi-compat-version and -Wabi separately.

2015-09-21  Ville Voutilainen  <>

	Complete the implementation of N4230, Nested namespace definition.
	* parser.c (cp_parser_namespace_definition): Support namespace
	attributes both before and after the namespace identifier.

2015-09-19  Trevor Saunders  <>

	* cp-gimplify.c (gimplify_must_not_throw_expr): Adjust.

2015-09-18  Ville Voutilainen  <>

	Implement nested namespace definitions.
	* parser.c (cp_parser_namespace_definition): Grok nested namespace

2015-09-18  Manuel López-Ibáñez  <>

	* parser.c (pragma_lex): Add loc argument. Rearrange the code to
	make it more similar to the C version.

2015-09-17  Andrew Sutton  <>
	    Jason Merrill  <>

	Implement N4295 fold-expressions.
	* cp-objcp-common.c (cp_common_init_ts): Handle them.
	* parser.c (cp_parser_skip_to_closing_parenthesis): Split out...
	(cp_parser_skip_to_closing_parenthesis_1): This function.  Change
	or_comma parameter to or_ttype.
	(cp_parser_fold_operator, cp_parser_fold_expr_p)
	(cp_parser_fold_expression): New.
	(cp_parser_primary_expression): Use them.
	* pt.c (expand_empty_fold, fold_expression, tsubst_fold_expr_pack)
	(tsubst_fold_expr_init, expand_left_fold, tsubst_unary_left_fold)
	(tsubst_binary_left_fold, expand_right_fold)
	(tsubst_unary_right_fold, tsubst_binary_right_fold): New.
	(tsubst_copy): Use them.
	(type_dependent_expression_p): Handle fold-expressions.
	* semantics.c (finish_unary_fold_expr)
	(finish_left_unary_fold_expr, finish_right_unary_fold_expr)
	(finish_binary_fold_expr): New.

2015-09-17  Richard Biener  <>

	* cp-tree.h (note_decl_for_pch): Remove.
	* class.c (build_clone): Do not call note_decl_for_pch.
	* semantics.c (finish_member_declaration): Likewise.
	(note_decl_for_pch): Remove.
	* decl2.c (c_parse_final_cleanups): Mangle all globals before
	writing the PCH.

2015-09-14  Jason Merrill  <>

	PR c++/44282
	* mangle.c (write_CV_qualifiers_for_type): Also warn about regparm
	mangling with lower -fabi-version.

2015-09-14  Paolo Carlini  <>

	PR c++/51911
	* parser.c (cp_parser_new_expression): Enforce 5.3.4/2 (as amended
	per the spirit of DR 1467).

2015-09-11  Mark Wielaard  <>

	PR c/28901
	* cp-objcp-common.c (cxx_warn_unused_global_decl): Remove hard-coded

2015-09-10  Paolo Carlini  <>

	PR c++/67318
	* parser.c (cp_parser_parameter_declaration): Consume the ellipsis
	and set template_parameter_pack_p also when the type is null.

2015-09-09  Mark Wielaard  <>

	* typeck.c (cp_build_binary_op): Check and warn when nonnull arg
	parm against NULL.

2015-09-10  Jakub Jelinek  <>

	PR c++/67522
	* semantics.c (handle_omp_array_sections_1): Only run
	type_dependent_expression_p on VAR_DECL/PARM_DECLs.
	(finish_omp_clauses) <case OMP_CLAUSE_LINEAR>: Likewise.

	PR c++/67511
	* semantics.c (handle_omp_for_class_iterator): Don't wrap
	error_mark_node into a NOP_EXPR to void_type_node.

2015-09-09  Paolo Carlini  <>

	PR c++/53184
	* decl2.c (constrain_class_visibility): Use Wsubobject-linkage.

2015-09-09  Jakub Jelinek  <>

	PR c++/67504
	* parser.c (cp_parser_omp_clause_collapse): Test tree_fits_shwi_p
	before INTEGRAL_TYPE_P test.

2015-09-08  Jason Merrill  <>

	PR c++/67041
	* pt.c (tsubst_copy_and_build): Handle variables like functions.

2015-09-08  Paolo Carlini  <>

	PR c++/67369
	* pt.c (tsubst_copy, [case FUNCTION_DECL]): Do not call tsubst
	if the first argument isn't a template.

2015-09-03  Martin Sebor  <>

	PR c/66516
	* cp-tree.h (mark_rvalue_use, decay_conversion): Add new
	* expr.c (mark_rvalue_use): Use new argument.
	* call.c (build_addr_func): Call decay_conversion with new
	* pt.c (convert_template_argument): Call reject_gcc_builtin.
	* typeck.c (decay_conversion): Use new argument.
	(c_decl_implicit): Define.

2015-09-02  Balaji V. Iyer  <>

	PR middle-end/60586
	* cp-gimplify.c (cilk_cp_gimplify_call_params_in_spawned_fn): New
	(cp_gimplify_expr): Added a call to the function

2015-09-01  Paolo Carlini  <>

	PR c++/61753
	* decl.c (smallest_type_quals_location): New.
	(check_special_function_return_type): Use the latter; add int and
	const location_t* parameters.
	(grokdeclarator): Adjust check_special_function_return_type call.

2015-08-29  Markus Trippelsdorf  <>

	PR c++/67371
	* constexpr.c (potential_constant_expression_1): Remove IF_STMT
	case. Move label to COND_EXPR case. Remove checking of

2015-08-22  Paolo Carlini  <>

	PR c++/63693
	* pt.c (resolve_typename_type): Use CLASSTYPE_PRIMARY_TEMPLATE_TYPE
	only on class types.

2015-08-21  Jason Merrill  <>

	PR c++/67240
	* (satisfy_implicit_conversion_constraint): Also
	check for NULL_TREE.

2015-08-21  Paolo Carlini  <>

	* decl.c (grokvardecl): Simplify the latter.

2015-08-21  Paolo Carlini  <>

	* decl.c (grokvardecl): Complete check added for c++/67065.

2015-08-20  Jason Merrill  <>

	* name-lookup.c (hidden_name_p): Handle OVERLOAD.

2015-08-20  Paolo Carlini  <>

	PR c++/67065
	* decl.c (grokvardecl): Reject 'main' as global variable.

2015-08-19  Jason Merrill  <>

	PR c++/66957
	* search.c (protected_accessible_p): Remove redundant access_in_type.
	Add otype parm instead of walking binfo.
	(friend_accessible_p): Check SCOPE itself.  Handle class
	templates.  Pass through otype.
	(dfs_accessible_post): Handle all accessibility cases.
	(dfs_accessible_pre): New.
	(accessible_p): Use it.  Don't check protected access here.  Pass
	decl and otype to dfs_walk.
	(member_declared_in_type, dfs_access_in_type_pre): New.
	(access_in_type): Use dfs_access_in_type_pre.
	* friend.c (add_friend): Fix multiple friends with the same name.

	* lambda.c (current_nonlambda_scope): New.

2015-08-18  Trevor Saunders  <>

	* call.c, class.c, cp-tree.h, decl.c, except.c, mangle.c,
	method.c, name-lookup.h, parser.c, parser.h, rtti.c,
	semantics.c, typeck2.c: Remove useless typedefs.

2015-08-18  Jason Merrill  <>

	DR 1155
	* pt.c (convert_nontype_argument): Allow internal linkage in C++11
	and up.

2015-08-17  Paolo Carlini  <>

	PR c++/67216
	* call.c (null_ptr_cst_p): In C++11 return 'false' for 'false'.

2015-08-17  Jason Merrill  <>

	PR c++/67244
	* pt.c (tsubst_copy_and_build): Call insert_pending_capture_proxies.

	PR c++/67104
	* constexpr.c (array_index_cmp, find_array_ctor_elt): New.
	(cxx_eval_array_reference, cxx_eval_store_expression): Use them.

	* constexpr.c (cxx_eval_store_expression): Don't set
	without it.
	(cxx_eval_array_reference): Check it.

	* except.c (check_noexcept_r): Assert that fn is POINTER_TYPE_P.

2015-08-14  Jason Merrill  <>

	PR c++/65974
	* decl2.c (mark_vtable_entries): Suppress -Wdeprecated.

2015-08-12  Jason Merrill  <>

	PR c++/67104
	* constexpr.c (cxx_eval_array_reference): Fix typo.

	PR c++/67104
	* constexpr.c (cxx_eval_array_reference): Handle sparse

	PR c++/67108
	* decl2.c (c_parse_final_cleanups): Set at_eof to 2 at end.
	* error.c (dump_template_bindings): Don't tsubst in that case.

	PR c++/67161
	* error.c (dump_decl) [TEMPLATE_ID_EXPR]: Pass

2015-08-08  Jason Merrill  <>

	PR c++/67152
	* pt.c (process_partial_specialization): Call

	PR c++/67159
	* (finish_template_introduction):

	PR c++/67142
	* pt.c (equal): Make sure tmpl is actually a template.

	PR c++/67144
	* call.c (joust): Only call more_constrained on decls.

2015-08-06  Andrew Sutton  <>
	    Braden Obrzut  <>
	    Jason Merrill  <>
	    Ville Voutilainen  <>

	Add C++ Concepts TS support.
	*, New files.
	* (CXX_AND_OBJCXX_OBJS): Add constraint.o and logic.o.
	(c++.tags): Also process .cc files.
	* call.c (enum rejection_reason_code): Add rr_constraint_failure.
	(print_z_candidate): Handle it.
	(constraint_failure): New.
	(add_function_candidate): Check constraints.
	(build_new_function_call): Handle evaluating concepts.
	(joust): Check more_constrained.
	* class.c (add_method): Check equivalently_constrained.
	(build_clone): Copy constraints.
	(currently_open_class): Return tree.
	(resolve_address_of_overloaded_function): Check constraints.
	* constexpr.c (cxx_eval_constant_expression): Handle REQUIRES_EXPR.
	(potential_constant_expression_1): Likewise.
	* cp-objcp-common.c (cp_tree_size): Handle CONSTRAINT_INFO.
	(cp_common_init_ts): Handle WILDCARD_DECL and REQUIRES_EXPR.
	* cp-tree.h (struct tree_constraint_info, check_nonnull)
	(check_constraint_info, CI_TEMPLATE_REQS, CI_DECLARATOR_REQS)
	(DECL_DECLARED_CONCEPT_P, WILDCARD_PACK_P, struct cp_unevaluated)
	(struct local_specialization_stack, enum auto_deduction_context)
	(variable_concept_p, concept_template_p)
	(struct deferring_access_check_sentinel): New.
	(enum cp_tree_node_structure_enum): Add TS_CP_CONSTRAINT_INFO.
	(union lang_tree_node): Add constraint_info field.
	(struct lang_decl_base): Add concept_p flag.
	(enum cp_decl_spec): Add ds_concept.
	(struct cp_declarator): Add requires_clause.
	* cxx-pretty-print.c (cxx_pretty_printer::primary_expression)
	(cxx_pretty_printer::expression): Handle REQUIRES_EXPR,
	(pp_cxx_parameter_declaration_clause): Accept a chain of
	(cxx_pretty_printer::declarator): Print requires-clause.
	(pp_cxx_template_declaration): Likewise.
	(pp_cxx_trait_expression): Handle CPTK_IS_SAME_AS.
	(pp_cxx_requires_clause, pp_cxx_requirement)
	(pp_cxx_requirement_list, pp_cxx_requirement_body)
	(pp_cxx_requires_expr, pp_cxx_simple_requirement)
	(pp_cxx_type_requirement, pp_cxx_compound_requirement)
	(pp_cxx_nested_requirement, pp_cxx_predicate_constraint)
	(pp_cxx_expression_constraint, pp_cxx_type_constraint)
	(pp_cxx_exception_constraint, pp_cxx_parameterized_constraint)
	(pp_cxx_conjunction, pp_cxx_disjunction, pp_cxx_constraint): New.
	* cxx-pretty-print.h: Declare them.
	* decl.c (decls_match): Compare constraints.
	(duplicate_decls): Likewise.  Remove constraints before freeing.
	(cxx_init_decl_processing): Call init_constraint_processing.
	(cp_finish_decl): Diagnose concept without initializer.
	(grokfndecl, grokvardecl): Handle concepts and constraints.
	(grokdeclarator): Handle concept, requires-clause.
	(grokparms): No longer static.
	(xref_tag_1): Check constraints.
	(finish_function): Call check_function_concept.
	(cp_tree_node_structure): Handle CONSTRAINT_INFO.
	(check_concept_refinement, is_concept_var, check_concept_fn): New.
	* decl2.c (check_classfn): Compare constraints.
	(mark_used): Don't instantiate concepts.
	* error.c (dump_template_decl): Print constraints.
	(dump_function_decl): Likewise.
	(dump_expr): Handle REQUIRES_EXPR, *_REQ, *_CONSTR.
	* lex.c (init_reswords): Set D_CXX_CONCEPTS.
	* method.c (implicitly_declare_fn): Copy constraints from
	inherited ctor.
	* parser.h (struct cp_parser): Add in_result_type_constraint_p and
	prevent_constrained_type_specifiers fields.
	* parser.c (make_call_declarator): Add requires_clause parm.
	(cp_parser_new): Clear prevent_constrained_type_specifiers.
	(cp_parser_primary_expression): Handle RID_IS_SAME_AS, RID_REQUIRES.
	(cp_parser_postfix_expression): Set prevent_constrained_type_specifiers.
	(cp_parser_trait_expr): Handle RID_IS_SAME_AS.
	(cp_parser_declaration): Handle concept introduction.
	(cp_parser_member_declaration): Likewise.
	(cp_parser_template_parameter): Handle constrained parameter.
	(cp_parser_type_parameter): Handle constraints.
	(cp_parser_decl_specifier_seq): Handle RID_CONCEPT.
	(cp_parser_template_id): Handle partial concept id.
	(cp_parser_type_name): Add overload that takes typename_keyword_p.
	Handle constrained parameter.
	(cp_parser_nonclass_name): Handle concept names.
	(cp_parser_alias_declaration): Handle constraints.
	(cp_parser_late_return_type_opt): Also handle requires-clause.
	(cp_parser_type_id_1): Handle deduction constraint.
	(cp_parser_parameter_declaration): Handle constrained parameters.
	(cp_parser_class_specifier_1): Handle constraints.
	(cp_parser_template_declaration_after_parameters): Split out from
	(cp_parser_single_declaration): Handle constraints.
	(synthesize_implicit_template_parm): Handle constraints.
	(cp_parser_maybe_concept_name, cp_parser_maybe_partial_concept_id)
	(cp_parser_introduction_list, get_id_declarator)
	(get_unqualified_id, is_constrained_parameter)
	(constrained_non_type_template_parm, finish_constrained_parameter)
	(check_type_concept, cp_parser_maybe_constrained_type_specifier)
	(cp_parser_maybe_concept_name, cp_parser_maybe_partial_concept_id)
	(cp_parser_requires_clause, cp_parser_requires_clause_opt)
	(cp_parser_requirement_parameter_list, cp_parser_requirement_body)
	(cp_parser_requirement_list, cp_parser_requirement)
	(cp_parser_simple_requirement, cp_parser_type_requirement)
	(cp_parser_compound_requirement, cp_parser_nested_requirement)
	(get_concept_from_constraint): New.
	* pt.c (local_specialization_stack): Implement.
	(maybe_new_partial_specialization): New.
	(maybe_process_partial_specialization): Use it.
	(retrieve_local_specialization, register_local_specialization)
	(template_parm_to_arg, build_template_decl, extract_fnparm_pack)
	(tsubst_expr): No longer static.
	(spec_hasher::equal): Compare constraints.
	(determine_specialization): Handle constraints.
	(check_explicit_specialization): Handle concepts.
	(process_template_parm): Handle constraints.
	(end_template_parm_list): Add overload taking no arguments.
	(process_partial_specialization): Handle concepts and constraints.
	Register partial specializations of variable templates.
	(redeclare_class_template): Handle constraints.
	(convert_template_argument): Handle WILDCARD_DECL.  Check
	(coerce_template_parameter_pack): Handle wildcard packs.
	(coerce_template_parms): DR 1430 also applies to concepts.  Add
	overloads taking fewer parameters.
	(lookup_template_class_1): Handle constraints.
	(lookup_template_variable): Concepts are always bool.
	(finish_template_variable): Handle concepts and constraints.
	(tsubst_friend_class): Handle constraints.
	(gen_elem_of_pack_expansion_instantiation): Handle constraints.
	(tsubst_pack_expansion): Handle local parameters.
	(tsubst_decl) [FUNCTION_DECL]: Handle constraints.
	(tsubst) [TEMPLATE_TYPE_PARM]: Handle deduction constraints.
	(tsubst_copy_and_build): Handle REQUIRES_EXPR.
	(more_specialized_fn, more_specialized_partial_spec): Check constraints.
	(more_specialized_inst): Split out from most_specialized_instantiation.
	(most_specialized_partial_spec): Check constraints.
	(instantiate_decl): Never instantiate a concept.
	(value_dependent_expression_p): Handle REQUIRES_EXPR, TYPE_REQ,
	variable concepts.
	(type_dependent_expression_p): Handle WILDCARD_DECL, REQUIRES_EXPR.
	(instantiation_dependent_r): Handle REQUIRES_EXPR and concepts.
	(do_auto_deduction): Add overload taking tsubst flags and context enum.
	Handle constraints.
	(get_template_for_ordering, most_constrained_function)
	(is_compatible_template_arg, convert_wildcard_argument)
	(struct	constr_entry, struct constr_hasher, decl_constraints)
	(valid_constraints_p, get_constraints, set_constraints)
	(remove_constraints, init_constraint_processing): New.
	* ptree.c (cxx_print_xnode): Handle CONSTRAINT_INFO.
	* search.c (lookup_member): Do lookup in the open partial
	* semantics.c (finish_template_template_parm): Handle constraints.
	(fixup_template_type): New.
	(finish_template_type): Call it.
	(trait_expr_value, finish_trait_expr): Handle CPTK_IS_SAME_AS.
	* tree.c (cp_tree_equal): Handle local parameters, CONSTRAINT_INFO.
	(cp_walk_subtrees): Handle REQUIRES_EXPR.
	* typeck.c (cp_build_function_call_vec): Check constraints.

2015-08-06  Jason Merrill  <>

	PR c++/66533
	* parser.c (cp_parser_primary_expression): Don't skip to the end
	of the statement if we're parsing tentatively.

	PR c++/67130
	PR c++/67131
	PR c++/66260
	* mangle.c (write_expression) [TEMPLATE_ID_EXPR]: Handle variable
	* pt.c (tsubst_copy_and_build): Check for argument substitution

2015-08-05  Jason Merrill  <>

	* pt.c (determine_specialization): Print candidates after 'no
	match' error.

	* decl.c (cp_finish_decl): Tidy.
	* typeck.c (finish_class_member_access_expr): Use
	* semantics.c (finish_id_expression): Use
	type_dependent_expression_p.  Don't build_qualified_name for a
	decl in non-dependent scope.
	* pt.c (type_dependent_expression_p): A TEMPLATE_ID_EXPR of an
	identifier is dependent.  Remove variable_template_p check.

	PR c++/66260
	PR c++/66596
	PR c++/66649
	PR c++/66923
	* pt.c (lookup_template_variable): Use NULL_TREE for type.
	(instantiate_template_1): Also set DECL_TI_ARGS based on
	the immediate parent.
	(tsubst_copy_and_build) [TEMPLATE_ID_EXPR]: Handle variable templates.
	(finish_template_variable): Add complain parm.
	* cp-tree.h: Adjust.

	PR c++/65195
	PR c++/66619
	* semantics.c (finish_id_expression): Call convert_from_reference
	for variable template.

2015-08-04  Jason Merrill  <>

	* pt.c (lookup_template_class_1): Clear elt.spec.

	* tree.c (build_target_expr): Copy the location from value.

2015-08-02  Patrick Palka  <>

	* parser.c (cp_parser_selection_statement): Move handling of
	semicolon body to ...
	(cp_parser_implicitly_scoped_statement): .. here.  Call
	warn_for_misleading_indentation even when the body is a
	semicolon.  Extract token_indent_infos corresponding to the
	guard, body and next tokens.  Adjust call to
	warn_for_misleading_indentation accordingly.  Take
	token_indent_info argument.
	(cp_parser_already_scoped_statement): Likewise.
	(cp_parser_selection_statement, cp_parser_iteration_statement):
	Extract a token_indent_info corresponding to the guard token.

2015-08-01  Caroline Tice  <>

	PR 66521
	* mangle.c : Add vtable-verify.h to include files.
	(get_mangled_vtable_map_var_name):  If the DECL_ASSEMBLER_NAME
	is "<anon>" get the real mangled name for the class instead, and
	also store the real mangled name in a vector for use later.

2015-07-31  Marek Polacek  <>

	PR sanitizer/66977
	* typeck.c (get_member_function_from_ptrfunc): Don't sanitize

2015-07-30  Paolo Carlini  <>

	* class.c (check_for_override): Use DECL_SOURCE_LOCATION and "%qD"
	in warning_at instead of "%q+D" in warning.
	(warn_hidden): Likewise but use location_of.
	(finish_struct_anon_r): Likewise use DECL_SOURCE_LOCATION in permerror.
	(check_bitfield_decl, check_field_decls): Likewise in warning_at.
	(check_field_decls): Likewise for permerror.
	(explain_non_literal_class): Likewise for inform.
	(check_bases_and_members, layout_class_type): Likewise for warning_at.
	(note_name_declared_in_class): Use location_of in permerror.
	* name-lookup.c (diagnose_name_conflict): Use location_of in inform.
	(pushdecl_maybe_friend_1): Use DECL_SOURCE_LOCATION in pedwarn,
	inform, and warning_at.
	(check_for_out_of_scope_variable): Likewise for warning_at and

2015-07-30  Jason Merrill  <>

	DR 1558
	PR c++/67021
	* pt.c (tsubst_decl) [TYPE_DECL]: Clear TYPE_DEPENDENT_P_VALID.

2015-07-28  Paolo Carlini  <>

	* call.c (build_op_delete_call, convert_like_real, build_over_call):
	Use Use DECL_SOURCE_LOCATION and "%qD" in inform and pedwarn instead
	of "%q+D".
	* constexpr.c (explain_invalid_constexpr_fn): Likewise.
	* decl.c (duplicate_decls): Likewise for warning/warning_at.
	* except.c (maybe_noexcept_warning): Likewise.
	* friend.c (make_friend_class): Likewise for inform.
	* mangle.c (mangle_decl): Likewise for warning/warning_at.
	* method.c (process_subob_fn, walk_field_subobs,
	maybe_explain_implicit_delete): Likewise for inform.
	* parser.c (cp_parser_lambda_introducer): Likewise.
	* pt.c (check_specialization_namespace,
	maybe_process_partial_specialization): Likewise for permerror.
	(redeclare_class_template): Likewise for inform_n.
	(coerce_template_parms, tsubst_copy_and_build): Likewise for inform.
	* search.c (check_final_overrider): Likewise.
	* semantics.c (process_outer_var_ref): Likewise.

2015-07-27  Jason Merrill  <>

	* constexpr.c (cxx_eval_call_expression): Don't add this call to
	the hash table if !depth_ok.

2015-07-27  Marek Polacek  <>

	PR c++/66555
	PR c/54979
	* call.c (build_new_op_1): Call warn_tautological_cmp.
	* pt.c (tsubst_copy_and_build): Use sentinel to suppress tautological
	compare warnings.

2015-07-26  Patrick Palka  <>

	PR c++/18969
	* typeck.c (check_return_expr): Also do the basic return-value
	validity checking if processing_template_decl and yet types are
	not dependent.  Remove obsolete code.

2015-07-26  Paolo Carlini  <>

	* decl.c (poplevel): Use Use DECL_SOURCE_LOCATION and "%qD"
	in warning_at instead of "%q+D" in warning.
	(warn_extern_redeclared_static): Likewise for inform.
	(check_redeclaration_no_default_args): Likewise for permerror.
	(duplicate_decls): Likewise.
	(check_previous_goto_1): Likewise for inform.
	(check_goto, start_decl, check_for_uninitialized_const_var,
	start_preparsed_function, finish_function§): Likewise.
	* decl2.c (build_anon_union_vars, c_parse_final_cleanups): Likewise.
	* init.c (sort_mem_initializers): Likewise.
	* typeck.c (convert_for_initialization): Likewise for inform.
	(maybe_warn_about_returning_address_of_local): Likewise.
	* typeck2.c (abstract_virtuals_error_sfinae): Likewise for inform.
	(cxx_incomplete_type_diagnostic): Likewise for emit_diagnostic.

2015-07-25  Patrick Palka  <>

	PR c++/66857
	* cvt.c (ocp_convert): Don't call scalar_constant_value when
	converting to a class type.

2015-07-24  Jason Merrill  <>

	PR c++/64969
	* pt.c (splice_late_return_type): Correct deduced return type for
	abbreviated function template.

2015-07-24  Richard Biener  <>

	* init.c (build_vec_init): Build iterator bound in the same
	type as the iterator.

2015-07-23  Marek Polacek  <>

	PR c++/66572
	* pt.c (tsubst_copy_and_build): Add warn_logical_op sentinel.

2015-07-23  Paolo Carlini  <>

	PR c++/52987
	* parser.c (cp_parser_simple_declaration): Robustify check avoiding
	redundant error messages.

2015-07-21  Paolo Carlini  <>

	* decl.c (grokdeclarator): For an erroneous template parameter
	propagate error_mark_node as type.

2015-07-20  Marek Polacek  <>

	PR c++/55095
	* typeck.c (cp_build_binary_op): Warn about left shift overflows.

2015-07-15  Jason Merrill  <>

	PR c++/65091
	* parser.c (cp_parser_unqualified_id): Don't accept ~x in a
	template if there is no type x in scope.

2015-07-14  Patrick Palka  <>

	PR c++/66850
	* pt.c (redeclare_class_template): Set the DECL_CONTEXTs of each
	template template parm in the redeclaration.
	(lookup_template_class_1): Peel off irrelevant template levels
	from current_template_parms before augmenting the argument

2015-07-14  Andrea Azzarone  <>

	PR c++/65071
	* parser.c (cp_parser_sizeof_pack): Also consider template template

2015-07-14  Jason Merrill  <>

	* call.c (build_new_method_call_1): Call reshape_init.

2015-07-14  Paolo Carlini  <>

	* pt.c (check_template_shadow): Emit error + inform instead of
	two errors.

2015-07-13  Patrick Palka  <>

	PR c++/65186
	* pt.c (invalid_nontype_parm_type_p): Accept a bound template
	template parm type under C++11 and later.

2015-07-12  Aldy Hernandez  <>

	* call.c: Fix double word typos.
	* cp-array-notation.c: Same.
	* cp-tree.h: Same.
	* init.c: Same.
	* name-lookup.c: Same.
	* parser.c: Same.

2015-07-10  Patrick Palka  <>

	PR c++/30044
	* pt.c (begin_template_parm_list): Add a dummy parameter level
	to current_template_parms.
	(end_template_parm_list): Remove the dummy parameter level
	before adding the real one.
	(tsubst): Don't attempt to substitute for template parameters
	corresponding to a dummy argument level.
	(template_parms_to_args): Remove obsolete hack for
	giving template template arguments the proper level.
	(splite_late_return_type): Remove obsolete hack for giving
	template template arguments the proper level.
	* error.c (dump_template_decl): Don't print dummy template

2015-07-10  Paolo Carlini  <>

	PR c++/54521
	* call.c (convert_like_real): Do not set LOOKUP_ONLYCONVERTING for
	the second step of copy-initialization.

2015-07-10  Jason Merrill  <>

	* pt.c (find_parameter_packs_r): Handle variable templates.
	(variable_template_specialization_p): New.
	* cp-tree.h: Declare it.

	* parser.c (cp_parser_template_id): SET_EXPR_LOCATION.

2015-07-10  Eric Botcazou  <>

	* decl2.c (cpp_check): Revert latest change.

2015-07-09  Jason Merrill  <>

	* pt.c (instantiation_dependent_r) [TRAIT_EXPR]: Call

	* cp-tree.h (struct cp_parameter_declarator): Rename ellipsis_p to
	* parser.c (declarator_can_be_parameter_pack): False if
	parameter_pack_p is set.
	(make_parameter_declarator): Add template_parameter_pack_p parm.
	(cp_parser_template_parameter): Remove parameter pack parsing.
	(cp_parser_parameter_declaration): Handle all parameter packs.
	Tweak default argument permerror.

2015-07-09  Andrew Sutton  <>

	* parser.c (cp_parser_default_type_template_argument)
	(cp_parser_default_template_template_argument): Factor out from

2015-07-09  Paolo Carlini  <>

	* typeck.c (warn_args_num): Rename to error_args_num.
	(convert_arguments): Adjust calls.

2015-07-09  Andrew MacLeod  <>

	* cp-ubsan.c: Don't include alloc-pool.h or lto-streamer.h.

2015-07-08  Eric Botcazou  <>

	* decl2.c (cpp_check): Deal with IS_CONSTEXPR.

2015-07-08  Jakub Jelinek  <>

	* decl.c (grokfndecl): Handle flag_openmp_simd like flag_openmp.
	* pt.c (apply_late_template_attributes): Likewise.

2015-07-08  Marek Polacek  <>

	PR c++/66748
	* tree.c (handle_abi_tag_attribute): Check for CLASS_TYPE_P before
	accessing TYPE_LANG_SPECIFIC node.

2015-07-07  Andrew MacLeod  <>

	* call.c: Adjust includes.
	* class.c: Likewise.
	* constexpr.c: Likewise.
	* cp-array-notation.c: Likewise.
	* cp-gimplify.c: Likewise.
	* cp-lang.c: Likewise.
	* cp-objcp-common.c: Likewise.
	* cp-ubsan.c: Likewise.
	* cvt.c: Likewise.
	* decl.c: Likewise.
	* decl2.c: Likewise.
	* dump.c: Likewise.
	* error.c: Likewise.
	* except.c: Likewise.
	* expr.c: Likewise.
	* friend.c: Likewise.
	* init.c: Likewise.
	* lambda.c: Likewise.
	* lex.c: Likewise.
	* mangle.c: Likewise.
	* method.c: Likewise.
	* name-lookup.c: Likewise.
	* optimize.c: Likewise.
	* parser.c: Likewise.
	* pt.c: Likewise.
	* ptree.c: Likewise.
	* repo.c: Likewise.
	* rtti.c: Likewise.
	* search.c: Likewise.
	* semantics.c: Likewise.
	* tree.c: Likewise.
	* typeck.c: Likewise.
	* typeck2.c: Likewise.

2015-07-07  Eric Botcazou  <>

	* decl2.c (cpp_check): Deal with IS_MOVE_CONSTRUCTOR.

2015-07-06  Jason Merrill  <>

	* pt.c (reduce_template_parm_level): Also build the TYPE_DECL
	for a template template parameter.
	(tsubst_decl) [TEMPLATE_DECL]: Use the TEMPLATE_DECL built
	by reduce_template_parm_level.

	* pt.c (argument_pack_element_is_expansion_p): A decl pack is an

2015-07-02  Jason Merrill  <>

	PR c++/66743
	* pt.c (for_each_template_parm_r) [UNDERLYING_TYPE]: Use

2015-07-02  Andrew Sutton  <>

	* pt.c (type_dependent_expression_p): Handle expressions
	that refer to variable templates.

2015-07-01  Jason Merrill  <>

	* lex.c (init_reswords): s/CXX0X/CXX11/.
	* parser.c (cp_lexer_get_preprocessor_token): Likewise.

	* mangle.c (write_CV_qualifiers_for_type, write_nested_name):
	Attribute mangling is now -fabi-version=10.

	PR c++/65945
	* decl.c (cxx_init_decl_processing): Set TYPE_ALIGN of nullptr_t.
	* class.c (layout_nonempty_base_or_field): Warn if that affects
	the offset of a field.

2015-07-01  Paolo Carlini  <>

	PR c++/60365
	* parser.c (cp_parser_check_std_attribute): New.
	(cp_parser_std_attribute_list): Call it.

2015-07-01  Patrick Palka  <>

	PR c++/66686
	* pt.c (coerce_template_template_parm) [PARM_DECL]: Don't
	return 0 if tsubst returns a dependent type.

2015-06-30  Jason Merrill  <>

	PR debug/66653
	* decl2.c (is_late_template_attribute): True for tls_model.

	PR debug/66653
	* cp-tree.h (CP_DECL_THREAD_LOCAL_P): New.
	* call.c (make_temporary_var_for_ref_to_temp): Use
	(set_up_extended_ref_temp): Likewise.
	* decl.c (duplicate_decls, expand_static_init): Likewise.
	(redeclaration_error_message, grokvardecl): Likewise.
	(start_decl, register_dtor_fn, grokdeclarator): Likewise.
	* decl2.c (get_guard, var_needs_tls_wrapper): Likewise.
	(handle_tls_init): Likewise.
	* pt.c (tsubst_decl, tsubst_copy_and_build): Likewise.
	* semantics.c (finish_id_expression): Likewise.
	(handle_omp_array_sections_1, finish_omp_clauses): Likewise.
	(finish_omp_threadprivate): Likewise.
	* tree.c (decl_storage_duration): Likewise.
	* cp-gimplify.c (omp_var_to_track): Likewise.
	(cp_genericize_r): Check that it matches DECL_THREAD_LOCAL_P.
	* lex.c (retrofit_lang_decl): Return if DECL_LANG_SPECIFIC is
	already set.

2015-06-30  Edward Smith-Rowland  <>

	Implement N4197 - Adding u8 character literals
	* parser.c (cp_parser_primary_expression()): Treat CPP_UTF8CHAR
	(cp_parser_parenthesized_expression_list()): Treat CPP_UTF8CHAR token.

2015-06-29  Paolo Carlini  <>

	PR c++/65977
	* decl.c (grokfndecl): Allow constexpr declarations of friend
	template specializations.

2015-06-29  Manuel López-Ibáñez  <>

	PR fortran/66605
	* decl.c (finish_function): Call do_warn_unused_parameter.

2015-06-29  Marek Polacek  <>

	PR c/66322
	* decl.c (struct cp_switch): Add OUTSIDE_RANGE_P.
	(push_switch): Set OUTSIDE_RANGE_P.
	(pop_switch): Update c_do_switch_warnings call.
	(finish_case_label): Update c_add_case_label call.
	* semantics.c (finish_switch_cond): Don't warn about -Wswitch-bool

2015-06-27  Marek Polacek  <>

	* call.c: Use VECTOR_TYPE_P.
	* constexpr.c: Likewise.
	* cvt.c: Likewise.
	* decl.c: Likewise.
	* decl2.c: Likewise.
	* init.c: Likewise.
	* semantics.c: Likewise.
	* tree.c: Likewise.
	* typeck.c: Likewise.
	* typeck2.c: Likewise.

2015-06-27  Marek Polacek  <>

	* call.c (set_up_extended_ref_temp): Use VAR_P.
	* class.c: Use VAR_P throughout.
	* constexpr.c (cxx_eval_constant_expression): Use VAR_P.
	* cp-array-notation.c (make_triplet_val_inv): Likewise.
	* decl.c: Use VAR_OR_FUNCTION_DECL_P or VAR_P
	* decl2.c: Likewise.
	* error.c (dump_decl): Use VAR_P.
	* mangle.c (decl_implicit_alias_p): Likewise.
	* parser.c: Use VAR_P throughout.
	* pt.c: Likewise.
	* semantics.c: Likewise.
	* vtable-class-hierarchy.c: Likewise.
	* tree.c (handle_abi_tag_attribute): Use VAR_OR_FUNCTION_DECL_P.

2015-06-27  Andreas Schwab  <>

	* pt.c (check_unstripped_args): Mark parameter as unused.

2015-06-26  Jason Merrill  <>

	PR c++/66216
	* class.c (finish_struct): Call fixup_attribute_variants.

	PR c++/66684
	* typeck2.c (merge_exception_specifiers): Allow different
	noexcept-specifiers if we've had errors.

	PR c++/66255
	* pt.c (check_unstripped_args): Split out from...
	(retrieve_specialization):  Allow typedefs in the type of
	a non-type argument.

	PR c++/66067
	* mangle.c (write_nested_name): Limit TYPENAME_TYPE handling to
	* mangle.c (write_template_args): Handle 0 length TREE_VEC.

	PR c++/66654
	* typeck2.c (digest_init_r): Only expect reshaping if the class is

2015-06-26  Marek Polacek  <>

	* cp-array-notation.c (expand_sec_reduce_builtin): Use INDIRECT_REF_P.
	* cp-ubsan.c (cp_ubsan_check_member_access_r): Likewise.

2015-06-25  Andrew MacLeod  <>

	* call.c: Remove ipa-ref.h and plugin-api.h from include list.
	* class.c: Likewise.
	* cp-ubsan.c: Likewise.
	* decl.c: Likewise.
	* decl2.c: Likewise.
	* lambda.c: Likewise.
	* mangle.c: Likewise.
	* method.c: Likewise.
	* optimize.c: Likewise.
	* parser.c: Likewise.
	* semantics.c: Likewise.
	* tree.c: Likewise.
	* vtable-class-hierarchy.c: Likewise.

2015-06-25  Richard Sandiford  <>

	* constexpr.c (constexpr_fundef_hasher): Inherit from ggc_ptr_hash
	rather than ggc_hasher.
	(constexpr_call_hasher): Likewise.
	* cp-tree.h (cxx_int_tree_map_hasher, named_label_hasher): Likewise.
	* decl.c (typename_hasher): Likewise.
	* mangle.c (conv_type_hasher): Likewise.
	* pt.c (spec_hasher): Likewise.
	* tree.c (cplus_array_hasher, list_hasher): Likewise.
	* typeck2.c (abstract_type_hasher): Likewise.

2015-06-25  Richard Sandiford  <>

	* class.c (fixed_type_or_null_ref_ht): Inherit from nofree_ptr_hash
	rather than pointer_hash.
	(fixed_type_or_null): Use nofree_ptr_hash instead of pointer_hash.
	* semantics.c (nrv_data): Likewise.
	* tree.c (verify_stmt_tree_r, verify_stmt_tree): Likewise.

2015-06-24  Jason Merrill  <>

	PR c++/66647
	* pt.c (dependent_type_p_r): Check for dependent alias template
	specialization sooner.

	PR c++/66501
	* class.c (type_has_nontrivial_assignment): Remove.
	* cp-tree.h: Remove declaration.
	* init.c (vec_copy_assign_is_trivial): New.
	(build_vec_init): Use it.

2015-06-24  Edward Smith-Rowland  <>

	Implement N3928 - Extending static_assert
	* parser.c (cp_parser_static_assert): Support static_assert with
	no message string.  Supply an empty string in this case.
	* semantics.c (finish_static_assert): Don't try to print a message if
	the message strnig is empty.

2015-06-24  Adam Butcher  <>

	PR c++/65750
	* parser.c (cp_parser_simple_type_specifier): Don't synthesize
	implicit template parm if 'auto' is a placeholder for trailing
	return type.

2015-06-24  Patrick Palka  <>

	2015-06-23  Patrick Palka  <>

	PR c++/30044
	* parser.c (cp_parser_template_parameter_list): Update
	current_template_parms right after processing a paramater.
	* pt.c (template_parms_to_args): Remove obsolete hack for
	giving template template arguments the proper level.
	(check_default_tmpl_args): Account for tested template
	(splite_late_return_type): Remove obsolete hack for giving
	template template arguments the proper level.

2015-06-24  Paolo Carlini  <>

	PR c++/65811
	* decl.c (duplicate_decls): Adjust DECL_COMDAT of newdecl.

2015-06-23  Patrick Palka  <>

	PR c++/30044
	* parser.c (cp_parser_template_parameter_list): Update
	current_template_parms right after processing a paramater.
	* pt.c (template_parms_to_args): Remove obsolete hack for
	giving template template arguments the proper level.
	(check_default_tmpl_args): Account for tested template
	(splite_late_return_type): Remove obsolete hack for giving
	template template arguments the proper level.

2015-06-23  Jason Merrill  <>

	PR c++/65879
	* decl.c (grokfndecl): Check the linkage of ctype, not just
	* tree.c (no_linkage_check): Skip the 'this' pointer.

	PR c++/66501
	* class.c (type_has_nontrivial_assignment): New.
	* init.c (build_vec_init): Use it.
	* cp-tree.h: Declare it.
	* method.c (trivial_fn_p): Templates aren't trivial.

	PR c++/66542
	* decl.c (expand_static_init): Make sure the destructor is callable
	here even if we have an initializer.

2015-06-04  Pierre-Marie de Rodat  <>

	* lang-specs.h: Pass "-o %g.s" to cc1plus for headers even if
	-fdump-ada-spec is passed.

2015-06-22  Pierre-Marie de Rodat  <>

	* decl2.c (cpp_check): Deal with HAS_DEPENDENT_TEMPLATE_ARGS.

2015-06-22  Paolo Carlini  <>

	* decl.c (grokdeclarator): Use declspecs->locations[ds_virtual].

2015-06-22  Paolo Carlini  <>

	* decl.c (grokdeclarator): Remove pointless code.

2015-06-22  Jason Merrill  <>

	PR c++/66515
	* call.c (implicit_conversion): Only reshape for classes.

2015-06-22  Mikhail Maltsev  <>

	* pt.c (maybe_adjust_types_for_deduction): Use std::swap instead of
	manually swapping.
	* semantics.c (finish_omp_atomic): Likewise.
	* typeck.c (cp_build_array_ref): Likewise.

2015-06-20  Mikhail Maltsev  <>

	PR c++/65882
	* call.c (build_new_op_1): Check tf_warning flag in all cases.

2015-06-19  Jason Merrill  <>

	PR c++/66585
	* pt.c (instantiate_class_template_1): Clear
	cp_unevaluated_operand and c_inhibit_evaluation_warnings.

	PR c++/65880
	* decl.c (build_ptrmemfunc_type): Check TYPE_GET_PTRMEMFUNC_TYPE after
	* typeck.c (merge_types): build_ptrmemfunc_type before applying
	quals and attributes.

	PR c++/65973
	* constexpr.c (build_constexpr_constructor_member_initializers):
	Handle an empty STATEMENT_LIST.

	PR c++/65843
	* pt.c (tsubst_copy_and_build): Register a capture proxy in

2015-06-17  Jason Merrill  <>

	PR c++/66001
	* constexpr.c (cxx_eval_constant_expression): Handle TRY_BLOCK and
	(potential_constant_expression_1): Likewise.

2015-06-17  Jason Merrill  <>

	PR c++/66515
	* call.c (implicit_conversion): Call reshape_init here, early.
	(build_aggr_conv): Not here.

2015-06-17  Jakub Jelinek  <>

	PR c++/66571
	* pt.c (tsubst_omp_clause_decl): New function.
	(tsubst_omp_clauses): Use it or tsubst_copy instead of
	tsubst_expr on OMP_CLAUSE_DECL.

2015-06-17  Andrew MacLeod  <>

	* cp-lang.c (cxx_dwarf_name): Use anon_aggrname_p.
	* cp-tree.h (TYPE_ANONYMOUS_P): Likewise.
	* decl.c (grokdeclarator, xref_tag_1): Likewise.
	* error.c (dump_aggr_type): likewise.
	* pt.c (push_template_decl_real): Likewise.
	* name-lookup.c (make_anon_name): Use anon_aggrname_format.

2015-06-17  Andrew MacLeod  <>

	* call.c: Do not include input.h, line-map.h or is-a.h.
	* class.c: Likewise.
	* constexpr.c: Likewise.
	* cp-array-notation.c: Likewise.
	* cp-gimplify.c: Likewise.
	* cp-lang.c: Likewise.
	* cp-objcp-common.c: Likewise.
	* cp-tree.h: Likewise.
	* cp-ubsan.c: Likewise.
	* cvt.c: Likewise.
	* decl.c: Likewise.
	* decl2.c: Likewise.
	* dump.c: Likewise.
	* error.c: Likewise.
	* except.c: Likewise.
	* expr.c: Likewise.
	* friend.c: Likewise.
	* init.c: Likewise.
	* lambda.c: Likewise.
	* lex.c: Likewise.
	* mangle.c: Likewise.
	* method.c: Likewise.
	* name-lookup.c: Likewise.
	* optimize.c: Likewise.
	* parser.c: Likewise.
	* pt.c: Likewise.
	* ptree.c: Likewise.
	* repo.c: Likewise.
	* rtti.c: Likewise.
	* search.c: Likewise.
	* semantics.c: Likewise.
	* tree.c: Likewise.
	* typeck.c: Likewise.
	* typeck2.c: Likewise.
	* vtable-class-hierarchy.c: Likewise.

2015-06-16  Paolo Carlini  <>

	PR c++/59682
	* parser.c (cp_parser_new_placement): Reject an empty expression-list.

2015-06-16  Jason Merrill  <>

	PR c++/66536
	* tree.c (replace_placeholders_r) [CONSTRUCTOR]: Handle type

	PR c++/58063
	* tree.c (bot_manip): Remap SAVE_EXPR.

	PR c++/66387
	* pt.c (tsubst_copy) [VAR_DECL]: Use process_outer_var_ref.

2015-06-15  Nathan Sidwell  <>

	PR c++/58583
	* init.c (get_nsdmi): Check for DEFAULT_ARG in template case and
	protect it from recursive instantiation.

2015-06-15  Paolo Carlini  <>

	PR c++/51048
	* decl2.c (no_linkage_error): Do not issue a permerror if the DECL
	using a local type is pure virtual.

2015-06-13  Patrick Palka  <>

	* call.c: Remove comment documenting the long-deleted
	function build_method_call.

2015-06-13  Patrick Palka  <>

	PR c++/65168
	* typeck.c (cp_build_binary_op): Warn when comparing an address
	of a reference against NULL.

2015-06-12  Jason Merrill  <>

	PR c++/65719
	* pt.c (tsubst_decl) [VAR_DECL]: Mark namespace-scope

2015-06-11  Jason Merrill  <>

	PR c++/66445
	* constexpr.c (potential_constant_expression_1): Handle a

	PR c++/66450
	* constexpr.c (cxx_eval_store_expression): Avoid messing up outer

2015-06-11  Pierre-Marie de Rodat  <>

	* decl.c (cxx_init_decl_processing): Register the main
	translation unit through the new debug hook.

2015-06-10  Jason Merrill  <>

	PR c++/66289
	* pt.c (push_template_decl_real): Set it.
	(dependent_alias_template_spec_p): Use it.
	(dependent_type_p_r): Use dependent_alias_template_spec_p.
	(uses_all_template_parms_data, uses_all_template_parms_r)
	(complex_alias_template_p): New.
	(get_template_parm_index): Handle BOUND_TEMPLATE_TEMPLATE_PARM.

2015-06-09  Jason Merrill  <>

	DR 1467
	PR c++/51747
	* typeck2.c (digest_init_r): Replace previous change with

	PR c++/66387
	* semantics.c (process_outer_var_ref): Make sure the value is
	actually constant before returning it.
	* typeck.c (cp_build_array_ref): Allow subscripting non-lvalue

2015-06-09  Paolo Carlini  <>

	PR c++/65815
	* typeck2.c (digest_nsdmi_init): On aggregates use reshape_init.
	* init.c (expand_default_init): Likewise.

2015-06-09  Jason Merrill  <>

	PR c++/66383
	* tree.c (replace_placeholders_r): Handle placeholders for an
	outer object.
	* typeck2.c (store_init_value): Only replace_placeholders for
	objects of class type.

2015-06-08  Andrew MacLeod  <>

	* call.c : Adjust include files.
	* class.c : Likewise.
	* constexpr.c : Likewise.
	* cp-array-notation.c : Likewise.
	* cp-cilkplus.c : Likewise.
	* cp-gimplify.c : Likewise.
	* cp-lang.c : Likewise.
	* cp-objcp-common.c : Likewise.
	* cp-tree.h : Likewise.
	* cp-ubsan.c : Likewise.
	* cvt.c : Likewise.
	* decl.c : Likewise.
	* decl2.c : Likewise.
	* dump.c : Likewise.
	* error.c : Likewise.
	* except.c : Likewise.
	* expr.c : Likewise.
	* friend.c : Likewise.
	* init.c : Likewise.
	* lambda.c : Likewise.
	* lex.c : Likewise.
	* mangle.c : Likewise.
	* method.c : Likewise.
	* name-lookup.c : Likewise.
	* optimize.c : Likewise.
	* parser.c : Likewise.
	* pt.c : Likewise.
	* ptree.c : Likewise.
	* repo.c : Likewise.
	* rtti.c : Likewise.
	* search.c : Likewise.
	* semantics.c : Likewise.
	* tree.c : Likewise.
	* typeck.c : Likewise.
	* typeck2.c : Likewise.
	* vtable-class-hierarchy.c : Likewise.

2015-06-05  Jason Merrill  <>

	PR c++/66405
	* pt.c (argument_pack_element_is_expansion_p): Return 2 if
	the expansion has extra args.
	(use_pack_expansion_extra_args_p): Return true in that case.

	PR c++/66405
	* pt.c (type_dependent_expression_p): EXPR_PACK_EXPANSION is
	dependent even if it has a type.

2015-06-05  Aldy Hernandez  <>

	* cp-objcp-common.c: Adjust comment for
	* cp-objcp-common.h (LANG_HOOKS_WRITE_GLOBALS): Remove
	* cp-tree.h (note_mangling_alias): Protoize.
	(cp_write_global_declarations): Remove.
	(cxx_post_compilation_parsing_cleanups): Protoize.
	* decl.c (wrapup_globals_for_namespace): Remove use of DATA
	* decl2.c (mangling_aliases): New global.
	(build_java_method_aliases): New.  Adapted from
	(collect_candidates_for_java_method_aliases): Remove.
	(build_java_method_aliases): Remove.
	(generate_mangling_aliases): New.
	(note_mangling_alias): New.  Moved from mangle_decl.
	(locus_at_end_of_parsing): New global.
	(c_parse_final_cleanups): Rename from
	Use locus_at_end_of_parsing.
	Call generate_mangling_aliases.
	Rename call to collect_candidates_for_java_method_aliases into
	Remove call to finalize_compilation_unit.
	Move vtable handling into cxx_post_compilation_parsing_cleanups.
	Do not call check_global_declarations or
	(cxx_post_compilation_parsing_cleanups): New.
	* mangle.c (mangle_decl): Move code to note_mangling_alias.
	* name-lookup.c (do_namespace_alias): Call early_global_decl.

2015-06-05  Nathan Sidwell  <>

	PR c++/52595
	* parser.c (cp_parser_cache_defarg): Continue looking for
	declarators when scanning a potential template argument list of an

2015-06-04  Andrew MacLeod  <>

	* call.c: Adjust includes for restructured coretypes.h.
	* class.c: Likewise.
	* constexpr.c: Likewise.
	* cp-array-notation.c: Likewise.
	* cp-gimplify.c: Likewise.
	* cp-lang.c: Likewise.
	* cp-objcp-common.c: Likewise.
	* cp-tree.h: Likewise.
	* cp-ubsan.c: Likewise.
	* cvt.c: Likewise.
	* decl.c: Likewise.
	* decl2.c: Likewise.
	* dump.c: Likewise.
	* error.c: Likewise.
	* except.c: Likewise.
	* expr.c: Likewise.
	* friend.c: Likewise.
	* init.c: Likewise.
	* lambda.c: Likewise.
	* lex.c: Likewise.
	* mangle.c: Likewise.
	* method.c: Likewise.
	* name-lookup.c: Likewise.
	* optimize.c: Likewise.
	* parser.c: Likewise.
	* pt.c: Likewise.
	* ptree.c: Likewise.
	* repo.c: Likewise.
	* rtti.c: Likewise.
	* search.c: Likewise.
	* semantics.c: Likewise.
	* tree.c: Likewise.
	* typeck.c: Likewise.
	* typeck2.c: Likewise.
	* vtable-class-hierarchy.c: Likewise.

2015-06-04  Ramana Radhakrishnan  <>

	PR c++/66192
	PR target/66200
	* cp-tree.h (get_guard_cond): Adjust declaration
	* decl.c (expand_static_init): Use atomic load acquire
	and adjust call to get_guard_cond.
	* decl2.c (build_atomic_load_byte): New function.
	(get_guard_cond): Handle thread_safety.
	(one_static_initialization_or_destruction): Adjust call to

2015-06-03  Jason Merrill  <>

	PR c++/44282
	* mangle.c (mangle_decl): Always SET_IDENTIFIER_GLOBAL_VALUE.
	(write_CV_qualifiers_for_type): Set G.need_abi_warning.
	(decl_implicit_alias_p): Split out from maybe_remove_implicit_alias.
	* cp-tree.h (DECL_REALLY_EXTERN): Handle null DECL_LANG_SPECIFIC.

2015-06-03  Manuel López-Ibáñez  <>
	    Paolo Carlini  <>

	PR c++/66130
	* typeck.c (invalid_nonstatic_memfn_p): Add location_t parameter and
	use it in the diagnostic.
	(decay_conversion): Adjust call.
	* semantics.c (finish_decltype_type): Likewise.
	* call.c (resolve_args, build_new_op_1,
	perform_implicit_conversion_flags): Adjust calls.
	* cvt.c (ocp_convert, convert_to_void): Likewise.
	* cp-tree.h (invalid_nonstatic_memfn_p): Update declaration.

2015-06-03  Paolo Carlini  <>

	* decl.c (check_tag_decl): Use declspecs->locations as locations in
	error_at and warning_at calls.

2015-06-03  Marek Polacek  <>

	PR sanitizer/66190
	* cp-gimplify.c (struct cp_genericize_data): Add no_sanitize_p.
	(cp_genericize_r): Don't instrument static initializers.
	(cp_genericize_tree): Initialize wtd.no_sanitize_p.

2015-06-02  Andres Tiraboschi  <>

	* decl.c (start_function): Call plugin before parsing.
	(finish_function): Call plugin after parsing.

2015-06-02  Patrick Palka <>

	* cp-tree.h (init_error): Remove declaration.
	* error.c (scratch_pretty_printer): Rename to ...
	(actual_pretty_printer): ... this.
	(cxx_pp): Constify and update accordingly.
	(init_error): Remove definition.
	* lex.c (cxx_init): Do not call init_error.

2015-06-02  Paolo Carlini  <>

	PR c++/61683
	* parser.c (cp_parser_mem_initializer): Allow for decltype-specifier.

2015-06-01  Jason Merrill  <>

	PR c++/65942
	* decl2.c (mark_used): Don't always instantiate constexpr fns.
	* constexpr.c (cxx_eval_call_expression): Instantiate them here.

	PR c++/44282
	* mangle.c (attr_strcmp): New.
	(write_CV_qualifiers_for_type): Also write out attributes that
	affect type identity.
	(write_type): Strip all attributes after writing qualifiers.

2015-05-31  Jason Merrill  <>

	* constexpr.c (cxx_eval_indirect_ref): Try folding first.

	PR c++/66320
	* constexpr.c (cxx_eval_constant_expression): Treat a placeholder
	with the wrong type as non-constant.

2015-05-27  Jason Merrill  <>

	* decl.c (check_redeclaration_exception_specification): Depend on
	-Wsystem-headers rather than -pedantic.

	* decl.c (warn_extern_redeclared_static): Use the location of
	newdecl in diagnostics, not input_location.
	(validate_constexpr_redeclaration): Likewise.
	(check_redeclaration_no_default_args): Likewise.
	(duplicate_decls): Likewise.
	(check_redeclaration_exception_specification): Likewise.
	Change second diagnostic to inform.

2015-05-24  Nathan Sidwell  <>

	PR c++/66243
	* decl.c (build_enumerator): Don't silently convert scoped enums.

2015-05-24  Jan Hubicka  <>

	PR lto/66180
	* mangle.c (mangle_decl): Mangle anonymous namespace types as

2015-05-23  Nathan Sidwell  <>

	PR c++/65936
	* pt.c (lookup_template_class_1): Copy may_alias attribute too.

2015-05-22  Jim Wilson  <>

	* (check_g++_parallelize): Update comment.

2015-05-22  Paolo Carlini  <>

	PR c++/65598
	* decl.c (grokdeclarator): Use the correct location in error
	messages about 'explicit'.

2015-05-22  Marek Polacek  <>
	    Edward Smith-Rowland  <>

	PR c/47043
	* cp-tree.h (build_enumerator): Update declaration.
	* decl.c (build_enumerator): Add attributes parameter.  Call
	* init.c (constant_value_1): Pass tf_none to mark_used.
	* parser.c (cp_parser_enumerator_definition): Parse attributes and
	pass them down to build_enumerator.
	* pt.c (tsubst_enum): Pass decl attributes to build_enumerator.
	* semantics.c (finish_id_expression): Don't warn_deprecated_use here.

2015-05-21  Nathan Sidwell  <>

	PR c++/60943
	* decl2.c (change_return_type): Propagate FUNCTION_REF_QUALIFIED.

2015-05-21  Marek Polacek  <>

	* typeck.c (warn_args_num): Don't print "declare here" for builtins.

2015-05-20  Jason Merrill  <>

	before register_specialization.

	* decl.c (grok_op_properties): Don't complain about size_t
	placement delete here.
	* call.c (second_parm_is_size_t): Split out from...
	(build_op_delete_call): Warn about size_t placement delete with

2015-05-19  Nathan Sidwell  <>

	PR c++/65954
	* typeck.c (finish_class_member_access_expr): Diagnose failed
	lookup of enum class member.

2015-05-19  Jakub Jelinek  <>

	PR middle-end/66199
	* parser.c (cp_parser_omp_for_loop): Don't add
	(cp_parser_omp_teams): Set OMP_TEAMS_COMBINED for combined

2015-05-19  Mikhail Maltsev  <>

	* typeck.c (composite_pointer_type): Use std::swap instead of explicit

2015-05-18  Jason Merrill  <>

	* pt.c (retrieve_specialization): Make sure our arguments have
	gone through strip_typedefs.

	* pt.c (tsubst_decl) [VAR_DECL]: Call coerce_innermost_template_parms.
	(determine_specialization): Call coerce_template_parms.

	DR 1391
	* pt.c (type_unification_real): Check convertibility here.
	(unify_one_argument): Not here.

	* tree.c (strip_typedefs_expr) [TRAIT_EXPR]: Fix typo.
	(strip_typedefs) [DECLTYPE_TYPE]: Fix typedef of decltype.
	[TREE_LIST]: Fix no-change case.

	* ptree.c (cxx_print_xnode): Handle TRAIT_EXPR.

2015-05-16  Manuel López-Ibáñez  <>

	PR fortran/44054
	* error.c (cp_diagnostic_starter): Use diagnostic_location
	(cp_print_error_function): Likewise.
	(cp_printer): Replace locus pointer with accessor function.

2015-05-12  David Malcolm  <>

	* parser.c (cp_parser_selection_statement): Add location and
	guard_kind arguments to calls to
	(cp_parser_iteration_statement): Likewise for calls to
	(cp_parser_implicitly_scoped_statement): Add "guard_loc" and
	"guard_kind" params; use them to warn for misleading
	(cp_parser_already_scoped_statement): Likewise.

2015-05-11  Jan Hubicka  <>

	* class.c (fixup_type_variants): Do not copy TYPE_METHODS
	(one_inheriting_sig): Assert tat we always set TYPE_METHODS of main variant.
	* semantics.c (finish_member_declaration): Likewise.
	* method.c (lazily_declare_fn): Allways add method to main variant list.

2015-05-09  Aldy Hernandez  <>

	PR bootstrap/66085
	* decl2.c (note_mangling_alias): Declare arguments as unused.

2015-05-08  Jason Merrill  <>

	* cp-gimplify.c, parser.c: Adjust to -Wc++11-compat replacing

2015-05-08  Jason Merrill  <>

	* decl2.c (mangling_aliases): New variable.
	(note_mangling_alias, generate_mangling_aliases): New.
	(cp_write_global_declarations): Call generate_mangling_aliases.
	(generate_mangling_alias): Split out from...
	* mangle.c (mangle_decl):
	* cp-tree.h: Declare note_mangling_alias.

2015-05-08  Aldy Hernandez  <>

	* decl2.c (collect_candidates_for_java_method_aliases): Remove.
	(build_java_method_aliases): Adapt to use create_same_body_alias
	instead of assemble_alias.  Move variable declarations to
	definition and tidy up.
	(cp_write_global_declarations): Call build_java_method_aliases
	instead of collecting candidates first.

2015-05-07  Jason Merrill  <>

	PR c++/59012
	* parser.c (cp_parser_std_attribute_list): Handle attribute expansion.
	(cp_parser_std_attribute_spec): Handle alignas pack expansion.
	* decl2.c (is_late_template_attribute): An attribute exp is dependent.
	* pt.c (make_pack_expansion): Allow TREE_LIST for attribute expansion.
	(apply_late_template_attributes): Handle attribute pack expansion.

2015-05-07  Marek Polacek  <>

	PR c/65179
	* typeck.c (cp_build_binary_op): Warn when left shifting a negative

2015-05-07  Jason Merrill  <>

	DR 1467
	PR c++/51747
	* typeck2.c (digest_init_r): Fix single element list.

2015-05-05  Jason Merrill  <>

	* cp-gimplify.c (cp_genericize_r): Track TRY_BLOCK and
	MUST_NOT_THROW_EXPR, warn about a THROW_EXPR directly within a
	(cp_genericize_data): Add try_block field.
	(cp_genericize_tree): Initialize it.
	* except.c (expand_end_catch_block): Set TREE_NO_WARNING on
	implicit rethrow.

	* constexpr.c (potential_constant_expression_1) [AT_ENCODE_EXPR]:
	Return false.

	* semantics.c (finish_call_expr): Check complain.

	* decl2.c (reset_type_linkage_2): Update the DECL_NAME of a
	maybe-in-charge constructor.

	* decl.c (start_decl): Don't push the plain VAR_DECL for a
	variable template.

	DR 1518
	DR 1630
	PR c++/54835
	PR c++/60417
	* call.c (convert_like_real): Check value-initialization before
	* typeck2.c (process_init_constructor_record): Don't set
	(process_init_constructor_array): Likewise.
	* init.c (build_vec_init): Likewise.

2015-05-05  David Malcolm  <>

	* parser.c (cp_parser_asm_definition): Only test for
        error_mark_node if "outputs" was just set.  Likewise for "inputs".

2015-05-04  Paolo Carlini  <>
	    Jakub Jelinek  <>

	PR c++/66007
	* typeck2.c (check_narrowing): Check by-hand that the pedwarn didn't
	result in an actual error.

2015-05-01  Paolo Carlini  <>
	    Prathamesh Kulharni  <>

	PR c++/65858
	* typeck2.c (check_narrowing): Set ok = true when pedwarn returns

2015-04-30  David Malcolm  <>

	* cp-tree.h (ARGUMENT_PACK_SELECT_ARG): Remove spurious
	trailing semicolon.

2015-04-29  Jason Merrill  <>

	PR c++/50800
	* tree.c (apply_identity_attributes): Fix handling of classes.

2015-04-29  Thomas Schwinge  <>

	* parser.c (cp_parser_oacc_enter_exit_data): Use

2015-04-29  Paolo Carlini  <>

	PR c++/64667
	* init.c (perform_member_init): Handle references for -Winit-self.

2015-04-29  Thomas Schwinge  <>

	* pt.c (tsubst_expr) <OMP_TARGET_UPDATE>: Use

2015-04-28  Jason Merrill  <>

	PR c++/65896
	* constexpr.c (cxx_eval_store_expression): Don't try to actually
	store an empty class.

	PR c++/65656
	* constexpr.c (cxx_eval_builtin_function_call): Fix

	PR c++/50800
	* tree.c (strip_typedefs): Add remove_attributes parm.
	(strip_typedefs_expr): Likewise.
	(apply_identity_attributes): New subroutine of strip_typedefs.
	* pt.c (canonicalize_type_argument): Let strip_typedefs handle attrs.
	(convert_nontype_argument, unify): Likewise.
	* cp-tree.h: Adjust.

	PR c++/65734
	* class.c (fixup_attribute_variants): Respect TYPE_USER_ALIGN.

2015-04-27  Trevor Saunders  <>

	* class.c (layout_class_type): Remove check if

2015-04-27  Jim Wilson  <>

	* (c++.mostlyclean): Remove xg++, g++-cross, and cc1plus.

2015-04-24  Jason Merrill  <>

	PR c++/50800
	* typeck.c (structural_comptypes): Don't check TYPE_REF_CAN_ALIAS_ALL.

	* constexpr.c (potential_constant_expression_1) [MINUS_EXPR]:
	Remove obsolete code.
	[NE_EXPR]: Likewise.

2015-04-23  Jason Merrill  <>

	PR c++/65646
	* pt.c (check_explicit_specialization): Don't
	SET_DECL_TEMPLATE_SPECIALIZATION for a variable with no template
	* decl.c (grokvardecl): Revert earlier fix.

2015-04-20  Paolo Carlini  <>

	PR c++/65801
	* typeck2.c (check_narrowing): In C++11 mode too, -Wno-narrowing
	suppresses the diagnostic.

2015-04-20  Ville Voutilainen  <>

	Reject trailing return type for an operator auto().
	* decl.c (grokdeclarator): Reject trailing return types for
	all conversion operators, don't handle conversion operators
	in the previous checks that deal with auto.

2015-04-20  Ilya Verbin  <>

	* parser.c (cp_parser_omp_target_update): Add missed %> to error_at ().

2015-04-16  Paolo Carlini  <>

	* class.c (resolve_address_of_overloaded_function, instantiate_type):
	Rename tsubst_flags_t parameter flags -> complain.

2015-04-16  Paolo Carlini  <>

	* call.c (build_op_delete_call, build_over_call): Check mark_used
	return value.
	* class.c (resolve_address_of_overloaded_function): Likewise.
	* decl.c (cxx_maybe_build_cleanup): Likewise.
	* pt.c (gen_elem_of_pack_expansion_instantiation, tsubst_baselink,
	tsubst_qualified_id, tsubst_copy, tsubst_copy_and_build): Likewise.
	* rtti.c (build_dynamic_cast_1): Likewise.
	* semantics.c (process_outer_var_ref): Likewise.
	* typeck.c (build_class_member_access_expr,
	cp_build_function_call_vec, cp_build_addr_expr_1): Likewise.

2015-04-15  Jason Merrill  <>

	* constexpr.c (cxx_eval_store_expression): Ignore clobbers.
	(build_constexpr_constructor_member_initializers): Loop to find
	* decl.c (start_preparsed_function): Clobber the object at the
	beginning of a constructor.

	* decl.c (grokmethod): Only set DECL_COMDAT if TREE_PUBLIC is set.
	* method.c (implicitly_declare_fn): Likewise.
	* decl2.c (vague_linkage_p): Check TREE_PUBLIC first.

	* decl2.c (determine_visibility): Use get_template_info.

2015-04-15  Jason Merrill  <>
	    Marek Polacek  <>

	PR c++/65727
	* lambda.c (lambda_expr_this_capture): In unevaluated context go
	through the normal loop, just don't capture.
	(maybe_resolve_dummy): Handle null return.

2015-04-15  Paolo Carlini  <>

	* call.c (enforce_access): Emit error + inform.

2015-04-15  Marek Polacek  <>

	* constexpr.c (use_new_call): Remove #define.
	(lookup_parameter_binding): Remove function.
	(cxx_bind_parameters_in_call): Remove unused code.
	(cxx_eval_call_expression): Likewise.
	(cxx_eval_constant_expression): Likewise.

2015-04-14  Mikhail Maltsev  <>

	* tree.c (replace_placeholders_t): Remove unused type.
	(replace_placeholders): Remove unused pset.

2015-04-14  Jason Merrill  <>

	* pt.c (lookup_template_class_1): Use coerce_innermost_template_parms.

	PR c++/65695
	* cvt.c (cp_fold_convert): Avoid wrapping PTRMEM_CST in NOP_EXPR.

	PR c++/65721
	* name-lookup.c (do_class_using_decl): Complain about specifying
	the current class even if there are dependent bases.

2015-04-14  David Krauss  <>

	PR c++/59766
	* decl.c (grokdeclarator): Do not flag friends with deduced return.

2015-04-14  Momchil Velikov  <>
	    Jason Merrill  <>

	PR c++/60994
	* parser.c (cp_parser_class_name): Add enum_ok parameter.
	(cp_parser_qualifying_entity): Use it instead of cp_parser_type_name.
	(cp_parser_diagnose_invalid_type_name): Don't assume a template is
	a class template.

2015-04-12  Jakub Jelinek  <>

	PR c++/65736
	* constexpr.c (cxx_eval_pointer_plus_expression): Don't fold for VLAs,
	don't fold if op01 isn't divisible by TYPE_SIZE_UNIT.  Convert
	the expression to the original type at the end.

2015-04-09  Jakub Jelinek  <>

	PR c++/65690
	* tree.c (cp_build_qualified_type_real): Copy TYPE_ALIGN and

	PR c++/65690
	* tree.c (build_cplus_array_type): Layout type before variants are
	set, but copy over TYPE_SIZE and TYPE_SIZE_UNIT from the main

2015-04-03  Paolo Carlini  <>

	PR c++/64085
	* lambda.c (add_capture): Use dependent_type_p for capture by
	reference too.

2015-04-02  Marek Polacek  <>

	PR c++/65642
	* constexpr.c (cxx_eval_pointer_plus_expression): Call
	cxx_eval_constant_expression on the first operand.

2015-04-01  Jason Merrill  <>

	PR c++/65625
	* decl.c (make_typename_type): Handle seeing a variable template.

2015-04-01  Paolo Carlini  <>

	PR c++/56100
	* pt.c (instantiating_current_function_p): New.
	* name-lookup.c (pushdecl_maybe_friend_1): Use it.
	* cp-tree.h (instantiating_current_function_p): Declare.

2015-04-01  Jason Merrill  <>

	PR c++/65646
	* decl.c (grokvardecl): Don't call check_explicit_specialization
	for non-template members of a class template.

2015-04-01  Marek Polacek  <>

	PR c++/65554
	* class.c (finish_struct): Require that the second field of a
	user-defined initializer_list be of size type.

2015-03-31  Marek Polacek  <>

	PR c++/65390
	* tree.c (build_cplus_array_type): Use dependent_type_p rather than
	checking for constness.

2015-03-30  Marek Polacek  <>

	PR c++/65398
	* constexpr.c (cxx_fold_indirect_ref): Don't perform the
	 *(&A[i] p+ j) => A[i + j] transformation here.
	(cxx_eval_pointer_plus_expression): New function.
	(cxx_eval_constant_expression): Use it here.

2015-03-27  Tobias Burnus  <>

	PR c/65586
	* parser.c (cp_parser_omp_for, cp_parser_omp_parallel,
	cp_parser_omp_distribute, cp_parser_omp_teams, cp_parser_omp_target,
	cp_parser_omp_declare): Don't show error for skipped omp pragmas with

2015-03-27  Marek Polacek  <>

	PR c++/65556
	* semantics.c (finish_switch_cond): If the unlowered type is not an
	enum, use the type of the condition.

2015-03-27  Jason Merrill  <>

	PR c++/65509
	* decl.c (make_rtl_for_nonlocal_decl): Don't defer static

2015-03-26  Mikhail Maltsev  <>

	PR c++/65154
	* init.c (build_vec_init): Fix initializing aggregates
	with empty init list.

2015-03-26  Jason Merrill  <>

	PR c++/65525
	* constexpr.c (potential_constant_expression_1): Handle MEM_REF.

2015-03-25  Marek Polacek  <>

	PR c++/65558
	* name-lookup.c (handle_namespace_attrs): Ignore abi_tag attribute
	on an anonymous namespace.

2015-03-25  Marek Polacek  <>

	PR c++/61670
	* class.c (remove_zero_width_bit_fields): Check for null DECL_SIZE.

2015-03-24  Jason Merrill  <>

	PR c++/65046
	* cp-tree.h (NAMESPACE_IS_INLINE): Remove.
	* parser.c (cp_parser_namespace_definition): Don't set it.
	* name-lookup.c (handle_namespace_attrs): Check

	PR c++/65498
	* pt.c (get_mostly_instantiated_function_type): Just return the
	type of the partially instantiated template in DECL_TI_TEMPLATE.

2015-03-20  Marek Polacek  <>

	PR c++/65398
	* constexpr.c (cxx_fold_indirect_ref): Transform *(&A[i] p+ j) into
	A[i + j].

2015-03-20  Marek Polacek  <>

	PR c++/65072
	* typeck.c (lookup_anon_field): Make sure we're dealing with the main

2015-03-19  Jason Merrill  <>

	PR c++/65046
	Automatically propagate ABI tags to variables and functions
	from their (return) type.
	* class.c (check_tag): Handle variables and functions.
	(mark_or_check_attr_tags): Split out from find_abi_tags_r.
	(mark_or_check_tags): Likewise.
	(mark_abi_tags): Use it.  Rename from mark_type_abi_tags.
	(check_abi_tags): Add single argument overload for decls.
	Handle inheriting tags for decls.
	* mangle.c (write_mangled_name): Call it.
	(mangle_return_type_p): Split out from write_encoding.
	(unmangled_name_p): Split out from write_mangled_name.
	(write_mangled_name): Ignore abi_tag on namespace.
	* parser.c (cp_parser_namespace_definition): Set it.
	* name-lookup.c (handle_namespace_attrs): Use arguments. Warn
	about abi_tag attribute on non-inline namespace.
	* tree.c (check_abi_tag_args): Split out from handle_abi_tag_attribute.
	(handle_abi_tag_attribute): Allow tags on variables.

2015-03-19  Jakub Jelinek  <>

	* decl2.c (cplus_decl_attributes): Also add "omp declare target"
	attribute for DECL_EXTERNAL VAR_DECLs.

2015-03-18  Paolo Carlini  <>

	PR c++/65340
	* call.c (build_over_call): Pass the tsubst_flags_t argument to
	* decl2.c (mark_used): Inline the require_deduced_type call and
	guard the error call.

2015-03-16  Jason Merrill  <>

	PR c++/65061
	* parser.c (cp_parser_template_name): Call strip_using_decl.

2015-03-16  Marek Polacek  <>

	DR 1688
	PR c++/65327
	* decl.c (grokdeclarator): Allow volatile and constexpr together.

2015-03-12  Paolo Carlini  <>

	PR c++/65323
	* decl.c (check_default_argument): Don't call

2015-03-11  Aldy Hernandez  <>

	* cp-gimplify.c (simple_empty_class_p): New.
	* cp-gimplify.c (cp_gimplify_expr): Handle RETURN_EXPR.  Abstract
	the code for empty class copies into simple_empty_class_p, and
	adapt it to handle COMPOUND_EXPRs.

2015-03-10  Paolo Carlini  <>

	PR c++/65370
	* decl.c (duplicate_decls): Call check_redeclaration_no_default_args
	only if the location of newdecl doesn't match the location of olddecl.

2015-03-10  Jakub Jelinek  <>

	PR c++/65127
	* parser.c (parsing_nsdmi): Don't return true if current_class_ptr
	is not a PARM_DECL.

2015-03-10  Jason Merrill  <>

	PR c++/65333
	DR 1558
	* pt.c (dependent_type_p_r): Check both class and alias template args.

2015-03-10  Jakub Jelinek  <>

	PR c/65120
	* parser.c (cp_parser_binary_expression): Check for tcc_comparison
	before preparing arguments to warn_logical_not_parentheses.
	Use maybe_constant_value on rhs.

2015-03-09  Jason Merrill  <>

	PR c++/65339
	* call.c: Don't call maybe_resolve_dummy when calling a constructor.

2015-03-09  Jakub Jelinek  <>

	PR c/65120
	* parser.c (cp_parser_binary_expression): Don't warn for
	!!x == y or !b == y where b is bool.

2015-03-06  Aldy Hernandez  <>

	* ptree.c (cxx_print_lambda_node): New.
	(cxx_print_xnode): Handle LAMBDA_EXPR.

2015-03-03  Aldy Hernandez  <>

	PR c++/65295
	* constexpr.c (cxx_eval_constant_expression): Remove assert in
	RESULT_DECL handling.

2015-02-26  Marek Polacek  <>

	PR c++/65202
	* constexpr.c (cxx_eval_constant_expression): Don't evaluate
	a RETURN_EXPR if its operand is null.

2015-02-25  Jason Merrill  <>

	PR c++/65209
	* decl2.c (constrain_visibility) [VISIBILITY_ANON]: Clear
	(constrain_visibility_for_template): Handle reference arguments.

	PR debug/58315
	* decl.c (start_preparsed_function): Use create_artificial_label
	for cdtor_label.

2015-02-17  Paolo Carlini  <>
	    Jakub Jelinek  <>

	PR c++/65075
	* constexpr.c (check_constexpr_bind_expr_vars): Allow
	implicit typedefs for lambda types.

2015-02-13  Paolo Carlini  <>

	PR c++/60894
	* decl.c (lookup_and_check_tag): Use strip_using_decl.

2015-02-13  Jason Merrill  <>

	PR c++/65054
	* pt.c (template_args_equal): Look through conversions here.
	* tree.c (cp_tree_equal): Not here.

2015-02-13  Paolo Carlini  <>

	PR c++/60211
	* parser.c (cp_parser_pragma): Diagnose PRAGMA_IVDEP at
	pragma_external context.

2015-02-13  Jason Merrill  <>

	PR c++/65051
	* call.c (reference_binding): Don't look for bad conversion
	if TO is incomplete.

2015-02-13  Paolo Carlini  <>

	PR c++/64970
	* decl.c (make_typename_type): Pass tsubst_flags_t argument
	to lookup_template_class.

2015-02-13  Jakub Jelinek  <>

	PR ipa/65034
	* decl.c (start_preparsed_function): Use void_type_node instead

2015-02-12  Jason Merrill  <>

	PR c++/64898
	* mangle.c (write_mangled_name): Fix test for variable template

	* decl.c (begin_destructor_body): Condition clobber on

2015-02-12 Andrea Azzarone <>

	PR c++/64959
	* parser.c (lookup_literal_operator): Return all candidates.
	(cp_parser_userdef_char_literal): Simplify error handling.
	(cp_parser_userdef_numeric_literal):  Pass tf_warning_or_error.
	(cp_parser_userdef_string_literal): Pass tf_warning_or_error.
	Also give higher priority to standard string UDL operator.

2015-02-12  Jakub Jelinek  <>

	PR debug/55541
	* cp-tree.h (BLOCK_OUTER_CURLY_BRACE_P): Define.
	* decl.c (poplevel): If functionbody, try not to create an extra
	BLOCK for function body and use subblocks as that, if it is non-NULL
	and doesn't have siblings.  Set BLOCK_OUTER_CURLY_BRACE_P flag.
	(outer_curly_brace_block): Use BLOCK_OUTER_CURLY_BRACE_P flag.

	PR sanitizer/64984
	* except.c (check_noexcept_r): Return NULL for internal

2015-02-10  Jason Merrill  <>

	PR c++/64994
	* constexpr.c (cxx_eval_call_expression): Walk the clone list.

2015-02-10  Jan Hubicka  <>

	PR ipa/64982
	* method.c (use_thunk): Do not check for stdarg thunks.

2015-02-06  Jason Merrill  <>

	PR c++/64899
	* init.c (build_vec_init): Handle default-initialized array with
	constexpr default constructor.

2015-02-04  Jakub Jelinek  <>

	PR c/64824
	PR c/64868
	* parser.c (cp_parser_omp_atomic): Handle RDIV_EXPR.

2015-02-03  Paolo Carlini  <>

	PR c++/64877
	* typeck.c (cp_build_binary_op): Avoid spurious -Waddress warnings
	for generated expressions.

2015-02-02  Ville Voutilainen  <>

	PR c++/64901
	* decl.c (duplicate_decls): Also duplicate DECL_FINAL_P and

2015-02-02  Jason Merrill  <>

	* tree.c (handle_abi_tag_attribute): Diagnose invalid arguments.

2015-01-30  Joseph Myers  <>

	* class.c, except.c, parser.c, pt.c: All callers of fatal_error
	changed to pass input_location as first argument.

2015-01-29  Jakub Jelinek  <>

	PR c++/64717
	* cp-ubsan.c (cp_ubsan_instrument_vptr): Don't wrap vptr
	into SAVE_EXPR.

2015-01-29  Jason Merrill  <>

	PR c++/49508
	* semantics.c (finish_return_stmt): Suppress -Wreturn-type on
	erroneous return statement.

	PR c++/64521
	* repo.c (repo_emit_p): It's OK for a clone to be extern at this

2015-01-27  Caroline Tice  <>

	Committing VTV Cywin/Ming patch for Patrick Wollgast
	* (vtv_generate_init_routine): Add
	check for not TARGET_PECOFF at the VTV_PREINIT_PRIORITY checks.

2015-01-27  Jason Merrill  <>

	PR c++/58597
	* lambda.c (maybe_add_lambda_conv_op): Check cfun rather than

	PR c++/63889
	* pt.c (finish_template_variable): Move from semantics.c.
	Handle multiple template arg levels.  Handle coercion here.
	(lookup_template_variable): Not here.

2015-01-23  Jason Merrill  <>

	PR c++/64314
	PR c++/57510
	* typeck2.c (split_nonconstant_init_1): Remove a sub-CONSTRUCTOR
	that has been completely split out.

	PR c++/64701
	* constexpr.c (cxx_eval_constant_expression): Don't crash on C++
	statement codes.

	PR c++/64727
	* constexpr.c (cxx_eval_constant_expression): Allow for lvalue use

2015-01-21  Jason Merrill  <>

	PR c++/64603
	* constexpr.c (cxx_eval_constant_expression): Only shortcut
	constant CONSTRUCTORs.

	PR c++/64647
	* constexpr.c (ensure_literal_type_for_constexpr_object): Don't
	give a hard error in a template instantiation.

2015-01-21  Richard Biener  <>

	PR middle-end/64313
	* decl.c (duplicate_decls): Call set_builtin_decl_declared_p
	for builtins the user declared correctly.

2015-01-16  Paolo Carlini  <>

	PR c++/58614
	* pt.c (unify): When BRACE_ENCLOSED_INITIALIZER_P (arg), handle
	TREE_TYPE (elt) == error_mark_node.

2015-01-15  Jan Hubicka  <>

	PR tree-optimization/62053
	* tree.c (build_cplus_array_type): Layout type after variants are set.

2015-01-15  Jakub Jelinek  <>

	* cp-gimplify.c (cp_genericize_r): Call
	cp_ubsan_maybe_instrument_member_call for member calls.
	(cp_ubsan_check_member_access_r): New function.
	(cp_genericize_tree): Call cp_ubsan_instrument_member_accesses.
	* cp-tree.h (cp_ubsan_maybe_instrument_member_call,
	cp_ubsan_maybe_instrument_cast_to_vbase): New prototypes.
	* cp-ubsan.c: New file.
	* (CXX_AND_OBJCXX_OBJS): Add cp/cp-ubsan.o.
	* constexpr.c (cxx_eval_call_expression): Return void_node
	(potential_constant_expression_1): Return true for
	* typeck.c (build_class_member_access_expr): Provide locus
	(build_static_cast_1): Instrument downcasts.
	* class.c (build_base_path): For -fsanitize=vptr and !fixed_type_p
	add ubsan instrumentation for virtual_access.
	* call.c: Include internal-fn.h.
	(set_flags_from_callee): Handle internal calls.

2015-01-15  Momchil Velikov  <>

	PR c++/59366
	* name-lookup.c (pushdecl_maybe_friend_1): Hide friend functions
	and function templates, declared only in the class.
	* decl.c (duplicate_decls): Reveal hidden friend functions or
	function templates, if they are redeclared outside the class.

2015-01-15  Jason Merrill  <>

	PR c++/64356
	* constexpr.c (cxx_eval_binary_expression): Fix pasto.

	PR c++/63283
	* constexpr.c (potential_constant_expression_1): Handle reference
	args in templates.

2015-01-15  Thomas Schwinge  <>
	    James Norris  <>
	    Cesar Philippidis  <>
	    Ilmir Usmanov  <>
	    Jakub Jelinek  <>

	* parser.c: Include "gomp-constants.h".
	(cp_parser_omp_clause_map): Use enum gomp_map_kind instead of enum
	omp_clause_map_kind.  Use GOMP_MAP_* instead of OMP_CLAUSE_MAP_*.
	(cp_parser_omp_construct, cp_parser_pragma): Handle
	(cp_parser_omp_clause_name): Handle "async", "copy", "copyout",
	"create", "delete", "deviceptr", "host", "num_gangs",
	"num_workers", "present", "present_or_copy", "pcopy",
	"present_or_copyin", "pcopyin", "present_or_copyout", "pcopyout",
	"present_or_create", "pcreate", "vector_length", "wait".
	(cp_parser_omp_var_list_no_open): Handle OMP_CLAUSE__CACHE_.
	(cp_parser_oacc_data_clause, cp_parser_oacc_data_clause_deviceptr)
	(cp_parser_oacc_clause_vector_length, cp_parser_oacc_wait_list)
	(cp_parser_oacc_clause_wait, cp_parser_omp_clause_num_gangs)
	(cp_parser_omp_clause_num_workers, cp_parser_oacc_clause_async)
	(cp_parser_oacc_all_clauses, cp_parser_oacc_cache)
	(cp_parser_oacc_data, cp_parser_oacc_enter_exit_data)
	(cp_parser_oacc_kernels, cp_parser_oacc_loop)
	(cp_parser_oacc_parallel, cp_parser_oacc_update)
	(cp_parser_oacc_wait): New functions.
	* cp-tree.h (finish_oacc_data, finish_oacc_kernels)
	(finish_oacc_parallel): New prototypes.
	* semantics.c: Include "gomp-constants.h".
	(handle_omp_array_sections): Handle GOMP_MAP_FORCE_DEVICEPTR.  Use
	GOMP_MAP_* instead of OMP_CLAUSE_MAP_*.  Use
	(finish_omp_clauses): Handle OMP_CLAUSE_ASYNC,
	Use GOMP_MAP_* instead of OMP_CLAUSE_MAP_*.
	(finish_oacc_data, finish_oacc_kernels, finish_oacc_parallel): New

2015-01-14  Paolo Carlini  <>

	PR c++/58671
	* decl2.c (var_defined_without_dynamic_init): Handle gracefully

2015-01-13  Jason Merrill  <>

	PR c++/64356
	PR libstdc++/58777
	* constexpr.c (cxx_eval_binary_expression): Don't VERIFY_CONSTANT
	pointer expressions.
	(cxx_eval_increment_expression): Likewise.

	PR c++/64514
	* pt.c (coerce_template_parameter_pack): Return NULL for a
	zero-length fixed parameter pack with a pack expansion arg.

	PR c++/64520
	* pt.c (unify): Don't try to deduce to std::initializer_list<T...>.

2015-01-12  Jason Merrill  <>

	PR c++/64547
	* constexpr.c (cxx_eval_call_expression): A call to a void
	function doesn't need to return a value.

2015-01-09  Michael Collison  <>

	* call.c: Include hash-set.h, machmode.h, vec.h, double-int.h,
	input.h, alias.h, symtab.h, options.h, fold-const.h,
	wide-int.h, and inchash.h due to flattening of tree.h.
	* class.c: Ditto.
	* constexpr.c: Ditto.
	* cp-array-notation.c: Ditto.
	* cp-gimplify.c: Ditto.
	* cp-lang.c: Ditto.
	* cp-objcp-common.c: Ditto.
	* cvt.c: Ditto.
	* decl2.c: Ditto.
	* decl.c: Ditto.
	* dump.c: Ditto.
	* error.c: Ditto.
	* except.c: Ditto.
	* expr.c: Ditto.
	* friend.c: Ditto.
	* init.c: Ditto.
	* lambda.c: Ditto.
	* lex.c: Ditto.
	* mangle.c: Ditto.
	* name-lookup.c: Ditto.
	* optimize.c: Ditto.
	* parser.c: Ditto.
	* pt.c: Ditto.
	* ptree.c: Ditto.
	* repo.c: Ditto.
	* rtti.c: Ditto.
	* search.c: Ditto.
	* semantics.c: Ditto.
	* tree.c: Ditto.
	* typeck2.c: Ditto.
	* typeck.c: Ditto.

2015-01-08  Jason Merrill  <>

	* cp-gimplify.c (cp_genericize): Use do_ubsan_in_current_function.
	* decl.c (compute_array_index_type): Likewise.
	* init.c (build_vec_init): Likewise.
	* typeck.c (cp_build_binary_op): Likewise.

2015-01-08  Jason Merrill  <>

	* init.c (build_vec_init): Call ubsan_instrument_bounds to check
	whether an initializer-list is too big for a VLA.
	(throw_bad_array_length): Remove.
	* cp-tree.h: Remove prototype.

2015-01-08  Paolo Carlini  <>

	PR c++/60753
	* decl.c (grokfndecl): Add bool parameter.
	(grokdeclarator): Adjust calls.
	(start_decl): Don't set DECL_DELETED_FN here.

2015-01-06  Jason Merrill  <>

	* parser.c (cp_parser_nested_name_specifier_opt): Diagnose invalid

	PR c++/64455
	* pt.c (type_dependent_expression_p): Handle variable templates.
	* constexpr.c (potential_constant_expression_1): Use it.

	PR c++/64487
	* semantics.c (finish_offsetof): Handle templates here.
	* parser.c (cp_parser_builtin_offsetof): Not here.

	PR c++/64496
	* semantics.c (process_outer_var_ref): Diagnose lambda in local
	class NSDMI.

2015-01-06  Ville Voutilainen  <>

	PR c++/64489
	* class.c (check_field_decls): Make copy assignment operators
	complex only in c++98 mode.

2015-01-05  Trevor Saunders  <>

	PR c++/31397
	* class.c (check_for_override): Warn when a virtual function is an
	override not marked override.

2015-01-05  Trevor Saunders  <>

	* class.c (warn_hidden): Use auto_vec<tree> instead of tree_list to
	hold base_fndecls.
	(get_basefndecls): Adjust.

2015-01-05  Jakub Jelinek  <>

	Update copyright years.

2015-01-05  Marek Polacek  <>

	PR c/64423
	* typeck.c (cp_build_array_ref): Pass loc down to

Copyright (C) 2015 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.