blob: 4c7e38452ecbd59e83439ed1c08932b48d385181 [file] [log] [blame]
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
(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
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.
* 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)
(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.
* 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.
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
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.